我是靠谱客的博主 俊秀凉面,最近开发中收集的这篇文章主要介绍易语言内存注入,觉得挺不错的,现在分享给大家,希望可以做个参考。

概述

易语言完成内存注入的难度很大。

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 (进程句柄)
返回 (真)

511遇见

注入步骤

1、获取进程ID
2、获取注入DLL路径
3、获取注入DLL里的函数名称
4、执行内存注入
5、调用注入函数
6、释放注入

注入DLL源码

.版本 2
 
.程序集 程序集1
 
.子程序 _启动子程序, 整数型, , 请在本子程序中放置动态链接库初始化代码
 
_临时子程序 ()  ' 在初始化代码执行完毕后调用测试代码
返回 (0)  ' 返回值被忽略。
 
.子程序 _临时子程序
 
' 本名称子程序用作测试程序用,仅在开发及调试环境中有效,编译发布程序前将被系统自动清空,请将所有用作测试的临时代码放在本子程序中。 ***注意不要修改本子程序的名称、参数及返回值类型。
 
.子程序 Start, , 公开
 
载入 (窗口1, , 真)

加载内存中的DLL

.版本 2
 
.子程序 LoadMemLibrary, 整数型, 公开, 加载内存中的DLL
.参数 pData, 字节集
 
置入代码 ({ 139, 69, 8, 139, 0, 133, 192, 117, 4, 201, 194, 4, 0, 131, 192, 8, 137, 69, 8, 235, 3 })
置入代码 (#load_code)
返回 (0)

释放内存中的DLL

.版本 2
 
.子程序 FreeMemLibrary, 逻辑型, 公开, 释放内存中的DLL
.参数 hLibModule, 整数型
 
置入代码 ({ 235, 3 })
置入代码 (#free_code)
返回 (假)

调用注入函数接口

.版本 2
.支持库 spec
 
.局部变量 hAddress, , , , 函数地址
.局部变量 返回值
 
hAddress = GetMemProcAddress (hModule, 编辑框3.内容)
.如果真 (hAddress ≠ 0)
    返回值 = 调用子程序_asm (hAddress, , , , , , , , , , , , , , , )
    调试输出 (“返回值” + 到文本 (返回值))

释放注入句柄

.版本 2
.支持库 spec
 
.局部变量 ret, 逻辑型
 
ret = FreeMemLibrary (hModule)
调试输出 (ret)
hModule = 0

源码参考:http://www.511yj.com/eyuyan-hook-71.html

最后

以上就是俊秀凉面为你收集整理的易语言内存注入的全部内容,希望文章能够帮你解决易语言内存注入所遇到的程序开发问题。

如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(31)

评论列表共有 0 条评论

立即
投稿
返回
顶部