本文面向的读者:
1,熟悉Win32汇编。不懂汇编只懂VB?没错,VB也可以写出“病毒”,但那是不是太惨了点?
2,熟悉PE结构。faint!如果连PE文件结构都不知道,还去感染谁啊。
3,对病毒有“严重”的热爱,至少也不要讨厌。由于本文含有可能招致PC用户不满的成分,所以如果你不喜欢病毒,请快快离去。
4,如果你是个病毒高手,不要笑本文的肤浅,这本来就是入门文章,希望籍此能出现一大批中国人写的病毒。
5,这是最基本的病毒编写入门技术,如果你真的是高手(你真的是高手?你怎么会真的是高手???:)),可以不用看了。
一,怎样获取Kernel32 API的地址?
1. 病毒无import table,而且现在已经不时髦去攫取host程序的import table了。
2. 现在通用的技术是从4G的地址空间中暴力搜索Kernel32的基地址,然后从Kernel32的export table中找到所需要的API的地址。一旦有了Kernel32的API,想导入其它DLL的API也就容易了,至少可以用LoadLibraryA和GetProcAddress(呵呵,好基本的方法)。
首先要确定Kernel32的基地址。
这个地址在98,2K,XP下都不同。注意,一个好的病毒不能过分依赖某个OS的特性,所以我们不能在病毒体内写个死的77E80000。所以我们要搜出来。一般一个程序执行时,Kernel32都被映射到它的地址空间了,这就是我们为什么可以搜索它的地址的原因。
看看三个OS的基地址,98为BFF70000,2K为77E80000,XP为77E60000,Ok,都在70000000以上,我们可以就从这里开始。当然如果一个一个字节搜索,那么也太慢了,一般DLL定位都在1M边界,所以我们可以以10000为跨度。
还有一个问题,4G空间不全是可读的,搜到某个地方就会出现GPE错误。怎么办?hmmmmmmmmmmmm,M$已经想到了这点,在Win32里提供了一种叫做SEH的技术,可以让你掐死出现的错误,使你的程序继续执行而不崩溃。具体SEH在汇编中的写法,只要几条指令,大家可以自己去找些病毒看一下就知道了。
注意到PE文件和内存中的映像很相似,所以我们就可以按下面这个方式来搜索Kernel32
ebx->current address,now is 70000000h
Set SEH frame
#1
ebx = ebx + 10000h
if ebx == 0 then 郁闷中。没找到Kernel32???是崩溃还是返回host随你了,我无话可说。
word ptr [ebx] == ‘ZM‘ ?no,goto #1
eax = ebx + 3ch
eax = ebx + [eax]
word ptr [ebx] ==‘EP‘ ?no,goto #1
now we are sure this is a PE image,let‘s look up whether it‘s a dll,if not,goto #1
then check the export dll name ,if it‘s not ‘KERNEL32.DLL‘,goto #1
Now go into it‘s export table,get the APIs address which we use to start our smart work,hahahaha.
Remove SEH frame
......
SEH handler:
resume to #1
具体细节问题,大家自己去研究。目前大多数Win32病毒都是这个过程,当然具体实现方法会有不同。
二,然后干什么?
记住一个病毒编写的真理:越快返回host程序越好,否则一个明显的延迟会引起一个哪怕是美女用户(?美女通常不是很懂计算机,(画外音:我见过的女程序员都是美女)^_^)的怀疑。所以我们应该立刻分配一块内存,把自己拷贝进去,在那里创建一个病毒线程,然后立刻返回host程序。好了,现在host程序正常运行,而我们的病毒也开始正式启动了,hoho,开始我们的恶魔之旅。
三,感染再感染,尽可能快速尽可能多的感染!
感染是一个病毒赖以长期存活的根本,所以我们要大规模的搜索,感染感染再感染!
FindFirstFile,FindNextFile,FindClose,除非你hook了某些系统API(参考Win32.Kriz),否则这三个API是Win32病毒必备的、搜索再搜索,感染再感染。具体怎么搜索就不用我说了吧:)。
四,以什么方式感染?
目前Win32病毒分为两个主流,一类最常见,覆盖host程序最后一个section的relocation,或者干脆直接缀在最后一个section后面,把它扩大一些。这种技术很简单,例子可参见Funlove,有着复杂的polymorphism引擎体积比较大的病毒一般也都用这种技术。
第二类就是像Elkern那样把自己尽可能地插进host体内,尽可能地插,对于VC编译出来的PE文件,它的file alignment是4K,所以section之间的空隙加起来很可能有4,5K,足可以容下一个Win32病毒。这种技术比较麻烦一些,调试也复杂,主要流行的有Elkern。(CIH的方法也类似,但那是Win95病毒,不在本教程之内)。
五,还要做些什么?
为了生存,我们要尽可能长时间地驻留在内存中,而不是host程序一结束就完蛋了(很多早期的Win32病毒都是那样的:()。这也有两种方法,一是象Funlove那样在系统目录里drop一个文件,并修改注册表或者建立一个系统服务。这种方式很普通,也很普遍,大多数病毒包括蠕虫都这么干。但,呵呵,释放一个文件,太容易让人注意。另一种方式则是感染所有的已运行进程。好方法,在Win2K下很容易实现,CreateRemoteThread,但要想在所有Win32平台下实现,则要比较高的技巧,不在本入门教程范围之内。
当然,如果你能写个工作在所有Win32平台的ring 0病毒,那么I服了you。这不是不可能的,但病毒会比较大,也很没劲,不通用。
六,怎样快速感染
记住两点最基本的
1,在不引起注意的前提下尽可能多地搜索文件,当你写完一个病毒以后,运行它,如果它能在一个小时内搜索15000~20000个文件而你没有听到硬盘狂转的声音,那么恭喜你,你的病毒可以快速感染了。
2,使用File Mapping APIs,不要用ReadFile和WriteFile,后者更慢。
七,Win32病毒最好要多大的size。
答案是越小越好,最好在3K~6K之间(郁闷,底线很像我的月薪:()。现在一些专门研究病毒的年轻人写的病毒越来越大,一个metamorphism病毒最小也要80K,hmmmmmmmmmmmmmm,不行,那样不行,那么大的一个东东,用户太容易发现了。愚以为,polymorphism或者metamorphism都不是最重要的,一般用户根本不会反汇编你的病毒代码,再厉害的metamorphism引擎也要被AVers干掉,所以,适当的polymorphism,骗骗小姑娘就可以了。不信你看看,Funlove没有任何的encryption或者polymorphism,还不是最流行的Win32病毒?如果热衷于metamorphism,建议别写病毒,改行去写disassembler,争取超过IDA pro。
本来想用英文写的,好走向“国际化”,但我的烂英文,外国人可以看懂,可中国人不一定明白,所以先将就用中文写这个我的第一篇病毒教学文章了,以后再翻成英文吧。
看了上面的简单教程,再加上你自己的努力钻研,并去参考一些病毒源代码,相信你也可以比较容易地写出一个Win32病毒。别怕别人笑你的病毒笨,放心地写,写完了别忘记给我看看哦*^__^*。
Win32 PE病毒入门1
时间: 2024-12-27 19:33:46
Win32 PE病毒入门1的相关文章
病毒入门程序
#include "windows.h" #define UINT8 unsigned char /* 该函数构造一个简单的溢出函数 */ void GetName(UINT8 *pucSrcName, UINT8 *pucDstName) { while ((*pucSrcName) != 0xfe) { *pucDstName++ = *pucSrcName++; } *pucDstName = 0; } /* 在此函数中,调用后GetName弹出时,注入程序接管 */ void
深入理解 Win32 PE 文件格式
深入理解 Win32 PE 文件格式 Matt Pietrek 这篇文章假定你熟悉C++和Win32. 概述 理解可移植可执行文件格式(PE)可以更好地了解操作系统.如果你知道DLL和EXE中都有些什么东西,那么你就是一个知识渊博的程序员.这一系列文章的第一部分,讨论最近这几年PE格式所发生的变化. 这次更新后,作者讨论了PE格式如何适应于用.NET开发的应用程序,包括PE节,RVA,数据目录,以及导入函数.附录中包含了相关的映像头结构以及它们的描述. 很早以前,我为微软系统期刊(现在叫做MSD
PE病毒初探——向exe注入代码
PE文件其实就是Windows可执行文件,关于它的一些简要介绍摘自百度: PE文件被称为可移植的执行体是Portable Execute的全称,常见的EXE.DLL.OCX.SYS.COM都是PE文件,PE文件是微软Windows操作系统上的程序文件(可能是间接被执行,如DLL). http://baike.baidu.com/view/1087038.htm 有一种病毒是针对PE文件进行的操作,他们会感染一些exe,将自己的代码添加到exe中并在某处悄悄地窃取执行权限执行自己的代码进行破坏或者
PE文件加节感染之Win32.Loader.bx.V病毒分析
一.病毒名称:Win32.Loader.bx.V 二.分析工具:IDA 5.5.OllyDebug.StudPE 三.PE病毒简介: PE病毒感染的方式比较多,也比较复杂也比较难分析,下面就针对PE文件感染之加节的方式进行汇编层次的深度分析,其实说来惭愧,第一接触这个病毒样本的时候也有 点手足无措,最后还是在别人的指导下才顺利的分析下来,开始分析该样本的时候,仅仅关注这个样本是木马病毒这个特点而忽略他的PE感染的特性.下面就该样本的传播方 式进行逐一分析,其实还蛮怀恋分析样本的那些时间. 四.对
Hacker(25)----病毒攻防之认识病毒
Internet中,计算机病毒是威胁计算机安全的程序.对于计算机病毒,用户不仅需要掌握其基础知识,还要认识常见的病毒及简单病毒制作方法.无论病毒基础还是制作简单病毒,用户需要掌握防御病毒的有效措施和专业软件. 计算机病毒不是由于突发或偶然因素产生的,是人为编写的程序.计算机病毒会破坏计算机功能或数据.影响计算机使用,且能够自我复制.若要全面认识病毒,则需要了解病毒的分类.特征.传播途径及计算机中毒后的常见症状. 一.病毒分类 Internet中存在数不清的计算机病毒,且它们的分类没有固定的标准,
趋势科技安全威胁病毒预警(本周十大病毒排名)
最近,趋势科技中国区网络安全监控中心公布了<安全威胁每周警讯>,统计了较为活跃的排名前十的病毒类型.报告显示,这些病毒共同的特征和逐利手段是:在用户不知情的状态下,私自下载恶意程序或未知软件,并试图在同一时间内随机连结当中 500 个恶意站点下载病毒. 排名前十大病毒警讯 排名 病毒名称 威胁类型 风险等级 趋势 病毒行为描写叙述 1 TROJ_IFRAME.CP 木马 ★★★ ↑ GIF.jpg和SWF 文件里被插入一个恶意的iframe 标记时,趋势科技会将其推断为TROJ_IFRAM
Linux -- 系统病毒防治
一.Linux病毒的历史 1996年出现的Staog是Linux系统下的第一个病毒,它出自澳大利亚一个叫VLAD的组织.Staog病毒是用汇编语言编写,专门感染二进制文件,并通过三种方式去尝试得到root权限.Staog病毒并不会对系统有什么实质性的损坏,它应该算是一个演示版,但它向世人揭示了Linux可能被病毒感染的潜在危险.Linux系统上第二个被发现的病毒是Bliss病毒,它是一个不小心被释放出来的实验性病毒.与其它病毒不同的是,Bliss本身带有免疫程序,只要在运行该程序时加上"disi
vc++HOOK详细讲解
消息钩子函数入门 Windows 系统是建立在事件驱动的机制上的,说穿了就是整个系统都是通过消息的传递来实现的.而钩子是 Windows 系统中非常重要的系统接口,用它可以截获并处理送给其他应用程序的消息,来完成普通应用程序难以实现的功能.钩子可以监视系统或进程中的各种事件消息,截获发往目标窗口的消息并进行处理.这样,我们就可以在系统中安装自定义的钩子,监视系统中特定事件的发生,完成特定的功能,比如截获键盘.鼠标的输入,屏幕取词,日志监视等等.可见,利用钩子可以实现许多特殊而有用的功能.因此,对
小白日记20:kali渗透测试之后渗透测试阶段(一)--上传工具
后渗透测试阶段--上传工具 为防止管理员将漏洞补上后,我们无法再通过该漏洞控制对方主机,所以需要进行后渗透测试阶段 1.上传各种工具 2.提权:为了全面控制目标系统 3.擦除攻击痕迹:防止管理员通过日志溯源追踪,发现攻击源头[除了系统日记,应用程序也会有自己的日志信息] ##删除系统日记和应用程序日记 例如:SLmail中 4.安装后门程序 实现长期控制,Dump密码,作为跳板进行内网渗透[大部分情况下,比公网渗透简单] 注:后渗透利用阶段 最大的挑战:防病毒软件[根据病毒特征库进行查杀].所以