CrackMe之039(damn.exe)详细分析及破解

本帖最后由 rixo 于 2019-9-3 16:12 编辑

damn注册机分析1.初步查看,寻找破解点
1.用OD打开,发现是ASPack 1.08.03 -> Alexey Solodovnikov壳,使用ESP定律脱壳之后,分析程序



这是个汇编写的程序,相当简洁,代码也很少。Ctrl+A之后就就发现OD显示注册了一个对话框窗口。窗口回调的消息处理如下:



我们比较关注WM_COMMAND和WM_INITDIALOG其中发现WM_COMMAND的几个逻辑如下:



WM_INITDIALOG的函数逻辑如下:



发现有两个有价值的函数值得分析,一个是sub_004012F3一个是sub_00401372

记录一下之前分析中得到的几个全局变量
0x 402313 是控制显示是否破解的全局变量 正确值应该为2
0x 40230B 是校验是否破解的变量 正确值应该为0
0x40238D 密码长度全局变量
0x402389 用户名长度全局变量
0x402353 用户名全局变量
0x402331 密码全局变量
sub_004012F3函数分析



这个函数分析完之后就可以写注册机代码了,下面是我的注册机代码

[C] 纯文本查看 复制代码

#include "pch.h"
#include <iostream>
#include <windows.h>

#define RoR(a,n) (a << (0x20 - n) | a >> n)

int main()
{
        char Name[20] = "rixo39";
        unsigned int serial = 0x44414D4E;

        unsigned int sum = 0;

        for (int i =0;i<strlen(Name);i++)
        {
                sum += Name[i];
                serial = RoR(serial, 1);
                serial = RoR(serial, i);
                serial ^= sum;
        }

        serial |= 0x10101010;
        printf("%x",serial);

}

sub_00401372函数分析
第一段异或数据段



第二部分异或代码段



第三部分,两个异或值做运算,求值



可以看到这里这个JE的短跳转十分可疑,我们直接修改后看看出现什么结果
解密前:



解密后:



我们发现这个需要40230B的值,在程序中有2处更改的地方。




而我们需要这个值为0,所以用010寻找对应的地方,然后再把它变成00



同时,我们还需要将0x402313这个变量赋值为2,所以我们来看解密出来的代码,我们发现如果想要使0x402313值为2,需要EDX值为0,所以直接修改前面的那个部分代码


回到之前JE的地方,修改代码为 AND EDX,0X0 刚好实现了JE的跳转。



修改代码后我们实现了UNLOCKED的破解,发现它之前的异或值并没有什么卵用。。。



同样,我们也找到它在文件中的对应位置修改一下OPCODE,就可以一直UNLOCKED啦!

THE END
喜欢就支持以下吧
点赞0
分享
评论 抢沙发
  • 管埋员

    昵称

  • 取消
    昵称