一、软件准备

1、下载 ida pro

下载地址: https://bbs.pediy.com/thread-271326.htm

2、下载并安装 010 editor

下载地址: https://www.sweetscape.com/010editor/

二、破解步骤

1、使用 ida 打开 010 editor

使用默认参数打开即可

2、搜索字符串

alt|L|800
打开字符串搜索子窗口,然后使用 ctrl + F,搜索字符串
alt|L|1000
双击进入函数位置,为了方便记忆,我把变量名称改成了 InvalidLicense
alt|L|1000

3、定位需要修改的函数

跳转到代码段之后,我们使用 F5 打开 Pseudocode 模式
alt|L|800
我们在对应字符串的下面不远处,发现了 Password accepted 字样的字符串,重点注意上面的判断条件(你的 ida 中可能不叫 v17)

if (v17 == 219)

只要我们能把 v17 的值修改为 219,那么就可以正确注册了。而 v17 来自函数 sub_140009D7C 的返回值,我们点击进入函数 sub_140009D7C,进去之后继续点击函数 sub_140308310

// attributes: thunk
__int64 __fastcall sub_140009D7C(__int64 a1, __int64 a2, __int64 a3)
{
  return sub_140308310(a1, a2, a3);
}

// 中间省略的代码

__int64 __fastcall sub_140308310(__int64 a1, __int64 a2, __int64 a3)
{
  unsigned int v3; // edi
  int v6; // eax
  int v7; // eax
  int v8; // eax
  unsigned int v9; // ecx
  int v10; // eax
  unsigned int v11; // ecx
  int v12; // eax
  unsigned int v13; // ecx

  v3 = a2;
  if ( *(_DWORD *)(a1 + 60) )
    return 275i64;
  v6 = CDockablePane::HitTest(a1, a2, a3);
  // 省略的代码

我们只需要强制把 if 条件和 return 275i64; 强制修改为 219 即可。

4、patch 代码

在菜单中,选择 Options -> General -> Disassembly 中的 Number of opcode bytes 值修改为 8
alt|L|600
修改之后,hex view 中会显示 opcode 列
alt|L|800
在菜单中,选择 jump -> jump to function,然后 ctrl + F,输入 sub_140308310,双击进入函数

.text:0000000140308323 74 10                   jz      short loc_140308335
.text:0000000140308325 B8 13 01 00 00          mov     eax, 113h

这里需要修改两个地方

  • 把 jz 跳转去掉,直接改成 nop,nop 的十六进制为 90
  • 把 0x0113 修改成 219, 219 的十六进制为 0x00DB

则,修改后的内容应该为

.text:0000000140308323 90 90
.text:0000000140308325 B8 DB 00 00 00

选择要编辑的内容,然后在菜单中选择 Edit -> Patch program -> Change byte
alt|L|800

5、保存文件

修改完成后,我们在菜单中选择 Edit -> Patch program -> Apply patches to input file,为了保险起见,我们在弹出的窗口中选择 Create backup
alt|L|600

6、验证

打开修改后的文件,验证是否正常