- 1、本文档共11页,可阅读全部内容。
- 2、有哪些信誉好的足球投注网站(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
易语言WindowsAPI
上一期我们讲了勾子基本概念和一些简单的应用
这一期我们就来学习用用钩子技术和内存文件映射共享技术来实现远程线程插入? ?? 现在网上关于这项编程技术的介绍满天飞,因为要想写出一个好的后门,该后门至少要达到高隐蔽.防查杀,无端口,自启动等要求,而将木马以DLL的形式嵌入到系统进程中,基本上可以满足要求,而这种远程线程注入技术也成为现代后门和木马程序的一项标准技术指标.如果大家要想更为清晰地掌握该项编程技术,强烈推荐细读jeffery Richter的.该书个人觉得是每个学习Windows黑客编程技术爱好者的圣经.
不过,由于易语言出来的时间不长,网上用易语言具体实现这项编程技术的资料廖廖无几
今天,我们就来用易语言来实现远程线程插入:
大家知道,传统的远程线程插入是通过以下几个API来完成的;
·OpenProcess - 用于打开要寄生的目标进程。
·VirtualAllocEx/VirtualFreeEx - 用于在目标进程中分配/释放内存空间。
·WriteProcessMemory - 用于在目标进程中写入要加载的DLL名称。
·CreateRemoteThread - 远程加载DLL的核心内容,用于控制目标进程调用API函数。
·LoadLibrary - 目标进程通过调用此函数来加载病毒DLL。
这种方法虽然好,但有个缺点:只能在NT核心的系统上有效,在98中无效
并且由于易DLL的特殊性,上面的方法并不奏效,虽然可以用写入汇编码来解决问题
但也较不方便,钩子的出现为我们解决了这个难题
通过钩子实现远程线程插入的思路如下:
通过安装windows 消息钩子WH_GETMESSAGE,把待插线程代码所在的DLL注入到其他进程里在钩子回调函数中,判断当前进程ID是否是要插入的进程ID,如果是则创建一个新线程这个新线程函数就是我们要执行的代码所在的函数,到这里也就达到了我们的目地.
现在就产生了一个新问题,由于我们的要执行的代码是放在一个DLL里面的,创建新线程就需要加载这个DLL,就需要知道DLL路径,还有判断当前进程ID是否是要插入的进程ID,首先也要知道要插入的进程ID是多少等等这些信息,这就涉及到进程通讯,我们可以用文件映射技术来进行进程通讯.
文件映射主要是通过以下几个API来完成的:
*CreateFileMapping???? //创建文件映射对象 ,成功返回文件映射对象句柄??? Dll命令名:CreateFileMapping???? 所处动态链接库的文件名:kernel32???? 在所处动态链接库中的命令名:CreateFileMappingA???? 返回值类型:整数型???? 参数1的名称为“文件映射句柄”,类型为“整数型”。注明:指定欲在其中创建映射的一个文??????????? 件句柄。HFFFFFFFF(-1)表示在内存中创建一个文件映射。???? 参数2的名称为“安全对象”,类型为“SECURITY_ATTRIBUTES”。注明: SECURITY_ATTRIBUTES?????????? 指定一个安全对象,在创建文件映射时使用。如果为NULL(用ByVal As Long传递零),?????????????? 表示使用默认安全对象。???? 参数3的名称为“打开映射方式”,类型为“整数型”。注明:下述常数之一:;PAGE_READONLY?????????? 以只读方式打开映射;PAGE_READWRITE:以可读、可写方式打开映射;PAGE_WRITECOPY:为????????????? 写操作留下备份可组合使用下述一个或多个常数;SEC_COMMIT:为文件映射一个小节中的?????????????? 所有页分配内存;SEC_IMAGE:文件是个可执行文件;SEC_RESERVE:为没有分配实际内存的????????????? 一个小节保留虚拟内存空间???? 参数4的名称为“文件映射最大长度”,类型为“整数型”。注明:文件映射的最大长度(高32位)。???? 参数5的名称为“文件映射的最小长度”,类型为“整数型”。注明:文件映射的最小长度(低32位)。如这个参数和dwMaximumSizeHigh都是零,就用磁盘文件的实际长度。???? 参数6的名称为“映射对象名”,类型为“文本型”。注明:指定文件映射对象的名字。如存在这个名字的一个映射,函数就会打开它。用vbNull创建一个无名的文件映射;。
*OpenFileMappingA??? //打开一个已存在的文件映射对象,成功返回打开的文件映射对象句柄?? Dll命令名:OpenFileMapping???? 公开???? 所处动态链接库的文件名:kernel32???? 在所处动
文档评论(0)