SWPU RE类第二题WP
本帖最后由 zbnysjwsnd8 于 2017-11-2 22:25 编辑这道题目满分刚好是100分。。。
程序有ASLR,用FFI去掉方便分析。
![这里写图片描述](http://img.blog.csdn.net/20171102220145936?watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvcXFfMTk0NTk4NTM=/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/SouthEast)
去掉以后,OD载入,F9运行,给GetWindowTextA下端点,然后输入一个注册码就可以断下。
![这里写图片描述](http://img.blog.csdn.net/20171102220326386?watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvcXFfMTk0NTk4NTM=/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/SouthEast)
F8单步回到004026A6处后,CM判断注册码的字节数,如果不是16个字节就返回。
![这里写图片描述](http://img.blog.csdn.net/20171102220502941?watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvcXFfMTk0NTk4NTM=/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/SouthEast)
删掉之前设置的所有断点,在004026BE处下一个断点。这样输入16个字节就可以断下了。
然后CM重新计算了注册码的长度,进入算法部分。
![这里写图片描述](http://img.blog.csdn.net/20171102220851820?watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvcXFfMTk0NTk4NTM=/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/SouthEast)
这部分算法仅仅将注册码进行了排序,汇编代码如下。
![这里写图片描述](http://img.blog.csdn.net/20171102222405690?watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvcXFfMTk0NTk4NTM=/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/SouthEast)
如果用C++语言来表述的话就是如下代码(Data表示用户输入的Key)
![这里写图片描述](http://img.blog.csdn.net/20171102220938898?watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvcXFfMTk0NTk4NTM=/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/SouthEast)
最后和1H@Y1S0718760Dm3比较,不相等就失败。
![这里写图片描述](http://img.blog.csdn.net/20171102221016278?watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvcXFfMTk0NTk4NTM=/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/SouthEast)
将这段代码的逆运算写出来即可解出注册码。
代码如下:
```
#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;
Data = tmp;
}
tmp = Data;
Data = Data;
Data = tmp;
tmp = Data;
Data = Data;
Data = tmp;
}
printf("%s\n",Data);
system("pause");
return 0;
}
```
运行以后得到结果如下:
![这里写图片描述](http://img.blog.csdn.net/20171102221118259?watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvcXFfMTk0NTk4NTM=/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/SouthEast)
得到注册码:H1Y@D1708067S1m3
复制到CM中注册,得到结果如下:
![这里写图片描述](http://img.blog.csdn.net/20171102221938199?watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvcXFfMTk0NTk4NTM=/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/SouthEast)
全文完。
用力顶!! {:301_1009:}比赛还没结束呢…… 比赛还没结束,楼主不要着急啊。{:301_1008:} 大佬,我们比赛还没结束呢,能先别急着发出来好吗? 这是哪办的比赛啊,网址是? 大佬比赛还没完,发一个300上上分呀 嗯?遇见一只大佬。。。 哈哈 厉害 6666{:1_919:}
页:
[1]