SWPU RE类第二题WP

来源:互联网 发布:mysql数据库的安装 编辑:程序博客网 时间:2024/06/08 18:15

这道题目满分刚好是100分。。。
程序有ASLR,用FFI去掉方便分析。
这里写图片描述
去掉以后,OD载入,F9运行,给GetWindowTextA下端点,然后输入一个注册码就可以断下。
这里写图片描述
F8单步回到004026A6处后,CM判断注册码的字节数,如果不是16个字节就返回。
这里写图片描述
删掉之前设置的所有断点,在004026BE处下一个断点。这样输入16个字节就可以断下了。
然后CM重新计算了注册码的长度,进入算法部分。
这里写图片描述
这部分算法仅仅将注册码进行了排序,汇编代码如下。
这里写图片描述
如果用C++语言来表述的话就是如下代码(Data表示用户输入的Key)
这里写图片描述
最后和1H@Y1S0718760Dm3比较,不相等就失败。
这里写图片描述
将这段代码的逆运算写出来即可解出注册码。
代码如下:

#include <stdio.h>#include <stdlib.h>int main(void){    char Data[] = "1H@Y1S0718760Dm3";    for(int i = 6;i >= 0;i--)    {        char tmp;        for(int j = 2;j >= 1;j--)        {            char tmp;            tmp = Data[(j + 1) * 4];            Data[(j + 1) * 4] = Data[j * 4];            Data[j * 4] = tmp;        }        tmp = Data[0];        Data[0] = Data[4];        Data[4] = tmp;        tmp = Data[i * 2];        Data[i * 2] = Data[i * 2 + 1];        Data[i * 2 + 1] = tmp;    }    printf("%s\n",Data);    system("pause");    return 0;               }

运行以后得到结果如下:
这里写图片描述
得到注册码:H1Y@D1708067S1m3
复制到CM中注册,得到结果如下:
这里写图片描述
全文完。

原创粉丝点击