在混淆代码的时候,最容易忽略的往往是字符串@"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,很尴尬。
上面那些截图的内容可以自行验证,纸上得来终觉得浅!
最新评论