360或者腾讯加固工具加固过的Android APP,不能直接反编译,本文提供全套的实战流程。工具截止2020年底可反编译360加固或者腾讯加固的免费版本加固后的APP,其他加固工具需要你自己尝试是否可用。
起因
正在使用的一款app,做的内容挺好的,就是中间弹广告及其难受,其频繁程度令人发指,基本上达到无法正常使用的地步,而且还不能碰,假的X号,碰一下立即在后台下载安装抖音。闲来无事,起了破解去广告之心。
工具准备
- 一台已经root的android旧手机,建议使用android 6.0或者7.0 ,更高或者更低版本可能导致某些破解软件不能正常工作,安装好xposed框架。
- FDex2:用来绕开加固获取dex文件
- httpcanary(可选):用于监听分析app 网络请求
- apktool:反编译工具
- signapk:重新签名
如果你懂java,还可能用到下面工具
- dex2jar:apk反编译为jar
- jd-gui:jar反编译为java文件
- android sdk
- android studio或者eclipse
反编译步骤
- 安装目标应用
- FDex2选择HOOK目标
- 运行目标应用
- 在/data/user/0/APP_NAME/目录下找到dex文件,可能有多个,命名一般为<APP_NAME><包大小>.dex
- 部分360或者腾讯加固工具加固过的APP,使用FDEX2得到的DEX文件,部分情况会出现DEX文件无法被反编译,提示为无效的DEX文件,请参考以下方法处理。
此问题一般是由于DEX文件的前数个字节被置为0,正常的DEX文件前几个字节为64 65 78 0A 30 33 35
解决方案是使用 beyond compare,用一个正常DEX文件和无效文件比较,把无效文件前几个置0的字节内容从正常文件复制过来即可解决。
- 把dex文件改名为classes[0-N].dex,合入APK文件内。
使用apktool反编译apk
apktool.bat d APP_NAME.apk
- 分析xml和smali代码,修改对应代码,另外可以转换成jar使用java阅读和修改代码。
重新编译打包apk
apktool.bat b APP_NAME/
- 重新签名apk
- 测试
JAVA代码修改步骤
smali 代码比较晦涩难懂,比较大的修改还得用java,一般情况下反编译出得java代码,无法重新编译打包,因此我们将需要修改得函数修改后,生成新的smali代码覆盖原有smali函数代码。
- 使用dex2jar得到jar包APP_NAME_dex2jar.jar
使用jd-gui打开java包,得到源代码
重点:如果你希望分析的代码无法反编译,出现//INTERNER ERROR的信息,使用不同版本的jd-gui反编译代码可能有惊喜,经验表明低版本的jd-gui更好用
- 在eclipse新建项目,导入android.jar和APP_NAME_dex2jar.jar作为依赖库,只把需要修改的java代码放入src目录中。
修改函数,重新编译,或者使用命令行编译,示例如下:
javac -cp "..\..\platforms\android-19\android.jar;APP_NAME_dex2jar.jar;" -Xlint:unchecked WantToModify.java
使用编译后的class文件生成一个新的dex文件
dx.bat --dex --output=classes_new.dex .\com\PKG_PATH\WantToModify.class
- 使用apktool反编译得到想要得smali代码,覆盖需要修改的地方