= 61、UltraEdit 4.40B 32位版 破解 ====================================================== 程序可以从http://www.idmcomp.com得到, 文件名 UEDIT32.ZIP. 1. Username: 填入 Cheng Jong 注册码: 8765432187654321 (先乱填) 2. Ctrl-D 切入 S-ICE... 3. bpx hmemcpy 4. 按F5切回UEDIT...然后按下OK键... 5. S-ICE拦下后... BD * 把拦中断的功能关掉 按几次F12...跳回UEDIT的领空... 6. 经过一番跟踪, 没有发现注册码校验模块. 可真是奇怪了难道这招 不灵验了? 经过分析发现原来程序是先将注册码和用户名存盘成文 件后, 在第二次运行时才进行校验. 7. 因此将UEDIT32.EXE用LDR32载入进来后... S DS:0 L FFFFFFFE 'Cheng Jong' S DS:0 L FFFFFFFE '8765432187654321' 找到在XXXX地址处, 用BPM锁定该内存单元... bpm xxxx 8. 按G 回车, 数次可以看到如下代码: 137:442815 MOV [ESI],AL MOV AL,[ESI+01] INC ESI TEST AL,AL : : 通过D DS:ESI可以看出该段代码将用户名转换为小写字母后存 方在 013F:851FBC 处. 9. bpm 13f:61f8c8 G 数次后... 10. 可以看到如下代码: 137:43E3B0 MOV [ECX*4+EDI-0C],EAX MOV EAX,[ECX*4+ESI-08] MOV [ECX*4+EDI-08],EAX ; <- 用户名送入13F:61F8C8 MOV EAX,[ECX*4+ESI-04] MOV [ECX*4+EDI-04],EAX ; <- 送用户的第二个双字. : : 11. 程序再一次访问13F:61F8C8内存单元时... 137:4055C5 MOV AL,[EAX+EDX] XOR AL,[EBP+08] 137:4055CB XOR [ECX],AL ; <- 此时的ECX=61F8C8 ^^^^^^^^^^^^^^^^^^^ ; <- 对用户名进行异或运算. MOV CL,[ECX] MOVZX EAX,CL CMP ESI,08 : : 这里代码对用户名进行第一遍注册码运算... 12. 程序再一次访问13F:61F8C8内存单元时... 137:4055F7 XOR EDX,EDX MOV CL,[EDX+EBP-40] LEA EAX,[EDX+EBP-40] CMP CL,80 : : 这里代码对用户名进行第二遍注册码运算... 13. 再继续往下... 当看到如下代码时: 137:4056CE CALL 0043E7A0 POP CX TEST EAX,EAX ; <- 测试EAX, 注册码正??时 ^^^^^^^^^^^^^^^^^^ EAX为0. POP CX JZ 004056F7 ; <- 哈, 执行程序注册啦! LEA EAX,[EBP-00C0] : : 往前追溯, 可以看出前面的CALL可能大有文章. 按F8 , 进去... 137:43E7A0 MOV DX,[ESP+04] : : MOV EAX,[EDX] CMP AL,[ECX] ; <- 比较注册码的第一个字节 JNZ 0043E7E4 OR AL,AL JZ 0043E7E0 CMP AH,[ECX+01] : <- 比较注册码的第二个字节 : : 这可就是核心了, 注册码应该出来了. D 13F:61F8C8 哈哈, 这不就是注册码: >NW;*1k*#B;$cRx5 (十六位) 14.再次整理一遍: username: Cheng Jong 注册码: >NW;*1k*#B;$cRx5 (十六位) 如果感觉计算注册码不方便, 但是又希望用自己的名字注册的话 可以修改程序... FIND: 00 59 85 C0 59 74 1E 8D 85 40 EDIT: -- -- -- -- -- EB -- -- -- -- = Rick Cheng / 饪麟苤懈 / 豆棚小居 =