创建进程暂停调用模块和DLL

.版本 2
.支持库 spec
.支持库 EThread

.子程序 SN_CreateProcessA, 整数型, 公开
.参数 注入EXE路径, 文本型
.参数 函数名称, 文本型
.参数 注入的DLL的路径, 文本型
.局部变量 文件路径, 文本型
.局部变量 运行目录, 文本型
.局部变量 si, STARTUPINFO
.局部变量 pi, 进程结构
.局部变量 sRet, 整数型
.局部变量 模块名称, 文本型
.局部变量 dll文件路径, 整数型
.局部变量 Param, 整数型
.局部变量 LoadLibraryA地址, 整数型
.局部变量 hThread, 整数型
.局部变量 bRet, 整数型
.局部变量 dll句柄
.局部变量 函数地址, 整数型
.局部变量 内存地址, 整数型
.局部变量 线程句柄, 整数型
.局部变量 线程ID, 整数型

运行目录 = 取文本左边 (注入EXE路径, 倒找文本 (注入EXE路径, “\”, , 假))
模块名称 = 注入的DLL的路径
' 1、创建进程
sRet = CreateProcessA (注入EXE路径, “”, 0, 0, 假, 4, 0, 运行目录, si, pi)
调试输出 (sRet)
' 2、申请内存空间
dll文件路径 = 取文本长度 (模块名称) + 1
Param = VirtualAllocEx (pi.进程句柄, 0, dll文件路径, 4096, 4)
' 3、把DLL路径写入内存
WriteProcessMemory (pi.进程句柄, Param, 模块名称, 取字节集长度 (到字节集 (模块名称)), 0)
' 4、获取loadlibrary地址
LoadLibraryA地址 = GetProcAddress (GetModuleHandleA (“kernel32”), “LoadLibraryA”)

' 5、创建远程线程调用LoadLibraryA函数,获取远程句柄
hThread = CreateRemoteThread (pi.进程句柄, 0, 0, LoadLibraryA地址, Param, 0, 0)
' 5、唤醒主线程
bRet = ResumeThread (pi.线程句柄)
' 6、测试
WaitForSingleObject (hThread, -1)
' -------------------------------
dll句柄 = LoadLibraryA (模块名称)
函数地址 = GetProcAddress (dll句柄, 函数名称)

内存地址 = 申请内存 (取文本长度 (函数名称), )

写到内存 (函数名称, 内存地址, )

线程句柄 = CreateThread (0, 0, 函数地址, 内存地址, 0, 线程ID)

.如果真 (等待线程 (线程句柄, 100))
关闭线程句柄 (线程句柄)
释放内存 (内存地址)

.如果真结束

.如果 (hThread = 0)
返回 (0)
.否则
返回 (hThread)
.如果结束

STARTUPINFO结构体

.版本 2
 
.数据类型 STARTUPINFO, , ,
    .成员 cbSize, 整数型
    .成员 lpReserved, 整数型
    .成员 lpDesktop, 整数型
    .成员 lpTitle, 整数型
    .成员 dwX, 整数型
    .成员 dwY, 整数型
    .成员 dwXSize, 整数型
    .成员 dwYSize, 整数型
    .成员 dwXCountChars, 整数型
    .成员 dwYCountChars, 整数型
    .成员 dwFillAttribute, 整数型
    .成员 dwFlags, 整数型
    .成员 wShowWindow, 长整数型
    .成员 cbReserved2, 长整数型
    .成员 lpReserved2, 整数型
    .成员 hStdInput, 整数型
    .成员 hStdOutput, 整数型
    .成员 hStdError, 整数型

注入调用

参考:http://www.511yj.com/eyuyan-hook-57.html

视频教程下载:

链接:https://pan.baidu.com/s/158ikKVjIwaoF4438MG4fhA

提取码:加QQ群:521068947 群文件下载


发布日期:

所属分类: 易语言 标签: