游戏:天龙八部
版本:0.35.0691
主要工具:OD+CE+GE
开发环境:VS2005
作者:勿在浮沙筑高 转载文章请标明出处http://bbs.bpsend.com

要点:从怪物的名字着手,找到怪物的各种信息,分析出游戏定义的描述怪物信息的关键结构,分析汇编代码还原成C++高级语言。

由于有了一的基础,对一中已经有所讲解的内容,这里不再重复,下面开始:

1. 运行Game.exe,登陆,进入游戏。
2. 来到野外有怪的地方,我这里

我们看到边上有好多的“沙坡狼”,怪物的名字当然就是字符型收索,这里我使用GE来收 “沙坡狼”,结果如下:


有678个结果。我们需要减少这个数值。
在地图上跑动,注意这里不要切换地图,来到一个新的地方(确保边上怪物的名字和刚才的不同),我来到的地方如下:

如你所见,边上的怪物变成了“恶猿”,我们在上面的收索结果里面再次收“恶猿”。得到结果如下:

结果已经只剩下6个,而且我们还注意到,地址之间基本是相差0x40(64)大小(所有怪物的结构是相同的,所以地址相差大小相同,从这里我们也可以判断出,基本这些地址我们找对了,而且还可以初步估计,怪物的结构大小是0x40)。

到这里GE的工作基本就结束了,下面OD出马。

3. 运行OD,附加到Game.exe进程,F9让游戏跑起来。然后使用如下db命令来查看我们前面找到的内存地址(这里我们就看第一个0x02897E18):

如上图,我们看到好几个“恶猿”字样,看来我们已经找到存储怪物数组的内存地址。由于该地址是动态变化的,切换地图就会变化,所以我们需要做的就是找出它的基地址。

4. 对里面比较靠前的怪物的内存地址下内存写如断点,我这里看到最前面的是“散落的宝物”:

5. 这样可能很快OD就会断到,因为游戏在不断刷新怪物数组。如果你没断到,那随便在地图上跑动一下,有新的怪出现,OD肯定断下,断到这里(不管你断在哪句,这附近代码都是可以的):

断下后,我们看到处于系统领空,Alt+K查看调用堆栈:


接着Ctrl+F9回到Game领空:

下面贴出该段的部分我们需要的代码:

我们看到ecx = edi + 0x10,edi = eax,这里怎么找eax呢?
还记得笔记一中讲过吗,这里eax也刚好是call的返回值,F7进call,看到代码比较简单,如下:

这段代码虽然短,不过包含的东西可不少,我们来分析分析其中比较重要的几句(我没有分析到的请自己理解):
首先cmp edx, 100。一个比较指令,显然是判断怪物数组不能大于0x100(也就是256)。
然后有句shl eax ,6移位指令,左移6位,相当于乘以2的6次方,也就是2^6=64,现在请你好好回忆回忆,这个64我们是不是好象在哪儿见过???
哈哈~~~就是上面我们用GE找到的6个地址,它们之间的大小不都是0x40吗?0x40刚好就是64啊,呵呵,要是你到现在还没理解,那我没办法,不多说…
再有一句inc edx,不就是怪物数组当前的总数加1吗?
接着mov dword ptr [ecx+407C],edx,没什么好说的了吧,将新的数组的总数大小写回。
这里我们就是要找ecx!!!退回函数调用的地方,继续向上去分析ecx是怎么来的。

6. 分析ecx

所以我们需要去查找ebx。

向上一直找,终于看到mov ebx, ecx,下图:

这里的ecx又是父函数传递进来的,没什么好说的,Ctrl+F9去到父函数查看。

TMD,看来还有点麻烦啊,来到父函数,代码如下:

哈哈哈哈哈,看到那句了没:mov ecx, dword ptr [627864]

基本就是我们要的了~为了确定,我们在该句下断,哈哈,值对。

7。。到这里怪物的基址也就找到了,剩下的就是分析怪物的结构,写出高级语言,和一说的一样,这些都只是时间的问题而已,我不讲。

本讲最终结果
怪物数组地址:[0x627864] + 0x407C + 0x7C + 0x10 – 0x20 + 0x40 * i ( 0<= i< 256)
大小:0x40
Me:以前老看不懂这里,现在根据基它教程,对这了有了一个自己的了解,解说一下:

我认为上面的是错的,根据数据,得到基址和偏移如下:

62883C+7c+10+0x40 * i ( 0<= i< 256)

今天工作基本完成,下一讲分析人物背包物品基地址和对应的数据结构。

作为本讲的结束,依然来张测试代码的截图:

天龙八部 找怪物ID相关推荐

  1. 诛仙经验地址和怪物ID(7.3)

    基址:&H12F82C或&H9045ec 名字和坐标偏移+4 人物基址:[[&H12F82C]+&H28]=base 人物角色名:[[base+3a4]+0] 人物ID ...

  2. 【转】内存中找怪物之代码注入篇

    导读: 网上看了N多的文章,对内存中找怪极少有详细介绍,大多数人搞定人物内存中的有关参数后,止步于内存中的找怪.人物只有一个,而怪有各种各样的,数量又同时出现多个,比在内存中找人物坐标难度要大得多. ...

  3. Elixir GenServer

    今天记录一下自己构建出来的,使用GenServer调控多个线程,用于实现4人组队的相关逻辑代码. defmodule PartyAttackController1 douse GenServerdef ...

  4. 64位游戏找call_网络小游戏怎么修改技能满级,满血?教大家一个很简单的修改方法!...

    最近去忙着给小弟培训,都忘记上来发文章了,刚好小弟找了个小游戏练练逆向数据分析,下面就给大家讲讲他是怎么做到修改数据后,达到无限满血,全技能升级完的. 首先介绍几个概念: 网络游戏的变态功能的一般实现 ...

  5. 好久之前写的天龙八部辅助思路分享

     关于某网游的二叉树分析和luaHook实现 最近在研究一个网游,里面用儿叉树的结构,至于怎么找到这颗二叉树的,网上教程这么多,我就不说了,重点讲下这颗二叉树. 其中1是左子树执行的流程,2是右子 ...

  6. 游戏外挂四之利用CE和OD查找被选中怪物和怪物列表

    合肥程序员群:49313181.    合肥实名程序员群:128131462 (不愿透露姓名和信息者勿加入) Q  Q:408365330     E-Mail:egojit@qq.com 这一节我们 ...

  7. TP id 对字符串的查找

    // 还剩的图片的id$oldPid = implode(',', $_POST['OldGoodsPic']);// 从数据库中找需要出删除了的 FIND_IN_SET(id,'$oldPid') ...

  8. 第1章 游戏之乐——快速找出故障机器

    转载:编程之美_1.5_快速找出机器故障 题目:假设一个机器只存储一个标号为ID的记录,假设每份数据保存2个备份,这样就有2个机器存储了相同的数据.其中ID是小于10亿的整数 问题1.在某个时间,如果 ...

  9. mysql id自动递增两个_浅析Mysql索引数据结构演变,让你一看就懂

    前言 相信小伙伴应该都用到过mysql数据库,在mysql数据库中,为了提升查询效率,都会使用到索引技术.今天老顾就来介绍一下mysql索引的数据结构的演变. 数据查询 我们来看一下有个用户表,存放这 ...

最新文章

  1. RayTracking 光线跟踪算法
  2. python课程水平测试成绩查询_学业水平测试成绩查询
  3. java Thread 类的几种方法
  4. 微软发布人工智能教育与学习共建社区
  5. Julia: readcsv和 readdlm
  6. 一个前端小白的成长之路(序)
  7. 用友U8案例教程财务报表
  8. python爬虫做灰产_python爬虫
  9. FullCalendar - 开源的多功能 JavaScript 日历插件
  10. 一周信创舆情观察(7.5~7.11)
  11. 深入理解之border属性(第一期)
  12. 内存颗粒位宽和容量_【科普】内存颗粒版本判断方法和编号解析V2.0
  13. c++ 聚合/POD/平凡/标准布局 介绍
  14. 论仪式感在品牌营销中的重要性
  15. 九种引人瞩目的开源大数据技术
  16. Python 标准库之 shutil 高阶文件操作『详细』
  17. 如何用new定义二维数据以及对应的delete
  18. 申请了SSL数字证书如何进行域名验证?
  19. 知言 代立冬:大家都在关注Hbase到底是怎样的?
  20. SDL已死,应用安全路在何方?

热门文章

  1. NOIP2017旅游(过节)总结
  2. android系统中的ghost,谈谈android的类xp Ghost时代
  3. 华为云首次突发大面积故障,网友哀嚎一片
  4. Unity旋转之四元数(开关车门,第一人称控制器)
  5. 金融风控机器学习第三十一天---拜师课堂 机器学习算法--决策树 随机森林
  6. ats2851 / cm591 ugreen bluetooth 5.3 for Linux
  7. 这个是小蜜蜂老师给出的蓝桥杯练习题目,我通过这个题目加深了对iic总线的理解和应用。
  8. 中关村科技企业家协会网安创新分会在京成立,墨云科技成为首批会员单位
  9. 若有定义:int a=7; float x=2.5, y=4.7;,则表达式 x+a%3*(int)(x+y)%2/4 的值是(A)。
  10. e-dialog出现额外多了一层遮罩