易语言创建进程载入DLL

易语言 2020-08-04 18:34:56

易语言创建进程载入DLL

.子程序 内存_修改进程虚拟保护, 整数型, 公开, 修改成功返回原保护类型
.参数 进程句柄, 整数型
.参数 内存地址, 整数型, , 内存地址
.参数 保护长度, 整数型, 可空, 修改长度 默认为 5
.参数 保护类型, 整数型, 可空, PAGE_等 默认 PAGE_EXECUTE_WRITECOPY(允许任何操作)
.局部变量 原始保护类型, 整数型

.如果真 (是否为空 (保护长度) = 真)
保护长度 = 5
.如果真结束
.如果真 (是否为空 (保护类型) = 真)
保护类型 = #PAGE_EXECUTE_READWRITE
.如果真结束
VirtualProtectEx (进程句柄, 内存地址, 保护长度, 保护类型, 原始保护类型)
返回 (原始保护类型)

创建进程_ (文件全名, 命令行, 0, 0, 0, 4, 0, 目录, 进程启动信息, 安全结构)
.如果真 (安全结构.进程句柄 = 0)
返回 (0)
.如果真结束
进程句柄 = 安全结构.进程句柄
线程ID = 安全结构.线程标识符
线程_取线程信息 (线程ID, 入口)
保存字节集 = 内存_读字节集内存 (进程句柄, 入口, 5)
路径地址 = 内存_申请文本内存 (进程句柄, 注入DLL)
调用地址 = 内存_申请字节集内存 (进程句柄, 到字节集 (操作_取API地址 (“LoadLibraryA”)) + 到字节集 (到整数 (入口 + 5)))
字节集 = 字节集 + { 96 }
' 00000000 60 PUSHAD
字节集 = 字节集 + { 104 } + 到字节集 (路径地址)
' 00000001 68 XXXXXXXX PUSH 路径地址
字节集 = 字节集 + { 255, 21 } + 到字节集 (调用地址)
' 00000006 FF15 XXXXXXXX CALL DS:[调用地址]
字节集 = 字节集 + { 97 }
' 00000020 61 POPAD
字节集 = 字节集 + 保存字节集
' 读出入口5字节 这里不同进程需要不同的处理
字节集 = 字节集 + { 255, 37 } + 到字节集 (到整数 (调用地址 + 4))
' 00000021 FF25 XXXXXXXX JMP DS:[调用地址+4](入口+5)
跳转地址 = 内存_申请字节集内存 (进程句柄, 字节集)
内存_写字节集内存 (进程句柄, 入口, 操作_jmp地址取机器码 (跳转地址, 入口))
进程_恢复进程 (进程句柄)