易语言APC内存注入

APC内存注入流程

1、打开进程
2、读入DLL文件及获取主要汇编指令
3、创建文件映射对象
4、将文件映射对象映射到当前程序内存空间
5、 写入内存
(1)写汇编指令
(2)写注入的DLL
6、关闭文件映射对象
7、创建内存映射对象 内核
8、获取GetModuleHandleA地址
9、创建远程线程并挂起
10、把APC对象加入到指定线程的APC队列中
11、恢复线程句柄
12、关闭映射对象句柄
13、关闭进程句柄

易语言APC内存注入源码:

.版本 2
 
.子程序 Apc_内存注入, , 公开
.参数 进程ID, 整数型
.参数 DLL路径, 文本型
.局部变量 进程句柄, 整数型
.局部变量 DLL文件, 字节集
.局部变量 DLL文件长度, 整数型
.局部变量 主要汇编指令长度, 整数型
.局部变量 映射对象句柄, 整数型
.局部变量 映射对象开始地址, 整数型
.局部变量 内核映射对象基址, 整数型
.局部变量 内核映射对象的大小, 整数型
.局部变量 GetModuleHandleA地址, 整数型
.局部变量 线程句柄, 整数型
 
' 1、打开进程
进程句柄 = OpenProcess (2035711, 假, 进程ID)
 
' 2、读入DLL文件及获取主要汇编指令
DLL文件 = 读入文件 (DLL路径)
DLL文件长度 = 取字节集长度 (DLL文件)
主要汇编指令长度 = 取字节集长度 (#PE文件)
 
' 3、创建文件映射对象
映射对象句柄 = CreateFileMappingA (-1, 0, 64, 0, DLL文件长度 + 主要汇编指令长度, “Myapc”)
 
' 4、将文件映射对象映射到当前程序内存空间
映射对象开始地址 = MapViewOfFile (映射对象句柄, 2, 0, 0, DLL文件长度 + 主要汇编指令长度)
 
' 5、 写入内存
'1)写汇编指令
' (2)写注入的DLL
RtlMoveMemory_字节集 (映射对象开始地址, #PE文件, 主要汇编指令长度)
RtlMoveMemory_字节集 (映射对象开始地址 + 主要汇编指令长度, DLL文件, DLL文件长度)
 
' 6、关闭文件映射对象
UnmapViewOfFile (映射对象开始地址)
 
' 7、创建内存映射对象 内核
ZwMapViewOfSection (映射对象句柄, 进程句柄, 内核映射对象基址, 0, 0, 0, 内核映射对象的大小, 1, 0, 64)
 
' 8、获取GetModuleHandleA地址
GetModuleHandleA地址 = GetProcAddress (GetModuleHandleA (“kernel32.dll), “GetModuleHandleA”, )

教程获取下载:


发布日期:

所属分类: 易语言 标签: