1.apltool 基础操作:
安卓 apk 反编译、修改、重新打包、签名全过程 - cnkker.com - 博客园

2.Frida 靶场:
Frida 练习靶场 (上篇) - FreeBuf 网络安全行业门户

需要注意的是,在使用 apktool 时,文件路径不能有空格

Hook

使用的是 Frida 靶场的第一个题:

image20250419112447-1745150287823-1.png

将输入与随机数做比较,匹配上就能得到 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:
源文件:

mage20250419124809.png

可以修改返回值:

image20250419124843.png


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