手机站
网通分站
电信主站
密 码:
用户名:
当前位置 : 主页>网站运营>建站经验>列表

Win32下病毒设计入门周详解说

来源:互联网 作者:west263.com 时间:2008-04-16
西部数码-全国虚拟主机10强!40余项虚拟主机管理功能,全国领先!双线多线虚拟主机南北访问畅通无阻!免费赠送企业邮局,.CN域名,自助建站480元起,免费试用7天,满意再付款! P4主机租用799元/月.月付免压金!

在控制台的 命令提示符下,为安全起见,我首先对ntservice.exe进行备份,然后直接运行:del c:/winnt/system32/ntservice.exe就OK了。

二、主要是要截留文档I/O操作

Windows下截留文档I/O操作有几种方法,在病毒中使用的主要有两种。

1、使用VxDCallIFSMgr_InstallFileSystemHook

2、截留Kernel32.dll中导出的第一个函数VxDCall对DOS

INT 21的呼叫(EAX=2A0010)。

VxDCall的代码如下:

mov eax,dword ptr [esp 04]

pop dword ptr [esp]

call fword ptr cs:[xxxxxxxx]

^^^^^^^^只要将这个地址指向的地址改为自己的过程入口,就捕获了任何的VxDCall。

进入这个过程时:

eax=service number,假如是DOS INT 21将是2A0010

esp[2c]调用Int 21时eax的值

~~~~ 算漏了个pushad,应该是10h

esp[30] 调用int 21时ecx的值

~~~~14h

其他寄存器为调用时所需的值。(段寄存器无用)

以后的就和在DOS下写病毒没什么差别了。

在WINDOWS下写病毒,如何得到API的入口是一件麻烦的事. 能够直接使用的API都在DLL中,而VXDCALL要在RING0时才能使 用,DOS的INT 21服务也不能直接调用. 得到DLL中的API入口有两种方法:

1.加载时得到,建立一个 IMPORT TABLE,在加载时WINDOWS会根据IMPORT TABLE定位API的 入口地址.这是一般应用程式的使用的方法,但不大适合病毒。

2.运行时得到,使用GetModuleHandle和GetProcAddress得到API的入口,但前提时要知道GetModuleHandle和GetProcAddress的 入口地址.:< 这是明显也是不可能的.除了将GetModuleHandle和GetProcAddress的代码复制到我们的病毒中,只有使用暴力在 2GB的空间内找出API的入口了。

首先说明一下WINDOWS的内存映射,由00000000开始有一段是无效地址(我忘了到底到多少了),用来捕获应用程式错误的指针。
跟着一直到0x7FFFFFFF为应用程式的空间.0X80000000以后为系统 的空间,DLL和VXD都映射在这里.我们要作的就是从这2GB的空间内找到Krnl32.dll. 一般来说,Windows下的程式都是对齐在64k的边界.首先是MZ 文档头,跟着是由MZ HEADER中的信息能够得到PE HEADER的入口. 由这个标记就能够找出任何的DLL.由PE HEADER能够得到DLL的 EXPORT TABLE的入口,其中而NAME PTR TABLE的第一项为DLL的名 称,由此能够找出Krnl32.dll,并从ADDRESS TABLE中得到任何一个 API的入口.。

值得注意的是,在这2GB中并不是任何而地址都是有效的,在 一般的程式中能够通过IsXXXXXPtr来判断地址是否有效,但在病毒 中不行.只能Hook Exception,忽略访问无效的地址导致的Exception. Windows中的Exception Chain的结构如下: fs:[0] dword exception发生时esp的新值,该值指向一个如下 的结构 [esp] dword fs:[0]的新值 [esp 4] dword exception handler的入口 [esp 8] dword exception handler使用的数据首地址 [esp 12] dword -1周详的汇编代码能够用C写一段__try...__except的代码,然后 转译成汇编. 只要我们的exception handler直接跳转到病毒中寻找Krnl32.dll 的代码,就能够不引起GP Error而访问任何的地址了。 范例能够参看HPS的源码,PE HEADER,EXPORT TABLE请参看PE FORMAT.。

1、在Windows下载入的DLL在不同的process中映射到同一个地址。

2、在DLL中导出的函数在export table中记录相对DLL Image Base 的偏移,改变这个偏移使用GetProcAddress得到的地址就会改变。 (想象一下,把CreateProcess地址指向自己的DLL中的函数,或截获GetDlgItemText来记录Password)

3、在Kernel32.DLL中Section Table在0x300以前就结束了,而真正的代码由0x1000处开始,其间有3K的未用空间,能够用来存放我们的代码。 Kernel32.DLL的Image Base能够由GetModuleHandleA得到。

4、在任何版本的Windows中,3个基本的DLL总是被加载(Kernel32.DLL,User32.DLL,GDI32.DLL),而且对于同一个版本的Windows,他们的Image Base,和导出函数的地址总是固定的。能够将得到的地址直接用于病毒使用。


文章整理:西部数码--专业提供域名注册虚拟主机服务
http://www.west263.com
以上信息与文章正文是不可分割的一部分,如果您要转载本文章,请保留以上信息,谢谢!

上一页 1 2下一页
[打印] [关闭]
Google
相关文章
上一篇: Internet防火墙基础技术综述
下一篇: 灵巧的脚本攻击
热点关注
IDC资讯 虚拟主机 域名注册 托管租用 vps主机 智能建站
网站运营 建站经验 策划盈利 搜索优化 网站推广 免费资源
网站联盟 联盟新闻 联盟介绍 联盟点评 网赚技巧
行业资讯 业界动态 搜索引擎 网络游戏 门户动态 电子商务 广告传媒
网络编程 Asp.Net编程 Asp编程 Php编程 Xml编程 Access Mssql Mysql 其它
服务器技术 Web服务器 Ftp服务器 Mail服务器 Dns服务器 安全防护
软件技巧 其它软件 Word Excel Powerpoint Ghost Vista QQ空间 QQ FlashGet 迅雷 Internet Explorer
网页制作 FrontPages Dreamweaver Javascript css photoshop fireworks Flash
程序设计 Java技术 C/C++ VB delphi
网络知识 网络协议 网络安全 网络管理 组网方案 Cisco技术
操作系统 Win2000 WinXP Win2003 Mac OS Linux FreeBSD
返回首页 |关于我们 | 联系我们 | 付款方式 | 创业联盟 | 价格总览 | 资讯中心 | 友情链接 | 网站地图 | 招贤纳士 | RSS