= 69、Gif Construction (16-bit) 1.0P(patch4) 破解 ============================================ Gif Construction (16-bit) 1.0P(patch4) 破解 该程序是用来制作GIF89A图片的, 文件名 GIFCON.EXE 1. Username: 填入 Cheng Jong 注册码: AAAAA (先乱填, 为什么不添数字? 自己跟跟看就知道了:-) 2. Ctrl-D 切入 S-ICE... 3. bpx hmemcpy 4. 按F5切回GIFCON...然后按下OK键... 5. S-ICE拦下后... BD * 把拦中断的功能关掉 按几次F12...跳回GIFCON的领空... S DS:0 L FFFFFFFE 'Cheng Jong' S DS:0 L FFFFFFFE 'AAAAA' 找到在XXXX地址处, 用BPM锁定该内存单元... bpm ds:xxxx 6. 按G 回车, F10数次可以看到如下代码: xxxx:805A CALL XXXX:356E : : 该CALL将用户名大写转小写. 7. S DS:0 L FFFFFFFE 'cheng jong' 找到在XXXX地址. bpm ds:xxxx 锁定小写姓名... 8. G 数次后... 可以看到如下代码: XXXX:69D9 MOV AL,ES:[BX] ; <- 取出第一个字母 MOV AH,00 LES BX,[BP+06] ADD BX,[BP-06] MOV DL,ES:[BX] MOV DH,00 IMUL DX ADD [BP-0A],AX ; <- 算完后保存. JMP 69F0 XXXX:69F0 AND WORD PTR [BP-0A],7FFF : : 这里代码对用户名的的一个字母进行注册码运算... 9. 再继续往下...可以看到如下代码: XXXX:69BF MOV AL,ES:[EBX] ; <- 取出其余字母 MOV AH,00 NOT AX XOR AX,00C2 MOV CL,[BP-04] SHL AX,CL ADD [BP-0A],AX ; <- 算完后保存. JMP 69F0 : : 这里代码对用户名的的其余字母进行注册码运算... 10. 再继续往下...可以看到如下代码: LEA AX,[BP+FEF6] PUSH AX PUSH CS XXXX:8094 CALL 6946 ; <- 进入8,9节运算部分 ^^^^^^^^^^^^^^^^ ; <- AX=运算结果!! ADD SP,04 MOV BX,001C ; <- 除以"1C"即28 XOR DX,DX ; <- 余数在"DX"中 DIV BX MOV [BP-04],DX ; <- 保存余数. : : 由这段可以看出程序将用户名进行一系列运算后, 得2个字节的结 果. 再除以28得余数. 余数乘以8, 查内含的密码表得最终数值. 而该值应正好等于用户系列号经同样一系列计算所得2字节结果. 从这些可以看出程序注册吗校验原理, 不能由用户名简单的得到 用户系列号. 11. 最后... 当看到如下代码时: XXXX:809A MOV BX,[BP-04] ; <- 余数取出 SHL BX,03 ; <- 乘以8 CMP AX,[BX+0EAB] ; <- 查0EAB处密码表 ^^^^^^^^^^^^^^^^^^^^^ ; <- 比较=0成功 JNZ 80B2 ; <- 注册码不成功跳80B2... MOV AX,0001 ; <- 哈, 注册成功AX=1 LEA SP,[BP-02] : : CODE ON把JNZ改成JMP了就可以, 这样注册码随便输都OK啦! 再次整理一遍: 改 GIFCON.EXE FIND: 03 3B 87 AB 0E 75 0C B8 01 00 EDIT: -- -- -- -- -- 90 90 -- -- -- -- Rick Cheng ICQ UIN: 2689013 SysOp of Longven BBS, CFidoNet: 6:666/3, Tel:86-555-249-6223