查壳,有壳,upx脱壳(upx.exe -d )
进ida看主函数
又是这种粉色的没见过的函数,速查
CreateMutexW可以创建或打开命名的或未命名的互斥体对象。
简单来说就是后面的多线程同时只会同时运行一个线程
CreateThread就是创建线程来运行
CloseHandle就是关闭线程
在这道题中就是StartAddress和sub_41119F两个函数交替进行
首先就是这个sub_4110FF,进去之后是下图,主要是读取输入的36个字符
然后就是StartAddress,倒数第三层是这个函数,可以看到一个循环,每次418008都会自减,这个值是1D,即29。
最后一层函数,传进去a1就是source的首地址,a2就是29
看函数内容就是大写字母一个操作,小写字母一个操作,把source字符串中的字符进行操作后的字符当作索引,在418000字符中找到位置并返回给source。
然后就是另一个线程,可以看到就是单纯的递减,没有操作
所以总结就是单数操作,双数不变
最后有个检验函数
写个EXP
text1 = 'TOiZiZtOrYaToUwPnToBsOaOapsyS'
text2 = 'QWERTYUIOPASDFGHJKLZXCVBNMqwertyuiopasdfghjklzxcvbnm'
flag = ''
for i in range(len(text1)):
if i % 2 == 0:
flag += text1[i]
else:
if text1[i].islower():
flag += chr(text2.find(text1[i]) + 38)
else:
flag += chr(text2.find(text1[i]) + 96)
print(flag)
得到结果ThisisthreadofwindowshahaIsES
网上看到这题flag后面还要加个E,不懂为什么,没看到为什么是30位
flag{ThisisthreadofwindowshahaIsESE}
标签:函数,drive,buu,source,flag,text1,线程,Youngter,就是 From: https://www.cnblogs.com/yee-l/p/18303749