App代码混淆(自定义字典)
The following article is from luoyesiqiu Author luoyesiqiu
最近,朋友给我转一张图,图片是这样的:
图中是用jd-gui工具反编译软件包所呈现的界面,可以看到,该软件包中的包名和类名充斥着对逆向工程师的骂,这些过激的词汇应该是软件开发者在生成软件的时候用混淆器同时生成的。看到这些,我的内心不由得在嘀咕:啊?这,怎么回事,现在逆向工程师的风评都这么差了吗?生而为人,从事逆向工程师,我很抱歉。怎么?你竟然觉得这混淆有点意思?好巧,我也这么觉得。让我们一起来看看这种混淆是怎么生成的吧
首先,找一个Android Studio的项目,最好是有一点代码,而且要能正常生成APK的
在app/build.gradle中开启代码混淆
android{
......
buildTypes {
debug {
minifyEnabled true
proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
}
release {
minifyEnabled true
proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
}
}
}
在app/proguard-rules.pro下指定字典,这里所有可混淆项都用同一个字典文件
# 指定变量名/方法名字典
-obfuscationdictionary dict.txt
# 指定类名字典
-classobfuscationdictionary dict.txt
# 指定包名字典
-packageobfuscationdictionary dict.txt
接下来,创建字典文件,字典文件存储着要混淆词的集合,比如上面的骂逆向工程师的话就是存在字典里。在这里,我在app目录下创建一个字典文件dict.txt(和proguard-rules.pro同目录),输入一些词或者句子:
最后生成apk。
apk生成后,怎么看效果呢?把其中的classes.dex文件解压出来。由于jd-gui工具是不支持直接反编译dex的,那我们用dex2jar文件将classes.dex转成jar
最后在jd-gui工具中打开转换好的jar文件
效果已经出来,这样,逆向工程师拿我们的apk去反编译心情也会变好,自然就会放弃破解我们的软件了(可能有点理想化)~
如果,你想和逆向工程师硬刚,那可以用这份由o0O组成的变态字典:https://github.com/ysrc/AndroidObfuseDictionary/blob/master/dic.txt
生成apk,并反编译,效果如下:
这种o0O的组合是不是看得眼花缭乱,头皮发麻?mt管理器就曾经用过这种o0O组合的混淆规则,效果还不错。如果想寻求更变态的混淆,可以自行将那些阅读起来非常困难的字符加入到字典,然后生成apk.
总之,想让自己的软件增加破解难度,可以使用混淆,并将重要代码放在native层或者服务端。想通过骂人的话来制止破解,还是不太可能的。
第一步:感兴趣的可以加入知识星球
第二步:进入菜单栏--->商务合作--->联系作者
第三步:添加到"Android安全研究技术交流群"
第四步:感兴趣的可以关注"哆啦安全"视频号