= 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 / 饪麟苤懈 / 豆棚小居   =