一款明码比较的软件修改方法
一个小软件引来各位大神的参与,让破解不再只是一个“恭喜你,注册成功!”,多了几分交流,这才是意义所在。破解软件不是目的,只是脚下的台阶,我们要的是技术。
这个基本情况:
主程序无壳,明码比对,有字符串可查,配置信息加密保存。
主要爆破流程:
搜索字符串,
想法是:用真码去覆盖假码,进而注册成功
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固定机器码和注册码。明天晚上再补上来。
沙发,占位顶起. 这个要支持一下呀,学习了呀。。。。哈哈。。。。。 很不错,
支持
学习了!!! 顶起来,膜拜
顶起来学习 本帖最后由 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)。
学习一下了 sgw888 发表于 2014-11-28 08:43
rep movsb 指令解释:首先 rep是循环前缀,不用多解释。 movsb 是字节传送指令,循环次数是由 ecx 这个寄 ...
我应该是明白了,晚上再验证下。 sgw888 发表于 2014-11-28 08:43
rep movsb 指令解释:首先 rep是循环前缀,不用多解释。 movsb 是字节传送指令,循环次数是由 ecx 这个寄 ...
我应该是明白了,晚上再验证下。