frida
用于分析,修改和与正在运行的应用程序交互,其在目标进程中创建的一个线程,该线程将执行一些允许交互的引导代码,其允许注入
javascript
代码,实时控制应用程序的行为其最重要的功能之一是拦截器,此功能允许更改内部函数的输入或输出或观察他们的行为
tryunlockme
切到
/home/ubuntu/Desktop/TryUnlockMe
可以看到
_Z7set_otpi
,即该函数set_opt
在交互期间被调用到去
vscode
里面看看为了获取参数值,可以手动添加日志函数:
1
log("Parameter:" + args[0].toInt32());
然后再用
frida-trace
开,拿到:在第二个场景下,拦截到购买物品时的函数
_Z17validate_purchaseiii
:函数后面的三个
i
表示其有三个整数参数那么用日志函数记录尝试购买的每个参数值:
1
2
3log("Parameter1:" + args[0].toInt32())
log("Parameter2:" + args[1].toInt32())
log("Parameter3:" + args[2].toInt32())再去买一下第三个物品,看到这三个,其中第一个应该是物品
id
,第二个值就是物品钱:那么就把第二个参数设为 $0$ ,即价格改成 $0$
1
args[1]=ptr(0)
拿到第二个
在第三个场景下,抓到函数
_Z16check_biometricsPKc()
其处理的是字符串,那么加以下代码来调试参数:
1
log("PARAMETER:" + Memory.readCString(args[0]))
这个应该不是什么加密,没跑出来
那就试试在
Onleave
中拦截其返回值:1
log("The return value is: " + retval);
这里推测其是
false
的布尔值,试着把他设置成true
1
retval.replace(ptr(1))
拿到最后一个flag
1 | What is the OTP flag? |