• 标 题:转载一篇破解教程(vrv2000) 作者:飞刀浪子 (14千字)
  • 作 者:duba.126.com
  • 时 间:2001-3-29 12:42:01
  • 链 接:http://bbs.pediy.com

嗨,大家好,我是飞刀浪子。“什么飞刀浪子,听都没听说过。”我~!@#$#$#$#$$%&^&**&^$倒,(一个小时后)从桌下爬起。
好,听好了,我乃中原人士,今年该21了,进的时男卫生间。好,废话少说,切入正题!今天我讲的是VRV2000 9.E(2000.11.22)版破解全攻略.
作案工具:TR  ,HIEW  先用TR 载VRV2000    BPINT 13 AH=2      .      .
2779:30F7  80E1C0          AND      CL,C0
2779:30FA  024E0E          ADD      CL,[BP+000E]                         
2779:30FD  8A6E0C          MOV      CH,[BP+000C]                         
2779:3100  8A760A          MOV      DH,[BP+000A]                         
2779:3103  8A5608          MOV      DL,[BP+0008]                         
2779:3106  CD13            INT      13            ;在此处拦下 CX=5011,DX=0100                       
2779:3108  807E0608        CMP      [BYTE BP+0006],08                   
2779:310C  750A            JNE      3118                                 
2779:310E  C45E12          LES      BX,[BP+0012]                         
2779:3111  26890F          MOV      [ES:BX],CX                           
2779:3114  26895702        MOV      [ES:BX+0002],DX                     
2779:3118  8AC4            MOV      AL,AH    ;!注                           
2779:311A  B400            MOV      AH,00    ;!意                         
2779:311C  5D              POP      BP                                   
2779:311D  CB              RETF      ;返回
3616:1612  6A02            PUSH      02                                   
3616:1614  9AE4307927      CALL FAR  2779:30E4  ;读盘过程,读1面50H道11H扇区                         
3616:1619  83C410          ADD      SP,10        ;返回到此
3616:161C  0BC0            OR        AX,AX        ;必须为0,因它为额外的正常扇区                       
3616:161E  7520            JNE      1640                                 
3616:1620  1E              PUSH      DS                                   
3616:1621  6818B8          PUSH      B818                                 
3616:1624  6A01            PUSH      01                                   
3616:1626  6A12            PUSH      12                                   
3616:1628  6A50            PUSH      50                                   
3616:162A  6A01            PUSH      01                                   
3616:162C  6A00            PUSH      00                                   
3616:162E  6A02            PUSH      02                                   
3616:1630  9AE4307927      CALL FAR  2779:30E4    ;读盘过程,读1面50H道12H扇区                     
3616:1635  83C410          ADD      SP,10                               
3616:1638  0BC0            OR        AX,AX      ;此扇区为坏区或没有,所以应该不为0 
3616:163A  7404            JE        1640                                 
3616:163C  B001            MOV      AL,01      ;此处将AL=1  就OK了                   
3616:163E  EB08            JMP      1648                                 
3616:1640  46              INC      SI                                   
3616:1641  83FE02          CMP      SI,02                               
3616:1644  7CBE            JL        1604                                 
3616:1646  B000            MOV      AL,00                               
3616:1648  5E              POP      SI                                   
3616:1649  CB              RETF                                                .
    .避开此两处判断点,就OK 了。不过,VRV会说内存不够,这一次它说的是真的。好,我们搜索代码,咦,找不到,看来被压过了。
UNP 试试看,还是不行。那就手脱吧。  TR载入VRV2000  EXE1  RELOAD  BPREG  G  G
                      ;此时出现 MOV DX,XXXX
                      ;        MOV [CS:0291],DX
                      ;        MOV AH,30                      ;        INT 21
  WEXE1  EXE2  RELOAD  G                  ;直到刚才哪个地方  WEXE2  Q  MAKEXE
好了,当前目录下就有了一个MEM.EXE的程序,找到刚才的判断点改掉,就OK了。不行,不行,怎么用了第一次就不能用第二次,原来它还回写了自己。
再次TR 设BPINT 21 AH=3D  通过堆栈 STACK 看它是什么地方 CALL 此处,有好几个耶,一个一个 U 看看,
分析一下前后代码,可疑就把这个 CALL 干掉试试看(最好是用JMP 飞过去,但注意平衡堆栈)。
(通过STACK 看堆栈有时是很有用的,早期的VRV 追到后面的INT 13 会死机,我就是通过堆栈来解的)
另外,若用PKLITE将解压过后的程序压一偏也可以不用改。下面我们讲一下用DEBUG脱壳,虽然有些烦,但可以增加功力啦。DEBUG VRV2000.EXE-U
3D96:001C  FC              CLD                                           
3D96:001D  2E806C1310      SUB      [BYTE CS:SI+0013],10                 
3D96:0022  73E8            JAE      000C                                 
3D96:0024  6619ED          SBB      EBP,EBP                             
3D96:0027  AF              SCASW                                         
3D96:0028  AD              LODSW                                         
3D96:0029  0E              PUSH      CS                                   
3D96:002A  0E              PUSH      CS                                   
3D96:002B  0E              PUSH      CS                                   
3D96:002C  06              PUSH      ES                                   
3D96:002D  1F              POP      DS                                   
3D96:002E  07              POP      ES                                   
3D96:002F  16              PUSH      SS                                   
3D96:0030  680500          PUSH      0005                                 
3D96:0033  6631DB          XOR      EBX,EBX                             
3D96:0036  CB              RETF-G36-T-P912E:0004  A4              MOVSB
912E:0005  E86D00          CALL      0075      ;解码过程                                   
912E:0008  72FA            JB        0004      ;循环                         
912E:000A  6631C0          XOR      EAX,EAX                             
912E:000D  40              INC      AX                                   
912E:000E  E86400          CALL      0075                                 
912E:0011  6611C0          ADC      EAX,EAX                             
912E:0014  E85E00          CALL      0075                                 
912E:0017  73F5            JAE      000E                                 
912E:0019  6683E803        SUB      EAX,03                               
912E:001D  720D            JB        002C                                 
912E:001F  66C1E008        SHL      EAX,08                               
912E:0023  AC              LODSB                                         
912E:0024  6683F0FF        XOR      EAX,-01                             
912E:0028  7469            JE        0093                                 
912E:002A  6695            XCHG      EAX,EBP                             
912E:002C  E84100          CALL      0070                                 
912E:002F  11C9            ADC      CX,CX                               
912E:0031  7508            JNE      003B                                 
912E:0033  41              INC      CX                                   
912E:0034  E83900          CALL      0070                                 
912E:0037  73FB            JAE      0034                                 
912E:0039  41              INC      CX                                   
912E:003A  41              INC      CX                                   
912E:003B  6681FD00F3FFFF  CMP      EBP,FFFFF300                         
912E:0042  81D10100        ADC      CX,0001                             
912E:0046  89FA            MOV      DX,DI                               
912E:0048  8CC0            MOV      AX,ES                               
912E:004A  C1EA04          SHR      DX,04                               
912E:004D  83E70F          AND      DI,0F                               
912E:0050  01D0            ADD      AX,DX                               
912E:0052  1E              PUSH      DS                                   
912E:0053  8EC0            MOV      ES,AX                               
912E:0055  56              PUSH      SI                                   
912E:0056  66C1E004        SHL      EAX,04                               
912E:005A  01F8            ADD      AX,DI                               
912E:005C  6601E8          ADD      EAX,EBP                             
912E:005F  89C6            MOV      SI,AX                               
912E:0061  66C1E804        SHR      EAX,04                               
912E:0065  83E60F          AND      SI,0F                               
912E:0068  8ED8            MOV      DS,AX                               
912E:006A  F3              REPZ                                           
912E:006B  A4              MOVSB                                         
912E:006C  5E              POP      SI                                   
912E:006D  1F              POP      DS                                   
912E:006E  EB95            JMP      0005      ;继续循环                         
912E:0070  E80200          CALL      0075                                 
912E:0073  11C9            ADC      CX,CX                               
912E:0075  6601DB          ADD      EBX,EBX                             
912E:0078  7518            JNE      0092                                 
912E:007A  B7B0            MOV      BH,B0                               
912E:007C  39DE            CMP      SI,BX                               
912E:007E  7609            JBE      0089                                 
912E:0080  29DE            SUB      SI,BX                               
912E:0082  8CDB            MOV      BX,DS                               
912E:0084  80C70B          ADD      BH,0B                               
912E:0087  8EDB            MOV      DS,BX                               
912E:0089  668B1C          MOV      EBX,[SI]                             
912E:008C  83EEFC          SUB      SI,-04                               
912E:008F  6611DB          ADC      EBX,EBX                             
912E:0092  C3              RET                                           
912E:0093  59              POP      CX                                   
912E:0094  8CC0            MOV      AX,ES      ;!!!!(ES-CX) SHL 4 + DI=文件长  设为X                       
912E:0096  80EC04          SUB      AH,04                               
912E:0099  8ED8            MOV      DS,AX                               
912E:009B  2BBDFE3F        SUB      DI,[DI+3FFE]                         
912E:009F  8DB50040        LEA      SI,[DI+4000]                         
912E:00A3  5D              POP      BP        ;!!!BP值指向了程序的起始段                             
912E:00A4  31DB            XOR      BX,BX                               
912E:00A6  8EC1            MOV      ES,CX                               
912E:00A8  AC              LODSB              ; !!!重定位开始                       
912E:00A9  25FF00          AND      AX,00FF                             
912E:00AC  7405            JE        00B3                                 
912E:00AE  3CEF            CMP      AL,EF                               
912E:00B0  7710            JA        00C2     
912E:00B2  A8AD            TEST      AL,AD                               
912E:00B4  01C3            ADD      BX,AX                               
912E:00B6  7305            JAE      00BD                                 
912E:00B8  80C510          ADD      CH,10                         
912E:00BB  8EC1            MOV      ES,CX        ;!!!                       
912E:00BD  26012F          ADD      [ES:BX],BP  ;!!重定位                       
912E:00C0  EBE6            JMP      00A8                                 
912E:00C2  88C4            MOV      AH,AL                               
912E:00C4  AC              LODSB                                         
912E:00C5  25FF0F          AND      AX,0FFF                             
912E:00C8  75EA            JNE      00B4                                 
912E:00CA  AD              LODSW                                         
912E:00CB  01C1            ADD      CX,AX                               
912E:00CD  73D5            JAE      00A4                               
912E:00CF  07              POP      ES                                   
912E:00D0  AD              LODSW              ;取原SP ,记下AX等一下会用到。                     
912E:00D1  012C            ADD      [SI],BP    ;定位SS,记下SI的值                     
912E:00D3  8E14            MOV      SS,[SI]                             
912E:00D5  94              XCHG      AX,SP                               
912E:00D6  06              PUSH      ES                                   
912E:00D7  1F              POP      DS                                   
912E:00D8  EA0000963D      JMP FAR  3D96:0000  ;解码完毕,进入程序-gd8-t-nvrv.dat-RBX
X  的高位  ---->X 看前面RCXX  的低位WCS:0  ;回写程序的执行代码Q;下面写重定位数据DEBUG VRV2000.EXE-G36-T
-GA8-R DI  ;将DI指向一个不影响我们工作的任意地址500-FES:500 L 1000 FF          ;为了方便找最后一个重定位
      ;将BB处的两字节NOP掉,将BD处的三字节改为CALL 200  然后在200处写我们的指令。-A200 MOV AX,BX STOSW
MOV AX,CX SUB AX,BP        ;BP值指向了程序的起始段 STOSW RET-G D8
      ;搜索ES:500后什么地方出现连续的FF,找到的第一个FF的地址-500    假设结果为 Y
      ;将 Y/4 的结果记下,等一下要用。-NRELOCAL.DAT-RCXY      ;若Y不是16的整倍数,将它补为16的整倍数。-RBX0
-WES:500      ;写RELOCAL.DAT-N HEADER.DAT-FDS:100 L 20 0-RCX -20
-WDS:100      ;写HEADER.DAT-QCOPY /B HEADER.DAT+RELOCAL.DAT+VRV.DAT  VRV.EXE
此时,我们已经得到了一个程序,但他还不能执行,下面修补档头,用HIEW打开
4D 5A XX XX XX XX XX XX XX XX 00 00 FF FF XX XX XX XX
      ----  ----  ----  ----              ----  ----
        |_____|_____|_____|_________________|_____|___________VRV.EXE 的长度除以200H的余数
              |_____|_____|_________________|_____|___________商,若余数不为0,还应再加1
                    |_____|_________________|_____|___________刚才Y/4的结果
                          |_________________|_____|___________(HEADER.DAT+RELOCAL.DAT)长度/10H
                                            |_____|___________刚才记的SS值
                                                  |___________刚才记的SP值
00 00 XX XX 00 00 20 00 00 00 00 00 00 00      -----
        |________HEADER.DAT+RELOCAL.DAT  的长度注:上面都是十六进制,且是字方式,所以请注意存储的反向问题。
好了,大功告成,亲个嘴儿。注:若我们将任意盘格式化一个正常的1面50H道11H扇区,就可以做它的加密盘。
    若有原版加密盘,可将其所读资料写入我们自做的加密盘中,这样更好。    不过,我解的加密盘都没有原盘,所以只有这样啦。
                                                            飞刀浪子  留