易语言APC应用层注入

步骤

1、打开需要注入的进程
2、获取DLL文件路径的长度
3、申请内存地址
4、将DLL路径写入内存
5、获取loadlibraryA在kernel32.dll中的地址
6、获取系统线程快照句柄,4在快照中包含所有的线程
7、初始化线程结构大小
8、验证检索与线程相关的第一个线程的信息
9、判断父进程ID等于 参数的进程ID
10、打开线程
11、不等于说明打开线程成功,开始核心注入
(1)指向一个我们提供的APC函数指针
(2)线程句柄
(3)指定一个被传到APC参数指向的函数的值
12、关闭进程句柄
13、关闭线程局部

易语言APC应用层注入源码:

.版本 2
 
.子程序 APC注入_R3, 逻辑型, , APC应用层注入
.参数 进程ID, 整数型
.参数 DLL文件, 文本型
.局部变量 dll文件大小, 整数型
.局部变量 内存地址, 整数型
.局部变量 LoadLibraryA地址, 整数型
.局部变量 快照句柄, 整数型
.局部变量 线程信息, THREADENTRY32
 
' 1、打开需要注入的进程
进程句柄 = OpenProcess (2035711, 假, 进程ID)
.如果真 (进程句柄 = 0)
    信息框 (“打开进程失败!”, 0, , )
    返回 (假)
.如果真结束
' 2、获取DLL文件路径的长度
dll文件大小 = 取文本长度 (DLL文件)1
' 3、申请内存地址
内存地址 = VirtualAllocEx (进程句柄, 0, dll文件大小, 4096, 64)
.如果真 (内存地址 = 0)
    信息框 (“申请内存地址失败!”, 0, , )
    返回 (假)
.如果真结束
' 4、将DLL路径写入内存
WriteProcessMemory (进程句柄, 内存地址, 到字节集 (DLL文件), dll文件大小, 0)
' 5、获取loadlibraryA在kernel32.dll中的地址
LoadLibraryA地址 = GetProcAddress (GetModuleHandleA (“kernel32”), “LoadLibraryA”)
.如果真 (LoadLibraryA地址 = 0)
    信息框 (“获取loadlibraryA失败!”, 0, , )
    返回 (假)
.如果真结束
' 6、获取系统线程快照句柄,4在快照中包含所有的线程
快照句柄 = CreateToolhelp32Snapshot (4, 0)
.如果真 (快照句柄 = 0)
    信息框 (“获取系统线程快照句柄失败!”, 0, , )
    返回 ()
.如果真结束
CloseHandle (快照句柄)
CloseHandle (进程句柄)
返回 ()

我们将会在下一课完成注入DLL的编写

教程获取下载:


发布日期:

所属分类: 易语言 标签: