android 反编译与再编译
一.反编译得到java源代码
(方法一)
优点代码便于阅读 缺点不能再编译
1.工具
dex2jar(google code) http://code.google.com/p/dex2jar/downloads/list
jdgui(google code) http://code.google.com/p/innlab/downloads/list
2.
(1)用解压工具解压apk从中取得classes.dex,然后放到dex2jar文件夹
(2)执行命令"dex2jar.bat classes.dex",生成classes_dex2jar.jar
(3)使用jd-gui打开classes_dex2jar.jar ,即可查看反编译的代码
注:如果别人apk加密了 ,部分代码就不能成功反编译。
(方法二)
优点可以再编译回去 缺点不便于修改
1.工具
baksmali + smali http://code.google.com/p/smali/downloads/list
2.
(1) 从apk中解压得到classes.dex 然后放到basksmali 目录中
执行命令java
-jar baksmali-1.3.2.jar -o classout/ classes.dex
然后对照jd-gui
找到要修改的地方修改,因为是smali类型文件比较难修改。网上有相应的语法,
在这里介绍一个投机的方法,可以写好自己要添加或要修改的代码,然后生成apk反编译回去得到
自己想要的smali类型语句。
(2) 将修改好的文件在编译回 classes.dex
执行命令 java
-jar smali-1.3.2.jar classout/ -o classes.dex
二.反编译得到xml与图片文件
1.工具
apktool http://code.google.com/p/android-apktool/downloads/list
(应包含 apktool.bat aapt.ext apktool.jar三个文件)
2.
将apk 放到apktool目录
执行 apktool.bat d -f adb.apk abc 得到反编译的文件。
执行 apktool.bat b adb将反编译的文件重新打包成apk。
三.签名
1.系统签名(基于源码开发,如果你是搞app开发可以不看这一部分)
(1)文件位置:可以在/build/target/product/security/中找到platform.pk8 platform.x509.pem等签名
文件,对应不同的权限。
(2)signapk.jar:由build/tools/signapk/编译产出,可以在/out/host/linux-x86/framework/中找到。
(3)签名
java -jar signapk.jar platform.x509.pem platform.pk8 abc.apk abc_signed.apk
2.普通签名
apk-sign.rar
将abc.apk 文件解压到abc 文件夹,然后将adc 直接拖到apk-sign 文件中的sign_pack.bat批处理上执
行,得到新文件 adb_signed中的apk文件即为已签名。(注这个方法我没有测试过)