作者:果然翁
通过各方神仙文档,以及多天调试,整理了这篇极简反编译apk的文档(没几个字,吧).轻轻松松对一个apk(没壳的)进行逆向分析以及调试.其实主要就是4个命令.
https://ibotpeaches.github.io/Apktool/install/
https://github.com/skylot/jadx
,可查看apk文件,并可导出为gralde项目供AS打开解压apk: apktool d C:\Users\CSP\Desktop\TEMP\decompile\test.apk -o C:\Users\CSP\Desktop\TEMP\decompile\test
,第一个参数是要解压的apk,第二个参数(-o后面)是解压后的目录
修改: 注意寄存器的使用别错乱,特别注意,如果需要使用更多的寄存器,要在方法开头的.locals x或.registers x中对x+1
重打包: apktool b C:\Users\CSP\Desktop\TEMP\decompile\test -o C:\Users\CSP\Desktop\TEMP\decompile\test_b.apk
,第一个参数是要进行打包的目录文件,第二个参数(-o后面)是重新打包后的apk路径.重新打包成功,会出现Press any key to continue …
对齐: zipalign -v 4 C:\Users\CSP\Desktop\TEMP\decompile\test_b.apk C:\Users\CSP\Desktop\TEMP\decompile\test_b_zipalign.apk
,第一个参数是需要进行对齐的apk路径,第二个参数是对齐后的apk路径.对齐成功,会出现Verification succesful
签名: apksigner sign -verbose --ks C:\Users\CSP\Desktop\软件开发\反编译\mykeys.jks --v1-signing-enabled true --v2-signing-enabled true --ks-key-alias key0 --ks-pass pass:mykeys --key-pass pass:mykeys --out C:\Users\CSP\Desktop\TEMP\decompile\test_b_sign.apk C:\Users\CSP\Desktop\TEMP\decompile\test_b_zipalign.apk
,第一个参数(–ks后面)是密钥路径,后面跟着是否开启V1、V2签名,在后面跟着签名密码,最后两个参数(–out后面)是签名后的apk路径以及需要签名的apk(注意需对齐)路径.签名成功,会出现Signed
安装: adb install C:\Users\CSP\Desktop\TEMP\decompile\test_b_sign.apk
调试: 用jdax将apk导出为gradle项目,在AS中打开,即可通过attach debugger的方式对刚重新打包的项目进行调试.注意,调试时因为行号对不上,所以只能在方法上打上断点(菱形图标,缺点,运行速度极慢)
注意事项:
为了将懒进行到底,写了个bat脚本(需要在test文件目录下):
::关闭回显
@echo off
::防止中文乱码
chcp 65001
title 一键打包
start /wait apktool b C:\Users\CSP\Desktop\TEMP\decompile\test -o C:\Users\CSP\Desktop\TEMP\decompile\test_b.apk
start /b /wait zipalign -v 4 C:\Users\CSP\Desktop\TEMP\decompile\test_b.apk C:\Users\CSP\Desktop\TEMP\decompile\test_b_zipalign.apk
start /b /wait apksigner sign -verbose --ks C:\Users\CSP\Desktop\软件开发\反编译\mykeys.jks --v1-signing-enabled true --v2-signing-enabled true --ks-key-alias key0 --ks-pass pass:mykeys --key-pass pass:mykeys --out C:\Users\CSP\Desktop\TEMP\decompile\test_b_sign.apk C:\Users\CSP\Desktop\TEMP\decompile\test_b_zipalign.apk
大家将此脚本复制进bat文件,即可一键输出.
不过目前略有瑕疵:1.重新打包需要新开窗口,并且完成后还需手动关闭;2.关闭后还要输入’N’才能进行后续的对齐和签名操作有无bat大神帮忙优化下/(ㄒoㄒ)/~~!
-------更新
对于’假懒’中的打包脚本,会有2个瑕疵,使得不能将懒进行到底.经过查找方案,便有了以下’真懒’的方案,使得整个打包可以真正一键执行:
::关闭回显
@echo off
::防止中文乱码
chcp 65001
title 一键打包
call apktool b C:\Users\CSP\Desktop\TEMP\decompile\test -o C:\Users\CSP\Desktop\TEMP\decompile\test_b.apk
call zipalign -v 4 C:\Users\CSP\Desktop\TEMP\decompile\test_b.apk C:\Users\CSP\Desktop\TEMP\decompile\test_b_zipalign.apk
del test_b.apk
call apksigner sign -verbose --ks C:\Users\CSP\Desktop\软件开发\反编译\mykeys.jks --v1-signing-enabled true --v2-signing-enabled true --ks-key-alias key0 --ks-pass pass:mykeys --key-pass pass:mykeys --out C:\Users\CSP\Desktop\TEMP\decompile\test_b_sign.apk C:\Users\CSP\Desktop\TEMP\decompile\test_b_zipalign.apk
del test_b_zipalign.apk
echo 打包结束
echo 输出文件是-----test_b_sign.apk
pause
可以看到,把start换成了call,并且删除了重新打包和对齐后的文件,只留下最后签完名的文件
到此够了吗?不够,因为运行第一个apktool b
命令时,重新打包完,会被pasue,让你按一个按键再继续.
这当然不行,这可不算一键,那么我们找到apktool的存放路径,打开apktool.bat,找到最后一行
就是这里对程序暂停了,那么就把这一行删了,当然最好是注释了就行,在最前面rem
即可对命令进行注释,处理完之后,再重新运行我们的’一键打包.bat’脚本,这时候在中途重新打包后就不会出现’Press any key to continue…'了,即可一键实现打包-对齐-签名的流程了( •̀ ω •́ )y.
当然,如果想使脚本到处运行,可以给脚本增加一个变量,在运行前通过环境变量的形式把要打包的目录路径加入进来,这个大家可以自行尝试.
至于学习笔记也是有的,我根据上述中所提到的知识点进行整理了,这样大家学习起来也比较方便,大家可以综合起来一起学习。参考方式:https://qr18.cn/CQ5TcL
https://qr18.cn/CQ5TcL
https://qr18.cn/CQ5TcL
参考方式:https://qr18.cn/CQ5TcL