danleechina / Mixplaintext
Programming Languages
Projects that are alternatives of or similar to Mixplaintext
If you need English document for this project, MixPlainText
English document
重要
目前想到一个更好的方案,就是使用 Lex (最新的实现叫做 Flex,这个工具在 macOS 上自带) (这个工具也叫做词法分析器的生成器)。后面有时间再更新。
MixPlainText
该项目的作用是可以将 iOS 工程所有 Objective C 实现文件(后缀名为 m 的文件)中的明文进行加密混淆,如此一来,您的 app 的二进制文件中所有的明文都是经过混淆的。之前我总结了一点如何确保 iOS app 在越狱环境下的安全性,或许值得一看:对 iOS app 进行安全加固
特点
- 简单,开发人员可以硬编码明文字符串,所有的加密会在编译开始时自动处理
- 可自定义加密或者混淆方式,(为了不影响 app 运行效率,需要提供一个简单快速的加密或混淆方式)提高逆向难度
局限
- 不能加密这样的 OC string,比如:@"a""b",因为默认的正则表达式无法识别这种情况,确保将其改成 @"ab",否则无法通过编译。
- Mix 处理过程中如果遇到 "@",这种字符串,会编译出错,需要改一下写法,使用下面的 cs 变量
NSString *s = @"@";
char *cs = s.UTF8String;
- 不能加密含 \nnn, \xnn, \unnnn 和 \Unnnnnnnn 这样的转义字符串,确保您的转义字符串不含这些转义,否则无法通过编译。
- 不能加密静态类型的 string。
使用场景
- 使用私有 API,将加密操作交给 MixPlainText,只要不在审核期间调用,一般能够通过审核
- 提高逆向分析难度,因为所有明文都是经过加密混淆的,逆向分析需要先解密
使用方式
-
打开您自己的工程,在 Build Phases 中添加 Run Script,内容为
# 默认是 Debug 情况下运行,可根据需要自定义,比如 Release if [ "${CONFIGURATION}" = "Debug" ]; then # 注意由于你的工程目录可能包含 Pods 这类第三方代码,所以你需要切换到你自己代码所在的目录比如 MixIosDemo 目录 cd MixIosDemo chmod +x ../mix.swift ../mix.swift fi
确保该 Run Script 在 Compile Souces 之前。
-
添加 MixIosDemo/MixOC/MixDecrypt.h 到您的工程中
-
在您的 pch 头文件中引入 MixDecrypt.h
-
如果遇到代码编译不过的问题,请到编译出错的地方比较原先的代码和经过 mix.swift 脚本加密过后的区别,然后对原始代码进行一些相应修改。当然你可以给我提 issue。
您可以参考 MixIosDemo 这个 iOS Demo 工程来了解具体配置方式。在运行这个工程的时候,你会发现代码中的 NSLog(@"Hello world!");
变成了 NSLog(dl_getRealText(@"t5qTk5DfiJCNk5ve/wE="));
,但是 app 运行的时候打印的仍然是 Hello world!
。
自定义加密混淆
目前默认的加密方式是异或加密(可能也算不上加密,顶多算是混淆),如果需要自定义加密混淆方式,两个步骤:
- 修改 MixIosDemo/mix.swift 中的加密方法
- 修改 MixDecrypt.h 中 dl_getRealText 函数体的解密方法
注意,不要使用复杂的加解密方法,同时解密方法要和加密方法配套,否则运行时会出错。
Warning
由于该程序会改变您原来程序代码的内容,所以您在使用的时候一定要谨慎,最好是在版本控制系统(比如 Git,SVN)下使用,同时当前工作目录没有未 commit 的内容。
TODO
- 支持 C 类型的字符串
- 增加支持更多的文件类型,比如 mm 文件, h 文件,pch 文件, c 文件, cpp 文件等
贡献者
作者: @粉碎音箱的音乐(weibo)
Blog: Blog
需要 Star!
如果你觉得 MixPlainText
有用的话,请点个 star 呗!谢谢啦。😄