CTF-re-81420
Youngter-drive
URL: https://buuoj.cn/challenges#Youngter-drive
解题
- IDA打开,报提示,进入切到text view查看,发现分区名
.upxt
判断为UPX壳,脱壳 - 切到String页检查一下,发现几个
flag
关键字的字符串,可以进入到一个关键函数sub_411880
,函数意思大致为输入参数要与TOiZiZtOrYaToUwPnToBsOaOapsyS
一致,即出flag - 回到main函数可以看到调用的上述函数,现在从上至下依次分析
sub_4110FF
: 用户输入数据Source
,出来随即strcpy到Dest
上- mutex创建线程锁,线程相关知识有点遗忘。。。
- 在
StartAddress
处用sub_41112C
加密一次,便休眠等待信号 - 在
sub_41119F
处空减计数器一次,便休眠等待信号 - 即对输入数据分单双加密
- 逆向实现上述加密过程即可得flag
难点
- 线程关键知识点回顾:创建线程和线程锁->某线程拿到线程锁->执行块语句后释放线程锁
- 两个关键加密函数进不去,报错堆栈不平衡,怀疑是花指令,用脚本去除