二:主要是要截留文件I/O操作。
Windows下截留文件I/O操作有几种 *** ,在病毒中使用的主要有两种。
1、使用VxDCallIF *** gr_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,和导出函数的地址总是固定的。可以将得到的地址直接用于病毒使用。 ( 在NT也可以写病毒了,又要换系统了8< )
各地隆重庆祝“五一”表彰先进 内蒙古 本报讯(记者李玉波)4月29日,内蒙古自治区庆祝“五一”国际劳动节暨自治区五一劳动奖表彰大会在呼和浩特召开,自治区党委书记、人大常委会主任石泰峰与参加会议的受...
苹果电脑装双系统(苹果电脑安装双系统教程)我们知道,苹果电脑搭载的都是自家的MACOS系统,虽然在使用体验上十分流畅,尤其是剪辑人员,在苹果使用剪辑软件简直是福音,大大提升了工作效率。不过苹果MACO...
新水浒传燕青打擂台第73集(暂时只想到这个) 新精武门II漫画威龙(1992年)发行时间:2004-10-24screen.width-500)this.style.width=screen.wid...
如果知道一个人名字可以查个人信息吗,通过人名字查个人信息方法是什么有没有什么教程,在日常生活中,我们经常会遇到这样的情况:某人欠您钱,您想知道他的财产状况,不管他是否有钱,或者是否真的有,并遇到想要结...
上海模特伴游微信号【郑溶艳】 今天给大家分享的内容是“上海模特伴游微信号【郑溶艳】”,我是郑溶艳,来自长春市,今年35岁,作为职业:艺术,我热爱我的职业:艺术。三圍:胸63腰89臀60 鞋碼:39...
这一系列文章为pwnable.krToddlr’s Bottle的全部题解,其中有三道题目相对而言稍难或者说比较经典,单独成篇,其他题目的题解放在一起发出来。 0x02fd Ssh连接 看一下目录...