|
|
发表于 2025-10-27 07:02:02
|
显示全部楼层
河北省廊坊市
.版本 2
.子程序 内存_特征码定位, 长整数型, , 返回十进制特征码定位地址
.参数 进程句柄, 整数型, , 进程ID
.参数 搜索内容, 文本型, , 特征码字符串,如:“5F ?? ?? 83 C4 ** C2 04 00 6A 3D”
.参数 起始地址, 文本型, , 开始的地址,默认为00000000
.参数 终止地址, 文本型, , 结束的地址,默认为07FFFFFF
.局部变量 局_起始地址, 整数型
.局部变量 局_终止地址, 整数型
.局部变量 局_内存属性, 类型_内存属性
.局部变量 局_字节集数组, 字节型, , "0"
.局部变量 局_a, 整数型
.局部变量 局_指针数据, 字节集
.局部变量 局_b, 整数型
.局部变量 局_计数, 整数型
.局部变量 局_搜索新地址, 整数型
.局部变量 局_中间文本, 文本型
.局部变量 局_实际长度, 整数型
.局部变量 局_搜索结果, 长整数型
重定义数组 (局_字节集数组, 假, 取文本长度 (搜索内容) ÷ 2)
.计次循环首 (取数组成员数 (局_字节集数组), 局_a)
局_中间文本 = 取文本中间 (搜索内容, 局_a × 2 - 1, 2)
局_字节集数组 [局_a] = 到字节 (十六到十 (局_中间文本))
.计次循环尾 ()
局_起始地址 = 进制_十六到十 (起始地址)
局_终止地址 = 进制_十六到十 (终止地址)
.判断循环首 (VirtualQueryEx (进程句柄, 局_起始地址, 局_内存属性, 28) ≠ 0)
.如果真 (局_内存属性.保护 = 4 或 局_内存属性.保护 = 32 或 局_内存属性.保护 = 64) ' 4=允许读写 ;32=允许读写和读取 ;64=允许读写和执行代码
局_指针数据 = 取空白字节集 (局_内存属性.区域长度)
ReadProcessMemory_字节集 (进程句柄, 局_起始地址, 局_指针数据, 局_内存属性.区域长度, 局_实际长度)
.计次循环首 (取字节集长度 (局_指针数据), 局_a)
.计次循环首 (取数组成员数 (局_字节集数组), 局_b)
.如果真 (局_a + 局_b ≤ 取字节集长度 (局_指针数据))
.如果 (局_字节集数组 [局_b] = 222)
局_计数 = 局_计数 + 1
局_搜索新地址 = 局_起始地址 + 局_a
.否则
.如果 (局_字节集数组 [局_b] = 局_指针数据 [局_a + 局_b])
局_计数 = 局_计数 + 1
局_搜索新地址 = 局_起始地址 + 局_a
.如果真 (局_计数 = 取数组成员数 (局_字节集数组))
局_搜索结果 = 局_搜索新地址
返回 (局_搜索结果)
.如果真结束
.否则
局_计数 = 0
跳出循环 ()
.如果结束
.如果结束
.如果真结束
.计次循环尾 ()
.计次循环尾 ()
.如果真结束
.如果真 (局_起始地址 > 局_终止地址)
跳出循环 ()
.如果真结束
局_起始地址 = 局_起始地址 + 局_内存属性.区域长度
处理事件 ()
.判断循环尾 ()
返回 (局_搜索结果)
.子程序 内存_特征码搜索, 类型_特征码搜索, 公开, 返回欲搜索的十六进制文本
.参数 进程ID, 整数型, , 进程ID
.参数 搜索类型, 文本型, , jz、CALL、地址、偏移4、偏移2
.参数 搜索内容, 文本型, , 特征码字符串,如:“5F ?? ?? 83 C4 ** C2 04 00 6A 3D”
.参数 差值, 文本型, , 偏移差值,向上为-,向下为+,十进制文本。如:50 ;-2
.参数 起始地址, 文本型, 可空, 开始的地址,默认为00001000
.参数 终止地址, 文本型, 可空, 结束的地址,默认为07FFFFFF
.局部变量 局_定位地址, 长整数型
.局部变量 局_结果, 整数型
.局部变量 局_地址, 整数型
.局部变量 局_Call地址, 整数型
.局部变量 局_Call偏移, 整数型
.局部变量 局_返回文本, 类型_特征码搜索
.局部变量 局_进程句柄, 整数型
搜索内容 = 删全部空 (搜索内容)
.如果真 (取文本长度 (搜索内容) < 4)
信息框 (“特征码位数太少,至少4位”, 0, , )
局_返回文本.数据地址 = “”
局_返回文本.数据结果 = “”
返回 (局_返回文本)
.如果真结束
.如果真 (取文本长度 (搜索内容) % 2 ≠ 0)
信息框 (“特征码位数必须为偶数”, 0, , )
局_返回文本.数据地址 = “”
局_返回文本.数据结果 = “”
返回 (局_返回文本)
.如果真结束
.判断开始 (是否为空 (起始地址) = 真)
起始地址 = “0x00001000”
.默认
.判断结束
.判断开始 (是否为空 (终止地址) = 真)
终止地址 = “0x07FFFFFF”
.默认
.判断结束
局_进程句柄 = OpenProcess_整数型 (2035711, 0, 进程ID)
局_定位地址 = 内存_特征码定位 (局_进程句柄, 搜索内容, 起始地址, 终止地址)
.如果真 (搜索类型 = “地址”)
局_返回文本.数据地址 = 进制_十到十六 (局_定位地址 + 到整数 (差值), )
局_返回文本.数据结果 = 进制_十到十六 (局_定位地址 + 到整数 (差值), )
.如果真结束
.如果真 (搜索类型 = “CALL”)
局_Call偏移 = 内存_读整数型 (进程ID, 局_定位地址 + 到整数 (差值))
局_Call地址 = 局_定位地址 + 到整数 (差值) - 1
局_返回文本.数据地址 = 进制_十到十六 (局_定位地址 + 到整数 (差值) - 1, )
局_返回文本.数据结果 = 进制_十到十六 (局_Call偏移 + 局_Call地址 + 5, )
.如果真结束
.如果真 (搜索类型 = “jz”)
局_地址 = 局_定位地址 + 到整数 (差值)
局_返回文本.数据地址 = 进制_十到十六 (局_地址, )
局_返回文本.数据结果 = 进制_十到十六 (内存_读整数型 (进程ID, 局_地址), )
.如果真结束
.如果真 (搜索类型 = “偏移4”)
局_地址 = 局_定位地址 + 到整数 (差值)
局_返回文本.数据地址 = 进制_十到十六 (局_地址, )
局_返回文本.数据结果 = 进制_十到十六 (内存_读整数型 (进程ID, 局_地址), )
局_返回文本.数据结果 = 取文本右边 (局_返回文本.数据结果, 4)
.如果真结束
.如果真 (搜索类型 = “偏移2”)
局_地址 = 局_定位地址 + 到整数 (差值)
局_返回文本.数据地址 = 进制_十到十六 (局_地址, )
局_返回文本.数据结果 = 进制_十到十六 (内存_读整数型 (进程ID, 局_地址), )
局_返回文本.数据结果 = 取文本右边 (局_返回文本.数据结果, 2)
.如果真结束
CloseHandle (局_进程句柄)
返回 (局_返回文本)
试试这个,我以前也找了好多,但是好多都不能用,里面那些类型和子程序从精易模块里扒出来的 |
|