oc代码混淆

混淆内容

1、混淆思路:利用宏定义进行混淆,混淆文件需要在需要混淆的文件中引用(或全局引用)

2、混淆内容:(橘黄色)

  公开变量  @property (nonatomic, strong) NSString  *gameName;

  私有变量 @interface XXXX () {

          NSString  *gameName;

      }

  类名    @interface ClassName ()

  方法名 

    公开 - (void)getUserName:(NSString *)name age:(NSInteger)age;

    私有 - (void)openFile:(NSString *)filePath size:(NSInteger)size {

      }

  文件名混淆(只混淆 .m 文件)

     UserInfo.h

     UserInfo.m

  字典中的key值(用于过滤混淆内容)

    [result objectForKey:@"status"]

    result[@"status"]

以上是需要混淆的内容,接下来说注意事项

公开变量:  @property (nonatomic, strong) NSString  *gameName;

  我们使用时会用到 self.gameName 、 _gameName 、- (void)setGameName:(NSString *)gameName.

  那么混淆时一个公开变量需要对应进行三次混淆。假定将 gameName 混淆为 gjkgnshd

    1、gjkgnshd

    2、_gjkgnshd

    3、setGjkgnshd (这里需要注意,gameName 的 set 方法为 setGameName , 变量名的首字母需大写,之前大写则不变)

私有变量:  一次直接混淆

类名:    一次直接混淆

方法名:   一次直接混淆  (这里需要注意 set 方法需要过滤掉,如果这里进行set方法混淆,会造成重复混淆,99.99%产生错误,因为在混淆公开变量的时候你已经混淆过了,但公开变量的set方法和参数有特定联系,所以必须在混淆公开变量时进行混淆)

文件名:  批量重命名即可

字典中的key值:混淆时一定要过滤掉字典中的key值 :(举个栗子 )

私有变量  @property (nonatomic, strong) NSString  *gameName;

字典key值  dict = @{@"gameName" : @"大逃杀"}

   在你混淆 gameName -> gjkgnshd 时 ,下面为混淆结果

      @property (nonatomic, strong) NSString  *gjkgnshd; 

      dict = @{@"gjkgnshd" : @"大逃杀"}   

   当dict为客户端自定义的字典时不会产生影响,但当dict为服务器返回数据时,轻则取不到数据,重则崩溃。

      因为:返回结果为   {@"gameName" : @"大逃杀"}       客户端取值时为  dict[@"gjkgnshd"]  key不存在而引起错误。 

抱怨几句:这是我第一次做代码混淆,网上没有搜索到有关oc的混淆有实际意义的脚本或者软件,所以自己利用自己肤浅的python,勉强完成了这次混淆任务。这其中的坑有很多,相信看了这篇博客后,可以让初次尝试混淆的同行们躲过几个。话不多说,上代码。

接下来就简单了 , 直接上代码

p.p1 { margin: 0.0px 0.0px 0.0px 0.0px; font: 14.0px Menlo; color: #000000 }
span.s1 { color: #36568a }
span.s2 { }
p.p1 { margin: 0.0px 0.0px 0.0px 0.0px; font: 14.0px Menlo; color: #c35900 }
p.p2 { margin: 0.0px 0.0px 0.0px 0.0px; font: 14.0px Menlo; color: #000000; min-height: 16.0px }
p.p3 { margin: 0.0px 0.0px 0.0px 0.0px; font: 14.0px Menlo; color: #000000 }
span.s1 { color: #36568a }
span.s2 { color: #000000 }
span.s3 { }
p.p1 { margin: 0.0px 0.0px 0.0px 0.0px; font: 14.0px Menlo; color: #000000 }
span.s1 { }
p.p1 { margin: 0.0px 0.0px 0.0px 0.0px; font: 14.0px Menlo; color: #587ea8 }
span.s1 { color: #000000 }
span.s2 { }
span.s3 { color: #e82300 }

时间: 2024-11-08 09:20:48

oc代码混淆的相关文章

iOS 初探代码混淆(OC)

iOS 初探代码混淆(OC) 前言 自己做iOS开发也有几年的时间了,平时做完项目基本就直接打包上传到Appstore上,然后做上架操作了.但是最近,客户方面提出了代码安全的要求.说是要做代码混淆,这方面的工作之前从来没有接触过.然后就上网查了一下,原来有很多应用程序都做了代码混淆.看来是我固步自封了...... 起因 使用classdump对原程序进行dump,可以dump出所有源程序的函数所有信息:源程序所有函数类型,变量全部泄露.这样的话,让攻击者,也就是黑客们了解了程序结构方便逆向.因为

代码混淆之道——控制流扁平与不透明谓词理论篇

控制流是指代码执行时指令的执行顺序.在各种控制逻辑的作用下,程序会沿着特定的逻辑顺序执行.一般控制逻辑包括有无条件分支.循环.函数调用等. 本文原创作者:i春秋签约作家--penguin_wwy 一.扁平化的定义 本篇讲代码混淆的一个重要手段,控制流扁平化. 所谓控制流是指代码执行时指令的执行顺序.在各种控制逻辑的作用下,程序会沿着特定的逻辑顺序执行.一般控制逻辑包括有\无条件分支.循环.函数调用等.在正常情况下程序的逻辑非常好理解(代码逻辑不好的程序员都死了...),开发过程中有各种人为的行为

安卓 代码混淆与打包

gradle的配置 proguard-rules.pro混淆配置 ###-----------基本配置-不能被混淆的------------ -keep public class * extends android.app.Activity -keep public class * extends android.app.Fragment -keep public class * extends android.app.Application -keep public class * exten

排序算法的基本思想和OC代码实现

算法的基本思想和OC代码实现 一 .冒泡排序   (平均时间复杂度 o(N*N))  基本思想:两个数比较大小,较大的数下沉,较小的数冒起来. 过程:比较相邻的两个数据,如果第二个数小,就交换位置 从后向前两两比较,一直到比较最前两个数据.最终最小数被交换到起始的位置,这样第一个最小数的位置就排好了. 继续重复上述过程,依次将第2,3,….,n-1个最小数排好位置. int arr[5]={23,21,45,23,64}; int temp; for (int i=0; i<4; i++) {

android 代码混淆导致问题,快速定位

代码混淆导致问题,快速定位 在代码混淆打包时,屏蔽了用到的第三方库,以及常规的android混淆屏蔽,但生成的apk,运行还是会崩溃.事出必有因,后来分析找到原因是使用greendao自动生成的java-gen下package中的内容没有屏蔽代码混淆,导致存储数据库时,报*a(SourceFile:) NullPointerException * 混淆打包apk,运行崩溃 总结如下: 我们在打包时,debug版本没问题,但混淆后release版本有时会出现异常崩溃, 比如:a(SourceFil

Proguard android代码混淆 防止反编译

Proguard android代码混淆 防止反编译 http://www.360doc.com/content/13/1030/13/9171956_325290258.shtml

.NET代码混淆、保护和优化控件Spices .Net Obfuscator

Spices .Net Obfuscator控件用于防止您的.NET软件被黑客.竞争对手或者窥探者进行逆向工程.代码篡改或是未经授权就可使用,该工具可提供.NET代码混淆.保护和优化等,完全保护您的.NET代码和数据安全.Spices.Net Obfuscator 重新构建您的.NET程序集为不可能被拆卸.反编译的新的格式. 具体功能: 支持所有.NET语言c#, VB.Net, managed c++, J# 完全支持MS Visual Studio 2003 / 2005 / 2008 /

Android开发实践:利用ProGuard进行代码混淆

由于Android的代码大都是Java代码,所以挺容易被反编译的,好在Android ADT为我们集成了混淆代码的工具,一来可以混淆我们的代码,让程序被反编译后基本看不懂,另外还能起到代码优化的作用.发布项目前,建议打开Android的代码混淆功能. Android ADT主要通过ProGuard工具来提供代码混淆,网上也有挺多博客文章讲这个的,但感觉很多都介绍得太过于复杂,这里我就以问答的方式来更加简洁地介绍下ProGuard吧. 1. ProGuard是什么 ProGuard是一个工具,用来

Android代码混淆(新版本ADT)

说明: 看网上说的很多Android代码混淆的方法都是旧版本ADT的方法,今天用到代码混淆,记下来分享一下,有需要的可以看看. 实践: 我就不写东西了,还是直接给大家看我项目中用到的文件就好了.注释我写在图片上了. 第二个文件的代码我还是写出来吧,可能有朋友用的和我的差不多.(注意不要把注释写进去) 这两个文件都是项目生成的时候由ADT自动生成的,不用自己加. ? 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 -keep public class * extend