本帖最后由 逝去的初夏丶 于 2016-1-25 11:01 编辑
AddVectoredExceptionHandler 添加一个Veh异常处理的链表,参数1为是否把链表放在最前,参数2为链表的地址
SetThreadContext 设置线程上下文,参数1为线程句柄,用OpenThread获得 参数2指向一个线程上下文的数据结构,成员如下
窗口程序集名 | 保 留 | 保 留 | 备 注 | (未填写程序集名) | | | | 变量名 | 类 型 | 数组 | 备 注 | 变量名 | 类 型 | 数组 | 备 注 | 封包地址 | 整数型 | |
封包地址 = 内存操作. 搜索基址 ({ 131, 236, 64, 86, 139, 241, 139, 70, 20, 131 })_设置Veh链表 (&_VEH异常链表 )变量名 | 类 型 | 静态 | 数组 | 备 注 | esp | 整数型 | | | 调用地址 | 整数型 | | | 包名地址 | 整数型 | | | 数据包名 | 文本型 | | | 报文地址 | 整数型 | | | 列表索引 | 整数型 | | | 报文长度 | 整数型 | | | 报文内容 | 字节集 | | | i | 整数型 | | | 是否显示 | 逻辑型 | | | 待过滤 | 文本型 | | | 判断 (_读整数型 (_读整数型 (KePoint ) + 12 ) = 封包地址 )esp = _读整数型 (_读整数型 (KePoint + 4 ) + 196 )调用地址 = _读整数型 (esp )报文地址 = _读整数型 (esp + 4 )包名地址 = _读整数型 (报文地址 ) + 32 数据包名 = 到文本 (_读字节集 (包名地址, 100 )) 是否显示 = 真 如果真 (是否过滤.选中 )计次循环首 (超级列表框2.取硐钍 (), i) 待过滤 = 删全部空 (超级列表框2.取晏 (i, 0)) 如果真 (取文本长度 (待过滤 ) > 3 )如果真 (-1 ≠ 寻找文本 (数据包名, 超级列表框2.取晏 (i, 0), , 真)) 是否显示 = 假 计次循环尾 ()如果真 (是否显示 )报文长度 = _计算包长 (调用地址 )判断 (报文长度 = 0 )报文内容 = _读字节集 (报文地址, 60 )报文内容 = _读字节集 (报文地址, 报文长度 )列表索引 = 超级列表框1.插入表项 (, , , , , )超级列表框1. 保证显示 (列表索引 )超级列表框1. 置标题 (列表索引, 0, “0x” + 取十六进制文本 (调用地址 )) 超级列表框1. 置标题 (列表索引, 1, 数据包名 )判断 (报文长度 = 0 )超级列表框1. 置标题 (列表索引, 2, “??”)超级列表框1. 置标题 (列表索引, 2, “0x” + 取十六进制文本 (报文长度 )) 超级列表框1.置标题 (列表索引, 3, 查看字节集2 (报文内容))esp = esp - 十六到十 (“40”)写到内存 (esp, _读整数型 (KePoint + 4 ) + 196, )写到内存 (到整数 (封包地址 + 3 ), _读整数型 (KePoint + 4 ) + 184, )返回 (-1 )返回 (0)变量名 | 类 型 | 静态 | 数组 | 备 注 | 当前地址 | 整数型 | | | 当前字节 | 字节集 | | | 临时地址 | 整数型 | | | 报文长度 | 整数型 | | |
报文长度 = -1 当前地址 = 发包地址 循环判断首 ()当前地址 = 当前地址 - 1 当前字节 = _读字节集 (当前地址, 5 )判断 (-1 ≠ 寻找字节集 (当前字节, { 85, 139, 236, 131, 236 }, )) 报文长度 = 0 判断 (-1 ≠ 寻找字节集 (当前字节, { 131, 236 }, )) 报文长度 = 0 判断 (-1 ≠ 寻找字节集 (当前字节, { 131, 196, 4 }, )) 临时地址 = 当前地址 - 7 当前字节 = _读字节集 (临时地址, 1 )判断 (当前字节 = { 106 })当前字节 = _读字节集 (临时地址 + 1, 1 )报文长度 = 取字节集数据 (当前字节, #整数型, )处理事件 ()循环判断尾 (报文长度 = -1 )返回 (报文长度 )变量 = 取空白字节集 (读取长度 )置入代码 ({ 96, 139, 117, 8, 129, 254, 0, 0, 1, 0, 126, 27, 139, 93, 12, 139, 85, 252, 131, 194, 8, 191, 0, 0, 0, 0, 59, 223, 126, 9, 138, 4, 62, 136, 4, 58, 71, 235, 243, 97 })返回 (变量 )判断 (开始监视.选中 )ctx.ContextFlags = 65599 GetThreadContext (GetCurrentThread (), ctx )ctx.Dr0 = 封包地址 ctx.Dr7 = 1109 ctx.ContextFlags = 65599 SetThreadContext (GetCurrentThread (), ctx )ctx.ContextFlags = 65599 GetThreadContext (GetCurrentThread (), ctx )ctx.Dr0 = 0 ctx.Dr7 = 1109 ctx.ContextFlags = 65599 SetThreadContext (GetCurrentThread (), ctx )超级列表框1. 全部删除 ()a = 超级列表框2. 插入表项 (, , , , , )超级列表框2. 置标题 (a, 0, 过滤关键字输入框.内容 )超级列表框2. 删除表项 (超级列表框2.现行选中项 )超级列表框2. 全部删除 ()置剪辑板文本 (超级列表框1.取晏 (超级列表框1.现行选中项, 3)) 置剪辑板文本 (超级列表框1.取晏 (超级列表框1.现行选中项, 0)) 置剪辑板文本 (超级列表框1.取晏 (超级列表框1.现行选中项, 1)) text = 超级列表框1.取晏 (超级列表框1.现行选中项, 0) + “ ” + 超级列表框1.取晏 (超级列表框1.现行选中项, 1) + “ ” + 超级列表框1.取晏 (超级列表框1.现行选中项, 2) + “ ” + 超级列表框1.取晏 (超级列表框1.现行选中项, 3) + #换行符 置剪辑板文本 (text )
如果是对外部线程进行get/setthreadcontext操作之前要先挂起被操作的线程, 否则容易引起出错
源码因为贪方便用到了超级模块,不喜欢的把用到的指令自己写一下即可,都是些常用的指令,实现代码都挺简单的
这个监控软件本来还打算添加报文修改和报文重复发送的功能的,但是一直没时间,就还没来得及添加上去
报文修改可以直接在我读取到的报文地址里面做一个字节集替换即可
报文重复发送需要先把报文地址内的内存数据也就是游戏发送的报文重新copy一份保存下来才行
窗口程序集名 | 保 留 | 保 留 | 备 注 | (未填写程序集名) | | | | 变量名 | 类 型 | 数组 | 备 注 | 变量名 | 类 型 | 数组 | 备 注 | 封包地址 | 整数型 | |
封包地址 = 内存操作. 搜索基址 ({ 131, 236, 64, 86, 139, 241, 139, 70, 20, 131 })_设置Veh链表 (&_VEH异常链表 )变量名 | 类 型 | 静态 | 数组 | 备 注 | esp | 整数型 | | | 调用地址 | 整数型 | | | 包名地址 | 整数型 | | | 数据包名 | 文本型 | | | 报文地址 | 整数型 | | | 列表索引 | 整数型 | | | 报文长度 | 整数型 | | | 报文内容 | 字节集 | | | i | 整数型 | | | 是否显示 | 逻辑型 | | | 待过滤 | 文本型 | | | 判断 (_读整数型 (_读整数型 (KePoint ) + 12 ) = 封包地址 )esp = _读整数型 (_读整数型 (KePoint + 4 ) + 196 )调用地址 = _读整数型 (esp )报文地址 = _读整数型 (esp + 4 )包名地址 = _读整数型 (报文地址 ) + 32 数据包名 = 到文本 (_读字节集 (包名地址, 100 )) 是否显示 = 真 如果真 (是否过滤.选中 )计次循环首 (超级列表框2.取硐钍 (), i) 待过滤 = 删全部空 (超级列表框2.取晏 (i, 0)) 如果真 (取文本长度 (待过滤 ) > 3 )如果真 (-1 ≠ 寻找文本 (数据包名, 超级列表框2.取晏 (i, 0), , 真)) 是否显示 = 假 计次循环尾 ()如果真 (是否显示 )报文长度 = _计算包长 (调用地址 )判断 (报文长度 = 0 )报文内容 = _读字节集 (报文地址, 60 )报文内容 = _读字节集 (报文地址, 报文长度 )列表索引 = 超级列表框1.插入表项 (, , , , , )超级列表框1. 保证显示 (列表索引 )超级列表框1. 置标题 (列表索引, 0, “0x” + 取十六进制文本 (调用地址 )) 超级列表框1. 置标题 (列表索引, 1, 数据包名 )判断 (报文长度 = 0 )超级列表框1. 置标题 (列表索引, 2, “??”)超级列表框1. 置标题 (列表索引, 2, “0x” + 取十六进制文本 (报文长度 )) 超级列表框1.置标题 (列表索引, 3, 查看字节集2 (报文内容))esp = esp - 十六到十 (“40”)写到内存 (esp, _读整数型 (KePoint + 4 ) + 196, )写到内存 (到整数 (封包地址 + 3 ), _读整数型 (KePoint + 4 ) + 184, )返回 (-1 )返回 (0)变量名 | 类 型 | 静态 | 数组 | 备 注 | 当前地址 | 整数型 | | | 当前字节 | 字节集 | | | 临时地址 | 整数型 | | | 报文长度 | 整数型 | | |
报文长度 = -1 当前地址 = 发包地址 循环判断首 ()当前地址 = 当前地址 - 1 当前字节 = _读字节集 (当前地址, 5 )判断 (-1 ≠ 寻找字节集 (当前字节, { 85, 139, 236, 131, 236 }, )) 报文长度 = 0 判断 (-1 ≠ 寻找字节集 (当前字节, { 131, 236 }, )) 报文长度 = 0 判断 (-1 ≠ 寻找字节集 (当前字节, { 131, 196, 4 }, )) 临时地址 = 当前地址 - 7 当前字节 = _读字节集 (临时地址, 1 )判断 (当前字节 = { 106 })当前字节 = _读字节集 (临时地址 + 1, 1 )报文长度 = 取字节集数据 (当前字节, #整数型, )处理事件 ()循环判断尾 (报文长度 = -1 )返回 (报文长度 )变量 = 取空白字节集 (读取长度 )置入代码 ({ 96, 139, 117, 8, 129, 254, 0, 0, 1, 0, 126, 27, 139, 93, 12, 139, 85, 252, 131, 194, 8, 191, 0, 0, 0, 0, 59, 223, 126, 9, 138, 4, 62, 136, 4, 58, 71, 235, 243, 97 })返回 (变量 )判断 (开始监视.选中 )ctx.ContextFlags = 65599 GetThreadContext (GetCurrentThread (), ctx )ctx.Dr0 = 封包地址 ctx.Dr7 = 1109 ctx.ContextFlags = 65599 SetThreadContext (GetCurrentThread (), ctx )ctx.ContextFlags = 65599 GetThreadContext (GetCurrentThread (), ctx )ctx.Dr0 = 0 ctx.Dr7 = 1109 ctx.ContextFlags = 65599 SetThreadContext (GetCurrentThread (), ctx )超级列表框1. 全部删除 ()a = 超级列表框2. 插入表项 (, , , , , )超级列表框2. 置标题 (a, 0, 过滤关键字输入框.内容 )超级列表框2. 删除表项 (超级列表框2.现行选中项 )超级列表框2. 全部删除 ()置剪辑板文本 (超级列表框1.取晏 (超级列表框1.现行选中项, 3)) 置剪辑板文本 (超级列表框1.取晏 (超级列表框1.现行选中项, 0)) 置剪辑板文本 (超级列表框1.取晏 (超级列表框1.现行选中项, 1)) text = 超级列表框1.取晏 (超级列表框1.现行选中项, 0) + “ ” + 超级列表框1.取晏 (超级列表框1.现行选中项, 1) + “ ” + 超级列表框1.取晏 (超级列表框1.现行选中项, 2) + “ ” + 超级列表框1.取晏 (超级列表框1.现行选中项, 3) + #换行符 置剪辑板文本 (text )
源码下载:
|