rixo 发表于 2019-9-3 16:08

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函数分析




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

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

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

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

      unsigned int sum = 0;

      for (int i =0;i<strlen(Name);i++)
      {
                sum += Name;
                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啦!
页: [1]
查看完整版本: CrackMe之039(damn.exe)详细分析及破解