网站首页 > 易语言相关 > 易语言例程 正文
易语言在内存中运行软件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
- 上一篇: 前端学习需要多久时间呢(前端学好要多久)
- 下一篇: 易语言关于纤程(Fibers)的简单使用
猜你喜欢
- 2022-09-18 蒙牛内存读取加密key和url
- 2022-08-07 易语言异常内存隐藏
- 2020-04-20 内存运行模块开源
- 2019-01-10 易语言内存操作视频教程 取微信昵称信息
- 2019-01-06 微信2.6.6.28 内存获取个人数据
- 2017-02-17 通过内存获取所有QQ帐号(支持TIM、QQ)
你 发表评论:
欢迎- 百度站内搜索
- 关注微信公众号
- 网站分类
-
- 网站公告
- 电子书书籍
- 程序员工具箱
- 编程工具
- 易语言相关
- 网络相关源码
- 图形图像源码
- 系统工具源码
- 易语言模块源码
- 易语言支持库
- 数据库类源码
- 易语言例程
- 易语言游戏开发
- 易语言模块
- 多媒体类源码
- 易语言资源网
- 易语言视频教程
- JS分析教程
- 易语言图文教程
- 易语言常见问题及笔记
- 工具源码
- 易语言版本
- 网络编程
- javascript
- PHP编程
- html
- 正则表达式
- 面试题
- nodejs
- 其它综合
- 脚本专栏
- python
- 按键精灵相关
- 按键精灵图文教程
- 按键精灵视频教程
- 按键精灵Q语言
- 按键精灵安卓版
- golang
- 游戏安全
- 火山相关
- 火山安卓软件
- 火山常见问题及笔记
- 火山安卓源码
- 火山视频教程
- 火山PC版本下载
- 火山PC视窗例程
- 互联网那些事
- 引流推广
- 项目揭秘
- 网络营销
- 营销软件
- QQ营销软件
- 娱乐软件
- 机器人插件
- 培训教程
- 技术教程
- 活动线报
- 数据库
- Redis
- Access
- MongoDB
- Mysql
- 问答
- 其它
- 易语言
- 需求
- 在线教程
- 多线程培训班
- 觅风易语言教程
- 模拟系列教程
- 集中营易语言教程
- 历史数据
- 随机tag
本文暂时没有评论,来添加一个吧(●'◡'●)