一、前言
最近想爆破一个app,没有加壳,简单的使用Jadx打开查看源码,结果把我逗乐了,代码中既然都是中文,而且是一些比较奇葩的中文字句,如图所示:
瞬间感觉懵逼了,这app真会玩,我们知道因为Java语言是支持双字符的,所以可以将包名,类名,变量名,方法名定义成中文,或者其他国家的语言都可以的。所以本身这种做法是不会运行报错的,比如下面我们新建一个Java工程看一下效果:
运行是没有任何问题的。看到这里的时候觉得很好奇,所以就先没去看他的源码了,而是想着怎么实现这种混淆的功能。下面就来介绍一下这种高度混淆的原理:
二、分析混淆工具源码
首先我们知道每个正式app发布之前都会进行代码混淆,而关于混淆的知识点,可以自行搜索了解了,混淆有很多好处,优化代码,增加安全性等,而混淆一般是采用了proguard.jar工具,这个工具混淆之后的代码默认都是26个大小写字母,所以如果想把代码混淆成中文,那么就需要对这个工具下手。幸好这个工具是开源的,所以从网上搜他的源码下载下来,导入工程即可:
找到入口类Proguard,这里为了演示方便,咋们就直接模拟一个命令直接运行看效果,关于命令后面会说到。这里有一个解析命令的类功能:
这里可以看到混淆规则,也就是我们一般用到的proguard.cfg文件,后面会介绍这个文件内容。那么下面我们就不要在深入代码了,直接找到混淆代码的地方即可,可以通过包名中有obfuscate快速找到这个类:SimpleNameFactory