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的布尔值,试着把他设置成true1
retval.replace(ptr(1))
拿到最后一个flag
1 | What is the OTP flag? |