社区应用 社区服务 会员列表 统计排行 帮助 银行
  • 305阅读
  • 4回复

内存搜索(支持通配符?)

楼层直达
级别: 托儿所
发帖
1
铜币
52
威望
0
E积分
0
技术积分
0
支持通配符的内存搜索,可以方便快速的搜索出特征码,我生成模块,方便调用。在搜索时有进度条提示,这样就不会等得很心急!
附上源码:

.版本 2


.程序集 内存通配符搜索


.子程序 _启动子程序, 整数型, , 请在本子程序中放置易模块初始化代码




_临时子程序 ()  ' 在初始化代码执行完毕后调用测试代码
返回 (0)  ' 可以根据您的需要返回任意数值


.子程序 _临时子程序
.局部变量 t, 整数型


' 本名称子程序用作测试程序用,仅在开发及调试环境中有效,编译发布程序前将被系统自动清空,请将所有用作测试的临时代码放在本子程序中。 ***注意不要修改本子程序的名称、参数及返回值类型。
t = 取启动时间 ()
输出调试文本 (内存搜索 (“EB02B00184C07529A1????????803800751F”, “00501000”, “00576FFD”, “qqqf.exe”))
输出调试文本 (“花费时间:” + 到文本 ((取启动时间 () - t) ÷ 1000) + “秒”)




.子程序 是否匹配, 整数型, 公开, 返回匹配位置,-1为不匹配
.参数 匹配文本, 文本型, , 包含通配符
.参数 常量文本, 文本型, , 不包含通配符
.局部变量 次数, 整数型
.局部变量 问号位置, 整数型
.局部变量 问号前文本, 文本型
.局部变量 变量, 整数型
.局部变量 常量文本变量, 文本型
.局部变量 比较结果, 逻辑型
.局部变量 寻找位置, 整数型




问号位置 = 寻找文本 (匹配文本, “?”, 1, 假)
' 如果不包含通配符就直接比较后返回
.如果真 (问号位置 = -1)
    返回 (寻找文本 (常量文本, 匹配文本, 1, 假))
.如果真结束
' 如果包含通配符进行下面计算
问号前文本 = 取文本中间 (匹配文本, 1, 问号位置 - 1)
寻找位置 = 1
.循环判断首 ()
    变量 = 寻找文本 (常量文本, 问号前文本, 寻找位置, 假)  ' 是否包含问号前文本
    .如果真 (变量 = -1)
        返回 (-1)  ' 不包含
    .如果真结束
    常量文本变量 = 取文本中间 (常量文本, 变量, 取文本长度 (匹配文本))
    ' 匹配文本与常量文本变量进行比较
    比较结果 = 真
    .变量循环首 (1, 取文本长度 (匹配文本), 1, 次数)
        .如果真 (取文本中间 (匹配文本, 次数, 1) = “?”)
            到循环尾 ()
        .如果真结束
        .如果真 (取文本中间 (匹配文本, 次数, 1) ≠ 取文本中间 (常量文本变量, 次数, 1))
            比较结果 = 假
            跳出循环 ()
        .如果真结束


    .变量循环尾 ()
    .如果真 (比较结果)
        返回 (变量)
    .如果真结束
    寻找位置 = 变量 + 取文本长度 (问号前文本)
.循环判断尾 (寻找位置 < 取文本长度 (常量文本))
返回 (-1)






.子程序 内存搜索, 文本型, 公开, 找到的内存地址,未找到返回空
.参数 要搜索的文本, 文本型, , 可以带通配符的文本
.参数 十六进制开始地址, 文本型
.参数 十六进制结束地址, 文本型
.参数 程序名称, 文本型
.局部变量 读到的内容, 字节集, , , 需要修改的数据
.局部变量 读到的内容长度, 整数型
.局部变量 读次数, 整数型
.局部变量 计次, 整数型
.局部变量 查找变量, 整数型
.局部变量 特征码长度, 整数型
.局部变量 读到的字, 文本型
.局部变量 读到的字组, 文本型
.局部变量 符合, 逻辑型
.局部变量 符合位置, 整数型
.局部变量 符合首地址, 整数型


符合 = 假
符合位置 = 1
特征码长度 = 取文本长度 (要搜索的文本) ÷ 2
载入 (窗口1, , 假)
.变量循环首 (十六进制文本到整数 (十六进制开始地址), 十六进制文本到整数 (十六进制结束地址), 特征码长度 × 50, 查找变量)
    读到的内容 = 读内存字节集 (取进程ID (程序名称), 查找变量, 特征码长度 × 50)
    ' 如果真 (取字节集长度 (读到的内容) > 0)
    读到的字组 = “”
    读到的内容长度 = 取字节集长度 (读到的内容)
    .计次循环首 (读到的内容长度, 读次数)
        读到的字 = 到文本 (十到十六 (读到的内容 [读次数]))
        .如果真 (取文本长度 (读到的字) < 2)
            读到的字 = “0” + 读到的字
        .如果真结束
        .如果真 (取文本长度 (读到的字) < 2)
            读到的字 = “0” + 读到的字
        .如果真结束
        读到的字组 = 读到的字组 + 读到的字
    .计次循环尾 ()
    符合位置 = 是否匹配 (要搜索的文本, 读到的字组)
    .如果真 (符合位置 > 0)
        符合首地址 = 符合位置 ÷ 2 + 查找变量
        窗口1.销毁 ()
        返回 (十到十六 (符合首地址))
    .如果真结束
    窗口1.进度条1.位置 = 取整 ((查找变量 - 十六进制文本到整数 (十六进制开始地址)) ÷ (十六进制文本到整数 (十六进制结束地址) - 十六进制文本到整数 (十六进制开始地址)) × 100)
    处理事件 ()
.变量循环尾 ()
窗口1.销毁 ()
返回 (“”)

级别: 商业用户
发帖
39
铜币
648
威望
0
E积分
0
技术积分
0
只看该作者 沙发  发表于: 06-28
6666666666
级别: 托儿所
发帖
2
铜币
0
威望
0
E积分
0
技术积分
0
只看该作者 板凳  发表于: 09-04
感谢 分享   正好需要
ziv
发帖
75
铜币
4580
威望
0
E积分
1
技术积分
0
只看该作者 地板  发表于: 11-10
发帖
62
铜币
0
威望
0
E积分
0
技术积分
0
只看该作者 4楼 发表于: 11-11
很多内存搜索都没有模糊搜索,这个很好~,但是效率有点低。
快速回复

限60 字节
如果您提交过一次失败了,可以用”恢复数据”来恢复帖子内容
 
认证码:
上一个 下一个