JZL 发表于 2014-11-28 00:00:32

一款明码比较的软件修改方法

一个小软件引来各位大神的参与,让破解不再只是一个“恭喜你,注册成功!”,多了几分交流,这才是意义所在。
破解软件不是目的,只是脚下的台阶,我们要的是技术。
这个基本情况:
主程序无壳,明码比对,有字符串可查,配置信息加密保存。
主要爆破流程:
搜索字符串,









想法是:用真码去覆盖假码,进而注册成功
0040396B|.FF15 8C464100 CALL    DWORD PTR DS:[<&MSVCRT._mbscmp>]
00403971|.83C4 14       ADD   ESP, 14
修改如下:
0040396B   . /E9 20F70000            JMP   00413090                         ;00413090
00403970   |90                     NOP
00403971   > |83C4 14                  ADD   ESP, 14

Small-Q的方法
0x00413090:
CMP   DWORD PTR SS:, 0
JNZ   SHORT 004130A1这个跳转要根据实际情况写地址:指向下面的PUSH    EDX
CALL    DWORD PTR DS:
JMP   00403971
PUSH    EDX
MOV   EDX, DWORD PTR SS:
MOV   DWORD PTR SS:, EDX
MOV   EDX, DWORD PTR SS:
MOV   DWORD PTR SS:, EDX
MOV   EDX, DWORD PTR SS:
MOV   DWORD PTR SS:, EDX
MOV   EDX, DWORD PTR SS:
MOV   DWORD PTR SS:, EDX      
MOV   EDX, DWORD PTR SS:   
MOV   DWORD PTR SS:, EDX
MOV   BYTE PTR SS:, 0         
POP   EDX                              
CALL    DWORD PTR DS:
JMP   00403971
这种方法首先判断S2是否为空,也就是说当真假码共同出现时才用真码覆盖假码,以免影响程序正常运行。
是以edx 为中转,把真码通过4步覆盖假码。
sgw888的方法:

CMP   BYTE PTR DS:, 0                           
JE      004130A9                                                                           
PUSHAD                                                   
PUSHFD                                                   
MOV   ESI, EAX                                          
MOV   EDI, ECX                                          
MOV   ECX, 15                                          
REP   MOVS BYTE PTR ES:, BYTE PTR DS:         
POPFD                                                   
POPAD                                                   
CALL    DWORD PTR DS:                           
JMP   00403971                                       
sgw888的代码精简,但是像我等小白就不太容易理解了。首先给ecx 0x15h 即21 这是循环次数 rep 是循环命令。
但是不知道为何最后交换完成的数据会到ecx,这里还请大牛指点。

还有vipcrack的patch固定机器码和注册码。明天晚上再补上来。

冷月孤心 发表于 2014-11-28 00:07:27

沙发,占位顶起.

sndncel 发表于 2014-11-28 00:21:27

这个要支持一下呀,学习了呀。。。。哈哈。。。。。

GeekCat 发表于 2014-11-28 02:08:26

很不错,
支持
学习了!!!

cfc1680 发表于 2014-11-28 08:07:08

顶起来,膜拜

wanap571 发表于 2014-11-28 08:18:08


顶起来学习

sgw888 发表于 2014-11-28 08:43:06

本帖最后由 sgw888 于 2014-11-28 08:44 编辑

rep movsb 指令解释:首先 rep是循环前缀,不用多解释。 movsb 是字节传送指令,循环次数是由 ecx 这个寄存器来控制的,也就是传送多少次。

指令执行的时候是把 DS: 指向的内存复制( 按ECX指定的次数)个字节 到 ES: 指向的内存。
简单来讲就是内存复制,movsb是一次复制一字节,类似的指令还有 movsw,movsd,次数有ECX值来确定。
前期的准备工作就是把 DS:ESI 跟ES:EDI 分别指向源内存地址跟目标内存地址。然后安全起见,再加一个 cld 指令,用于控制复制的方向。
DF标志=0时,是按加的方向,DF=1时,按减的方向。 DF=0,每复制一次,ESI,EDI加1(或+2,+4),DF=1,每复制一次,ESI,EDI减1(或-2,-4)。

开心啦 发表于 2014-11-28 08:48:30

学习一下了

JZL 发表于 2014-11-28 09:36:32

sgw888 发表于 2014-11-28 08:43
rep movsb 指令解释:首先 rep是循环前缀,不用多解释。 movsb 是字节传送指令,循环次数是由 ecx 这个寄 ...

我应该是明白了,晚上再验证下。

JZL 发表于 2014-11-28 09:36:32

sgw888 发表于 2014-11-28 08:43
rep movsb 指令解释:首先 rep是循环前缀,不用多解释。 movsb 是字节传送指令,循环次数是由 ecx 这个寄 ...

我应该是明白了,晚上再验证下。
页: [1] 2 3
查看完整版本: 一款明码比较的软件修改方法