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,很多大佬博客都是这样写的

 

posted @ 2020-03-12 12:29  PYozo_free  阅读(1022)  评论(0编辑  收藏  举报