易语言c源码流程图怎么实现,易语言APC内存注入主要流程源码

易语言APC内存注入主要流程

1、打开进程

进程句柄 = OpenProcess (2035711, 假, 进程ID)

2、读入DLL文件及获取主要汇编指令

DLL文件 = 读入文件 (DLL路径)

DLL文件长度 = 取字节集长度 (DLL文件)

主要汇编指令长度 = 取字节集长度 (#PE文件)

3、创建文件映射对象

映射对象句柄 = CreateFileMappingA (-1, 0, 64, 0, DLL文件长度 + 主要汇编指令长度, “Mapc”)

4、将文件映射对象映射到当前程序内存空间

映射对象开始地址 = MapViewOfFile (映射对象句柄,2, 0, 0, DLL文件长度 + 主要汇编指令长度)

5、 写入内存

RtlMoveMemory_字节集 (映射对象开始地址, #PE文件, 主要汇编指令长度)

RtlMoveMemory_字节集 (映射对象开始地址 + 主要汇编指令长度, DLL文件, DLL文件长度)

6、关闭文件映射对象

UnmapViewOfFile (映射对象开始地址)

7、创建内存映射对象 内核

ZwMapViewOfSection (映射对象句柄, 进程句柄, 内核映射对象基址, 0, 0, 0, 内核映射对象大小, 1, 0, 64)

8、获取GetModuleHandleA地址

GetModuleHandleA地址 = GetProcAddress (GetModuleHandleA (“kernel32.dll”), “GetModuleHandleA”)

9、创建远程线程并挂起

线程句柄 = CreateRemoteThread (进程句柄, 0, 0, GetModuleHandleA地址, 0, #CREATE_SUSPENDED, 0)

10、把APC对象加入到指定线程的APC队列中

QueueUserAPC (内核映射对象基址, 线程句柄, 内核映射对象基址 + 主要汇编指令长度)

11、关闭线程句柄

ResumeThread (线程句柄)

12、关闭映射对象句柄

CloseHandle (映射对象句柄)

13、关闭进程句柄

CloseHandle (进程句柄)

易语言APC内存注入主要源码

.版本 2

' 打开进程

进程句柄 = OpenProcess (2035711, 假, 进程ID)

.如果真 (进程句柄 = 0)

信息框 (“打开进程失败!”, 0, , )

返回 (假)

.如果真结束

加入日志 (“打开进程成功!”)

' 读入DLL文件及获取主要汇编指令

DLL文件 = 读入文件 (DLL路径)

DLL文件长度 = 取字节集长度 (DLL文件)

主要汇编指令长度 = 取字节集长度 (#PE文件)

' 创建文件映射对象

' #INVALID_HANDLE_VALUE -1创建一个进程间共享的对象,,

' ,64区域可以执行代码,应用程序可以读写该区域。

映射对象句柄 = CreateFileMappingA (#INVALID_HANDLE_VALUE, 0, #PAGE_EXECUTE_READWRITE, 0, DLL文件长度 + 主要汇编指令长度, “Yous”)

.如果真 (映射对象句柄 = -1)

信息框 (“创建映射对象失败!”, 0, , )

返回 (假)

.如果真结束

加入日志 (“创建映射对象成功!”)

' 将文件映射对象映射到当前程序内存空间,,#FILE_MAP_WRITE–2可以读取和写入文件

映射对象开始地址 = MapViewOfFile (映射对象句柄, #FILE_MAP_WRITE, 0, 0, DLL文件长度 + 主要汇编指令长度)

.如果真 (映射对象开始地址 = 0)

信息框 (“映射对象映射失败!”, 0, , )

返回 (假)

.如果真结束

加入日志 (“映射对象映射成功!”)

' 写入内存

RtlMoveMemory_字节集 (映射对象开始地址, #PE文件, 主要汇编指令长度)

RtlMoveMemory_字节集 (映射对象开始地址 + 主要汇编指令长度, DLL文件, DLL文件长度)

' 关闭文件映射对象

UnmapViewOfFile (映射对象开始地址)

' 创建内存映射对象 内核

ZwMapViewOfSection (映射对象句柄, 进程句柄, 内核映射对象基址, 0, 0, 0, 内核映射对象大小, 1, 0, 64)

.如果真 (内核映射对象基址 ≤ 0)

信息框 (“映射对象内核映射失败!”, 0, , )

返回 (假)

.如果真结束

加入日志 (“映射对象内核映射成功!”)

' 获取GetModuleHandleA地址

GetModuleHandleA地址 = GetProcAddress (GetModuleHandleA (“kernel32.dll”), “GetModuleHandleA”)

' #CREATE_SUSPENDED=4 新进程的主线程会以暂停的状态被创建,直到调用ResumeThread函数被调用时才运行。

线程句柄 = CreateRemoteThread (进程句柄, 0, 0, GetModuleHandleA地址, 0, #CREATE_SUSPENDED, 0)

.如果真 (线程句柄 = 0)

信息框 (“创建远程线程失败!”, 0, , )

返回 (假)

CloseHandle (进程句柄)

主要api

CreateFileMappingA

.版本 2

.DLL命令 CreateFileMappingA, 整数型, "kernel32", "CreateFileMappingA", , 创建一个新的文件映射对象 新建文件映射对象的句柄;零意味着出错。会设置GetLastError。即使函数成功,但倘若返回的句柄属于一个现成的文件映射对象,那么GetLastError也会设置成ERROR_ALREADY_EXISTS。在这种情况下,文件映射的长度就是现有对象的长度,而不是这个函数指定的尺寸

.参数 文件映射句柄, 整数型, , 指定欲在其中创建映射的一个文件句柄。&HFFFFFFFF&表示在内存中创建一个文件映射

.参数 安全对象, 整数型, , SECURITY_ATTRIBUTES,指定一个安全对象,在创建文件映射时使用。如果为NULL(用ByVal As Long传递零),表示使用默认安全对象

.参数 打开映射方式, 整数型, , 下述常数之一:;PAGE_READONLY:以只读方式打开映射;PAGE_READWRITE:以可读、可写方式打开映射;PAGE_WRITECOPY:为写操作留下备份可组合使用下述一个或多个常数;SEC_COMMIT:为文件映射一个小节中的所有页分配内存;SEC_IMAGE:文件是个可执行文件;SEC_RESERVE:为没有分配实际内存的一个小节保留虚拟内存空间

.参数 文件映射最大长度, 整数型, , 文件映射的最大长度(高32位)

.参数 文件映射的最小长度, 整数型, , 文件映射的最小长度(低32位)。如这个参数和dwMaximumSizeHigh都是零,就用磁盘文件的实际长度

.参数 映射对象名, 文本型, , 指定文件映射对象的名字。如存在这个名字的一个映射,函数就会打开它。用vbNull创建一个无名的文件映射;

MapViewOfFile

.版本 2

.DLL命令 MapViewOfFile, 整数型, "kernel32", "MapViewOfFile", , 将一个文件映射对象映射到当前应用程序的地址空间。MapViewOfFileEx允许我们指定一个基本地址来进行映射 文件映射在内存中的起始地址。零表示出错。会设置GetLastError

.参数 hFileMappingObject, 整数型, , 文件映像对象句柄

.参数 dwDesiredAccess, 整数型, , 映射对象的文件数据的访问方式

.参数 dwFileOffsetHigh, 整数型, , 文件映射起始偏移的高32位

.参数 dwFileOffsetLow, 整数型, , 文件映射起始偏移的低32位.(64KB对齐不是必须的)

.参数 dwNumberOfBytesToMap, 整数型, , 映射文件的字节数

ZwMapViewOfSection

.版本 2

.DLL命令 ZwMapViewOfSection, 整数型, "ntdll.dll", "ZwMapViewOfSection", , 创建内存映射文件 内核

.参数 SectionHandle, 整数型, , 对象句柄

.参数 ProcessHandle, 整数型, , 进程对象句柄

.参数 BaseAddress, 整数型, 传址, 指向一个接收基址的变量的指针

.参数 ZeroBits, 整数型

.参数 CommitSize, 整数型, , 提交区域大小

.参数 SectionOffset, 整数型, , 指向一个接收偏移量的变量

.参数 ViewSize, 整数型, 传址, 一个指向sizet变量的指针。

.参数 InheritDisposition, 整数型, , 指定如何与子进程共享

.参数 AllocationType, 整数型, , 指定一组标记,用于描述为指定的页面区域执行的分配的类型。

.参数 Win32Protect, 整数型, , 指定最初提交的页面区域的保护类型。

CreateRemoteThread

.版本 2

.DLL命令 CreateRemoteThread, 整数型, "kernel32", "CreateRemoteThread", 公开, 在另一进程中建立线程

.参数 hProcess, 整数型, , 进程句柄

.参数 lpThreadAttributes, 整数型, , 安全属性

.参数 dwStackSize, 整数型, , 线程初始大小

.参数 lpStartAddress, 整数型, , 线程回调函数地址

.参数 lpParameter, 整数型, , 线程参数

.参数 dwCreationFlags, 整数型, , 创建标志

.参数 lpThreadId, 整数型, 传址, 线程ID,有传址

QueueUserAPC

.版本 2

.DLL命令 QueueUserAPC, 整数型, "kernel32.dll", "QueueUserAPC", , 一个APC对象加入到指定线程的APC队列中。

.参数 pfnAPC, 整数型, , 指向一个用户提供的APC函数的指针

.参数 hThread, 整数型, , 线程句柄

.参数 dwData, 整数型, , 指定一个被传到pfnAPC参数指向的APC函数的值。

PEload文件

到VIP QQ群提供下载

交流①群:521068947

511遇见QQ:272586593

原文链接:https://blog.csdn.net/weixin_36349918/article/details/117187182?ops_request_misc=%257B%2522request%255Fid%2522%253A%2522167042854316800180664292%2522%252C%2522scm%2522%253A%252220140713.130102334.pc%255Fblog.%2522%257D&request_id=167042854316800180664292&biz_id=0&utm_medium=distribute.pc_search_result.none-task-blog-2~blog~first_rank_ecpm_v1~times_rank-25-117187182-null-null.nonecase&utm_term=%E6%98%93%E8%AF%AD%E8%A8%80%E6%BA%90%E7%A0%81

收藏 (0) 打赏

感谢您的支持,我会继续努力的!

打开微信/支付宝扫一扫,即可进行扫码打赏哦,分享从这里开始,精彩与您同在
点赞 (0)

资源来源于互联网和网友投稿如有侵权请及时联系客服下架 本站提供的资源,都来自网络,版权争议与本站无关,所有内容及软件的文章仅限用于学习和研究目的。 不得将上述内容用于商业或者非法用途,否则,一切后果请用户自负,我们不保证内容的长久可用性,通过使用本站内容随之而来的风险以及产生法律纠纷与本站无关,您必须在下载后的24个小时之内,从您的电脑/手机中彻底删除。 如果您喜欢该程序,请支持正版软件,购买注册,得到更好的正版服务。 本站只提供资源,不提供技术支持,介意勿下!源码太多站长无法每款都进行测试请自行甄别,虚拟产品售出无退换,下载链接如有失效请及时联系客服

咖科努斯源码资源站-免费PHP网站源码模板,插件软件资源分享平台 易语言源码 易语言c源码流程图怎么实现,易语言APC内存注入主要流程源码 https://kaknus.cn/341.html

常见问题

相关文章

评论
暂无评论
官方客服团队

为您解决烦忧 - 24小时在线 专业服务