【ACCESS精品源码栏目提醒】:网学会员为需要ACCESS精品源码的朋友们搜集整理了【精品】易语言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 返回值类型:整数型 参数的名称为“文件映射句柄”,类型为“整数型”。
注明:指定欲在其中创建映射的一个文 件句柄。
HFFFFFFFF-1表示在内存中创建一个文件映射。
参数的名称为“安全对象”,类型为“SECURITY_ATTRIBUTES”。
注明:SECURITY_ATTRIBUTES 指定一个安全对象,在创建文件映射时使用。
如果为NULL(用 ByVal As Long 传递零), 表示使用默认安全对象。
参数的名称为“打开映射方式”,类型为“整数型”。
注明:下述常数之一:PAGE_READONLY 以只读方式打开映射PAGE_READWRITE:以可读、可写方式打开映射PAGE_WRITECOPY:为 写操作留下备份可组合使用下述一个或多个常数SEC_COMMIT:为文件映射一个小节中的 所有页分配内存SEC_IMAGE:文件是个可执行文件SEC_RESERVE:为没有分配实际内存的 一个小节保留虚拟内存空间 参数的名称为“文件映射最大长度”,类型为“整数型”。
注明:文件映射的最大长度(高32 位)。
参数的名称为“文件映射的最小长度”,类型为“整数型”。
注明:文件映射的最小长度(低 32 位)。
如这个参数和 dwMaximumSizeHigh 都是零,就用磁盘文件的实际长度。
参数的名称为“映射对象名”,类型为“文本型”。
注明:指定文件映射对象的名字。
如存在这个名字的一个映射,函数就会打开它。
用 vbNull 创建一个无名的文件映射。
OpenFileMappingA //打开一个已存在的文件映射对象成功返回打开的文件映射对象句柄 Dll 命令名:OpenFileMapping 公开 所处动态链接库的文件名:kernel32 在所处动态链接库中的命令名:OpenFileMappingA 返回值类型:整数型 类 参数的名称为“常数”, 型