记第一次Hook(Frida)和Apktool修改安卓程序

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

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

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

Hook

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

image20250419112447

将输入与随机数做比较,匹配上就能得到flag,虽然说在CTF比赛中我们通常采用直接分析加密过程来解密,但是如果能熟练使用Hook,应该会更快一些。
1.我选择Hook get_random函数,可以Hook生成数,也可以覆盖为自定义数
选中函数,右键可以直接复制为Frida片段:

1
2
3
4
5
6
7
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并写入了环境变量

反编译指令:

1
apktool d xxx.apk -o output_dir

编译指令:

1
apktool b output_dir -o test.apk

签名:
生成keystore文件(java环境自带keytool):

1
keytool -genkey -alias demo.keystore -keyalg RSA -validity 40000 -keystore demo.keystore

签名apk:

1
jarsigner -verbose -keystore demo.keystore test.apk demo.keystore

篡改smali:
源文件:

image20250419124809

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