CTF-re-81420

heacsing 发布于

CTF-re-81420

Youngter-drive

URL: https://buuoj.cn/challenges#Youngter-drive

解题

  1. IDA打开,报提示,进入切到text view查看,发现分区名.upxt判断为UPX壳,脱壳
  2. 切到String页检查一下,发现几个flag关键字的字符串,可以进入到一个关键函数sub_411880,函数意思大致为输入参数要与TOiZiZtOrYaToUwPnToBsOaOapsyS一致,即出flag
  3. 回到main函数可以看到调用的上述函数,现在从上至下依次分析
    • sub_4110FF: 用户输入数据Source,出来随即strcpy到Dest
    • mutex创建线程锁,线程相关知识有点遗忘。。。
    • StartAddress处用sub_41112C加密一次,便休眠等待信号
    • sub_41119F处空减计数器一次,便休眠等待信号
    • 即对输入数据分单双加密
  4. 逆向实现上述加密过程即可得flag

    难点

  5. 线程关键知识点回顾:创建线程和线程锁->某线程拿到线程锁->执行块语句后释放线程锁
  6. 两个关键加密函数进不去,报错堆栈不平衡,怀疑是花指令,用脚本去除