这里简单介绍下大概流程,首先把后缀为.apk的文件改为.zip的一个压缩文件,方便解压。dex2jar和jd-gui配套使用,用于逆向代码部分,APKTool用于逆向res文件夹下的图片布局等部分。
反编译代码的工具下载:
dex2jar: 把dex文件转成jar文件下载地址:https://sourceforge.net/projects/dex2jar/files/
jd-gui: 这个工具用于将jar文件转换成java代码下载地址:http://jd.benow.ca/
APKTool: 本文重要工具,APK逆向工具,使用简单下载地址: http://ibotpeaches.github.io/Apktool/install/
步骤:
1. 首先把后缀为.apk的文件改为.zip的一个压缩文件,方便解压。解压后如下:
2. 需要用到的是dex2jar包里面的三个文件(Mac环境用对应的.sh文件,在windows环境下是.bat文件):
3. Windows cmd到这个文件夹下 输入:d2j-dex2jar.bat classes.dex
Mac 到这个文件夹下 输入:sh d2j-dex2jar.sh classes.dex
如此之后在这个目录里会生成一个classes-dex2jar.jar文件。这个时候就轮到JD-GUI工具出手了,运行jd-gui.exe File–OpenFile–classes-dex2jar.jar 打开刚才生成的jar文件。就能很清晰的看到我们想要的代码了。
4. 使用apktool 获取资源。这个app-release文件夹下会得到若干文件。
我的Mac下: apktool.sh d app-release.apk 此处app-release为apk名称
window: apktool d app-release.apk 此处app-release为apk名称
5. 动态调试smali代码
一 配置插件
下载smalidea插件,然后打卡Android Studio,点击File->Setting->Plugins->Install plugin from disk,选择下载的smalidea.zip文件,安装成功后显示重启Android Studio生效。
//插件下载
https://bitbucket.org/JesusFreke/smali/downloads/
二 反编译apk
把第一节编写的激活码程序apk拖入Android Killer中
1 记录apk的包名(com.jhm)和入口Activity(com.jhm.MainActivity)
2 设置该apk的调试属性,改成可调试:AndroidManifest.xml中application标签中设置android:debuggable="true" (不改是不能调试apk的)
三 手机准备
//反编译
apktool d app-release.apk 此处app-release为apk名称
//从新打包
apktool b [文件夹] -o test2.apk
//把未签名的apk 变成签名的apk
jarsigner -verbose -keystore [您的私钥存放路径] -signedjar [签名后文件存放路径] [未签名的文件路径] [您的证书的别名]
如:jarsigner -verbose -keystore nixiang -signedjar test3.apk test2.apk key0
//把新生成的test2.apk安装到手机上。
// 终端 启动 调试
adb shell am start -D -n com.imyfone.testdemo/.MainActivity
//获取进程 该应用的进程号
adb shell ps | grep testdemo(APP名字)
//设置端口转发 是在本地8600端口与手机28881进程之间建立一条通道
adb forward tcp:8800 jdwp:28881
//8700端口被占用了 cannot bind listener: Address already in use
window 命令行输入netstat -ano | findstr "8700"
Mac 查看被占用的端口 :lsof -i:8700
kill 1011(kill + 应用pid)
//重新启用
adb forward tcp:8800 jdwp:28881
6.配置远程调试Smali文件。
导入smali工程
1 AndroidKiller反编译完成后,点击工程管理器标签页->右击smali目录->打开方式->打开文件路径,在E盘新建Jhm文件夹,把smali文件夹拷贝到Jhm文件夹下,并且重命名smali文件夹为src。
2 Android Studio中点击File->New->Import Project,找到E:\Jhm路径,选中Jhm文件,点击Next一路到Finish。
3 在AndroidStudio打开的新工程里选择浏览模式为Project格式,右击src->Make Directory As->Sources Root设置为根目录。
4 在Android Studio中点击Run->Edit Configurations。点击左上角绿色加号->Remote,Name设置为DebugSmali吧,端口Port设置为8600,点击OK。
5 配置JDK。Android Studio中点击File->Project Structure,选中对应java版本,点击ok。
7. 启动 Android studio debug 模式
输入激活码,点击验证,程序断在我们的断点处,F8单步步过,F7单步步入,F9往下执行。OK可以动态调试了。