【OD&x64dbg破解01】简单爆破序列号验证

本文内容是一个简单的TraceMe,来自看雪的一个程序。

输入用户名和序列号,点击Check,来判断是否登录账号

输入假码,点击Check,会提示序列号错误

话不多说,载入OD,先使用最简单的字符串查询方法

可以看到,有很多的假提示。那么这个程序可能就不能使用字符串方法来定位破解的程序位置了

使用API断点好了。先来分析一下流程:

输入用户名序列号->程序获取内容->判断内容

从获取内容的序列号来断点,选择插件->API断点设置工具

获取文本框内容的函数是GetDlgItemText

GetDlgItemTextA为ASCII版本的函数,GetDlgItemTextW为Unicode版本的函数

下好断点,点击运行,输入用户名和序列号,点击Check

就会来到系统领空,这个是系统的API函数位置,执行到返回,可以使用Ctrl+F9执行到返回,在按一下F8,就回到了程序领空

可以看到两个call,这个估计是获取文本框内容的,分别获取用户名和序列号。

为了进一步验证,使用F8走,可以看到在不远处,将文本框内容,applek入栈了

执行到004011E4地址,可以看到序列号和用户名都入栈了,并且分别寄存在EAX和EDX

接下来就会进行比较了,可以看到call一个函数,这个函数一般来说就是验证函数了。并且在下面还有一个test函数,就是验证是否正确的语句。并且紧跟着一个je

验证函数如下

00401340  /$  55            push ebp
00401341  |.  8B6C24 0C     mov ebp,dword ptr ss:[esp+0xC]           ;  TraceMe.004011EA
00401345  |.  56            push esi
00401346  |.  57            push edi
00401347  |.  8B7C24 18     mov edi,dword ptr ss:[esp+0x18]
0040134B  |.  B9 03000000   mov ecx,0x3
00401350  |.  33F6          xor esi,esi
00401352  |.  33C0          xor eax,eax
00401354  |.  3BF9          cmp edi,ecx
00401356  |.  7E 21         jle short TraceMe.00401379
00401358  |.  53            push ebx
00401359  |>  83F8 07       /cmp eax,0x7
0040135C  |.  7E 02         |jle short TraceMe.00401360
0040135E  |.  33C0          |xor eax,eax
00401360  |>  33D2          |xor edx,edx
00401362  |.  33DB          |xor ebx,ebx
00401364  |.  8A1429        |mov dl,byte ptr ds:[ecx+ebp]
00401367  |.  8A98 30504000 |mov bl,byte ptr ds:[eax+0x405030]
0040136D  |.  0FAFD3        |imul edx,ebx
00401370  |.  03F2          |add esi,edx
00401372  |.  41            |inc ecx
00401373  |.  40            |inc eax
00401374  |.  3BCF          |cmp ecx,edi
00401376  |.^ 7C E1         \jl short TraceMe.00401359
00401378  |.  5B            pop ebx                                  ;  user32.GetDlgItemTextA
00401379  |>  56            push esi                                 ; /<%ld> = 0x0
0040137A  |.  68 78504000   push TraceMe.00405078                    ; |%ld
0040137F  |.  55            push ebp                                 ; |s = 0012F968
00401380  |.  FF15 9C404000 call dword ptr ds:[<&USER32.wsprintfA>]  ; \wsprintfA
00401386  |.  8B4424 1C     mov eax,dword ptr ss:[esp+0x1C]
0040138A  |.  83C4 0C       add esp,0xC
0040138D  |.  55            push ebp                                 ; /String2 = "applek"
0040138E  |.  50            push eax                                 ; |String1 = NULL
0040138F  |.  FF15 04404000 call dword ptr ds:[<&KERNEL32.lstrcmpA>] ; \lstrcmpA
00401395  |.  F7D8          neg eax
00401397  |.  1BC0          sbb eax,eax
00401399  |.  5F            pop edi                                  ;  user32.GetDlgItemTextA
0040139A  |.  5E            pop esi                                  ;  user32.GetDlgItemTextA
0040139B  |.  40            inc eax
0040139C  |.  5D            pop ebp                                  ;  user32.GetDlgItemTextA
0040139D  \.  C3            retn

执行到 004011F5  je short TraceMe.0040122E

如果不修改的话,会直接提示失败了。程序为了迷惑我们,可以看到几个成功的字样。。。

那么先让je不跳,直接使用nop填充,结果提示成功了

使用Xdbg64破解

按照上面的方法,只需要设置API断点即可,原版的X64dbg没有插件,这儿直接使用命令设置断点

这个命令OD也能使用bpx GetDlgItemTextA

输入

回车,即可添加断点,可以看到断点已经设置

接下来的方法和OD是一样的了,在跳转的函数,选择右键->二进制->用NOP填充

一样成功

课件下载

https://storage.tirr.com.cn/s/1d9tjy4b

上一篇 OD修改软件文本字符串内容
下一篇 x64dbg保存修改后的文件
applek

applek管理员

个人说明在个人中心里面设置

本月创作热力图

2026年3月
最新评论
hfloke
hfloke
3月1日
新版本安装更新后,页面有问题哦
丙氨酸
丙氨酸
2月27日
测试
评论于关于本站
RiseForever
RiseForever
2月23日
听说新主题发布了,来测试下评论区。
李贰捌
李贰捌
12月25日
AI摘要打开了,对接的阿里云,测试成功,但是前台为什么不显示?
javac
javac
12月8日
redis和memcached的完整支持有排期嘛?