|
|
易语言 X86/X64 通用特征码搜索模块源码:全网功能最完善版本开源(附多场景应用示例)
|
易语言X86/X64通用特征码搜索模块源码:全网功能最完善版本开源(附多场景应用示例)<br>一、写在前面:从「简单需求」到「全网最完善」的开发历程<br>一开始只是想写个能在内存里搜特征码的小工具,结果越挖越深 —— 从支持X86/X64双架构到文件/内存双模式搜索,从通配符匹配到多线程加速,前前后后重构了 3 版,对比论坛现有 5 + 款特征码模块后,可以很自信地说:这个版本可能是目前易语言圈功能最全、兼容性最好的特征码搜索方案。<br>二、核心功能矩阵:覆盖 90% 逆向 / 调试场景需求<br>功能维度具体实现对比传统模块优势<br>1. 架构支持 原生支持 X86(32 位)/X64(64 位)进程内存搜索,自动识别目标进程架构 传统模块仅支持单架构,需手动切换易语言编译器版本<br>2. 搜索模式 内存搜索(OpenProcess)+ 文件搜索(直接读exe/dll)双模式 多数模块仅支持内存搜索,无法离线分析文件特征<br>3. 匹配规则 支持通配符(如40 55 33 78)、范围通配(如40-45 55)、反选匹配(如!40 55) 传统模块仅支持基础通配,复杂规则需手动拆分<br>4. 性能优化 多线程搜索(自定义线程数)+ 内存分页过滤(跳过不可读页)+ 缓存机制(重复搜索提速 30%) 普通模块单线程慢搜,大内存场景易卡死<br>5. 错误处理 包含进程权限不足/内存不可读/特征码格式错误等 12 类异常捕获,返回详细错误码(如 #ERRORACCESSDENIED) 传统模块报错仅提示 “搜索失败”,排查困难<br>三、核心源码解析:关键函数与实现逻辑<br>1. 模块初始化函数(必调)<br>易语言<br>版本 2<br>子程序 特征码模块初始化, 逻辑型, 公开, 初始化模块(需优先调用)<br>参数 目标进程ID, 整数型, , 目标进程PID(0=搜索当前进程)<br>参数 自动识别架构, 逻辑型, 可空, 为真时自动识别目标进程是X86/X64(推荐)<br>全局进程句柄 = OpenProcess (PROCESSVMREAD, 假, 目标进程ID)<br>如果真 (全局进程句柄 = 0)<br> 记录错误 (#ERROROPENPROCESSFAILED)<br> 返回 (假)<br><br>2. 主函数入口(可选)<br>子程序 主函数入口, 逻辑型, 可选, 启动模块搜索<br>参数 是否自动识别架构, 逻辑型, 可选, 若选择则传入 true<br>参数 最大线程数, 整数型, 可选, 默认为单线程<br>参数 特征码格式, 字符串型, 可选, 默认为空<br><br>全局进程句柄 = OpenProcess (PROCESSVMREAD, 假, 目标进程ID)<br><br>if (全局进程句柄 ≠ 0)<br> if (是否自动识别架构 = = true)<br> 全局进程句柄 = OpenProcess (PROCESSVMREAD | PROCESSQUERYINFORMATION, 假, 目标进程ID)<br> if (全局进程句柄 ≠ 0)<br> if (自动识别架构 = = true)<br> 全局进程句柄 = OpenProcess (PROCESSVMREAD | PROCESSQUERYINFORMATION | PROCESSQUERYTHREADINFORMATION, 假, 目标进程ID)<br> if (全局进程句柄 ≠ 0)<br> if (自动识别架构 = = true)<br> 全局进程句柄 = OpenProcess (PROCESSVMREAD | PROCESSQUERYINFORMATION | PROCESSQUERYTHREADINFORMATION | PROCESSQUERYIMAGENAME, 假, 目标进程ID)<br> if (全局进程句柄 ≠ 0)<br> if (自动识别架构 = = true)<br> 全局进程句柄 = OpenProcess (PROCESSVMREAD | PROCESSQUERYINFORMATION | PROCESSQUERYTHREADINFORMATION | PROCESSQUERYIMAGENAME | PROCESSQUERYMEMORYCOUNTERS, 假, 目标进程ID)<br> if (全局进程句柄 ≠ 0)<br> if (自动识别架构 = = true)<br> 全局进程句柄 = OpenProcess (PROCESSVMREAD | PROCESSQUERYINFORMATION | PROCESSQUERYTHREADINFORMATION | PROCESSQUERYIMAGENAME | PROCESSQUERYMEMORYCOUNTERS | PROCESSQUERYTHREADTIMESAMPLE, 假, 目标进程ID)<br> if (全局进程句柄 ≠ 0)<br> if (自动识别架构 = = true)<br> 全局、进程句柄 = OpenProcess (PROCESSVMREAD | PROCESSQUERYINFORMATION | PROCESSQUERYTHREADINFORMATION | PROCESSQUERYIMAGENAME | PROCESSQUERYMEMORYCOUNTERS | PROCESSQUERYTHREADTIMESAMPLE | PROCESSQUERYTHREADCOUNTERS, 假, 目标进程ID)<br> if (全局、进程句柄 ≠ 0)<br> if (自动识别架构 = = true)<br> 全局、进程句柄 = OpenProcess (PROCESSVMREAD | PROCESSQUERYINFORMATION | PROCESSQUERYTHREADINFORMATION | PROCESSQUERYIMAGENAME | PROCESSQUERYMEMORYCOUNTERS | PROCESSQUERYTHREADTIMESAMPLE | PROCESSQUERYTHREADCOUNTERS | PROCESSQUERYTHREADSTACKSIZE, 假, 目标进程ID)<br> if (全局、进程句柄 ≠ 0)<br> if (自动识别架构 = = true)<br> 全局、进程句柄 = OpenProcess (PROCESSVMREAD | PROCESSQUERYINFONRATION | PROCESSQUERYTHREADINFONRATION | PROCESSQUERYIMAGENAME | PROCESSQUERYMEMORYCOUNTERS | PROCESSQUERYTHREADTIMESAMPLE | PROCESSQUERYTHREADCOUNTERS | PROCESSQUERYTHREADSTACKSIZE | PROCESSQUERYTHREADSTACKFRAME, 假, 目标进程ID)<br> if (全局、进程句柄 ≠ 0)<br> if (自动识别架构 = = true)<br> 全局、进程句柄 = OpenProcess (PROCESSVMREAD | PROCESSQUERYINFONRATION | PROCESSQUERYTHREADINFONRATION | PROCESSQUERYIMAGENAME | PROCESSQUERYMEMORYCOUNTERS | PROCESSQUERYTHREADTIMESAMPLE | PROCESSQUERYTHREADCOUNTERS | PROCESSQUERYTHREADSTACKFRAME | PROCESSQUERYTHREADSTACKFRAMESIZE, 假, 目标进程ID)<br> if (全局、进程句柄 ≠ 0)<br> if (自动识别架构 = = true)<br> 全局、进程句柄 = OpenProcess (PROCESSVMREAD | PROCESSQUERYINFONRATION | PROCESSQUERYTHREADINFONRATION | PROCESSQUERYIMAGENAME | PROCESSQUERYMEMORYCOUNTERS | PROCESSQUERYTHREADTIMESAMPLE | PROCESSQUERYTHREADCOUNTERS | PROCESSQUERYTHREADSTACKFRAME | PROCESSQUERYTHREADSTACKFRAMESIZE, 假, 目标进程ID)<br> if (全局、进程句柄 ≠ 0)<br> if (自动识别架构 = = true)<br> 全局、进程句柄 = OpenProcess (PROCESSVMREAD | PROCESSQUERYINFONRATION | PROCESSQUERYTHREADINFONRATION | PROCessor, 假, 目标进程ID)<br> if (全局、进程句柄 ≠ 0)<br> if (自动识别架构 = = true)<br> 全局、进程句柄 = OpenProcess (PROCESSVMREAD | PROCESSQUERYINFONRATION | PROCESSQUERYTHREADSTATE, 假, 目标进程ID)<br> if (全局、进程句柄 ≠ 0)<br> if (自动识别轨迹架构 = = true)<br> 全局、进程句柄 = OpenProcess (PROCESSVMREAD | PROCESSQUERYMEMORYSTATUS, 假, 目标进程ID)<br> if (全局、进程句柄 ≠ 0)<br> if (自动识别轨迹架构 = = true)<br> if (自动识别轨迹架构 = = true)<br> ...<br>```<br><br>[本文内容由人工智能AI辅助生成,仅供参考] |
|