ios代码混淆(代码字符串混淆)

在混淆代码的时候,最容易忽略的往往是字符串@"xxx"),例如:

NSString *hello = @"world"; NSString *url = @"http://www.xxx.com";


被苹果直接在后台回复了一个我们包体中的链接后,我才开始上心这个事情。稍微分析一下,其实很容易发现,这些信息是最容易获取的,也是最容易被交叉对比的部分,下面将介绍:


如何找到二进制中的字符串以及最简单的,对于字符串做出差异化的方法.


首先,创建一个Cocoa Touch Static Library类型项目(.a静态库),命名为testMachO,testMachO项目会自动生成一个testMachO类,而且只有一个testMachO类(最小化验证问题)。


打开testMachO.m 修改成以下:

#import "testMachO.h" #define defineTest @"defineTestString111111" NSString *const constTest = @"constTestString222222"; static NSString *const staticTest = @"staticTestString333333"; static NSString *const staticTestChinese = @"测试44444"; @implementation testMachO


编译后获取libtestMachO.a


machoView下载

https://sourceforge.net/projects/machoview/


用machoView打开libtestMachO.a后 如下图:



左边展开testMacho.o
查看
Section64(__TEXT__,cstring)

会发现部分字符串存在于macho文件中


但是!
代码中的
defineTest,staticTestChinese对应的字符串没有在这里!


是不是意味着宏和中文字符串不会存在于macho文件中呢?


继续看Section64(__TEXT__,cfstring)


那么宏呢?

在原有基础上增加方法

- (void)testMethod { NSLog(@"%@",defineTest); NSString *test2 = @"这是测试"; }



总结 : 宏使用的时候才记录了
中文保存在另外一个Section64(__TEXT__,cfstring)中


所以,编程时所使用的字符串都是能在二进制中体现的!

换个思路,如果二进制里没有这些,我感觉你在为难程序.


下面我通过我的代码混淆工具对于代码做了混淆后

代码变成了下面这个样子了(又不是不能跑!)

#define defineTest [@[@"d",@"e",@"f",@"i",@"n",@"e",@"T",@"e",@"s",@"t",@"S",@"t",@"r",@"i",@"n",@"g",@"1",@"1",@"1",@"1",@"1",@"1"] componentsJoinedByString:@""] #define constTest [@[@"c",@"o",@"n",@"s",@"t",@"T",@"e",@"s",@"t",@"S",@"t",@"r",@"i",@"n",@"g",@"2",@"2",@"2",@"2",@"2",@"2"] componentsJoinedByString:@""]; #define staticTest [@[@"s",@"t",@"a",@"t",@"i",@"c",@"T",@"e",@"s",@"t",@"S",@"t",@"r",@"i",@"n",@"g",@"3",@"3",@"3",@"3",@"3",@"3"] componentsJoinedByString:@""] #define staticTestChinese [@[@"测",@"试",@"4",@"4",@"4",@"4",@"4"] componentsJoinedByString:@""]; - (void)testMethod { NSLog(@"%@",defineTest); NSString *test = [@[@"t",@"e",@"s",@"t",@"S",@"t",@"r",@"i",@"n",@"g"] componentsJoinedByString:@""]; NSString *test2 = [@[@"这",@"是",@"测",@"试"] componentsJoinedByString:@""]; }


再看看结果



好像画风不一样了


对于字符串差异化的时候,需要注意的是,不能加密得太明显, 容易吃模糊代码的审核结果,而且需要能控制字符串混淆比例,链接这种类型的字符串一定要完全处理掉,新版工具增加的字符串差异化功能满足以上条件,但是好像还有些bug,很尴尬。


上面那些截图的内容可以自行验证,纸上得来终觉得浅!

代码混淆

您可以还会对下面的文章感兴趣

最新评论

◎欢迎参与讨论,请在这里发表您的看法、交流您的观点。

使用微信扫描二维码后

点击右上角发送给好友