• 标 题:不完全的破解
  • 作 者:chn-boy
  • 时 间:2000-11-23 13:03:07
  • 链 接:http://bbs.pediy.com

软件名称:聪明搬运工2.1珍藏版
软件类型:VB程序
  动态库:VBRUN300.DLL
使用工具:SoftICE4.05

    目的:想得出注册码


    运行BOXMAN程序后,出现一个注册窗口,输入姓名和Virtual注册码,我输入的是:

        Name:chn-boy
        Code:123456789087654321

    Ctrl+D启动SoftICE4.05,下断点:bpx hmemcpy,F5回到Windows,点注册,程序
被拦断,下命令:bd * ,让Hmemcpy断点不再激活。F12数下,当到VBRUN300的领空时
候,下命令搜索VBRUN300的核心字符串比较代码点:

    S 30:0 L FFFFFFFF 8B,CA,F3,A6,74,01,9F,92,8D,5E,08

SoftICE能得到一个Pattern地址,我的是:Pattern found at 0030:816930CF (816930CF)
得到的地址即为VBRUN300的字符串比较核心代码处,然后 bpx 30:816930CF do "d ds:di"
F5以后,你就可以看到下段程序:

    2A4F:8CA4  CALL      9103
    2A4F:8CA7  MOV      DI,BX
    2A4F:8CA9  POP      DX
    2A4F:8CAA  CMP      DX,CX
    2A4F:8CAC  LAHF
    2A4F:8CAD  JA        8CB1
    2A4F:8CAF  MOV      CX,DX  <-- 其实上述断点是下在这个地方,程序中断于此

    2A4F:8CB1  REPZ CMPSB      <-- 这个就是字符串比较指令了,第一次到这里的
                                        时候,你可以看到你输入的Virtual Code。
    2A4F:8CB3  JZ        8CB6
    2A4F:8CB5  LAHF
    2A4F:8CB6  XCHG      AX,DX
    2A4F:8CB7  LEA      BX,[BP+08]
    2A4F:8CBA  CALL      92CB
    2A4F:8CBD  POP      BX
    2A4F:8CBE  TEST      BL,01
    2A4F:8CC1  JNZ      8CC9
    2A4F:8CC3  LEA      BX,[BP+0C]

下命令d es:di,你可以看到数据区显示的是"-",不用管他,继续按F5。要按多少下,是根据
你输入的Code长度决定(注:输入的Virtual Code长度要足够长,要不将得不到注册码,好像
要不小于16个字符吧?具体我没有测试过)。按F5到一定的多下的时候,你就可以看到在你的
数据区出现一串字符串。我的是4C99379193C6 24D

383F:0000027C 34 43 39 39 33 37 39 31-39 33 43 36 20 32 34 44  4C99379193C6 24D
383F:0000028C 03 00 37 32 0F 00 35 36-37 38 39 30 38 37 36 35  ..72..5678908765
383F:0000029C 34 33 32 31 0F 00 0C 00-31 32 33 34 35 36 37 38  4321....12345678
383F:000002AC 39 30 38 37 05 00 01 00-36 32 0F 00 35 36 37 38  9087....62..5678

这时,你 d es:di,就可以看到你原来输入的Virtual Code了。那么ds:si中的字符串内容
就是你的注册码了,bd *,F5,回到Windows,重新在注册码框中输入你得到的字符串,我
的就是4C99379193C6 24D,点注册,弹出一个对话框“请向作者注册”。其实说白了就是注
册仍然没有成功,不过我估计这可能还缺少一个文件,需要作者补齐吧。在往下我没有深入
的研究了,看看那位高手帮忙解决这个问题。诚盼!


后记:这其实是一个不完全的破解,我也是个新手,很多地方我都不懂,也是在一步一步学
      习,希望老一辈给予指教。