工作需要,拔了一个app内容,主要是涉及核心算法,没办法只能去反编译。部分内容也是来自网络,本文仅作记录整理。
反编译需要准备的工具:
1.apktool:aapt.exe,apktool.bat,apktool.jar;三个在同一目录结合使用,用来反编译apk,apk重新打包;
2.dex2jar:该工具作用是将classes.dex文件,反编译出源码(如果apk未加固),反编译出文件,使用jd-gui工具进行查看;
3.Auto-Sign:自动签名工具,将重新打包的apk进行签名,如果不签名,无法安装使用。
4.jd-gui: 这个东西可以直接查看jar文件内容,不需要进一步解包,如果对方app没有很深的套路,用这个就不用再打包去查看了。
直接说解包,修改和再打包的过程:
1、查看内容解包
dex2jar.bat classes.dex
该命令来自于dex2jar工具,后面的dex文件是直接将apk文件改名zip解压后得到的。
运行结束后,在该工具目录下会生成一个classes_dex2jar.jar的文件
打开工具jd-gui文件夹里的jd-gui.exe,用该工具打开生成的classes_dex2jar.jar文件,便可以看到源码,如果不是加密处理过的,这部分内容可读性还是比较强的。
2、修改源码需要使用apktools进行反编译解包。
apktool.bat d -f test.apk -o test
反编译之后会得到test 文件夹,打开test文件夹,里边就是反编译出来的各种文件。
第一步中,jd-gui看到的文件,对应着smali文件夹,再找到与之对应的地址smali文件
比如:smali\com\danfoss\koolapp\a.smali对应着下图中的内容
3、修改源码
直接修改smali是比较难的,smali相当于编译后的语言,虽然可读性比二进制要好,但依然很麻烦。
此时需要安装android-studio, 下载地址: http://www.android-studio.org/
安装后安装插件:java2smali,下载地址:https://plugins.jetbrains.com/plugin/7385-java2smali
插件导入IDE后重启IDE,创建一个空的Project。复制jd-gui中查看到的java内容,选择IDE顶部菜单:build---Compile to Smali即可实现java到smali的编译。
此时根据自身需要修改java内容,调试输出即可。
4、再打包
再次打包需要使用aoktool命令
apktool.bat b test
此时得到的test.apk文件需要签名
复制test.apk到autosign工具的文件夹下
java -jar signapk.jar testkey.x509.pem testkey.pk8 test.apk test_signed.apk
之后会得到一个test_signed.apk,该文件可以直接安装。
最后说一下安卓虚拟机的问题
使用虚拟机可以更方便快速的调试,不需要反复看手机。
使用BlueStacks蓝叠,这个软件相对响应速度比较快。可以在设置--引擎设置中获取root权限。使用re文件管理器可以访问system文件夹的资源,其共享文件夹路径为:X:\BluestacksCN\Engine\ProgramData\Engine\UserData\SharedFolder
教程完毕。
转载请注明:鸟儿博客 » 记录一个安卓app反编译的过程