反编译第三方APK.并且调试第三方APK
用的工具如下:
dex2jar
baksmali.jar
smali.jar
re-sign.jar
jd-gui.exe
1.反编译APK获取的源码
先解压缩APK 获取classes.dex,使用 dex2jar 获取 能看懂的jar,再导出所有源码到outSource文件夹中
2.将获取到的classes.dex 使用 baksmali.jar编译成 *.smali文件
java -jar E:\开发工具\Smali2Java\baksmali-2.0.3.jar -o classout/ classes.dex
3.在入口Activity的OnCreate()方法中添加一句调试语句( 是smali文件哦)
a=0;// # virtual methods a=0;// .method protected onCreate(Landroid/os/Bundle;)V a=0;// invoke-static {}, Landroid/os/Debug;->waitForDebugger()V a=0;// a=0;// .locals 1 a=0;// .param p1, "savedInstanceState" # Landroid/os/Bundle; a=0;// a=0;// .prologue a=0;// .line 11 a=0;// invoke-super {p0, p1}, Landroid/app/Activity;->onCreate(Landroid/os/Bundle;)V
4.打包修改后的*.smali文件到新的dex (破解就在这步,修改相关方法再重新打包变成破解软件,smali文件不好读,结合前面导出的源码还是可以找到对应方法的)
java -jar E:\开发工具\Smali2Java\baksmali-2.0.3.jar classout/ -o classes.dex
5.将新的classes.dex添加到原来的APK包中
并使用re-sign.jar签名(re-sign.jar会自动使用debug签名)
6将应用安装到手机或模拟器(先要删除手机或模拟器上原版程序)
7新建eclipsejava工程引入outSource文件夹中的源码
8连接手机后再DDMS中观察到 应用监听的调试端口是多少
9 再启动Debug模式 Run> Debug -> Debug Configurations
就会发现 断点调试成功了
如果需要打正式包, 只要将第5步修改成 来完成签名即可 (该签名下不可以调试)
d2j-apk-sign demo.apk