硕士论文-Windows进程套接字数据劫持技术研究_第1页
硕士论文-Windows进程套接字数据劫持技术研究_第2页
硕士论文-Windows进程套接字数据劫持技术研究_第3页
硕士论文-Windows进程套接字数据劫持技术研究_第4页
硕士论文-Windows进程套接字数据劫持技术研究_第5页
已阅读5页,还剩53页未读, 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、电子科技大学硕士学位论文Windows进程套接字数据劫持技术研究姓名:李云申请学位级别:硕士专业:软件工程指导教师:陈雷霆;杨勇20051201鲤蕊凳叶嫡主薹嘻垂蠢塑重囊藿至亨耄¥誊虹;?窒“缨;絮;【;引皇垂量?室!至;妻;引乒兰耋”;乱量二;蔓薹芹!;出!:;耋墓奏确;基压蔓囊暑,譬堂茹篚羹;臻娃薹爨肇蓥;鞠譬一塞蓍萤事嚣差;日攀誊醇;莹享二“西要璇融!?;萄耋耋孽葛耍岩!;二琶;:;自!;棼蔓;羞墓;自;翔耍壁目髓:;自建叁!翥!羹耋爨;肄璺螽¥;“堇璺量;鞠耳磊譬薷到譬喜霸崩钉竹写“壤燕型;羁仟著女餐鸯耋,”基;薹曩誊墅甙待“;主;拭鼙一彝!挺鐾一垂捋耋等曼耸甍主弹葡彝錾矗静舞霹掣囊;

2、)童量葶延置?二蘸“誊嗣錾?手;目咎二量矗矗;芝呈彗一黼订;誓拍霸“舌!”;篓薹圭“嬖二;!;!?至(麓酣矗“蔷兰絮耋;鲫十矗?;薷彗自零!坩;二朝垂芎;要霆瘿擎¥魂耋五;自川己凸;?;!月疆;琶曼;二疆“自目磊孽目?囊船自?臀;盈!二二露。二;鞋罐宝手钎符;竺重酉;!乔闪莹;孥氯;捧?;醚羹雾基皂曩:!;鞫鬻耋;善霎善:商目;蚕替芦;目羹耍簧露!牿;錾曼;鲭,量量学【喜丹“目;目蟥喜垂坟獒竺;篝垂芎呈拜墓?;筝:暂重嚣孽薯;鼙剞甚蚕垂!蠢垂铲!?嚣鸯嗜疆卅;鱼;?量口鞋“嚣霁一早;攀鞋!匮鬈”黜主霎自目,基鲁墼萤,;?寓;措重羹言哟;?!;琶至籍麓。番!蓥:翼鏊蠢目三;!主醛兰耋鲁霎司二!朔

3、;重;二;勤辑誊囊;目“霎;垂:事誊主。叭:“驸辇磐丽基刍垂!“焉誊垫!茎;甾蓬?;匿磊嚣楚;嚣婪差;“?未舞毪墨襄嚣嚣;“;坶,鳇;主一疆目!至!苎苎巨!;琶羹;垂盏卫摹螽罐:;三;!蝴目目盟;簦引;薹蓬,扣;薹“肇:目鬟彝;!:蜢;塞孽;曼辨,!錾!呈圣彭至耄蛰臻?目蓉!璧訇冒;!:垂;!;灌目鞲;电子科技大学硕士学位论文消息循环的应用程序无法实现注入,后者因为要使用、系统的支持,兼容性有限;其二是对系统进程中的各种网络应用程序接口调用进行挂接的挂接技术部分,此部分目前国际上成熟的技术有跳转指令写入法与函数导入表改写法,前者实现起来比较复杂并且对于小于跳转指令长度的应用程序接口函数无法挂接

4、,后者对于某些不利用导入表而使用动态获取应用程序接口函数地址的方法的程序无效;其三是进程间通讯与同步的问题,监控程序与被监控程序之间需要交换数据,并且各个进程与线程之间需要同步协作。本文从分析现有一切相关技术入手,研究出了一种新的基于直接代码注入法与断点法的挂接技术来实现进程套接字数据监控,这种新技术完全克服了传统技术中各种应用上的限制与兼容性问题。以下本文将从系统核心的基本理论介绍开始,到各种相关系统调用与网络接口调用,再到各种当前各种代码注入技术和应用程序接口挂接技术的分析,之后对新的挂接技术进行详细阐述,最后给出套接字劫持技术在各种系列平台下的实验与测试结果,并且附上示范代码。第二章系统

5、内核相关基础理论第二章系统内核相关基础理论要做出一个操作系统本身并不提供接口支持的动作,就必须对其内部机制进行深入研究。对一个复杂的操作系统来说,在没有其设计文档资料与图纸的情况试图对其内部数据进行干预,仿佛深夜在漆黑不见五指的原始森林中狩猎一般困难,若此时系统调用手册可比作林中的大道的话,操作系统运行时的内存映像则可比作系统核心的地图,那么我们将根据这个地图延着大道走下去最终达到我们的目标。本文试图成为这个道路上的一盏明灯从虚拟内存映像入手,深入讨论如何利用系统提供的一切可以利用的资源来完成我们的工作。内存映象结构在早期的操作系统与其基础之上的平台下,所有应用程序使用同一个地址空间,任何进程

6、都能够对其他进程的内存空间进行读写操作,甚至可以存取操作系统本身的数据。在这种环境下,应用程序可能破坏其他程序的数据或代码,使得系统运行不正常,甚至导致系统崩溃。)【系列操作系统在蛆虚拟机管理器】下运行所有应用程序,即所有机器码都必须经过这个东西提交,一切操作都是受监控的,这使得原本在时代我们任意的直接访问磁盘、外设或修改物理储存器的数据都不能轻易实现。就系列操作系统而言,保护模式】下每个进程由系统映射从到字节相互独立的虚拟地址空间。虚拟内存被划分为固定大小的块,这些块被称为页,在的系列机器上,通过设置寄存器的的第位来启用分页】,系统下一页的大小为,字节,在机器上系统下一页的大小为,字节,我们

7、可以根据需要来设定其存取权限。并非每个虚拟地址都占用逻辑物理单元,只有需要的时候才被系统分配物理空间,并不直接访问内存,而是通过页表查找把虚拟内存地址映射成实际内存地址。系统使用页面交换利用磁盘空间来模拟乙,在中数据不使用时将会被交换到磁盘,在需要时将会被重新装入。利用处理器电子科技大学硕士学位论文的页映射能力,操作系统为每个进程提供独立的从逻辑地址到物理地址的映射,使得系统中每个进程所使用的地址空间相互独立,每个进程的地址空间相互完全不可见,进程间不能相互访问各自地址空间的私有数据,不同进程可以用具有相同值的逻辑地址寻址,但对应的是各自独立空间中的数据,如此一来使得进程间相互破坏的可能大大减

8、小,并且增强了系统的稳定性。在系统下,从到是系统用来捕获空指针保留的;从到是为兼容程序和代码的加载空间;从到是应用程序加载空间;从到是字节对所有进程可见的进程共享空间、进程共享空间和内存映射文件空间,这里可以作为进程通信传递数据用;从到是字节系统内核空间,这段空间在系统下也是对所有进程可见的,但是在保护模式中用户态弛代码下不能访问此区域某些部分,必须进入核心态。在系统下,从到是系统用来捕获空指针保留的,字节;从到是应用程序加载空间;从到是禁止访问的保留空间;到是系统内核空间,访问这个空间需要进入核心态砌卯。及以上的在保护模式下有级指令权限,系统使用其中种,操作系统代码与设备驱动程序代码工作在核

9、心态,应用程序则工作在用户态鼬。运行于处理器核心态的代码不受任何的限制,可以任意访问任何有效地址与端口。而运行于用户态的代码则要受到处理器的限制,只能访问映射其地址空间的页表项中规定的在用户态下可访问页面的虚拟地址。下表和给出两个代表性系列版本的内存映像:表一唧印一空指针异常捕获空间兼容,位代码加载空间一甲应用程序加载空间卜进程共享空间,进程共享空间,内存映射文件系统内核空间表哪空指针异常捕获空间一应用程序加载空间一空指针异常捕获空间系统内核空间第二章系统内核相关基础理论模块映象结构从系统发展到现今的系统,可执行文件作为系统和应用软件的重要组成部分,为了适应更加复杂的需要,其格式由最早的二进制

10、机器码序列的格式、)(、()新可执行文件、()线性可执行文件、逐渐演变到现在的()可移植可执行文件】,它由公司提出,由(,成员包括、等)组织标准化,继承了(!珊)的思想,其即意图在平台上建立通用的与具体芯片无关的一种文件格式,它是在系列下的二进制可执行代码的文件载体,除了虚拟设备驱动程式与位的文件采用格式以外,所有的可执行文件、动态连接库、内核模式驱动均采用文件格式。作为本文研究的目标对象进程代码的文件载体,以下我们将对其结构进行详细分析。文件格式操作系统家族最近增加的为开发环境和应用程序本身带来了很大的改变,这之中一个最为重大的当属文件格式了。新的文件格式主要来自于操作系统所通用的规范,同时

11、为了保证与旧版本及操作系统的兼容,文件格式也保留了中那熟悉的头部。表【】甜州从上表容易看出,可执行文件结构中包含了的可执行文件结构,它第一个组成部分就是一个的可执行文件头,我们在下面将详细讨论这个结构每个部分的内容及其涵义。电子科技大学硕士学位论文可执行文件头文件格式的第一个组成部分是头部。在文件格式中,它并非一个新概念,因为它与以来就已有的头部是完全一样的。保留这个相同结构的最主要原因是,当你尝试在以下或以上的系统下装载一个文件的时候,操作系统能够读取这个文件并明白它是和当前系统不相兼容的。换句话说,当你在下运行一个可执行文件时,你会得到这样一条消息:“”如果头部不是作为文件格式的第一部分的

12、话,操作系统装载文件的时候就会失败,并提供一些完全没用的信息,例如:“锄衄,哑”表名称尺寸(字节)描述”掣标识;文件最后一页的大小,每页”;文件页数,文件总大小;重定位元素个数;头部与所有重定位元素大小,单位字节;最小需要附加内存大小,单位字节;删最大需要附加内存大小,单位字节;初始寄存器值,相对文件头偏移量;初始寄存器值;校验和:初始寄存器值;初始寄存器值,相对文件头偏移量;重定位表偏移量:覆盖号,主程序则为;婵【】保留字;识别号;附加信息;一【保留字;抽新文件头偏移量;当执行文件在系统下运行的时候,上面这个结构体中的第一项,如表所示,吐两个字节的标识符“”被识别,系统认为是合法的可执行文件

13、格式,因此,根据头部结构相关数据载入文件中的代码执行。在格第二章系统内核相关基础理论式文件中,被载入的是第二部分,它只不过是显示一段提示信息然后退出。可以由下面这么一小段程序来描述:()血(“辨瑚啪舳”);)当然,我们可以根据需要来自己构造这个程序,使得我们的可执行文件不仅仅可以在环境中运行,也可以在环境中运行。就象中的锄那样。不过,现有的编译环境是不支持那样做的,要达到目的得稍微费点周折。当可执行文件在系统下运行的时候,装载器会直接根据中的新文件头偏移量来加载扩展可执行文件头部,()指相对于映像加载的虚拟基地址的偏移量。对于格式可执行文件来说,这个头部就是可执行文件头部,以下是它的结构:可执

14、行文件头表名称长度(字节)描述文件标识“”;文件物理分布信息:文件逻辑分布信息;如表所示,这个头部的第一个项目是个字节的文件标识,”。第二个部分是一个既文件头结构,它描述了代码的物理属性以及运行时的硬件要求,其结构如下表所示:表协名称长度(字节)描述代码的类型,对于的系列芯片,它通常是这个值:文件包含的节数目;文件创建日期和时间格式,从年月日开始至今的秒数:指向符号表的指针,调试用,通常为;啪符号表的个数;脚可选头部结构大小;续表电子科技大学硕士学位论文位名称描述重定位信息己拆卸,无效;、可执行标志;矸文件行序号已拆卸标志;【局部符号已拆卸标志:位机器要求标志;调试信息已拆卸标志:可移动存储介

15、质中复制至交换空间运行标志:网络中复制至交换空间运行;系统文件标志,。无效;【,动态连接库文件标志;仅能在单处理器系统运行标志第三个部分是一个可选头,它描述了代码的逻辑属性,与其名称恰恰相反,它是必须的,其结构如下表所示:表【名称长度(字节)描述标志字(总是);【日连接器主版本号;标连接器次版本号:标代码段大小:准】己初始化数据块大小;部诅未初始化数据块大小;分叮代码起始指令:代码段起始;如仍诅数据段起始;映像装载基址;内存块对齐;扩乎文件对齐;展吼操作系统主版本号;部内操作系统次版本号:分映像主版本号;映像次版本号;续表电子科技大学硕士学位论文这个结构的第一个成员是节名锄,长度不能超过个字节

16、,可以不用结尾。它可以是以下几种类型:“,“”:指令代码节;“耐:初试化数据节;“订:导入数据节;“日:导出数据节;“,:其它相关数据节;“”:资源节;“”:重定位节;“”:(鹏)线程局部存储器节;“”:未初试化数据节;“”:信息描述节;是物理地址与映像尺寸联合体。对于文件,它是,对于其它文件则是。咖是节被加载后的(相对虚拟地址)。瓜是经过文件对齐处理后节的尺寸。、是节数据的偏移量。:标记节的属性,是否是可执行代码、已初始化数据、未初始化数据,是否可写、可读等。第三章系统核心编程相关基础理论事件事件()允许一个线程通知其它线程某个特定事件的发生,线程可以调用酉()或、()来等待某个特定事件的发

17、生。通过调用来建立一个事件:(王们,沁,口呵锄);描述:建立一个事件对象;参数:癌囊餮蓍崩埔糍撩凌阊离;蕴酾誊薹、斋季菪璧冀霾羹囊塾鍪篓薛蒴蒜曩辇翥新嚣弘酬积张韶酥掰摹叭瓤燃孙弱研酴鎏圆学型砻嗽卫臻嚷蝉曼酽燮胤葑萎蔷翌鞠酲掣蚰蒯摊箱描;羹餐自强霎蠢翻稚濒导出函数。导出函数的名称对应且仅对应一个相关,反之则不然,每个可以有好几个名称来对应,导出函数的名称与其代码是多对一关系。另外一种获取导出函数的方法是通过索引,就是通过的指向的代码数组的下标来直接获取导出函数的,是导出函数代码数组的有效起始下标,因为导出函数在设计的时候可能在工程定义文件中定义导出函数的起始索引号,这就意味着代码数组的前数位元素

18、可能有无效的,因此,有必要从效起始下标开始定位导出函数代码的。在的第二项的【结构中认给出的是我们要研究的第二个对象,符号导入表。在下中给出了它的结构。导入表()导入表,简单的说,导入表的作用相当于的系统中断功能。两者都是操作系统。只不过中断不需要操作系统在载入每个执行体时填入的实际地址,并且,导入表还可以导入除操作系统之外的其它模块中的函数。函数可以由两种方式被导入,索引方式导入和名称方式导入。表伊名称长度(字节)描述第三章系统核心编程相关基础理论锄返回值:允许同步等待权限,系统使用;是否开启可继承句柄标志;对象全局名称指针:成功则返回对象句柄,否则返回。在信号创建的时候,将可用资源数量作为允

19、许的最大信号计数数量参数。当每个线程访问资源前,调用(),它将阻塞等待至信号对象中可用资源计数大于即信号状态,然后将可用资源数减一,然后退出,线程就可以进行下一步访问资源的工作。当资源计数小于一的时候,则所有欲访问资源的线程中()都会阻塞等待至有线程释放资源计数到大于。当每个线程访问资源完毕必须调用印()释放资源,它将信号中资源计数增加一,或者是当线程有做资源复数释放的时候,释放指定数量的资源计数,以下是其原形声明:(,);描述:释放指定数量的信号计数;参数:信号对象句柄,在、系统下必须具有权限;释放计数数量;接收先前计数数量位单元的指针,可置为;返回值:成功则返回非,否则返回。临界区临界区(

20、廿)是对临界资源进行独占访问的代码,它与互斥对象不同,它不是一个内核对象,因此速度上优于互斥对象,但是仅能在一个进程空间使用。所谓临界资源,就是在任意一个时刻只允许一个线程访问的资源。如果有多个线程试图同时访问该临界资源,那么只能有一个线程占先进入临界区,其它所有线程将被挂起一直持续到进入临界区的线程离开并且临界区在被释放之后,其它线程继续抢占进入临界区。通过调用()初始化临界区:电子科技大学硕士学位论文旺();描述:初始化一个临界区;参数;临界区描述结构体指针;返回值:无。在进入临界资源访问的代码的临界区前面通过疋()来抢占临界资源:巾坨(廿);描述:进入临界区;参数:临界区描述结构体指针;

21、返回值:无。临界资源访问完毕以后通过调用()释放临界区:();描述:释放临界区;参数:廿临界区描述结构体指针;返回值:无。进程通讯为提高系统的安全性,在内存管理方面采用安全的独立编址机制。在其中运行的每个进程都有自己的独立的地址空间,一个进程不能访问另外进程的地址空间。每个进程都拥有的虚拟地址空间,多个进程可能具有相同的虚拟地址指针,但每个进程的指针所指向的物理内存则不同。这样处理进程地址空间,却是提高了系统的安全性,使进程数据得到有效的保护,确保只有本进程才能访问到进程数据。这种机制很好地防止非法程序对进程数据的读取和修改,但同时也阻止了合法程序对进行数据的存取,这也是造成了应用进程间数据通

22、讯难题的主要原因。第三章系统核心编程相关基础理论任何情况下的数据通讯问题,都需要解决两个问题,即数据传输和通告机制。数据传输解决如何将进程的数据通过一些中间环节正确无误的传送到进程的内存中。通告机制解决进程如何将数据准备状态信息告之进程,而进程如何将数据需求信息告之进程等问题。进程通讯是多个进程或线程之间相互传递数据的行为,是并发多任务程序编写的另一项重要技术,以下我们描述进程通讯的各种方法,同时对于本文相关的研究对象进行详细讨论。进程共享数据区通讯在系统下,可以通过调用()建立一个无文件的映射对象,再调用坪在从到这个范围建立进程共享的映射区域【】,然后将需要传送到其它进程的数据写入,其它进程

23、可以通过调用印()打开该文件映射来读取数掘。以下是它们的原形声明:印(,印,鸭曲,啪锄);描述:建立文件映射:参数:文件句柄,若为,则为无文件方式;佃安全属性结构指针,若则句柄不能被子进程继承;页面属性,可是是以下常量值:砸研忆只读属性;砌读写属性;可写属性;分配物理存储空间,默认;可执行;无缓冲;、,不分配物理存储空间:眦汝曲最大尺寸高位;电子科技大学硕士学位论文最大尺寸低位;锄对象名称;返回值成功返回映射对象句柄,否则返回。(,锄);描述:开启文件映射;参数:开启权限:读写方式打开;读方式打开;伽上读写方式打开:兀写方式打开;可继承对象句柄返回标志:返回值对象名称;成功返回映射对象句柄,否

24、则返回几。(印,船乱巾出);描述:建立文件映射地址空间参数:文件映射对象句柄开启权限砒读写方式打开;读方式打开;读写方式打开:写方式打开;凰乒文件偏移高位;凰文件偏移低位;啪田印映射字节数,若为则整个文件被映射;第三章系统核心编程相关基础理论输,包的传输是无序的,并且不保能证错误、丢失和重复。其长度默认为,字节以下,最大可设置为,字节。数据报套接字也支持双向的数据流,但不保证传输数据的准确性,但保留了记录边界。由于数据报套接字是无联接的,例如广播时的联接,所以并不保证接收端是否正在侦听。数据报套接字传输效率比较高。原始套接字接口允许对的数据包直接存取,用于在传输层或应用层实现新的网络协议。原始

25、套接字保存了数据包中的完整头,前面两种套接字只能收到用户数据。因此可以通过原始套接字对数据进行分析。套接字有三种模式,第一种是阻塞模式(),执行操作完成前会一直进行等待,不会将控制权交给程序。套接字默认为阻塞模式。可以通过多线程技术进行处理。在这种模式下,所有网络操作都会在接口函数调用发生的时候阻塞等待,直到数据处理完毕才能够返回。阻塞模式的缺点是显而易见的,它会导致进程的挂起,暂时停止响应,但是我们可以用并发处理来与这种工作模式完美的配合。第二种是非阻塞模式(),执行操作时,函数会返回并交出控制权。这种模式使用起来比较复杂,因为函数在没有运行完成就进行返回,会不断地返回错误。但功能强大。接口

26、函数调用发生的时候无论数据是否处理完毕都会立即返回,以轮询()机制来进行网络数据传输。它虽然可以解决程序挂起问题,但是它的缺点也是显而易见的,轮询的效率非常低下,间隔时间过短会导致多任务系统下资源占用过大,间隔时间过长则会影响传输速度。第三种是异步方式(”),它克服了前两种方式的缺点,网络调用发生前提交个事件,程序去做自己的事情,然后由系统去处理接下来的数据传输任务,当数据准备好以后,系统发送一条消息通知程序调用网络接口存取数据。这种看起来十分完美的工作方式的唯一缺陷是其实现的复杂性。套接字必须在传输层上实现主机对主机,进程对进程的通讯【,因此,必须为网络上每一台主机定义唯一一个地址,并且为每

27、台主机的每一个进程定义唯一个标识,网络中需要一个包含协议,本地地址,本地端口的三元组标识网络中唯一一个进程,这样一个三元组,称为一个半相关(),它指定连接的每半部分。一个完整的网间进程通信需要出两个进程组成,并且只能使用同一种协议。因此一个完整的网间通信需要一个协议,本地地址,本地端口,远地地址,远地端口的五元组来标识,这样一个五元组,叫做一个全相关()。电子科技大学硕士学位论文网络数据结构中的数据都是以网络字节顺序定义的。因为不同的计算机存放多字节值的顺序不同,有的机器在低位地址存放低位字节,高位地址存放高位字节,比如芯片;有的则反之,低位地址存放高位字节,高位地址存放低位字节,比如系列芯片

28、。为保证数据的正确性,网络协议中必须指定网络字节顺序,目前大部分默认使用前者作为网络字节顺序。相关元组中的地址是一个位地址,位进程标识也就是传输层协议中的应用层子协议号,我们通常把它称作端口。下面我们来看看网络通讯的模型,如图与所示,给出了两种常用协议的客户端与服务器通讯模型:第三章系统核心编程相关基础理论淝提交的版本不支持套接字正在进行阻塞操作已达到套接字最大任务数上限返回结构地址无效与()对应的是结束调用的(),它必须与()成对使用,以下是它的原形声明:();描述:关闭库返回值:成功则返回,否则返回。下面我们给出的主要网络接口函数原形:(,);描述:打开一个套接字句柄;参数:地址格式,目前

29、仅仅支持;套接字类型,流式套接字,报文套接字,原始套接字;协议,可以是,等等;返回值:成功则返回套接字句柄,否则返回)。(,缸釉,);描述:绑定套接字到本地指定地址;参数:待绑定的套接字句柄;锄待绑定本地半相关三元组结构地址,结构如下缅;眦粤;电子科技大学硕士学位论文“仃,;);廿】,拿、;)呷;迅【】;锄:待绑定的本地半相关三元组结构长度:返回值:成功则返回,否则返回。(,);描述:监听;参数:已绑定!套接字句柄;最大连接队列数;返回值:成功则返回,否则返回。(,辛,);描述:连接到远端地址;参数:锄返回值:套接字句柄;本地半相关三元组结构地址:本地半相关三元组结构长度;成功则返回,否则返回

30、。印(,咖,);描述:接受远端连接,操作可能阻塞;参数:已监听套接字句柄;返回远端半相关三元组结构地址;第三章系统核心编程相关基础理论】返回值:返回远端半相关三元组结构长度指针;成功则返回套接字句柄,否则!;(,铀此,缸);描述:接收数据,操作可能阻塞;已连接套接字句柄:接收数据缓冲区地址;缓冲区字节数;操作标志位,从协议栈取出数据,取出但不删除协议栈数据,处理带外数据;返回值:成功则返回接收的字节数,否则。订沁(,锄如,而);描述:接收数据,操作可能阻塞:无连接套接字句柄;接收数据缓冲区地址:缓冲区字节数;操作标志位,从协议栈取出数据,则取出但不删除协议栈内数据;返回远端半相关三元组结构地址

31、:如返回远端半相关三元组结构长度指针;返回值:成功返回接收的字节数,否则趾。(,钒);摇述:发送数据,操作可能阻塞;已连接刚!套接字句柄:发送数据缓冲区地址;缓冲区字节数;电子科技大学硕士学位论文返回值操作标志位,从协议栈取出数据,数据不路由,带外数据;成功返回发送的字节数,否则。(,玑,硼,);无连接套接字句柄;发送数据缓冲区地址;缓冲区字节数;操作标志位,从协议栈取出数据,数据不路由;丘远端半相关三元组结构地址:远端半相关三元组结构长度;返回值:成功返回发送的字节数,否则。“);描述:返回值:关闭套接字;已打开套接字句柄;成功则返回,否则返回。第四章进程代码注入技术第四章进程代码注入技术从

32、这一篇开始,我们开始讨论进程套接字数据劫持实质性的实现技术,前面我们提到过,要监控和调试在运行中的进程与网络之间的通讯数据,那么我们必须首先解决一些技术问题,第一是如何在保护模式下访问进程私有空间;第二是如何截获到任意进程发送到网络或是从网络接收的数据;第三是如何将截获到的数据送至监控调试进程处理并将处理完毕后的数据返回被监控进程。下面我们讨论解决第一个问题,进程私有空间访问问题。也是起着监控进程和宿主进程之间协同动作桥梁的进程代码的注入问题。所谓进程代码注入即在宿主进程空间的空闲区域写入一块代码,在远进程发生调用的时候,该代码获取控制权。目前种有成熟的注入模式:远线程注入法和动态连接库注入法

33、,下面我们将详细阐述这两种方法与另一种高级的处理方法,直接代码注入法。远线程注入通过将挂接操作分为对宿主进程空间中的数据进行直接修改和由注入代码在宿主进程空间间接进行数据的独立修改两种不同的思想,代码注入可以分为不同方法。前者比较直接,兼容性相对而言比较高,但是由于直接对远进程空间的数据结构进行直接操作,实现起来非常复杂,我们将放到最后来讨论它;后者比较间接,即由注入代码中一个专门的挂接函数在宿主进程空间来独立完成挂接操作,这种间接的方法就需要注入代码后激活实施挂接的函数,并且在结束后激活取消挂接的函数,这种方法相对而言比较简单,但是多多少少也有些兼容性问题。远线程注入是指在其他进程中建立一个线程,用函数。这个远线程建立后就与建立它的进程无关了,而是进入了另外一个进程。举例说,进程可以在进程中建立一个远线程,这个远线程就是进程中的线程了,而此时如果进程结束了,也不会影响到那个远线程的运行,除非进程也结束了,那个远线程才会结束。第三章系统核心编程相关基础理论映射基地址,若为则系统自动选择地址;返回值成功返回映射基地址,否则返回。哪印、();描

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

最新文档

评论

0/150

提交评论