首页
社区
课程
招聘
KV300+的解密
发表于: 2004-9-26 09:47 6987

KV300+的解密

2004-9-26 09:47
6987
一、破解KV300+系统所需的软件与准备工作
  1.DOS系统下debug.exe 。
  2.UNP.EXE 解执行程序压缩的程序,用于去压缩外壳。
  3.EDITHEX.EXE软件,专门用于模糊修改EXE程序。
  4.到www.jiangmin.com.cn下载一个 KV300+ 的最新版本。此方法具有通用性。
二、去掉反跟踪外壳
  KV300+采用了KeyMaker 3.0 防跟踪外壳,密匙盘在自编的程序中识别,由于采用FDC编程技术,因此可以防止目前绝大多数的密钥盘仿真工具,而且由于其采用外道格式,正版盘在有的机器上不能运行。只有去掉其外壳,才能作进一步的分析。
  在硬盘临时目录中展开下载的KV300+。
  REN KV300.EXE K [将执行文件改名]
  DEBUG K
  [修改SS寄存器的值为当前值加上(010E 010F)处两字节组成的字值,再加上20,这一步很重要。一开始就要做,否则会出错。]
  [记录下如下的内容,后面要用(以下均为十六进制)]
  [0100 开始的四个字节 4D 5A XX XX]
  [BX CX 寄存器的值]
  [下面是实质性的步骤,编程去壳]
  -A 90 [从90处开始编程的命令]
  1285:0090 MOV   CX,[010E]
  ^^^^此1285值将随机器环境而变。
  1285:0094 MOV   AX,CS
  1285:0096 ADD   AX,0012
  1285:0099 MOV   DS,AX
  1285:009B MOV   ES,AX
  1285:009D XOR   BX,BX
  1285:009F XOR   DX,DX
  1285:00A1 XOR   SI,SI
  1285:00A3 XOR   DI,DI
  1285:00A5 PUSH  CX
  1285:00A6 MOV   CX,0008
  1285:00A9 LODSW
  1285:00AA XOR   AX,BX
  1285:00AC ADD   AX,DX
  1285:00AE ADD   BX,+25
  1285:00B1 SUB   DX,+5B
  1285:00B4 STOSW
  1285:00B5 LOOP  00A9
  1285:00B7 MOV   AX,DS
  1285:00B9 INC   AX
  1285:00BA MOV   ES,AX
  1285:00BC MOV   DS,AX
  1285:00BE POP   CX
  1285:00BF LOOP  00A1
  1285:00C1 MOV   AX,CS
  1285:00C3 MOV   DS,AX
  1285:00C5 MOV   ES,AX
  1285:00C7 MOV   AX,[010E]
  1285:00CA ADD   AX,0002
  1285:00CD MOV   CX,0010
  1285:00D0 MUL   CX
  1285:00D2 MOV   BX,DX
  1285:00D4 MOV   DI,AX
  1285:00D6 MOV   CX,0200
  1285:00D9 DIV   CX
  1285:00DB CMP   DX,+00
  1285:00DE JZ   00E1
  1285:00E0 INC   AX
  1285:00E1 MOV   [0102],DX
  1285:00E5 MOV   [0104],AX
  1285:00E8 MOV   AX,000E
  1285:00EB MOV   [0114],AX
  1285:00EE MOV   CX,DI
  1285:00F0 INT   3
  1285:00F1 _
  [按回车结束编程]
  [下面执行这段程序,之后KeyMaker 3.0的防跟踪壳将被解除。]
  -G=90
  [下面还原EXE文件头,部分内容程序中已处理,注意字与字节的关系,如1234字,填充成34 12字节。]
  将010f处的字节值加上30,如果以后用UNP展压不成功,可加大此值再试。
  [下面找执行程序入口点]
  用S命令搜索 06 0E 1F 用法如下
  -S1285:0 FFFF 06 0E 1F
  **^^^^1285与上面编程时的段值一致,上面变化时,这里相应修改。
如无结果,可依次将1285换成2285、3285等,直到找到为止。将搜到的结果的偏移值右移四位,如094E变成0094,再把其段值加上,其结果减去DS值,再减去12,将结果填入0116处。如找到的结果为 2285:FBBE 则计算为2285+FBB-1285-12=1FA9,将A9填入 0116 单元,1F填入 0117 单元。
  [大功告成,保存]
  -W
  -Q [退出DEBUG]
  至此KeyMaker 3.0的防跟踪外壳已去掉! 当然,防拷贝功能还未去掉,现在还有压缩外壳存在,无法修改。
三、展开压缩的执行程序
  用UNP命令来展开执行程序,先将K改名为K.EXE,用DEBUG K.exe加载K.EXE,用U命令应看到如下的指令形式
  -u
  322E:106B:000E 06 PUSH ES
  322E:000F 0E PUSH CS
  322E:0010 1F POP DS
  322E:0011 8B0E0C00 MOV CX,[000C]
  ...........
  否则检查入口点计算是否有误,全部正确后再进行下一步。
  UNP K.exe K1.exe [展开后的文件为K1.EXE]
  用DEBUG K1.EXE命令来看一下展开是否成功,加载后,第一条指令应该是JMP XXXX的形式,否则调整K.exe在010E处字的值,加大一点再试,直到正确为此。
  -U
  XXXX:XXXX E9XXXX JMP XXXX
  至此,K1.exe已是去壳展压后的KV300+,可以随意修改了。下面就是修改文件来去掉其拷贝保护。
四、KV300+都有哪些措施来拷贝
  1、保护调用验证磁盘密钥的CALL XXXX,不能将其改为NOP NOP NOP否则会死机。
  2、保护EXE文件头不被修改,如修改则运行后,破解的EXE文件将变得面目全非。
  3、保护密钥验证不被跃过,否则运行时也会死机
  4、保护版权信息及版本号不被修改,否则也会死机。下面逐一解决之。
五、去掉各种保护,保证程序正常运行
  修改之前请先作好文件的备份,EDITHEX.EXE主要用于等长度修改文件数据,由于KV300+中的验证方式是变化的,如用绝对匹配将行不通,因此用此自动模糊修改程序。
去掉保护1:
  这里只能修改子程序,子程序段如下:
  MOV AX,0000
  MOV ES,AX
  MOV DI,0004
  CLD
  XOR AX,AX
  INC BYTE PTR [????]这里的????随文件的变化而变化
  STOSW
  STOSW
  ........
  这里只需将第一条指令改成RET就去掉了读密钥盘子程序。
  启动EDITHEX,然后输入以下代码:
B8 00 00 8E C0 BF 04 00 FC 33 C0 FE 06 ?? ?? AB AB
就能确定该代码的位置,当然输入成
B800008EC0BF0400FC33C0FE06????ABAB
也行,但要统一,这里输入?? ??表示告诉程序别理会这两字节,只要其它部分相同就算找到了,回车后,程序提示输入修改码,这里输入C3也就是RET指令,然后回车,程序提示输入要修改的文件名,本例中是K1.EXE,程序报告,找到的条数,这里应该是1。否则就不正确,要么是未改,要么是改错了地方。修改后,程序不再读密钥密了,但一查就死机。
去掉保护2:
  用修改后文件的头取代原来的头,用DEBUG K1 加载修改后的文件,记录下前20H即32个字节,再次启动EDITHEX,输入记下的文件头的4个字节 4D 5A XX XX ,XX XX用记录的值取代,别输入成XX XX,然后回车,输入记下的20H个字节,然后是输入K1.EXE文件名,当然,程序提示的条数还是1,因为只有一处。
去掉保护3:
这里要经过几步,再次启动EDITHEX,输入:
00 00 00 00 00 00 00 00 00 00 00 00 07 24
按回车,是0C个00,输入:
02 12 00 00 00 00 00 00 01
按回车,输入K1.EXE,当然,程序提示的条数还是1,因为还是只有一处。这步主要是修改读盘后和密盘认证的标识。
再次启动EDITHEX,输入:
B8 ?? ?? 8E C0 BB ?? ?? 26 80 3F 07 74
按回车,换成程序就是:
  MOV AX,0020----|---这两处合起来是内存的0000:0511,
  MOV ES,AX   |  两个值多变但结果不变,
  MOV BX,0311----|  因此用模糊匹配,注Q版前是0000:04F1
  ES:        
CMP BYTE PTR [BX],07 该处的值是由密盘认证段加上的,
           必须处理,否则死机
  JZ XXXX      改成 JMP XXXX
输入?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? EB按回车,照抄上面的值也可,这是告诉程序,这些别修改。输入K1.EXE,这次不是提示1了,而是提示4,以后的版本也可能有变化。
再次启动EDITHEX,输入:
B8 ?? ?? 8E C0 BB ?? ?? 26 80 3F 03 74
按回车,换成程序就是:
  MOV AX,0020----|----这两处合起来是内存的0000:0510,
  MOV ES,AX   |  两个值多变但结果不变,
  MOV BX,0310----|  因此用模糊匹配,注Q版前是0000:04F0
  ES:        
CMP BYTE PTR [BX],03 该处的值是由密盘认证段加上的,
           必须处理,否则死机
  JZ XXXX      改成 JMP XXXX
输入?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? EB按回车,照抄上面的值也可,这是告诉程序,这些别修改。输入K1.EXE,这次不是提示1了,而是提示4,以后的版本也可能有变化。
去掉保护4:
  把修改好的K1拷贝成KV300.EXE。程序可以正常运行。
六、保留KV300.EXE原有功能
KV300+系统在启动后会检查EXE文件头,如发现被修改(前面已经用新的文件头换过了),系统将根据内部保留的文件头和文件长度进行替换。下面是修改文件长度检查代码,用现在的文件长度来取代它。
  将破解后的KV300.EXE文件复制一个副本,如K3。然后用DEBUG K3命令载入,再记录下此时的BX与CX,BX是高16位,CX是低16位,检查用的代码如下:
  B80242    MOV   AX,4202
  8B1E4A02   MOV   BX,[024A]
  33C9     XOR   CX,CX
  33D2     XOR   DX,DX
  CD21     INT   21
  3D208F    CMP   AX,8F20  [文件长度低16位]
  7505     JNZ   01FD
  83FA04    CMP   DX,+04   [文件长度高16位]
  7416     JZ   0213    [如等则跳转,否则修改长度]
  BA208F    MOV   DX,8F20  [新的长度低16位]
  B90400    MOV   CX,0004  [新的长度高16位]
  B80042    MOV   AX,4200
  8B1E4A02   MOV   BX,[024A]
  CD21     INT   21
以上是核心代码,由于各版本的长度不同,可用如下代码来定位:
  3D ?? ?? 75 05 83 FA ?? 74 ?? BA ?? ?? B9 ?? ??
把?? ??处的值用新值替代。启动EDITHEX,输入以下代码:
3D ?? ?? 75 05 83 FA ?? 74 ?? BA ?? ?? B9 ?? ??按回车,再输入:
?? XX XX ?? ?? ?? ?? XX ?? ?? ?? XX XX ?? XX XX,按回车
  XX XX是CX值
           XX是BX   XX XX是
           的低8位  CX值  XX XX是BX的值
  程序提示输入要修改的文件名,本例中是KV300.EXE,一定是破解后的,程序提示找到的条数,这里应该是1。至此,KV300.EXE文件全部破解完毕,而且保留了全部功能。
七、保留KV300FIX.EXE原有功能
  KV300+系统的主文件已破解完成,但KV300FIX.EXE还未修改,一运行KV300FIX程序将报告KV300+被解密或破坏,是否需要修复。当回答Y时,它会将破解成果化为零。
KV300FIX的工作原理如下:读进KV300.EXE文件的头20H字节和内部的文件进行比较,如不同就用内部保留的20H字节取代之,再检查文件长度,如不符则重新设置之,判定代码与上面相同。
修改KV300FIX:
首先将KV300FIX展压缩,UNP KV300FIX.EXE KF.EXE
启动EDITHEX,输入第二中记录的4D 5A XX XX(原始KV300.EXE文件头的4个字节),按回车。再输入第三中记录的20H字节EXE头(展压后的KV300.EXE文件头20H字节),回车。再输入KF.EXE,回车,程序报告1。启动EDITHEX,输入如下代码(第六中的):
3D ?? ?? 75 05 83 FA ?? 74 ?? BA ?? ?? B9 ?? ?? 按回车,再输入:
?? XX XX ?? ?? ?? ?? XX ?? ?? ?? XX XX ?? XX XX按回车
  XX XX是CX值   
           XX是BX的 XX XX是
           低8位   CX值   XX XX是BX的值
  此处的BX CX值是第六中记录的BX CX,因为它是修改KV300.EXE用的,程序提示输入要修改的文件名,本例中是KF.EXE,程序提示找到的条数,这里应该是1。将KF.EXE拷贝为KV300FIX.EXE。至此,KV300FIX.EXE文件破解完毕,保留了修复功能。
  至此我们得到了一个完全解密版。
八、内存解密
  内存解密就是在程序中找一个独有的中断调用,截获后把程序在内存中修改。
知道了需要修改的地方,可以在不修改原程序的情况下,用内存修改方式来修改程序,这样就不必脱壳展压了,也不用修改KV300FIX,当然要做到这一步,必须找准切入点,待其在内存中展压以后再截获修改。源程序如下:
  
SEG_A      SEGMENT BYTE PUBLIC
        ASSUME CS:SEG_A, DS:SEG_A
        ORG   100h
JMKV300     PROC  FAR
START:     JMP   INIT
INT10VECT    DD   90909090H
JMKV300     ENDP
INT_10H_ENTRY  PROC  FAR
        PUSH  BP
        MOV   BP,SP
        PUSH  AX
        PUSH  CX
        PUSH  SI
        PUSH  DI
        PUSH  ES
        PUSH  DS
        CMP   AX,0200H
        JNZ   INTEXIT
        CMP   DX,1900H
        JNZ   INTEXIT
        CMP   DI,0
        JNZ   INTEXIT
        MOV   AX,ES
        CMP   AX,0
        JNZ   INTEXIT
        JE   OPTUN
INTEXIT:
        POP   DS
        POP   ES
        POP   DI
        POP   SI
        POP   CX
        POP   AX
        POP   BP
        JMP   CS:INT10VECT
OPTUN:     MOV   BYTE PTR ES:[0510H],3
        MOV   BYTE PTR ES:[04F0H],3
        MOV   BYTE PTR ES:[0511H],7
        MOV   BYTE PTR ES:[04F1H],7
        PUSH  DS
        POP   ES
        MOV   DI,8000H
        MOV   CX,0800H
        MOV   AX,2407H
LOOPA:     REPNZ  SCASW
        JNZ   NEXTLOOP
        CMP   WORD PTR ES:[DI],0
        JNZ   LOOPA
        JMP   CHGDISKFLAG
NEXTLOOP:    MOV   DI,8001H
        MOV   CX,0800H
        MOV   AX,2407H
LOOPB:     REPNZ  SCASW
        JNZ   CHGRDCS
        CMP   WORD PTR ES:[DI],0
        JNZ   LOOPB
CHGDISKFLAG:  MOV   BYTE PTR ES:[DI-06H],1
        MOV   WORD PTR ES:[DI-0EH],1202H
CHGRDCS:    MOV   AX,[BP+4]
        MOV   ES,AX
        MOV   DI,1000H
        MOV   CX,1000H
        MOV   AX,00B8H
LOOPAA:     REPNZ  SCASW
        JNZ   NEXTLOOPA
        CMP   BYTE PTR ES:[DI],0
        JNZ   LOOPAA
        CMP   BYTE PTR ES:[DI-3],0C3H
        JNZ   LOOPAA
        MOV   BYTE PTR ES:[DI-02H],0C3H
        JMP   NEXTEND
NEXTLOOPA:   MOV   DI,1001H
        MOV   CX,1000H
        MOV   AX,00B8H
LOOPBB:     REPNZ  SCASW
        JNZ   NEXTEND
        CMP   BYTE PTR ES:[DI],0
        JNZ   LOOPBB
        CMP   BYTE PTR ES:[DI-3],0C3H
        JNZ   LOOPBB
        MOV   BYTE PTR ES:[DI-02H],0C3H
NEXTEND:    PUSH  DS
        POP   ES
        MOV   DI,8000H
        MOV   CX,0800H
        MOV   AX,3839H
        REPNZ  SCASW
        JNZ   NEXTVER
        JMP   CHGVER
NEXTVER:    MOV   DI,8001H
        MOV   CX,0800H
        MOV   AX,3839H
        REPNZ  SCASW
        JNZ   VEREXIT
CHGVER:     ADD   DI,73H
        MOV   SI,OFFSET VER
        PUSH  CS
        POP   DS
        MOV   CX,1EH
        REPNZ  MOVSW
VEREXIT:    JMP   INTEXIT
VER       DB   "KV300 Cracked by Ju-Luguo 08-13-99" 
FLAG      DB   'JLG 1999.08.13 @'
INT_10H_ENTRY  ENDP
INIT:      MOV   AX,3510H
        INT   21H
        CMP   WORD PTR ES:FLAG,'LJ'
        JE   READY
        MOV   WORD PTR INT10VECT,BX
        MOV   WORD PTR INT10VECT+2,ES
        MOV   DX,OFFSET INT_10H_ENTRY
        MOV   AX,2510H
        INT   21H
        LEA   DX,VERMSG
        MOV   AH,9
        INT   21H
        LEA   DX,INIT
        INT   27H
READY:     LEA   DX,INSIDE
        MOV   AH,9
        INT   21H
        INT   20H
VERMSG     DB   'KV300KEY Ver 1.00 08-13-99',0DH,0AH
        DB   'Program by Ju-Luguo', 0DH,0AH
        DB   'OK!$'
INSIDE     DB   7,'KV300KEY already Run!$'
SEG_A      ENDS
        END   START

[培训]内核驱动高级班,冲击BAT一流互联网大厂工作,每周日13:00-18:00直播授课

收藏
免费 1
支持
分享
最新回复 (5)
雪    币: 255
活跃值: (85)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
2
^_^,古董级别的了。
2004-9-26 09:50
0
雪    币: 140
活跃值: (70)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
3
也还是牛啊
2004-9-26 14:02
0
雪    币: 205
活跃值: (12)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
4
n久前跟过。;)
2004-9-26 17:06
0
雪    币: 258
活跃值: (230)
能力值: ( LV12,RANK:770 )
在线值:
发帖
回帖
粉丝
5
现在kv系列的最搞版本是多少
我不长用杀毒软件・・・
2004-9-26 18:34
0
雪    币: 200
活跃值: (12)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
6
最新版本---KV2005。
2004-9-26 18:46
0
游客
登录 | 注册 方可回帖
返回
//