为编程爱好者分享易语言教程源码的资源网
好用的代理IP,游戏必备 ____广告位招租____ 服务器99/年 ____广告位招租____ ____广告位招租____ 挂机,建站服务器
好用的代理IP,游戏必备 ____广告位招租____ 服务器低至38/年 ____广告位招租____ ____广告位招租____ 挂机,建站服务器

网站首页 > 易语言相关 > 易语言例程 正文

易语言在内存中运行软件EXE可执行文件

三叶资源网 2022-06-30 01:52:17 易语言例程 2087 ℃ 0 评论

易语言在内存中运行软件EXE可执行文件

.版本 2
.支持库 spec

.程序集 程序集1

.子程序 _启动子程序, 整数型, , 请在本子程序中放置易模块初始化代码

_临时子程序 ()  ' 在初始化代码执行完毕后调用测试代码
返回 (0)  ' 可以根据您的需要返回任意数值

.子程序 _临时子程序

' 本名称子程序用作测试程序用,仅在开发及调试环境中有效,编译发布程序前将被系统自动清空,请将所有用作测试的临时代码放在本子程序中。 ***注意不要修改本子程序的名称、参数及返回值类型。

.子程序 在内存中运行EXE, 逻辑型, 公开, 可以直接运行资源中的程序,不必释放。成功返回真,失败返回假。
.参数 欲执行的程序, 字节集, , 欲执行的程序,不支持某些加了壳的程序,请自行测试。
.参数 命令行, 文本型, 可空, 为程序提供的命令行参数,不需要请留空。
.参数 外壳程序路径, 文本型, 可空, 外壳程序的路径(如果用系统程序做外壳,如cmd.exe、svchost.exe,可以实现穿防火墙,呵呵),不支持某些程序,请自行测试;不在当前目录下要提供绝对路径;留空默认为cmd.exe,如果无法运行,请换用不同的程序尝试。
.参数 等待程序运行完毕, 逻辑型, 可空, 默认为假,即不等待。
.参数 窗口显示方式, 整数型, 可空, 1#隐藏窗口; 2#普通激活; 3#最小化激活; 4#最大化激活; 5#普通不激活; 6#最小化不激活。如果省略本参数,默认为“普通激活”方式。
.参数 运行信息, 运行信息, 参考 可空, 用来接收在内存中执行的exe的运行信息(进程、主线程的句柄和ID)。不需要可留空。
.局部变量 idh, IMAGE_DOS_HEADER
.局部变量 inh, IMAGE_NT_HEADERS
.局部变量 ish, IMAGE_SECTION_HEADER
.局部变量 si, STARTUPINFO
.局部变量 context, CONTEXT86
.局部变量 ImageBase, 整数型
.局部变量 i, 整数型
.局部变量 addr, 整数型
.局部变量 lOffset, 整数型

连续赋值 (0, 运行信息.进程ID, 运行信息.进程句柄, 运行信息.主线程ID, 运行信息.主线程句柄)
.如果真 (欲执行的程序 = {  })
    返回 (假)
.如果真结束
CopyMemory_idh (idh, 欲执行的程序 [1], Len_idh (idh))
.如果真 (idh.e_magic ≠ 23117)
    返回 (假)
.如果真结束
CopyMemory_inh (inh, 欲执行的程序 [idh.e_lfanew + 1], Len_inh (inh))
.如果真 (inh.Signature ≠ 17744)
    返回 (假)
.如果真结束
si.cb = Len_si (si)
.如果真 (是否为空 (窗口显示方式) = 假 且 窗口显示方式 ≠ 2 且 窗口显示方式 > 0 且 窗口显示方式 ≤ 6)
    si.dwFlags = 1
    si.wShowWindow = 多项选择 (窗口显示方式, 0, 5, 2, 3, 8, 7)
.如果真结束
.如果真 (CreateProcess (0, 选择 (是否为空 (外壳程序路径), 取cmd路径 (), 外壳程序路径) + 选择 (是否为空 (命令行) 或 命令行 = “”, “”, “ ” + 命令行), 0, 0, 0, 4, 0, 0, si, 运行信息) = 0)
    返回 (假)
.如果真结束
context.ContextFlags = 65538
.如果真 (GetThreadContext (运行信息.主线程句柄, context) = 0)
    ClearProcess (运行信息)
    返回 (假)
.如果真结束
ReadProcessMemory (运行信息.进程句柄, context.Ebx + 8, addr, 4, 0)
.如果真 (addr = 0)
    ClearProcess (运行信息)
    返回 (假)
.如果真结束
.如果真 (ZwUnmapViewOfSection (运行信息.进程句柄, addr) = 0)
    ClearProcess (运行信息)
    返回 (假)
.如果真结束
ImageBase = VirtualAllocEx (运行信息.进程句柄, inh.OptionalHeader.ImageBase, inh.OptionalHeader.SizeOfImage, 12288, 4)
.如果真 (ImageBase = 0)
    ClearProcess (运行信息)
    返回 (假)
.如果真结束
WriteProcessMemory (运行信息.进程句柄, ImageBase, 欲执行的程序 [1], inh.OptionalHeader.SizeOfHeaders, 0)
lOffset = idh.e_lfanew + Len_inh (inh)
.计次循环首 (inh.FileHeader.NumberOfSections, i)
    CopyMemory_ish (ish, 欲执行的程序 [lOffset + (i - 1) × 40 + 1], Len_ish (ish))
    .如果真 (ish.PointerToRawData + 1 > 字节集_取长度 (欲执行的程序))
        ClearProcess (运行信息)
        返回 (假)
    .如果真结束
    WriteProcessMemory (运行信息.进程句柄, ImageBase + ish.VirtualAddress, 欲执行的程序 [ish.PointerToRawData + 1], ish.SizeOfRawData, 0)
    VirtualProtectEx (运行信息.进程句柄, ImageBase + ish.VirtualAddress, ish.VirtualSize, Protect (ish.characteristics), addr)
.计次循环尾 ()
WriteProcessMemory2 (运行信息.进程句柄, context.Ebx + 8, ImageBase, 4, 0)
context.Eax = ImageBase + inh.OptionalHeader.AddressOfEntryPoint
SetThreadContext (运行信息.主线程句柄, context)
ResumeThread (运行信息.主线程句柄)
.如果真 (等待程序运行完毕)
    WaitForSingleObject (运行信息.进程句柄, -1)
.如果真结束
.如果真 (是否为空 (运行信息))
    CloseHandle (运行信息.主线程句柄)
    CloseHandle (运行信息.进程句柄)
.如果真结束
返回 (真)

.子程序 ClearProcess
.参数 运行信息, 运行信息, 参考

TerminateProcess (运行信息.进程句柄, 0)
CloseHandle (运行信息.主线程句柄)
CloseHandle (运行信息.进程句柄)
连续赋值 (0, 运行信息.进程ID, 运行信息.进程句柄, 运行信息.主线程ID, 运行信息.主线程句柄)

.子程序 Protect, 整数型
.参数 characteristics, 整数型

返回 (多项选择 (RShift (characteristics, 29) + 1, 1, 16, 2, 32, 4, 64, 4, 64))

.子程序 RShift, 整数型
.参数 lValue, 整数型
.参数 lNumberOfBitsToShift, 整数型

返回 (vbLongToULong (lValue) ÷ 数值_求次方 (2, lNumberOfBitsToShift))

.子程序 vbLongToULong, 双精度小数型
.参数 Value, 双精度小数型

.如果真 (Value < 0)
    返回 (Value + 4294967296)
.如果真结束
返回 (Value)

.子程序 数值_求次方, 双精度小数型
.参数 欲求次方数值, 双精度小数型
.参数 次方数, 双精度小数型

置入代码 ({ 221, 69, 16, 221, 69, 8, 217, 241, 217, 192, 217, 252, 220, 225, 217, 201, 217, 224, 217, 240, 217, 232, 222, 193, 217, 253, 221, 217, 221, 93, 248, 139, 85, 252, 139, 69, 248, 201, 194, 16, 0 })
返回 (0)

.子程序 字节集_取长度, 整数型
.参数 字节集, 字节集
.局部变量 address, 整数型
.局部变量 ret, 整数型

.如果真 (字节集 = {  })
    返回 (0)
.如果真结束
address = lstrcpyn (字节集, 字节集, 0)
RtlMoveMemory (ret, address - 4, 4)
返回 (ret)

.子程序 取cmd路径, 文本型
.局部变量 size, 整数型
.局部变量 name, 文本型

size = GetEnvironmentVariable (“ComSpec”, “”, 0)
.计次循环首 (size, )  ' 哈哈 取空白文本 偷点懒
    name = name + “ ”
.计次循环尾 ()
GetEnvironmentVariable (“ComSpec”, name, size)
返回 (name)

@yh3215

文件下载

来源:三叶资源网,欢迎分享,公众号:iisanye,(三叶资源网⑤群:21414575

本文暂时没有评论,来添加一个吧(●'◡'●)

欢迎 发表评论:

百度站内搜索
关注微信公众号
三叶资源网⑤群:三叶资源网⑤群

网站分类
随机tag
Sqlite本地库群排名电脑QQQQ头像采集视频教程微博引流花椒直播工具精易源码sign算法源码API实例源码通用型读内存迅雷Aplayer引擎虎牙登录源码是否被修改动态调用汇编两点坐标取角度源码注册表个人发卡四方淘宝时间同步
最新评论