天天看点

Android 反编译、Smali插桩、二次打包

内推

【长期有效】欢迎加入字节跳动我的团队:内推链接

1.先去下载最新的apktool工具(官网:http://ibotpeaches.github.io/Apktool/)

2.将你需要的反编译的APK包,使用命令行: apktool d test.apk 反编译,APK的路径下会有个同名文件夹,反编译后的东西放那里。

3.找到你需要的Smail文件进行插桩。这里推荐一篇文章,方法都在那里了(http://drops.wooyun.org/papers/6045)

注:想要快速找到路径插桩,阅读smali是很难的。可以先解压APK(直接解压),将里面的classes.dex文件使用dex2jar工具(https://sourceforge.net/projects/dex2jar/files/?source=navbar)将dex文件转换为jar文件,再用jd-gui工具(http://jd.benow.ca/)阅读;也可以使用文件检索工具对整个工程文件夹进行关键字的检索,从而寻找蛛丝马迹。(linux推荐使用search monkey检索)

4.插桩完成后二次打包。

(1)使用apktool打包,命令行为:

apktool b test (test 为需要打包的文件夹)

打包完后,包在test/dist文件夹下。(注:这个包还未签名,不能安装)

(2)签名

一般分两步:(以下两个工具都是JDK自带的工具,无需下载,只要java环境配置正确,命令行可直接调用)

第一步,生成签名,是用户给keytool工具,命令行为:

keytool -genkey -v -keystore test.keystore -alias test.keystore -keyalg RSA -validity 20000

第二步,使用jarsigner签名(*为密码),命令行为:

jarsigner -verbose -keystore test.keystore -storepass * -signedjar test.apk -digestalg SHA1 -sigalg MD5withRSA test.apk ren.keystore

5.二次打包后即可安装。(因原应用与充电打包的应用签名不同,所以建议卸载原应用再安装。至于不改变签名的打包方法,可以参照http://drops.wooyun.org/papers/6045这篇文章的最后。)