由一只病毒说开去(下)!
by kobe
这次下集隔了好久才跟大家见面,因为学校机房不允许调试程序,故上次我说要手工
杀毒的话不能兑现了,不过那个所谓的“乾坤大挪移”,还是很简单的,前几年看台湾
的文章,这招经常出现,无论TPVO的杂志还是软蛀的文章都提到过的,其实实现起来很
简单了,也就是反反跟踪了(千万别以为我是结巴,就是反--反跟踪)。
大家知道VIRUS的作者和一些对软件加密意识较强的程序员会改写一些特定的中断向量
,因为一些调试软件如DEBUG等在单步执行时会调用INT 1H和INT 3H。反跟踪的一般做法
是随便用一个地址代替向量地址!这样当单步发生时用的是那个胡乱指定的地址,天知道指到哪去!!当然你在反反跟踪时也可准备一份你机子上的中断大集合(抄到纸上,
有一定可行性)最好是在内存中有一个副本不更好么?
下面给出源码,注意转载不的更改程序信息!
该程序关键在于GDT(全局描述表)的结构,和高位内存之间COPY的方法!!
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;;;;;;;;;;;move.asm;;;;;;;;;;;;;;;;;;;;;;;;;;
;The programme is written by kobe(jim zhu)
;;;;;;;;;;;(c)COPYRIGHT
;http://kobesworld.yeah.net
;email:warmwaters@21cn.com
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;;;;;;;;;;;;;;;cut here;;;;;;;;;;;;;;;;;;;;;;;
showtime SEGMENT
ASSUME cs:showtime,ds:showtime
ORG 100H
start: jmp movit
;典型COM执行档的开头
des_table label WORD ;全局描述表(GDT)之定义!下面我会给出
;GDT的格式,这可是很有意思的
;别的书上绝对没有!
first16b dw 8 dup(0)
source
dw 0ffffh
s_3byte dw 0000h
db 00h;把0:0处的向量表移到8000:0000处
db 93h
dw 0000h
target dw 0ffffh
t_3byte dw 0000h
db 08h;移到8000:0000处!!(最大只能到8000:0000了)
db 93h
dw 0000h
last16b dw 8 dup(0)
movit:
;ASSUME cs:showtime,ds:showtime
mov ax,cs
mov
es,ax
mov si,offset des_table;ES:SI=须建的GDT地址,全局
;描述符表布局起点
mov cx,200h;CX=拷贝的字数(最大8000H)
mov ah,87h;AH=87H,INT 15H,BIOS调用!
int 15h;该调用用于保护方式传递数据(1MB以上的拷贝)
;AH=0成功,自己可用DEBUG调试验证之!
mov ah,4ch
int
21h;结束
showtime ends
end start;程序结束
;;;;;;;;;;;;;cut here;;;;;;;;;;;;;;;;;;;;;;;;;;;
===================================================================
GDT之格式!
偏移 长度
说明
00H
16byte
零
10H 1word
源段字节长(2*CX-1或更大)
12H
3byte
24位线性源地址,低字节在前
15H
1byte
源段访问权(93H)
16H
1word 零
18H 1word
目的字节长(2*CX-1或更大)
1AH
3byte
24位线性目的地址,低字节在前
1DH
1byte 目的段访问权(93H)
1EH 1word+16byte
零
======================================================================
以上程序有TASM和TLINK编译,连接!读者可在执行该程序后用DEBUG
看看0:0的内容和8000:0000的是不是一样!!!!!
我把我列写的结果给大家看看(用DOS管道操作符>>来得到结果!
DEBUG >>1.TXT):
1。执行MOVE.EXE前:
-d 0:0
0000:0000 9E 0F C9 00 65 04 70 00-16 00 C8 07 65 04 70
00 ....e.p.....e.p.
0000:0010 65 04 70 00 54 FF 00 F0-5F 9B 00
F0 53 11 00 F0 e.p.T..._...S...
0000:0020 00 00 00 C8 28 00 C8
07-3A 00 C8 07 52 00 C8 07 ....(...:...R...
0000:0030 6A 00 C8
07 82 00 C8 07-9A 00 C8 07 65 04 70 00 j...........e.p.
0000:0040
07 00 70 C8 4D F8 00 F0-41 F8 00 F0 17 25 60 FD ..p.M...A....%`.
0000:0050
39 E7 00 F0 40 02 17 02-2D 04 70 00 28 0A 1A 03 9...@...-.p.(...
0000:0060
59 FF 00 F0 2F 00 89 08-6E FE 00 F0 04 06 1A 03 Y.../...n.......
0000:0070
1D 00 00 C8 A4 F0 00 F0-22 05 00 00 E0 66 00 C0 ........"....f..
-d
8000:0000
8000:0000 00 00 00 00 00 00 00 00-00 00 00 00 00 00 00 00
................
8000:0010 00 00 00 00 00 00 00 00-00 00 00 00 00 00
00 00 ................
8000:0020 28 01 00 00 02 00 00 00-17 3C
F9 FF 63 22 D6 7E (........<..c".~
8000:0030 63 22 97 7E 01
00 00 00-17 A2 FE FF 08 00 00 00 c".~............
8000:0040 00
00 00 00 43 3A 5C 57-49 4E 44 4F 57 53 5C 53 ....C:\WINDOWS\S
8000:0050
59 53 54 45 4D 5C 57 49-4E 4F 41 33 38 36 2E 4D YSTEM\WINOA386.M
8000:0060
4F 44 00 00 00 00 00 00-00 00 00 00 00 00 00 00 OD..............
8000:0070
00 00 00 00 00 00 00 00-00 00 00 00 00 00 00 00 ................
-q
2。执行MOVE.EXE后:
-d 0:0
0000:0000 9E 0F C9 00 65 04 70
00-16 00 C8 07 65 04 70 00 ....e.p.....e.p.
0000:0010 65 04 70
00 54 FF 00 F0-5F 9B 00 F0 53 11 00 F0 e.p.T..._...S...
0000:0020
00 00 00 C8 28 00 C8 07-3A 00 C8 07 52 00 C8 07 ....(...:...R...
0000:0030
6A 00 C8 07 82 00 C8 07-9A 00 C8 07 65 04 70 00 j...........e.p.
0000:0040
07 00 70 C8 4D F8 00 F0-41 F8 00 F0 17 25 60 FD ..p.M...A....%`.
0000:0050
39 E7 00 F0 40 02 17 02-2D 04 70 00 28 0A 1A 03 9...@...-.p.(...
0000:0060
59 FF 00 F0 2F 00 89 08-6E FE 00 F0 04 06 1A 03 Y.../...n.......
0000:0070
1D 00 00 C8 A4 F0 00 F0-22 05 00 00 E0 66 00 C0 ........"....f..
-d
8000:0000
8000:0000 9E 0F C9 00 65 04 70 00-16 00 C8 07 65 04 70 00
....e.p.....e.p.
8000:0010 65 04 70 00 54 FF 00 F0-5F 9B 00 F0 53 11
00 F0 e.p.T..._...S...
8000:0020 00 00 00 C8 28 00 C8 07-3A 00
C8 07 52 00 C8 07 ....(...:...R...
8000:0030 6A 00 C8 07 82 00
C8 07-9A 00 C8 07 65 04 70 00 j...........e.p.
8000:0040 07 00
70 C8 4D F8 00 F0-41 F8 00 F0 17 25 60 FD ..p.M...A....%`.
8000:0050
39 E7 00 F0 40 02 17 02-2D 04 70 00 28 0A 1A 03 9...@...-.p.(...
8000:0060
59 FF 00 F0 2F 00 89 08-6E FE 00 F0 04 06 1A 03 Y.../...n.......
8000:0070
1D 00 00 C8 A4 F0 00 F0-22 05 00 00 E0 66 00 C0 ........"....f..
-q
本文到次就告一个段落了!请大家务必手头有DOS/BIOS调用参考手册!!
要不我就等于白费口舌了!!!!
- 标 题:由一只病毒说开去(下)! (5千字)
- 作 者:kobe
- 时 间:2001-10-1 23:21:49
- 链 接:http://bbs.pediy.com