易语言 调用示例
.版本 2
.支持库 spec
.程序集 启动
.程序集变量 演示进程名, 文本型
.程序集变量 驱动授权密钥, 文本型
.子程序 _启动子程序, 整数型
驱动授权密钥 = “Key”
演示进程名 = “Dwm.exe”
.如果 (信息框 (“你是否是新手?”, #是否钮, “内存操作Demo”, ) = #是钮)
新手操作 ()
.否则
大佬操作 ()
.如果结束
返回 (0) ' 可以根据您的需要返回任意数值
.子程序 新手操作
.局部变量 结果_安装驱动, 逻辑型
.局部变量 ProcessID, 整数型
.局部变量 结果_申请地址, 长整数型
.局部变量 结果_写入内存, 逻辑型
.局部变量 结果_读取内存, 字节集
.局部变量 结果_修改保护, 逻辑型
.局部变量 结果_释放内存, 逻辑型
' --------------------以下来演示一下CRACKER - S申请内存,以及申请内存后如何进行读写操作,以解决各位用户遇到的问题-------------------------
' -
' -
' --------------------第一步(安装驱动) - 演示驱动 CrAcker - S ---------------------
结果_安装驱动 = Drv.驱动_安装驱动 (驱动授权密钥)
.如果 (结果_安装驱动)
标准输出 (, “[ √ ] 驱动安装成功” + #换行符)
.否则
标准输出 (, “[ × ] 驱动安装失败 按回车键退出测试程序...” + #换行符)
标准输入 ()
结束 ()
.如果结束
' --------------------到这里驱动就安装成功了可以进行下一步操作---------------------
' -
' -
' --------------------获取目标进程ProcessID (Pid)并绑定进程 这里我们以Dwm.exe为例---------------------
ProcessID = 进程_名取ID (演示进程名)
.如果 (ProcessID ≠ 0)
.如果 (Drv.初始化_设置进程 (ProcessID, 假))
标准输出 (, “[ √ ] 设置进程成功 ProcessID = >” + 到文本 (ProcessID) + #换行符)
.否则
标准输出 (, “[ × ] 设置进程失败,按回车键退出测试程序....” + #换行符)
标准输入 ()
结束 ()
.如果结束
.否则
' ---------------------这里没有取到进程ID----------------
标准输出 (, “[ × ] 进程ProcessID获取失败,按回车键退出测试程序....” + #换行符)
标准输入 ()
结束 ()
.如果结束
' --------------------到这里我们就完成了进程ProcessID绑定操作---------------------
' -
' -
' --------------------对目标进程进行申请内存操作,详细操作与VirtualProtect函数一致---------------------
' 新手操作方式↓
结果_申请地址 = Drv.内存_申请内存 (0, 4096, 位或 (#MEM_COMMIT, #MEM_RESERVE), #PAGE_EXECUTE_READWRITE)
.如果 (结果_申请地址 ≠ 0)
标准输出 (, “[ √ ] 申请内存成功 内存地址 = >” + 到文本 (结果_申请地址) + “十六 = >” + 十到十六 (结果_申请地址) + #换行符)
.否则
标准输出 (, “[ × ] 申请内存失败,按回车键退出测试程序....” + #换行符)
标准输入 ()
结束 ()
.如果结束
' --------------------到这里我们申请内存就操作成功了---------------------
' -
' -
' --------------------接下来我们来演示如何对申请到的地址进行读写操作---------------------
' 对申请到的地址首次进行内存读写操作需要所以(Virtual = >操作虚拟内存方式)
' 因为在内存结构中首次申请到的内存在物理内存页(页表)中是不存在的
' 所以首次我们只能所以操作虚拟内存的方式对内存地址进行操作
结果_写入内存 = Drv.内存_写字节集Virtual (结果_申请地址, { 144, 144 })
.如果 (结果_写入内存)
标准输出 (, “[ √ ] (虚拟)写入内存成功” + #换行符)
.否则
标准输出 (, “[ × ] (虚拟)写入内存失败,按回车键退出测试程序....” + #换行符)
标准输入 ()
结束 ()
.如果结束
' 进行读取操作
结果_读取内存 = Drv.内存_读字节集Virtual (结果_申请地址, 2)
.如果 (结果_读取内存 ≠ { 0, 0 })
标准输出 (, “[ √ ] (虚拟)读取内存成功 = >” + 字节集_字节集到十六进制 (结果_读取内存) + #换行符)
.否则
标准输出 (, “[ × ] (虚拟)读取内存失败,按回车键退出测试程序....” + #换行符)
标准输入 ()
结束 ()
.如果结束
结果_读取内存 = Drv.内存_读字节集 (结果_申请地址, 2) ' 已经操作过虚拟内存了,所以申请的内存在物理内存页也存在了,现在可以用任何读写方式进行操作
.如果 (结果_读取内存 ≠ { 0, 0 })
标准输出 (, “[ √ ] (物理)读取内存成功 = >” + 字节集_字节集到十六进制 (结果_读取内存) + #换行符)
.否则
标准输出 (, “[ × ] (物理)读取内存失败,按回车键退出测试程序....” + #换行符)
标准输入 ()
结束 ()
.如果结束
' --------------------到这里我们就学会了如何对申请到的地址进行 读/写 操作---------------------
' -
' -
' --------------------接下来我们演示如何修改内存属性---------------------
结果_修改保护 = Drv.内存_修改内存属性 (结果_申请地址, 4096, #PAGE_NOACCESS) ' 修改属性为不可读写
.如果 (结果_修改保护)
标准输出 (, “[ √ ] 修改内存属性成功” + #换行符)
.否则
标准输出 (, “[ × ] 修改内存属性失败,按回车键退出测试程序....” + #换行符)
标准输入 ()
结束 ()
.如果结束
结果_读取内存 = Drv.内存_读字节集Virtual (结果_申请地址, 2) ' 我们在进行一下读取操作看看修改的内存属性是否有效果
.如果 (结果_读取内存 ≠ { 0, 0 })
标准输出 (, “[ × ] 读取内存成功 = >” + 字节集_字节集到十六进制 (结果_读取内存) + #换行符)
.否则
标准输出 (, “[ √ ] 读不到!就对了!” + #换行符)
.如果结束
' --------------------CrAcker - S 内存基础操作演示完毕 可以释放内存了---------------------
结果_释放内存 = Drv.内存_释放内存 (结果_申请地址, 4096, 位或 (#MEM_COMMIT, #MEM_RESERVE))
.如果 (结果_释放内存)
标准输出 (, “[ √ ] 释放内存成功 操作测试完毕,按回车键退出Demo” + #换行符)
.否则
标准输出 (, “[ × ] 释放内存失败,按回车键退出测试程序....” + #换行符)
标准输入 ()
结束 ()
.如果结束
标准输入 ()
结束 ()
.子程序 大佬操作
.局部变量 结果_安装驱动, 逻辑型
.局部变量 ProcessID, 整数型
.局部变量 结果_预期大小, 长整数型
.局部变量 结果_申请地址, 长整数型
.局部变量 结果_写入内存, 逻辑型
.局部变量 结果_读取内存, 字节集
.局部变量 结果_修改保护, 逻辑型
.局部变量 结果_旧的属性, 长整数型
.局部变量 结果_修改大小, 长整数型
.局部变量 结果_修改地址, 长整数型
.局部变量 结果_释放内存, 逻辑型
' --------------------以下来演示一下CRACKER - S全系列申请内存,以及申请内存后如何进行读写操作,以解决各位用户遇到的问题-------------------------
' -
' -
' --------------------第一步(安装驱动) - 演示驱动 CrAcker - S ---------------------
结果_安装驱动 = Drv.驱动_安装驱动 (驱动授权密钥)
.如果 (结果_安装驱动)
标准输出 (, “[ √ ] 驱动安装成功” + #换行符)
.否则
标准输出 (, “[ × ] 驱动安装失败 按回车键退出测试程序...” + #换行符)
标准输入 ()
结束 ()
.如果结束
' --------------------到这里驱动就安装成功了可以进行下一步操作---------------------
' -
' -
' --------------------获取目标进程ProcessID (Pid)并绑定进程 这里我们以Dwm.exe为例---------------------
ProcessID = 进程_名取ID (演示进程名)
.如果 (ProcessID ≠ 0)
.如果 (Drv.初始化_设置进程 (ProcessID, 假))
标准输出 (, “[ √ ] 设置进程成功 ProcessID = >” + 到文本 (ProcessID) + #换行符)
.否则
标准输出 (, “[ × ] 设置进程失败,按回车键退出测试程序....” + #换行符)
标准输入 ()
结束 ()
.如果结束
.否则
' ---------------------这里没有取到进程ID----------------
标准输出 (, “[ × ] 进程ProcessID获取失败,按回车键退出测试程序....” + #换行符)
标准输入 ()
结束 ()
.如果结束
' --------------------到这里我们就完成了进程ProcessID绑定操作---------------------
' -
' -
' --------------------对目标进程进行申请内存操作,详细操作与VirtualProtect函数一致---------------------
' 新手操作方式↓
结果_申请地址 = 0
结果_预期大小 = 4096
Drv.内存_申请内存Variable (取变量数据地址 (结果_申请地址), 取变量数据地址 (结果_预期大小), 位或 (#MEM_COMMIT, #MEM_RESERVE), #PAGE_EXECUTE_READWRITE)
.如果 (结果_申请地址 ≠ 0)
标准输出 (, “[ √ ] 申请内存成功 内存地址 = > ” + 到文本 (结果_申请地址) + “ 十六 = > ” + 十到十六 (结果_申请地址) + #换行符)
.否则
标准输出 (, “[ × ] 申请内存失败,按回车键退出测试程序....” + #换行符)
标准输入 ()
结束 ()
.如果结束
' --------------------到这里我们申请内存就操作成功了---------------------
' -
' -
' --------------------接下来我们来演示如何对申请到的地址进行读写操作---------------------
' 对申请到的地址首次进行内存读写操作需要所以(Virtual = >操作虚拟内存方式)
' 因为在内存结构中首次申请到的内存在物理内存页(页表)中是不存在的
' 所以首次我们只能所以操作虚拟内存的方式对内存地址进行操作
结果_写入内存 = Drv.内存_写字节集Virtual (结果_申请地址, { 144, 144 })
.如果 (结果_写入内存)
标准输出 (, “[ √ ] (虚拟)写入内存成功” + #换行符)
.否则
标准输出 (, “[ × ] (虚拟)写入内存失败,按回车键退出测试程序....” + #换行符)
标准输入 ()
结束 ()
.如果结束
' 进行读取操作
结果_读取内存 = Drv.内存_读字节集Virtual (结果_申请地址, 2)
.如果 (结果_读取内存 ≠ { 0, 0 })
标准输出 (, “[ √ ] (虚拟)读取内存成功 = > ” + 字节集_字节集到十六进制 (结果_读取内存) + #换行符)
.否则
标准输出 (, “[ × ] (虚拟)读取内存失败,按回车键退出测试程序....” + #换行符)
标准输入 ()
结束 ()
.如果结束
结果_读取内存 = Drv.内存_读字节集 (结果_申请地址, 2) ' 已经操作过虚拟内存了,所以申请的内存在物理内存页也存在了,现在可以用任何读写方式进行操作
.如果 (结果_读取内存 ≠ { 0, 0 })
标准输出 (, “[ √ ] (物理)读取内存成功 = > ” + 字节集_字节集到十六进制 (结果_读取内存) + #换行符)
.否则
标准输出 (, “[ × ] (物理)读取内存失败,按回车键退出测试程序....” + #换行符)
标准输入 ()
结束 ()
.如果结束
' --------------------到这里我们就学会了如何对申请到的地址进行 读/写 操作---------------------
' -
' -
' --------------------接下来我们演示如何修改内存属性---------------------
结果_修改地址 = 结果_申请地址
结果_修改大小 = 4096
结果_修改保护 = Drv.内存_修改内存属性Variable (取变量数据地址 (结果_修改地址), 取变量数据地址 (结果_修改大小), #PAGE_NOACCESS, 取变量数据地址 (结果_旧的属性)) ' 修改属性为不可读写
.如果 (结果_修改保护)
标准输出 (, “[ √ ] 修改内存属性成功 先前属性 = > ” + 到文本 (结果_旧的属性) + “ 修改地址 = > ” + 到文本 (结果_修改地址) + #换行符)
.否则
标准输出 (, “[ × ] 修改内存属性失败,按回车键退出测试程序....” + #换行符)
标准输入 ()
结束 ()
.如果结束
结果_读取内存 = Drv.内存_读字节集Virtual (结果_申请地址, 2) ' 我们在进行一下读取操作看看修改的内存属性是否有效果
.如果 (结果_读取内存 ≠ { 0, 0 })
标准输出 (, “[ × ] 读取内存成功 = >” + 字节集_字节集到十六进制 (结果_读取内存) + #换行符)
.否则
标准输出 (, “[ √ ] 读不到!就对了!” + #换行符)
.如果结束
' --------------------CrAcker - S 内存基础操作演示完毕 可以释放内存了---------------------
结果_释放内存 = Drv.内存_释放内存 (结果_申请地址, 4096, 位或 (#MEM_COMMIT, #MEM_RESERVE))
.如果 (结果_释放内存)
标准输出 (, “[ √ ] 释放内存成功 操作测试完毕,按回车键退出Demo” + #换行符)
.否则
标准输出 (, “[ × ] 释放内存失败,按回车键退出测试程序....” + #换行符)
标准输入 ()
结束 ()
.如果结束
标准输入 ()
结束 ()