天龙八部 找怪物ID
游戏:天龙八部
版本: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相关推荐
- 诛仙经验地址和怪物ID(7.3)
基址:&H12F82C或&H9045ec 名字和坐标偏移+4 人物基址:[[&H12F82C]+&H28]=base 人物角色名:[[base+3a4]+0] 人物ID ...
- 【转】内存中找怪物之代码注入篇
导读: 网上看了N多的文章,对内存中找怪极少有详细介绍,大多数人搞定人物内存中的有关参数后,止步于内存中的找怪.人物只有一个,而怪有各种各样的,数量又同时出现多个,比在内存中找人物坐标难度要大得多. ...
- Elixir GenServer
今天记录一下自己构建出来的,使用GenServer调控多个线程,用于实现4人组队的相关逻辑代码. defmodule PartyAttackController1 douse GenServerdef ...
- 64位游戏找call_网络小游戏怎么修改技能满级,满血?教大家一个很简单的修改方法!...
最近去忙着给小弟培训,都忘记上来发文章了,刚好小弟找了个小游戏练练逆向数据分析,下面就给大家讲讲他是怎么做到修改数据后,达到无限满血,全技能升级完的. 首先介绍几个概念: 网络游戏的变态功能的一般实现 ...
- 好久之前写的天龙八部辅助思路分享
关于某网游的二叉树分析和luaHook实现 最近在研究一个网游,里面用儿叉树的结构,至于怎么找到这颗二叉树的,网上教程这么多,我就不说了,重点讲下这颗二叉树. 其中1是左子树执行的流程,2是右子 ...
- 游戏外挂四之利用CE和OD查找被选中怪物和怪物列表
合肥程序员群:49313181. 合肥实名程序员群:128131462 (不愿透露姓名和信息者勿加入) Q Q:408365330 E-Mail:egojit@qq.com 这一节我们 ...
- TP id 对字符串的查找
// 还剩的图片的id$oldPid = implode(',', $_POST['OldGoodsPic']);// 从数据库中找需要出删除了的 FIND_IN_SET(id,'$oldPid') ...
- 第1章 游戏之乐——快速找出故障机器
转载:编程之美_1.5_快速找出机器故障 题目:假设一个机器只存储一个标号为ID的记录,假设每份数据保存2个备份,这样就有2个机器存储了相同的数据.其中ID是小于10亿的整数 问题1.在某个时间,如果 ...
- mysql id自动递增两个_浅析Mysql索引数据结构演变,让你一看就懂
前言 相信小伙伴应该都用到过mysql数据库,在mysql数据库中,为了提升查询效率,都会使用到索引技术.今天老顾就来介绍一下mysql索引的数据结构的演变. 数据查询 我们来看一下有个用户表,存放这 ...
最新文章
- RayTracking 光线跟踪算法
- python课程水平测试成绩查询_学业水平测试成绩查询
- java Thread 类的几种方法
- 微软发布人工智能教育与学习共建社区
- Julia: readcsv和 readdlm
- 一个前端小白的成长之路(序)
- 用友U8案例教程财务报表
- python爬虫做灰产_python爬虫
- FullCalendar - 开源的多功能 JavaScript 日历插件
- 一周信创舆情观察(7.5~7.11)
- 深入理解之border属性(第一期)
- 内存颗粒位宽和容量_【科普】内存颗粒版本判断方法和编号解析V2.0
- c++ 聚合/POD/平凡/标准布局 介绍
- 论仪式感在品牌营销中的重要性
- 九种引人瞩目的开源大数据技术
- Python 标准库之 shutil 高阶文件操作『详细』
- 如何用new定义二维数据以及对应的delete
- 申请了SSL数字证书如何进行域名验证?
- 知言 代立冬:大家都在关注Hbase到底是怎样的?
- SDL已死,应用安全路在何方?
热门文章
- NOIP2017旅游(过节)总结
- android系统中的ghost,谈谈android的类xp Ghost时代
- 华为云首次突发大面积故障,网友哀嚎一片
- Unity旋转之四元数(开关车门,第一人称控制器)
- 金融风控机器学习第三十一天---拜师课堂 机器学习算法--决策树 随机森林
- ats2851 / cm591 ugreen bluetooth 5.3 for Linux
- 这个是小蜜蜂老师给出的蓝桥杯练习题目,我通过这个题目加深了对iic总线的理解和应用。
- 中关村科技企业家协会网安创新分会在京成立,墨云科技成为首批会员单位
- 若有定义:int a=7; float x=2.5, y=4.7;,则表达式 x+a%3*(int)(x+y)%2/4 的值是(A)。
- e-dialog出现额外多了一层遮罩