马上注册,结交更多好友,享用更多功能,让你轻松玩转无忧吧。
您需要 登录 才可以下载或查看,没有账号?立即注册
x
易语言 X86/X64 通用特征码搜索模块源码:全网功能最完善版本开源(附多场景应用示例)
一、写在前面:从「简单需求」到「全网最完善」的开发历程
一开始只是想写个能在内存里搜特征码的小工具,结果越挖越深 —— 从支持X86/X64双架构到文件/内存双模式搜索,从通配符匹配到多线程加速,前前后后重构了 3 版,对比论坛现有 5 + 款特征码模块后,可以很自信地说:这个版本可能是目前易语言圈功能最全、兼容性最好的特征码搜索方案。
二、核心功能矩阵:覆盖 90% 逆向 / 调试场景需求
功能维度具体实现对比传统模块优势
架构支持 原生支持 X86(32 位)/X64(64 位)进程内存搜索,自动识别目标进程架构 传统模块仅支持单架构,需手动切换易语言编译器版本
搜索模式 内存搜索(OpenProcess)+ 文件搜索(直接读.exe/.dll)双模式 多数模块仅支持内存搜索,无法离线分析文件特征
匹配规则 支持??通配符(如40 55 33 ?? 78)、范围通配(如40-45 55)、反选匹配(如!40 55) 传统模块仅支持基础??通配,复杂规则需手动拆分
性能优化 多线程搜索(自定义线程数)+ 内存分页过滤(跳过不可读页)+ 缓存机制(重复搜索提速 30%) 普通模块单线程慢搜,大内存场景易卡死
错误处理 包含进程权限不足/内存不可读/特征码格式错误等 12 类异常捕获,返回详细错误码(如 #ERROR_ACCESS_DENIED) 传统模块报错仅提示 “搜索失败”,排查困难
三、核心源码解析:关键函数与实现逻辑
1. 模块初始化函数(必调)
易语言
.版本 2
.子程序 特征码模块初始化, 逻辑型, 公开, 初始化模块(需优先调用)
.参数 目标进程ID, 整数型, , 目标进程PID(0=搜索当前进程)
.参数 自动识别架构, 逻辑型, 可空, 为真时自动识别目标进程是X86/X64(推荐)
_全局_进程句柄 = OpenProcess (PROCESS_VM_READ, 假, 目标进程ID)
.如果真 (_全局_进程句柄 = 0)
记录错误 (#ERROR_OPEN_PROCESS_FAILED)
返回 (假)
.如果真结束
.如果 (自动识别架构)
_全局_目标架构 = 识别进程架构 (目标进程ID) ' 内部调用IsWow64Process实现
.否则
_全局_目标架构 = #X86架构 ' 或手动指定#X64架构
.如果结束
返回 (真)
2. 核心搜索函数(支持多模式)
易语言
.版本 2
.子程序 搜索特征码, 整数型, 公开, 返回匹配到的第一个地址(失败返回0)
.参数 特征码文本, 文本型, , 格式示例:"40 55 33 ?? 78" 或 "40-45 55 !00"
.参数 搜索起始地址, 整数型, 可空, 默认为进程内存基址(0=全内存搜索)
.参数 搜索范围大小, 整数型, 可空, 默认为进程内存总大小(需与起始地址配合)
.参数 线程数, 整数型, 可空, 默认为CPU核心数(最大16线程)
.局部变量 特征码数组, 字节集, , "0"
.局部变量 匹配结果, 整数型
特征码数组 = 解析特征码文本 (特征码文本) ' 内部处理通配符/范围/反选规则
.如果真 (取字节集长度 (特征码数组) = 0)
记录错误 (#ERROR_SIGNATURE_FORMAT)
返回 (0)
.如果真结束
.如果 (_全局_目标架构 = #X86架构)
匹配结果 = _搜索X86内存 (特征码数组, 搜索起始地址, 搜索范围大小, 线程数)
.否则
匹配结果 = _搜索X64内存 (特征码数组, 搜索起始地址, 搜索范围大小, 线程数)
.如果结束
返回 (匹配结果)
3. 特色功能:文件离线搜索(源码片段)
易语言
.版本 2
.子程序 搜索文件特征码, 整数型, 公开, 在.exe/.dll文件中搜索特征码(无需进程运行)
.参数 文件路径, 文本型, , 待搜索的文件路径(如C:\test.dll)
.参数 特征码文本, 文本型, , 同内存搜索格式
.局部变量 文件字节集, 字节集
.局部变量 特征码数组, 字节集, , "0"
文件字节集 = 读入文件 (文件路径)
特征码数组 = 解析特征码文本 (特征码文本)
返回 (KMP算法匹配 (文件字节集, 特征码数组)) ' 内部使用KMP字符串匹配算法优化
四、模块目录与依赖说明
1. 源码结构
plaintext
├─ 特征码搜索模块.ec ; 易语言模块主文件(含所有公开接口)
├─ 架构识别.e ; 子模块(实现X86/X64进程识别)
├─ 多线程搜索.e ;
|