美文网首页iOS过审技术
代码字符串混淆

代码字符串混淆

作者: iOS过审技术 | 来源:发表于2021-09-10 15:10 被阅读0次

    在混淆代码的时候,最容易忽略的往往是字符串@"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)

那么宏呢?

在原有基础上增加方法

NSString *hello = @"world";

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

总结 : 宏使用的时候才记录了
中文保存在另外一个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,很尴尬。

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

相关文章

  • iOS代码混淆

    代码易读字符串混淆 混淆分许多思路,比如: 1)花代码花指令,即随意往程序中加入迷惑人的代码指令 2)易读字符替换...

  • 代码字符串混淆

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

  • iOS代码混淆

    混淆原理 代码编译阶段将符号(方法名、属性名等)替换成随机生成的字符串 混淆集成步骤 步骤一、创建shell文件(...

  • iOS代码混淆

    混淆原理 代码编译阶段将符号(方法名、属性名等)替换成随机生成的字符串 长话短说,直接上步骤。 混淆步...

  • 一个用于代码混淆和字符串加密的Mac小Demo

    MJCodeObfuscation 一个用于代码混淆和字符串加密的Mac小Demo 主要是利用libclang解析...

  • iOS代码混淆教程

    混淆原理 代码编译阶段将符号(方法名、属性名等)替换成随机生成的字符串 长话短说,直接上步骤。 混淆集成步骤 步骤...

  • iOS代码混淆教程

    混淆原理 代码编译阶段将符号(方法名、属性名等)替换成随机生成的字符串 长话短说,直接上步骤。 混淆集成步骤 步骤...

  • 关于通用编程语言 字符串 流程控制加密的可行性-flutter

    众所周知, 目前大部分的加固都是基于中间代码进行混淆 处理,但是最终的效果都是实现了,字符串混淆加密, 方法类名重...

  • Android项目的代码混淆

    代码混淆: 代码混淆有两种重要功能。其一,混淆代码。其二,优化代码。有的混淆是根据自己写得代码有关,需要根据异常错...

  • iOS 初探代码混淆(OC)

    iOS 初探代码混淆(OC) iOS 初探代码混淆(OC)

网友评论

    本文标题:代码字符串混淆

    本文链接:https://www.haomeiwen.com/subject/pbxnwltx.html