apk解压后目录结构:
Dex文件格式:
视频 Android安全之 – Dex文件解析(一) Android安全之 – Dex文件解析(二) (百度网盘)
- Official dex bytecode reference
- Official dex format reference
apk签名:
签名相关文件在META-INF目录下三个文件关于X.509证书,RSA加密解密原理,SHA1算法参见其他文档。 apk使用自签名,证书使用自签名。 所以只能进行一致性验证不能进行合法性验证。 MANIFEST.MF中保存所有文件对应SHA1摘要信息。 CERT.SF中保存了MANIFEST.MF文件的SHA1-RSA摘要 签名 及其他文件的摘要签名。(有说仅摘要未签名,未核实) CERT.RSA保存对CERT.SF的签名,签名使用的证书。
所以完全可以修改apk中文件,然后用自己的证书重新签名使用。
apk反向工程
使用dex2jar根据dex生成jar,使用jd-gui查看jar包源码 使用apktool根据apk解开apk生成smali文件及资源文件,可反向根据smali及资源文件生成apk apktool使用smali及baksmali处理dex与smali的转化
https://github.com/JesusFreke/smalismali syntax is based on jasmin/ dedexer syntax
实例操作
创建Hello.javagenerate Hello.class javac Hello.java
generate Hello.dex D:\android\sdk\build-tools\android-4.4W\dx --dex --output=Hello.dex Hello.class
disassemble hello class javap -c -classpath . Hello
dump hello dex dexdump -d Hello.dex
convert dex to smali java -jar D:\work\tools\decompile_apk\smali-2.0.3\baksmali-2.0.3.jar Hello.dex
convert smali to dex java -jar D:\work\tools\decompile_apk\smali-2.0.3\smali-2.0.3.jar out -o hello2.dex
run Hello with dalvikvm
adb push Hello.dex /sdcard/.adb shell dalvikvm -classpath /sdcard/Hello.dex Helloodex 系统app,预先生成放入rom中 /system/app 用户安装app,首次运行时dexopt缓存 /data/dalvik-cache