【转】一步一步带你反编译apk,并教你修改smali和重新打包
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
【转】⼀步⼀步带你反编译apk,并教你修改smali和重新打包⼀、⼯具介绍:
1.apktool:aapt.exe,apktool.bat,apktool.jar;三个在同⼀⽬录结合使⽤,⽤来反编译apk,apk重新打包;
2.dex2jar:该⼯具作⽤是将classes.dex⽂件,反编译出源码(如果apk未加固),反编译出⽂件,使⽤jd-gui⼯具进⾏查看;
3.Auto-Sign:⾃动签名⼯具,将重新打包的apk进⾏签名,如果不签名,⽆法安装使⽤。
⼯具下载地址:(需要3CSDN积分,原本我设置3积分的,不知道为什么涨到16积分了......)
使⽤场景:项⽬源码丢失,只有线上apk,并且没有加固,要求修改apk接⼝地址,并且重新打包,再发布。
⼆、⼯具使⽤:
解压后⼯具包如图:
1.思路:使⽤⼯具dex2jar反编译,并⽤jd-gui⼯具进⾏查看项⽬结构,查看源码,并且找到接⼝地址类,修改接⼝地址;
步骤⼀:下载好⼯具,将需要反编译的APK后缀名改为.rar或则 .zip,并解压,如图:
得到其中的classes.dex⽂件(它就是java⽂件编译再通过dx⼯具打包⽽成的),将获取到的
classes.dex复制到解压出来的⼯具dex2jar-0.0.9.15 ⽂件夹内,
在命令⾏下,进⼊到dex2jar.bat所在⽬录,输⼊命令:
dex2jar.bat classes.dex
效果如下:
步骤⼆:运⾏结束后,在该⽬录下会⽣成⼀个classes_dex2jar.jar的⽂件,如图:
然后打开⼯具jd-gui⽂件夹⾥的jd-gui.exe,⽤该⼯具打开⽣成的classes_dex2jar.jar⽂件,便可以看到源码
了,效果如下:
2.思路:apktool,反编译修改smali⽂件,进⾏重新打包,通过⽤jd-gui⼯具找到接⼝地址类后,与相应
的smali⽂件进⾏对⽐,修改接⼝地址;
下载上述⼯具中的apktool,解压得到3个⽂件:aapt.exe,apktool.bat,apktool.jar ,将需要反编译的APK⽂件放到该⽬录下,如图:
打开命令⾏界⾯(运⾏-CMD),定位到apktool⽂件夹,输⼊以下命令:
apktool.bat d -f test.apk -o test
apktool -f [待反编译的apk] -o [反编译之后存放⽂件夹]
如图:
反编译之后会得到test ⽂件夹,打开test⽂件夹,⾥边就是反编译出来的各种资源⽂件
使⽤jd-gui查看源码找到地址类,然后在smali⽂件⾥找到地址的smali⽂件,更改smali⽂件内接⼝地址。
如图:
smali⽂件内找到与之对应的地址smali⽂件
修改接⼝smali⽂件⾥的地址将Ip更换成域名如图:
修改后,保存。
3.重新打包。
执⾏打包命令
apktool.bat b test
在test⽂件内会多出两个⽂件如下图所⽰:
dist⽂件内就是我们需要的apk。
4.签名apk,重新发布。
接下来就要⽤到签名⼯具了,如果不经过签名是不能正确运⾏的。
⼯具: auto-sign.zip
将打包好的test.apk 拷贝到解压好的auto-sign⽂件夹下,执⾏命令:
java -jar signapk.jar testkey.x509.pem testkey.pk8 test.apk test_signed.apk
1
test_signed.apk就是签名后的apk :
5.运⾏之后,发现在5.0上运⾏会直接崩溃,android studio捕捉到错误所在:
这⾥是在jd-gui上查看到了源码位置
错误原因:
Caused by: ng.IllegalArgumentException: Service Intent must be explicit: Intent { act=munication.link }
如错误提⽰所⽰,在android 5.0版本以后,service intent必须为显式指出。
那么就需要修改smali⽂件相关类,这⾥就⽤到将java2smali⽂件
6.java2smali插件,地址:
插件安装,选择本地安装,不懂怎么安装插件,请百度下。
找到相应问题的smali⽂件代码定位:
由于不太懂smali语法的书写,所以我们直接将写好java代码⽤插件转换为smali语法,拷贝进来,替换原有smali代码这是java代码
转换成smali代码
相应代码会直接展⽰,找到相应转换结果:
替换反编译出的相应smali⽂件⾥的相应代码,然后执⾏重新打包命令,签名命令,执⾏第3步。
整个过程并不复杂,只要有耐⼼就可以更改成功。
反编译+重新打包+签名
java -jar apktool.jar d -f zhugechengyu.apk -o MMTS
d2j-dex2jar classes.dex
反编译重新打包
java -jar apktool.jar b MMTS
⽣成签名
keytool -genkey -alias android.keystore -keyalg RSA -validity 36500 -keystore android.keystore
重新签名
jarsigner -verbose -keystore android.keystore -storepass hzx123 -keypass hzx123 -signedjar zg_signed.apk zhugechengyu.apk android.keystore from:https:///sxk874890728/article/details/80486223。