|
|
.版本 2
.程序集 窗口程序集1
.子程序 _按钮1_被单击
编辑框1.内容 = “”
返回 ()
.子程序 __启动窗口_创建完毕
提升进程权限 ()
.子程序 转换为汇编码, 字节集
.参数 文本内容, 文本型
.局部变量 行数组, 文本型, , "0"
.局部变量 N, 整数型
.局部变量 返回汇编码, 字节集
.局部变量 临时字节集, 字节集
.局部变量 原来行数组, 文本型, , "0"
.局部变量 临时文本, 文本型
原来行数组 = 分割文本 (文本内容, #换行符, )
文本内容 = 到小写 (删全部空 (文本内容))
行数组 = 分割文本 (文本内容, #换行符, )
.计次循环首 (取数组成员数 (行数组), N)
临时文本 = 取文本左边 (删首尾空 (行数组 [N]), 1)
.如果真 (临时文本 = “=” 或 临时文本 = “'” 或 临时文本 = “/” 或 临时文本 = “\”)
到循环尾 ()
.如果真结束
临时字节集 = 取行汇编码 (行数组 [N])
.如果 (临时字节集 = { })
信息框 (“第 ” + 到文本 (N) + “ 行有错误:” + #换行符 + 原来行数组 [N], 0, )
返回 ({ })
.否则
返回汇编码 = 返回汇编码 + 临时字节集
输出调试文本 (字节集到十六进制 (临时字节集))
.如果结束
.计次循环尾 ()
返回 (返回汇编码)
.子程序 取行汇编码, 字节集
.参数 行汇编码, 文本型
.局部变量 首, 文本型
.局部变量 中间, 文本型
.局部变量 值, 整数型
行汇编码 = 删首尾空 (行汇编码)
.判断开始 (行汇编码 = “pushad”)
返回 ({ 96 }) ' 60
.判断 (行汇编码 = “pushad”)
返回 ({ 97 }) ' 61
.默认
.判断结束
首 = 取文本左边 (行汇编码, 4)
.判断开始 (首 = “push”)
中间 = 取文本中间 (行汇编码, 5, 3)
.判断开始 (中间 = “eax”)
返回 ({ 80 }) ' 50
.判断 (中间 = “ebx”)
返回 ({ 83 }) ' 53
.判断 (中间 = “ecx”)
返回 ({ 81 }) ' 51
.判断 (中间 = “edx”)
返回 ({ 82 }) ' 52
.判断 (中间 = “esp”)
返回 ({ 84 }) ' 54
.判断 (中间 = “ebp”)
返回 ({ 85 }) ' 55
.判断 (中间 = “esi”)
返回 ({ 86 }) ' 56
.判断 (中间 = “edi”)
返回 ({ 87 }) ' 57
.默认
值 = 取中括号中值 (行汇编码)
.判断开始 (值 > 0)
返回 ({ 255, 53 } + 到字节集 (值)) ' FF35
.判断 (值 = 0)
中间 = 取文本中间 (行汇编码, 5, 取文本长度 (行汇编码) - 4)
' 值 =
返回 ({ 104 } + 到字节集 (到整数 (十六到十 (中间)))) ' 68
.默认
.判断结束
.判断结束
' 01002825 50 push eax
' 01002826 53 push ebx
' 01002827 51 push ecx
' 01002828 52 push edx
' 01002829 54 push esp
' 0100282A 55 push ebp
' 0100282B 56 push esi
' 0100282C 57 push edi
' 0100282D 68 78563412 push 12345678
' 01002832 FF35 78563412 push dword ptr ds:[12345678]
.判断 (首 = “move”)
中间 = 取文本中间 (行汇编码, 5, 2)
值 = 取中括号中值 (行汇编码)
.如果真 (值 = -1)
信息框 (“这一句输入有错误:” + 行汇编码, #错误图标, )
返回 ({ })
.如果真结束
.判断开始 (中间 = “cx”)
.判断开始 (值 = 0)
中间 = 取文本中间 (行汇编码, 8, 取文本长度 (行汇编码) - 7)
返回 ({ 185 } + 到字节集 (到整数 (十六到十 (中间)))) ' B9
.判断 (值 > 0)
返回 ({ 139, 13 } + 到字节集 (值)) ' 8B0D
.默认
.判断结束
.判断 (中间 = “ax”)
.判断开始 (值 = 0)
中间 = 取文本中间 (行汇编码, 8, 取文本长度 (行汇编码) - 7)
返回 ({ 184 } + 到字节集 (到整数 (十六到十 (中间)))) ' B8
.判断 (值 > 0)
返回 ({ 161 } + 到字节集 (值)) ' A1
.默认
.判断结束
.判断 (中间 = “bx”)
.判断开始 (值 = 0)
中间 = 取文本中间 (行汇编码, 8, 取文本长度 (行汇编码) - 7)
返回 ({ 187 } + 到字节集 (到整数 (十六到十 (中间)))) ' BB
.判断 (值 > 0)
返回 ({ 139, 29 } + 到字节集 (值)) ' 8B1D
.默认
.判断结束
.判断 (中间 = “dx”)
.判断开始 (值 = 0)
中间 = 取文本中间 (行汇编码, 8, 取文本长度 (行汇编码) - 7)
返回 ({ 186 } + 到字节集 (到整数 (十六到十 (中间)))) ' BA
.判断 (值 > 0)
返回 ({ 139, 21 } + 到字节集 (值)) ' 8B15
.默认
.判断结束
.判断 (中间 = “bp”)
.判断开始 (值 = 0)
中间 = 取文本中间 (行汇编码, 8, 取文本长度 (行汇编码) - 7)
返回 ({ 189 } + 到字节集 (到整数 (十六到十 (中间)))) ' BD
.判断 (值 > 0)
返回 ({ 139, 45 } + 到字节集 (值)) ' 8B2D
.默认
.判断结束
.判断 (中间 = “si”)
.判断开始 (值 = 0)
中间 = 取文本中间 (行汇编码, 8, 取文本长度 (行汇编码) - 7)
返回 ({ 190 } + 到字节集 (到整数 (十六到十 (中间)))) ' BE
.判断 (值 > 0)
返回 ({ 139, 53 } + 到字节集 (值)) ' 8B35
.默认
.判断结束
.判断 (中间 = “di”)
.判断开始 (值 = 0)
中间 = 取文本中间 (行汇编码, 8, 取文本长度 (行汇编码) - 7)
返回 ({ 191 } + 到字节集 (到整数 (十六到十 (中间)))) ' BF
.判断 (值 > 0)
返回 ({ 139, 61 } + 到字节集 (值)) ' 8B3D
.默认
.判断结束
.默认
.判断结束
.判断 (首 = “call”)
值 = 取中括号中值 (行汇编码)
.如果真 (值 > 0)
返回 ({ 255, 21 } + 到字节集 (值)) ' FF15
.如果真结束
中间 = 取文本右边 (行汇编码, 3)
.判断开始 (中间 = “eax”)
返回 ({ 255, 208 })
.判断 (中间 = “ebx”)
返回 ({ 255, 211 })
.判断 (中间 = “edx”)
返回 ({ 255, 210 })
.默认
.判断结束
' 0100288A FFD0 call near eax
' 0100288C FFD3 call near ebx
' 0100288E FFD2 call near edx
.判断 (首 = “retn”)
返回 ({ 195 })
.判断 (首 = “ret”)
返回 ({ 195 })
.默认
.判断结束
返回 ({ })
' 01002838 B9 78563412 mov ecx,12345678
' 0100283D 8B0D 78563412 mov ecx,dword ptr ds:[12345678]
' 01002843 B8 78563412 mov eax,12345678
' 01002848 A1 78563412 mov eax,dword ptr ds:[12345678]
' 0100284D BB 78563412 mov ebx,12345678
' 01002852 8B1D 78563412 mov ebx,dword ptr ds:[12345678]
' 01002858 BA 78563412 mov edx,12345678
' 0100285D 8B15 78563412 mov edx,dword ptr ds:[12345678]
' 01002863 BD 78563412 mov ebp,12345678
' 01002868 8B2D 78563412 mov ebp,dword ptr ds:[12345678]
' 0100286E BE 78563412 mov esi,12345678
' 01002873 8B35 78563412 mov esi,dword ptr ds:[12345678]
' 01002879 BF 78563412 mov edi,12345678
' 0100287E 8B3D 78563412 mov edi,dword ptr ds:[12345678]
' 01002884 FF15 78563412 call near dword ptr ds:[12345678]
.子程序 取中括号中值, 整数型
.参数 代码, 文本型
.局部变量 N1, 整数型
.局部变量 N2, 整数型
N1 = 寻找文本 (代码, “[”, , 假)
.如果真 (N1 < 1)
返回 (0)
.如果真结束
N2 = 寻找文本 (代码, “]”, N1 + 1, 假)
.如果真 (N2 < 1)
返回 (-1)
.如果真结束
返回 (十六到十 (取文本中间 (代码, N1 + 1, N2 - N1 - 1)))
.子程序 _按钮2_被单击
.局部变量 临时字节集, 字节集
临时字节集 = 转换为汇编码 (编辑框1.内容)
.子程序 _组合框1_将弹出列表
.局部变量 进程ID数组, 整数型, , "0"
.局部变量 进程名称数组, 文本型, , "0"
.局部变量 N, 整数型
枚举进程 (进程ID数组, 进程名称数组)
组合框1.清空 ()
.计次循环首 (取数组成员数 (进程ID数组), N)
组合框1.加入项目 (进程名称数组 [N], 进程ID数组 [N])
.计次循环尾 ()
.子程序 _按钮3_被单击
.局部变量 进程句柄, 整数型
.局部变量 临时字节集, 字节集
进程句柄 = 打开进程 (组合框1.取项目数值 (组合框1.现行选中项))
' 输出调试文本 (进程句柄)
临时字节集 = 转换为汇编码 (编辑框1.内容)
.如果真 (临时字节集 = { } 或 进程句柄 = 0)
返回 ()
.如果真结束
远程执行 (进程句柄, 临时字节集)
.子程序 远程执行, 逻辑型
.参数 进程句柄, 整数型
.参数 代码, 字节集
.局部变量 函数地址, 整数型
.局部变量 线程句柄, 整数型
函数地址 = 创建虚拟内存页 (进程句柄, 0, 1024, 4096, 64) ' 只在测试时用
.如果真 (函数地址 = 0)
信息框 (“有问题 检查一下 code:2”, 0, )
返回 (假)
.如果真结束
.如果真 (写入内存 (进程句柄, 函数地址, 代码, 取字节集长度 (代码), 0) = 0)
信息框 (“有问题 检查一下 code:3”, 0, )
' 释放虚拟内存 (ZT_进程ID_特权, 函数地址, 0, 32768)
返回 (假)
.如果真结束
线程句柄 = 创建远程线程 (进程句柄, 0, 0, 函数地址, 0, 0, 0)
.如果真 (线程句柄 = 0)
信息框 (“有问题 检查一下 code:4”, 0, )
返回 (假)
.如果真结束
等待远程线程结束 (线程句柄, -1)
关闭句柄 (线程句柄)
' 释放虚拟内存 (进程句柄, 寻路函数地址, 0, 32768)
返回 (真)
http://yunpan.cn/QXMChxEKtgj2d |
|