0%

THM打靶日寄55-Advent of Cyber 2024:Day19

  • 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
    3
    log("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
2
3
4
5
6
7
8
What is the OTP flag?
THM{one_tough_password}

What is the billionaire item flag?
THM{credit_card_undeclined}

What is the biometric flag?
THM{dont_smash_your_keyboard}