BUUCTF
reverse
Youngter-drive
用Exeinfo打开发现加了upx壳
用upxshell脱壳后用IDA32打开
找到主函数
sub_4110FF函数控制输入了Source的值
打开StartAddress函数
发现sub_41112C函数,进入查看
是将输入的字符中的大小写字母从下面这个字符串中进行替换
这里我犯了错误,没有继续看main后面的函数,以为每一个都要替换
回去看main函数,发现在sub_41119F函数中也对dword_418008的值进行了减一操作,所以字符是从29开始隔一个替换,也就是偶数位不用替换,编写脚本来输出flag
a = "QWERTYUIOPASDFGHJKLZXCVBNMqwertyuiopasdfghjklzxcvbnm"
b = "TOiZiZtOrYaToUwPnToBsOaOapsyS"
flag = ""
for i in range(len(b)):
if i % 2 == 0:
flag += b[i]
continue
if a.find(b[i]) < 26:
flag += chr(a.find(b[i]) + 96)
else:
flag += chr(a.find(b[i]) + 38)
print ("flag{" + flag + "}")
flag{ThisisthreadofwindowshahaIsES}
还有注意的一点,dword_418008的初值是29,所以总共有30个字符,但在sub_411190函数中只对比了前29个,对比的字符串也只有29位
所以还需要自己加一位字符,网上看到大佬wp说是加一个E,所以
flag{ThisisthreadofwindowshahaIsESE}
是加一个E,所以
flag{ThisisthreadofwindowshahaIsESE}