交流
功能说明:
本程序是使用易语言开发的一款面向底层的内存查看与修改工具,核心功能是提供可视化的十六进制编辑器界面,允许用户读取、查看并修改指定进程或当前进程的内存数据。程序通过调用 Windows API 及第三方扩展库(如 iext)实现了对内存地址的直接操作、内存属性查询以及界面交互的逻辑控制。
### 一、程序架构与初始化
程序入口为 `_启动子程序`,其作用主要是加载主窗口(`窗口 1`)并设置初始状态。在 `_窗口 1_创建完毕` 子程序中,完成了主要的界面构建与逻辑绑定:
1. **界面组件创建**:利用 `HexEditCreate` 函数创建一个名为 `HexEdit1` 的十六进制编辑控件,并将其嵌入到主窗口中。设置了该控件的字体(Fixedsys)、标题颜色及数据颜色,以提供良好的视觉区分度。
2. **地址输入控制**:获取了一个文本编辑框(`编辑框 1`)的窗口句柄,默认预置了起始地址"00400000"。通过 `SetWindowLong` 将该编辑框的消息处理过程替换为自定义的 `_编辑框 1 程序`,从而实现了对用户输入行为的底层拦截和控制。
3. **事件回调绑定**:注册了多个事件回调,包括指针位置改变(`HexEdit__PointVary`)、窗口消息处理(`HexEdit__WndProc`)以及数据内容改变(`HexEdit__DataVary`),确保用户对 Hex 视图的操作能实时触发内存读取或写入逻辑。
### 二、核心内存操作逻辑
程序的核心价值在于内存数据的读写能力,主要体现在以下两个关键子程序中:
1. **内存读取与显示更新 (`_MemoryEdit1_指针位置被改变`)**:
当用户在十六进制编辑器中移动光标时,该子程序会被触发。它首先调用 `VirtualQueryEx` API 查询当前光标所在地址的内存保护属性(如是否可读、是否执行等)。
* **安全读取**:如果内存区域权限正常(非无访问权),程序会调用 `读内存字节集` 读取一段数据,并通过 `HexEditSetData` 更新到界面上。
* **异常处理**:如果地址不可访问,界面将显示"?? ??"占位符,防止因非法访问导致程序崩溃。
* **状态同步**:同时会将当前的绝对地址计算出来,显示在上方的地址输入框(`编辑框 1`)中,方便用户确认当前位置。
2. **内存写入功能 (`MemoryEdit_数据内容被改变`)**:
当用户在 Hex 视图中修改数值时,此子程序负责将新值写回内存。
* **权限解锁**:在写入前,程序调用 `VirtualProtectEx` 将目标内存区域的保护权限修改为可写(通常是为了绕过系统的只读保护)。
* **执行写入**:随后调用 `写内存整数` 函数,将转换后的字节数据写入到 `当前地址 + 偏移量` 的位置。
* **错误反馈**:如果写入失败,程序会弹出错误提示框(“写内存出错”),提示用户修改可能受到系统保护或地址无效。
### 三、高级交互与消息钩子 (`_编辑框 1 程序`)
为了增强工具的可用性和安全性,程序对地址输入框进行了深度的消息拦截处理:
1. **快捷键重定义**:拦截了回车键消息,触发 `定位` 功能,使用户可以在输入地址后快速跳转,无需鼠标点击。
2. **输入过滤**:拦截了退格键以外的部分按键输入,通过 `屏蔽按键` 函数判断按键合法性,防止用户输入非法字符导致地址解析错误。
3. **剪贴板管理**:修改了剪切(Cut)行为,将其映射为复制(Copy)操作,并完全禁止了粘贴(Paste)和撤销(Undo)操作,这通常是为了防止用户意外粘贴错误的地址格式或进行回退操作干扰进程状态。
4. **字体渲染**:提供了一个通用的 `设置字体` 子程序,封装了 `CreateFont` 和 `SendMessage` 等 API 调用,用于动态调整界面控件的字体样式(加粗、斜体、下划线等),使界面更美观或适应不同分辨率。
### 四、技术特点总结
从代码细节来看,该程序具有典型的易语言底层编程特征:
1. **API 调用密集**:大量使用了 Windows 消息循环、内存管理 API(`VirtualProtectEx`, `VirtualQueryEx`)以及窗口句柄操作(`SendMessage`, `SetWindowLong`),显示出其具备较强的系统级操作能力。
2. **模块化设计**:虽然代码片段较短,但已将字体设置、内存读写、事件回调分离成独立的子程序,结构相对清晰,易于维护。
3. **潜在风险**:由于直接调用 `VirtualProtectEx` 和内存写入函数,该程序在实际运行中对目标进程具有较高的干预权限,若目标进程句柄(`进程句柄`)未正确初始化(代码中初始化为 -1),可能导致操作失败。在实际使用中,通常需要配合另一个子程序来打开或获取特定进程的句柄。
综上所述,这是一个功能完备的单机版内存调试助手原型,主要用于辅助软件逆向工程、游戏辅助开发或内存数据的可视化分析。其核心优势在于结合了自定义的 Hex 编辑控件与原生内存 API,实现了从图形界面到内存内核的直接映射与控制。
======程序集1
| |
| |------ _启动子程序
| |
| |
======窗口程序集1
| |
| |------ 设置字体
| |
| |------ _窗口1_创建完毕
| |
| |------ MemoryEdit_数据内容被改变
| |
| |------ _编辑框1程序
| |
| |------ _MemoryEdit1_指针位置被改变
| |
| |------ _MemoryEdit2_指针位置被改变
| |
| |------ _HexEdit1_WndProc
| |
| |------ _HexEdit2_WndProc
| |
| |------ 定位
| |
| |------ 十六到十
| |
| |------ 写内存整数
| |
| |------ 读内存长整数
| |
| |------ 读内存字节集
| |
| |------ 屏蔽按键
| |
| |------ _工具条1_被单击
| |
| |------ _窗口1_尺寸被改变
| |
| |------ _选择框1_被单击
| |
| |------ _时钟1_周期事件
| |
| |
======调用的Dll
| |
| |---[dll]------ 读整数内存
| |
| |---[dll]------ SetWindowLong
| |
| |---[dll]------ CallWindowProc
| |
| |---[dll]------ VirtualQueryEx
| |
| |---[dll]------ 读字节集内存
| |
| |---[dll]------ MoveWindow
| |
| |---[dll]------ StrToIntEx
| |
| |---[dll]------ 写整数内存
| |
| |---[dll]------ VirtualProtectEx
| |
| |---[dll]------ CreateFont
| |
| |---[dll]------ SendMessage
| |
| |---[dll]------ DeleteObject
======窗口程序集1
| |
| |------ 设置字体
| |
| |------ __启动窗口_创建完毕
| |
| |------ 拖放路径
| |
| |------ _HexEdit_WndProc
| |
| |------ _滚动条位置被改变
| |
| |------ 十六到十
| |
| |------ _数据被修改
| |
| |------ _按钮1_被单击
| |
| |------ _按钮2_被单击
| |
| |------ _按钮3_被单击
| |
| |------ _按钮4_被单击
| |
| |------ __启动窗口_尺寸被改变
| |
| |------ _编辑框1_内容被改变
| |
| |------ _按钮5_被单击
| |
| |------ _时钟1_周期事件
| |
| |------ _编辑框1_按下某键
| |
| |
======拖放文件
| |
| |------ 拖放文件
| |
| |------ 拖放文件子程序
| |
| |------ 禁止拖放
| |
| |------ 拖放结果
| |
| |------ 取文件路径
| |
| |------ 取路径文件名
| |
| |
======调用的Dll
| |
| |---[dll]------ StrToIntEx
| |
| |---[dll]------ MoveWindow
| |
| |---[dll]------ DragAcceptFiles
| |
| |---[dll]------ DragQueryFile
| |
| |---[dll]------ DragFinish
| |
| |---[dll]------ SetWindowLong
| |
| |---[dll]------ CallWindowProc
| |
| |---[dll]------ StrDup
| |
| |---[dll]------ CreateFont
| |
| |---[dll]------ SendMessage
| |
| |---[dll]------ DeleteObject
| |
| |---[dll]------ 取指针_文本型
注:本站源码主要来源于网络收集。如有侵犯您的利益,请联系我们,我们将及时删除!
部分源码可能含有危险代码,(如关机、格式化磁盘等),请看清代码在运行。
由此产生的一切后果本站均不负责。源码仅用于学习使用,如需运用到商业场景请咨询原作者。
使用本站源码开发的产品均与本站无任何关系,请大家遵守国家相关法律。