易语言内存注入

511遇见

内存注入流程

1、获取注入进程ID
2、获取注入DLL的路径
3、打开进程,获取进程句柄
4、申请内存,读入DLL
5、将DLL路径写入内存地址
6、将DLL路径写入内存地址
7、为内存中的汇编指令申请内存地址
8、把汇编指令写入内存
9、把汇编指令写入内存
10、创建远程线程,执行装载DLL函数
11、线程等待
12、取终止线程退出的代码
13、 关闭线程和进程句柄

易语言内存注入源码:

.版本 2
 
.子程序 内存注入, 逻辑型
.参数 进程ID, 整数型
.参数 DLL文件, 文本型
.局部变量 DLL数据, 字节集
.局部变量 DLL数据大小, 整数型
.局部变量 主要汇编指令, 字节集
.局部变量 线程句柄, 整数型
 
' 打开进程,获取进程句柄
进程句柄 = OpenProcess (#PROCESS_ALL_ACCESS, 假, 进程ID)
.如果真 (进程句柄 = 0)
    信息框 (“打开进程失败!!”, 16, , )
    返回 (假)
.如果真结束
 
' 申请内存,读入DLL
DLL数据 = 读入文件 (DLL文件)
 
DLL数据大小 = 取字节集长度 (DLL数据)1
申请DLL内存地址 = VirtualAllocEx (进程句柄, 0, DLL数据大小, #MEM_COMMIT, #PAGE_EXECUTE_READWRITE)
.如果真 (申请DLL内存地址 = 0)
    信息框 (“申请DLL内存地址失败!!”, 16, , )
    CloseHandle (进程句柄)
    返回 ()
.如果真结束
 
' 将DLL路径写入内存地址
 
WriteProcessMemory (进程句柄, 申请DLL内存地址, DLL数据, DLL数据大小, 0)
 
' 将一些汇编指令写入内存,进行加载
 
主要汇编指令 = #load_code + #getaddr_code + #free_code
 
' 为内存中的汇编指令申请内存地址
 
申请装载地址 = VirtualAllocEx (进程句柄, 0, 取字节集长度 (主要汇编指令), #MEM_COMMIT, #PAGE_EXECUTE_READWRITE)
.如果真 (申请装载地址 = 0)
    信息框 (“申请装载地址失败!!”, 16, , )
    CloseHandle (进程句柄)
    返回 (假)
.如果真结束
 
' 把汇编指令写入内存
 
WriteProcessMemory (进程句柄, 申请装载地址, 主要汇编指令, 取字节集长度 (主要汇编指令), 0)
 
' 保存获取的DLL函数地址功能和卸载DLL的地址
getaddr_code地址 = 申请装载地址 + 取字节集长度 (#load_code)
free_code地址 = getaddr_code地址 + 取字节集长度 (#getaddr_code)
 
' 创建远程线程,执行装载DLL函数
线程句柄 = CreateRemoteThread (进程句柄, 0, 0, 申请装载地址, 申请DLL内存地址, 0, 0)
' 线程等待
 
WaitForSingleObject (线程句柄, #DMUS_SEG_REPEAT_INFINITE)
' 取终止线程退出的代码
 
GetExitCodeThread (线程句柄, DLL句柄)
.如果真 (线程句柄 = 0)
    信息框 (“内存注入失败!!”, 16, , )
    CloseHandle (进程句柄)
    返回 ()
.如果真结束
 
' 关闭线程和进程句柄
CloseHandle (线程句柄)
CloseHandle (进程句柄)
返回 (真)

教程获取下载:


发布日期:

所属分类: 易语言 标签: