[原创]大航海ol 读取聊天框内容及分析

2012-03-1819:31:58 3 2,307点击

参考文章:结合CE,OD找数据结构http://hi.baidu.com/glfbin/blog/item/ba38e9f58d8c6821bc3109ed.html

 

进入正题:

游戏版本:5007

大体思路:游戏里先说一句话,然后用CE查找到某一内存地址。找到后用OD下内存断点。就找到了操作内存的语句。仔细研究后能得到下面的东西:

LOG首地址基址:CBBB64
LOG内容基址:CBBCE0

LOG首地址基址是一个指针。读取LOG首地址CBBB64内存数据,我这里读出来的是07322E5C。然后看看内存地址07322E5C是什么东西。

07322E5C 80 2E 32 07 00 00 00 00 00 00 00 00 00 00 00 00
07322E6C 00 00 00 00 14 00 00 00 00 00 00 00 0E 00 00 00
07322E7C 7F 01 00 00

每4字节为一组,含义分别是:
后一个LOG地址,前一个LOG地址,未知,偏移,未知,长度,未知,信息类型,未知。

比如后一个LOG地址是80 2E 32 07(内存是反着储存的,正确的是07322E80)。

结构分析完了,最后是读取对应的文字内容。

公式是:
文字内容=LOG内容基址+结构体里的偏移*2
文字长度=结构体里的长度*2

最后有一个前辈写的读LOG脚本,我已更新到最新版。

  提取对话__台服.rar (1.2 KB, 105 次)

发表评论

:?: :razz: :sad: :evil: :!: :smile: :oops: :grin: :eek: :shock: :???: :cool: :lol: :mad: :twisted: :roll: :wink: :idea: :arrow: :neutral: :cry: :mrgreen:

目前评论:3   其中:访客  2   博主  1

    • 尼森 尼森 0

      收益颇多,想学习下这段代码,不知道能否告知最新的内存地址?我逆向推理学习下,谢谢!

        • king king Admin

          @尼森 最新地址我也没有研究。但是可以根据LOG行数推算出来。具体参考http://hi.baidu.com/wking/item/f888a917cdc719721109b5f8

        • yh0008881 yh0008881 0

          logohead_addr = &h00cea1fc
          logotail_addr = &h00cea200
          logosum_addr = &h00cea380
          logoinfo_addr = &h00cea378
          Sub 读最后一句话(i,zfs)
          logobase=Plugin.LazyGod.ReadMemory(objwin(i),logoinfo_addr, 2)
          logoaddr=Plugin.LazyGod.ReadMemory(objwin(i),logotail_addr, 2)
          logoaddroff=logoaddr+12
          offset=Plugin.LazyGod.ReadMemory(objwin(i),logoaddroff, 2)
          temp0 = logobase + offset*2
          logolast=Plugin.LazyGod.ReadMemory(objwin(i),temp0, 6,zfs)
          End Sub

          zfs 是调用程序带来的字符数长度,汉字读取必须是偶数啊