SWPU RE类第二题WP

这道题目满分刚好是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中注册,得到结果如下:
这里写图片描述
全文完。

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值