buuctf Youngter-drive
拿到题目,查壳(upx),首先脱壳,(不会脱壳自行百度,很多教程),脱壳之后是不能运行的,好像是因为文件重定向,但是不影响ida静态分析,ida打开
分析,多线程,最近刚好在学多线程,第一个线程h0bject会执行StartAddress函数,第二个线程v2执行sub_41119f函数,然后挨个分析打开StartAddress函数
会出现这种情况,原因是堆栈不平衡利用ida调堆栈就好,
在红色部分用alt+k,打开![在这里插入图片描述]
把原来的0x-4改成0x00,堆栈平衡,然后就可以打开函数了
逻辑就出现了
然后有坑的地方出现了
他是两个线程同时工作的,所以要交替处理数据
看另一个线程,发现没有处理任何数据
只是把原来的字符串向前移动
注意数据是从后向前处理的,查看数据大小发现是0x1d,就是29个,然后分析就行
最后贴上脚本
str="0abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ"
text1='TOiZiZtOrYaToUwPnToBsOaOapsyS'
text2='QWERTYUIOPASDFGHJKLZXCVBNMqwertyuiopasdfghjklzxcvbnm'
flag=''
s=0
for i in range(len(text1)):
if(i%2==0):
flag+=text1[i]
else:
s=text2.index(text1[i])
flag+=str[s]
print(flag)
然后要求有30位数据,发现有一位数据没有对比,一个一个试,发现"E"成立