1.apltool 基础操作:
安卓 apk 反编译、修改、重新打包、签名全过程 - cnkker.com - 博客园
2.Frida 靶场:
Frida 练习靶场 (上篇) - FreeBuf 网络安全行业门户
需要注意的是,在使用 apktool 时,文件路径不能有空格
Hook
使用的是 Frida 靶场的第一个题:

将输入与随机数做比较,匹配上就能得到 flag,虽然说在 CTF 比赛中我们通常采用直接分析加密过程来解密,但是如果能熟练使用 Hook,应该会更快一些。
1. 我选择 Hook get_random 函数,可以 Hook 生成数,也可以覆盖为自定义数
选中函数,右键可以直接复制为 Frida 片段:
let MainActivity = Java.use("com.ad2001.frida0x1.MainActivity");
MainActivity["get_random"].implementation = function () {
console.log(`MainActivity.get_random is called`);
let result = this["get_random"]();
console.log(`MainActivity.get_random result=${result}`);
return result;
};
套上:
Java.perform(function(){
frida 片段
});
在命令行使用frida -U -f 包名 -l test.js 就可以 Hook 上。
apktool篡改:
已经下好了 apktool 并写入了环境变量
反编译指令:
apktool d xxx.apk -o output_dir
编译指令:
apktool b output_dir -o test.apk
签名:
生成 keystore 文件 (java 环境自带 keytool):
keytool -genkey -alias demo.keystore -keyalg RSA -validity 40000 -keystore demo.keystore
签名 apk:
jarsigner -verbose -keystore demo.keystore test.apk demo.keystore
篡改 smali:
源文件:

可以修改返回值:

修改返回值为 0x1, 即只要输入 6 就一定正确。