开源OD代码转置入代码
功能说明:
本程序是一个基于易语言开发的专用辅助工具,其主要功能是将输入的汇编代码片段中的十六进制机器码批量转换为十进制数值,并按照特定格式生成用于代码注入或执行的脚本文件。该工具常见于游戏修改、软件逆向工程、内存调试等领域,旨在解决开发者在处理底层汇编数据时,手动进行进制转换和格式整理的繁琐工作。
一、程序结构与界面设计
程序采用标准的易语言窗口程序设计模式,核心界面由一个主窗口构成,主要包含以下控件与布局逻辑:
1. 双编辑框布局:界面设有“编辑框 1"作为输入区,用于粘贴原始的汇编代码文本;“编辑框 2"作为输出区,用于展示处理完成后的脚本内容。
2. 操作按钮:界面包含“按钮 1",用户点击该按钮即可触发核心的数据处理与转换流程。
3. 响应式界面:程序集成了窗口尺寸改变事件处理子程序(__启动窗口_尺寸被改变)。该功能确保了当用户拉伸或缩小窗口时,两个编辑框的高度和宽度会根据窗口实际大小自动重新计算和分布。具体逻辑是将除去按钮高度后的剩余空间平分给两个编辑框,保证在不同分辨率下界面依然整洁美观,不会出现控件重叠或留白过多的情况。
二、核心功能模块解析
程序的逻辑主要通过三个自定义子程序来实现,分别对应基础转换、文本处理和主业务流程。
1. 子程序:十六转十 (十六进制转十进制)
这是一个基础工具函数,负责单一的进制转换任务。
- 输入:接收一个纯十六进制格式的字符串(例如 "FF")。
- 处理:通过拼接 "0x" 前缀构造标准十六进制表示,调用系统内置的 StrToInt64Ex 函数将其解析为 64 位长整数。
- 异常处理:包含特定的业务逻辑校验。如果转换后的数值等于 12,程序会弹出信息框提示“格式可能出错!请检查”,这可能意味着在该程序的应用场景下,特定数值代表无效或非法状态。如果转换失败(例如非十六进制字符),函数返回 -1 以示错误。
- 用途:在主循环中,该函数被反复调用来将提取出的每个 2 字符十六进制字节块转换为对应的十进制整数。
2. 子程序:取文本中间内容 (文本提取工具)
这是一个公开的文本处理辅助函数。
- 功能:在给定的文本中查找指定的“开始内容”,然后截取其后固定长度(18 个字符)的内容并返回。
- 意义:虽然在本程序当前的“按钮点击”主流程中未显式直接调用此函数进行批量处理,但它提供了一个灵活的文本截取接口。这表明程序设计者预留了进一步细化文本分析的能力,或者该函数是从更大的公共组件库中调用的通用函数,用于特定位置的关键词提取。
3. 子程序:_按钮 1_被单击 (主处理逻辑)
这是整个程序的业务中枢,点击按钮后执行以下步骤:
- 第一阶段:数据清洗。程序读取编辑框 1 的全部内容,对其进行预处理。由于输入的汇编文本可能包含各种特殊符号(如 "^"、"."、"|"、"\"、"$"、"/" 等),这些符号会影响后续的分隔和处理。程序通过多次调用“子文本替换”功能,将这些符号全部替换为空格,统一数据格式。
- 第二阶段:分行遍历。将清洗后的文本按换行符分割成数组,准备逐行处理。
- 第三阶段:行内容提取。对于每一行有效的文本(非空行),程序先去掉左边的前 8 个字符(这通常是汇编行首的地址,如 "00445EE8"),保留右侧的有效指令部分。随后,从左向右截取 16 个字符,这部分被视为包含机器码(十六进制形式)的区域。
- 第四阶段:机器码规范化。对截取的 16 位字符串进行深度清洗,去除其中可能存在的所有空格和冒号(":"),并将所有字母强制转换为小写,确保数据的唯一性和规范性。
- 第五阶段:字节级校验与转换。程序首先检查处理后的字符串长度是否为偶数。在计算机中,一个字节由两个十六进制数字组成,因此有效数据的长度必须是偶数。如果长度为奇数,程序判定数据损坏,弹窗报错并退出。
若长度合法,程序进入内层循环,每次读取 2 个字符作为一个完整的字节。它先检查第一个字符的 ASCII 码是否符合规范,随后调用“十六转十”子程序将该字节转换为十进制数值。所有转换后的十进制数以英文逗号分隔,拼接到一个临时字符串中。
- 第六阶段:结果组装与输出。将生成的十进制数字序列按照指定模板包装:开头加上 “置入代码 ({" ,结尾加上 "}')"。最后,将原始行中剩余的注释信息(如 "; 最高物理攻击”)追加在该指令之后。处理完成的完整命令行被添加到“编辑框 2"中,方便用户复制。
三、输入输出格式分析
- 输入样本:程序设计的输入格式类似于调试器(如 OD、IDA Pro)的反汇编视图。典型特征是一行一行的指令,包含内存地址(8 位)、机器码(空格分隔的十六进制字)、汇编助记符和操作数,以及末尾的用户注释。
例如:' 00445EE8 8988 18010000 mov dword ptr ds:[eax+0x118],ecx ; 最高物理攻击
- 输出样本:经过转换后,机器码部分变成了十进制数组形式,且加上了易语言风格的调用前缀。
例如:置入代码 ({137,136,24,1,0,0})'mov dword ptr ds:[eax+0x118],ecx
- 这种格式表明程序输出的内容可能是为了配合另一个特定的易语言编写的脚本执行器或注入器,该执行器能够解析“置入代码”标签,并根据括号内的十进制数组向内存写入具体的机器指令。
四、总结
该程序是一个典型的易语言实用工具,专注于解决逆向工程中的数据格式转换问题。它不需要复杂的算法,但通过稳健的字符串处理和校验逻辑,确保了数据转换的准确性。程序的设计体现了模块化思想(将进制转换独立为子程序),同时兼顾了用户体验(窗口自适应布局)。对于需要批量编写内存注入脚本、修改游戏数值或分析二进制补丁的开发人员来说,这是一个高效的工作流优化工具,能够将枯燥的十六进制对照工作自动化完成。
======窗口程序集1
| |
| |------ 十六转十
| |
| |------ 取文本中间内容
| |
| |------ __启动窗口_尺寸被改变
| |
| |------ _按钮1_被单击
| |
| |------ _按钮2_被单击
| |
| |
======调用的Dll
| |
| |---[dll]------ StrToInt64Ex
| |
| |---[dll]------ UnhookWindowsHookEx
注:本站源码主要来源于网络收集。如有侵犯您的利益,请联系我们,我们将及时删除!
部分源码可能含有危险代码,(如关机、格式化磁盘等),请看清代码在运行。
由此产生的一切后果本站均不负责。源码仅用于学习使用,如需运用到商业场景请咨询原作者。
使用本站源码开发的产品均与本站无任何关系,请大家遵守国家相关法律。