BUU-Youngter-drive

关于线程创建和等待线程的题目

首先UPX脱壳

然后发现两个线程共同等待一个线程 谁先得到谁就释放 释放了另一个线程就可以继续运行

就是控制两个线程轮流执行

第一个线程有对Source处理 第二个函数没有 由于创建线程先后顺序 第一个线程先执行

也就是说Source对奇数位被处理 偶数位不变

 

 

 处理函数也很简单 分大小写 而且table也是大小写分开储存的 方便直接判断

细心一点发现 最后的对比函数循环了30次 而对比的字符串只有29位 所以最终的flag在 末尾 }前 随便加一位就行了

table = 'QWERTYUIOPASDFGHJKLZXCVBNMqwertyuiopasdfghjklzxcvbnm\x00'

s = 'TOiZiZtOrYaToUwPnToBsOaOapsyS'

flag = 'flag{'
for i in range(len(s)):
    if i % 2:
        for j in range(len(table)):
            if table[j] == s[i]:
                if(j < 26):
                    flag += chr(96 + j)
                else:
                    flag += chr(38 + j)
                break
    else:
        flag += s[i]
flag += 'E}'
print flag
View Code

 

posted @ 2020-09-02 09:15  Papayo  阅读(242)  评论(0编辑  收藏  举报