Youngter-drive
先检查是否加壳了,查看过后发现有upx壳,脱壳,win32子系统
然后打开main函数一看
然后一看这都是些什么。。去查了CreateMUtexW函数,没看懂,跳过。。
看到CreateThread,中文意思就是创建线程,所以推测这是多线程运行
点第一个里的函数看看
经过了一个函数,并且计数器在减少,然后休眠0.1s
进那个函数一看
警告,411A04位置的栈指针值有点问题,然后看了看某位大佬的博客
pop这里栈指针未对齐
所以修改为0x0
然后查看函数sub_411940
经过分析可以知道,小写字母一定会被转换为大写字母。如果不是小写字母就变为off_418000值的Source-38的值
然后新手入门,懂得太少,没有注意到线程的技巧,所以一开始没明白后面那个创建线程有什么用,不过查了别人的wp后,然后想了想,由于是从29开始减少的,所以是对奇数加密的,偶数依旧是原来的值。
然后爆破一下
string a1 = "TOiZiZtOrYaToUwPnToBsOaOapsyS"; string a2 = "QWERTYUIOPASDFGHJKLZXCVBNMqwertyuiopasdfghjklzxcvbnm"; string a3; for (int i = 0; i < 29; i++) { int j = 0; a3 += a1[i]; i++; while (a1[i] != a2[j]) j++; if (a1[i] >= 65 && a1[i] <= 97) a3 += j + 96; else a3 += j + 38; } cout << a3;
其次就是由于后面检查flag函数只检查29个字母,但实际上你加密的有30个,所以最后一个可以随便填写。
不过在BUU上面最后面的只能是E,很多大佬博客都是这样写的