目录
Apktool的准备
Apktool解压APP
Apktool打包APP
对APP进行签名
dex2jar反编译APP
JD-GUI的使用
baksmali反编译.dex文件
smali编译成.dex文件
对APP进行渗透测试,那么就需要对APP本身的客户端安全做一个检测。所以就需要对APP进行解压、反编译等操作。APP文件的后缀名为.apk。APP反编译软件有个组合套餐:apktool 、dex2jar 和 jd-gui
1:Apktool的下载页面:https://bitbucket.org/iBotPeaches/apktool/downloads/ ,随便下载一个,我这里下载的是最新版本的 apktool_2.4.0.jar 。
2:将下载好的 apktool_2.4.0.jar 重命名为 apktool.jar
3:新建文本文件,将下面的脚本复制到文本并保存,然后重命名为apktool.bat;
@echo off
if "%PATH_BASE%" == "" set PATH_BASE=%PATH%
set PATH=%CD%;%PATH_BASE%;
chcp 65001 2>nul >nul
java -jar -Duser.language=en -Dfile.encoding=UTF8 "%~dp0\apktool.jar" %*
将 apktool.bat 和 apktool.jar 文件放到同一文件夹下,在该文件夹下打开cmd窗口,执行以下命令
apktool.bat -r d -f test.apk
然后会在该文件夹下生成同 apk 名的文件夹
文件夹内容如下,可以得到 xml、smali反汇编代码(有关于smali详细:逆向之Smali入门学习)、res资源文件、assets配置文件、lib库文件,我们可以直接搜索smali文件和资源文件来查找链接等。
# apktool.bat b -f 要打包的文件夹路径 -o 输出的apk路径
apktool.bat b -f C:\Users\administrator\desktop\apktool\test -o C:\Users\administrator\desktop\apktool\test2.apk
将app打包完成之后,还不能完。在Android中,包名相同的两个APK会被认为是同一个应用。当新版本覆盖旧版本时,签名证书必须一致,否则会被拒绝。(即使开启了“允许未知来源的应用”)。如果APK没有使用自己的证书进行签名,将会失去对版本管理的主动权。
java -jar signapk.jar testkey.x509.pem testkey.pk8 C:\Users\administrator\desktop\apktool\test2.apk C:\Users\administrator\desktop\apktool\test3.apk
所以最后的test3.apk就是我们打包后签名后的APK。
首先修改 apk 为 zip 扩展名,然后解压出 classes.dex 文件。.dex 文件是 dalvik 虚拟机可识别的可执行文件,是java层的主要代码,即主程序。详细:https://www.jianshu.com/p/40908a016480
APP包结构:
将classes.dex文件复制到dex2jar文件夹内
在该文件夹下打开cmd窗口,执行以下命令,得到 classes-dex2jar.jar 文件
d2j-dex2jar.bat classes.dex
用 jd-gui 打开 classes-dex2jar.jar 文件。
直接运行命令,就在运行目录下创建一个 out 文件夹,生成所有对应的smali文件。
java -jar baksmali-2.3.4.jar d classes.dex
如果要将 out 文件夹编译成 .dex 文件,将会生成 out.dex
java -jar smali-2.3.4.jar a out
参考文章:http://blog.sina.com.cn/s/blog_7c6cbaf601019604.html
相关文章:移动APP安全在渗透测试中的应用
移动APP安全测试
五大APP安全在线检测平台对比