关于自动化代码混淆的实践

前段时间与其他人谈到了代码混淆的问题,感觉现在移动开发越来越重视代码混淆和加固,让我有自己不做混淆很快就被淘汰的感觉。之前在念茜的博客里提到一种iOS项目代码混淆的方案,就是在Xcode编译的时候运行脚本,生成指定的宏文件引用到项目中。这个方案优点是混淆方便,编译时混淆,平时照常看可爱的代码,打完包后代码就变得面目全非,恶心死反编译的人。但这种方案有个缺点,混淆只能应用在部分方法、属性和变量,一旦要混淆的方法、属性、变量、类等跟xib、storyboard以及配置文件等扯上关系,马上出现编译错误,而且还有可能编译不报错出现运行时错误。而且混淆的字段要手动指定到单独的文件中,有点麻烦。


还有一种方案,就是把所有的类、方法、属性等全部搜索出来全员替换。这种也有弊端,不仅搜索较麻烦,而且遇到把系统自带的方法替换掉的情况,直接导致编译不通过。通过这种方法整理出来混淆代码往往耗费大量时间。


结合上述的方案,我想了一个较简单的解决方案:

混淆只针对核心代码,如支付等(淘宝目前也是用这种策略),大大减轻了混淆的时间成本。程序员在开发的时候通过一定方式指定需要混淆的核心代码(类、属性、变量、方法等),例如ob_changeMobile_fus这个方法有前缀ob和后缀fus就是需要混淆的代码。然后编写脚本,通过全局替换需要指定的代码为随机字符串实现混淆,同时记录密钥对到文件中。项目在自动化打包时加入混淆的脚本则能够实现自动化代码混淆,打包结束后通过还原脚本把项目的密文全部还原。这样程序员打包时,混淆这事基本上没有什么感知,但的确已经成功实现了。


以上方案全部可以通过Shell脚本实现,不需要用到Perl或者Python等脚本(当然如果会这些专门的脚本语言对生产力提高不是个一星半点)。亲测iOS项目没有问题。其他项目包括Android等应该也可以使用或者简单修改后可使用。除iOS项目外其他项目没有测试。


代码已经提交到github,欢迎轻手拍砖!

Codeobfus:https://github.com/heqingliang/CodeObfus.git

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值