OD CE找数据总结(下)

 

十、判断是否是怪物(角色怪物类别)

1、普通攻击call里面,在跳转地方查看怪物,或者npc对比看哪个跳了。


2、ce选择怪物搜索,初始化值,完后选择npc,选择改变的。选择另外一个npc ,选择没改变的,以此类推。


3、内存遍历怪物结构。

 

十一、跨图寻路call

1、call内部头部下断点,一直断下来,可以[esp]!=0x4526c,这里的4526c是这个call返回到哪个地址。


2、可能注入测试的时候参数需要几个内存地址存储一些值,不用vs2010写代码,可以直接ce搜索0的内存,完后写入一些值,把这些内存地址push进测试call就行了。


3、有些游戏城里的坐标和城外的不一样。


4、有些游戏的寻路call的参数内存地址存放的的坐标是加过密的,当执行到这个call的时候,坐标被别的call解密修改写入了。


5、gettickcount是得到操作系统启动后到现在的秒数,一般用于加密。


6、scanf字眼的是用于得到游戏界面的内容,比如当前地图id,当前坐标什么的。


7、堆栈和内存都存在的地址,想要找到哪里修改了这个地址的内容,可以在开头下断点,此时断下来里面的内容不是要找的内容,完后ce查看写入的指令,完后撤销断点f9运行到下个断点(此时地址里面是要找的内容) 再看ce的监视器,一般找最后出现的指令就是了。


8、一般call调用测试不成功,一般都是参数不正确。看看call里面哪些访问了参数的,哪些偏移内容,对比我们注入测试的时候,是不是这些偏移地址内的内容和正常情况下不一样,完后找哪里写入的这些内容。比如,写入的内容是ds:[eax+11c],就找eax来源,发现eax= ds:[esi+02c],发现esi的值=ds:[edx],里面每次都在变动,ce查看哪那里写入,看最后出现的od跳转,完后继续如此的找。

其实这种情况一般都是在找到的call上几层的call下断点,完后看看此时参数有没有地图id、目的目标、当前坐标这几个参数,如果有那就找对了。这个call里面某个地方的call会改变ds:[eax+11c]里面的值,完后你第一次找到的call会访问这个地址的值,因为你没调用那个写入ds:[eax+11c]地址处的call,所以此时你发现你测试的call没用。


9、如果你下断点,想返回上层,此时可能当你的动作触发后不止一次被断下来,这种情况最好是在下段点前先看看这个call开头有没有提示多个调用来自某个地址,如果有,那就没必要下断点了,只能按照别的办法了。


10、有时候进入城里或者客栈什么的,是另外一个call负责寻路,可以进入城里后再寻路,send断点断下来找到那个call。

11、有时候测试call没跑进客栈,坐标改一改,改类型 double float dword 或者13.1254这种写入进去,完后不行就退出游戏重新测试,有时是游戏问题不是call问题。

 

十二、拾取,打坐等call

1、按照第九步

十三、技能数组(结构)方法:

  

1、搜索CD时间,一般都是用回城这个技能来搜索,先用CE搜索,未知初始化数值,然后搜索减少的数值。


2、通过技能名字查找,CE搜索文本型技能的名字。


3、可以通过快捷栏对象搜索,或者使用技能更具参数技能id向上找到。


4、设置默认技能或者选择某个技能,然后搜索技能名字(搜默认技能对象地址,未知初始化)。


5、一个call开头前面几个nop,以为是call开头,其实可能是跳过来的,注意跳转。


6、找某个内存里的值何时被写入的时候找不到,此时要注意上层call的参数push,可能把某个值压入这个内存里了。


7、ce搜索名字的地址,要范围搜索,因为技能名字前面可能还有一些字符串和他是一体的,完后结果中找最大的内存地址,完后查看访问这个地址的代码,如果没有看到访问的指令,那就搜索存储这个技能名字的内存地址,可能是访问了这个存储技能名字的指针,完后点击一下那个技能列表按钮,看看有没有显示出来的指令。


8、有时候call开头下断点,返回上一层,这个call开头要看准了,有的时候call开头没有红线提示跳转,按ctrl+a分析后也没有,而且旁边没有?这个暗示开头的符号。那么它就是call开头,不要弄错了。
 

 

十四、地面物品数组(结构)方法:

  

1、找距离,找一个不变的地面物品,通过人物走远走近,搜索增加或减少的数值。
 

2、找名字吧,不过这个比较麻烦,也比较耗时间,就是CE搜索未知初始化数值,然后地面掉一个物品,就搜这个物品名字。

    

3、找掉落物品的数量
    

搜索未知,掉一个,搜增加的值,减少一个就搜减少的值当然不一定能找到就是了,因为很多游戏都没有这个值。

 

十五、任务数组(结构)方法:

  

1、通过任务打怪的数量来查找,比如你打15/50,就搜索15,打16,就搜索16.(文本型),或者是byte类型。
  

2、通过任务的名字来查找,CE搜索任务的名字,这个比较好找。
  

3、通过任务的数量来查找,这个和方法1差不多(不如接了5个任务,然后在接就搜增加,取消就搜减少)。
  

4、任务状态参照上面。

 

十六、装备数组(结构)方法:

  1、通过装备的耐久度来搜索,一般是字节。


  2、通过装备的名字来搜索.CE搜索装备的名字。
 

 

十七、队友数组(结构)方法:

    

1、通过队伍的数量来搜索,比如你一个队伍5个人,就搜5,然后T掉一个,就搜减少。
    

2、搜索队伍里面队友的血量。
    

3、搜索队伍里面队友的名字。
   

4、通过搜索队伍里面队友掉线的方法,因为一般来说组队了,掉线不会马上脱离队伍的,这时候就可以通过上线,下线来搜索。

 

十八、宠物数组(结构)方法:

  

1、通过宠物的属性来搜索,比如宠物的血、等级、坐标等。
  

2、通过宠物的召唤标志来搜索,比如召唤搜1,没有召唤搜0。
 

 

十九、找周围玩家与NPC数组

  

1、通过周围玩家与NPC名字来查找,CE搜索任务的名字.这个比较好找。
 

 

二十、吃药call

1、一般参数是药品在背包的序号,横竖序号,或者药品id、6bd什么的。

 

二十一、物品等级 人物等级以及cd冷却时间

1、当等级小于物品等级,不会调用。我们可以买一个物品等级大于自己的物品,完后根据堆栈表,找到吃药call完后,下断点,完后吃那个买来的药,看能不能断下来,能断下来,就进入这个call的下层call,下断点,直到找到不能断下来的。完后就在那个call上面找跳转,或者开头下断点,能跳转就注释1,完后吃等级低于自己的药物,也同样一路注释下去,对比找到计算人物等级和物品等级的call。


2、cd冷却偏移也是同样道理,完后如果当前call上下文很多跳转,就在附近遇到跳转就下断点,遇到jmp,就在他前面的跳转下断点,完后写十几个后,点击正在cd冷却中的药品,完后看在那个断电的时候,就跳过吃药call了。

 

二十二、技能冷却偏移

1、同物品冷却call,有时候在发包call的上面有个跳转,cd冷却时间内这个跳转就会和cd冷却时间外的不一样。
 

 

二十三、喊话call

1,根据第九步,一般参数是有喊话内容。

 

二十四、跳跃call

1,根据第九步,一般没啥参数。
 

 

二十五、打开npc对话框call

1、按照第九步找到标志位,完后od跳转后到上层后,看是不是那个call,不是的话,就在本层找找其他call,不行就是再上层的call,以此类推。

2、一般打开npc对话框call这种类似的动作,要先分析第一先跑到npc对面 完后才执行打开npc对话框,所以找到标志位后,od跳转后到上层后,一般不是打开对话框call,要再往上找到参数一般一个的那种call,完后在头不下断点,断两次。第一次是调用寻路call,第二次调用打开对话框call。

3、参数有时候分析会发现分析道:

006A3B32  |> /33D2          /xor edx,edx
006A3B34  |> |8B43 0C        mov eax,dword ptr ds:[ebx+0xC]
006A3B37  |. |B9 07000000   |mov ecx,0x7
006A3B3C  |. |8D7C24 14     |lea edi,dword ptr ss:[esp+0x14]
006A3B40  |. |8D70 08       |lea esi,dword ptr ds:[eax+0x8]
006A3B43  |. |F3:A5         |rep movs dword ptr es:[edi],dword ptr ds:[esi]
006A3B45  |. |8B08          |mov ecx,dword ptr ds:[eax]

参数来自esi,这是批赋值指令,此时大概看一下上下指令,原来是从左子拿出一个对象指针,完后把他里面的七个数据批处理复制到另外一个结构,以此类推直到左子树弄完。

后面就看不明白了,大概是这么个意思,此时我们当点击npc打开对话框的时候断下来,发现里面七个数据第一个是102,于是乎想要自己遍历这个二叉树。

找到符合102的那个,可是在当前头部下段后发现ebx+c里面都是0。于是查看那里写入,发现另外一处地方写入,而且发现这个地方有一个call先得出一个对象地址,完后把一些七个值都批复制到里面,此时发现那七个值来自esi。 我们此时要弄清楚那个对象指针里面的七个数据是啥东西,于是我们就到上层找esi来源,于是发现一堆往esi的对象指针里批复制的指令。 

由于其他的6个数据不变,只有一个类似于指针在变化,就找这个来源吧 。于是就接上上层找,最后找到一个数组,当我们点击npc断下来的时候,此时数组第一个元素进去后,再进去就会发现是npc的id +4+8等等,都是些垃圾数据。

因为对比了断下来时候数组里的,和上面那些指令ebx+c点进去后的对比,发现除了npc 的id,其他都不一样貌似是垃圾数据,实在不行就进入打开npc对话框call进去后,看看访问了哪些偏移地址不就知道了?


4、关闭对话框,由于有些游戏不发包,所以不能通过bp send来找到,只能通过有关系的行为来找,比如开着对话框就不能寻路,可以在寻路call下断点,进入后对比关闭。


对话框后的寻路查看标志位跳转,完后找到一个内存地址,里面是1就标志开着对话框,0就是关着,完后ce查看写入的指令,od跳转到上层,测试调用call成功。

上文提到的找到的数组:


当点击npc,打开对话框的时候ebx=0,进去后是怪物id:

[[[[[00CEBE30+0x20]+0x1D4]+ebx*4]+0x4]+0c]+2=npc id

 

二十六、接受任务,放弃任务

1、按照第九步,接受任务有一个参数是npc ID,还有一个参数可以看出是选择了某个选项。


2、放弃任务的参数一般很少,一般一个。
 

 

二十七、任务完成标志

1、根据任务的数组,随便选一个任务的结构od内存里修改一下,不是真修改,只是为了改变时候会变红,完后去完成他对应的任务。切记这个任务完成后不是变成其他的任务,完成后界面上他就消失了。完后再对比od内存,看看哪些地方修改了,一般看ffff0203这种数据,比如武林外传就是03变成00,多对比几次,有时候不是03变00而是02变其他数字等等。
 

 

二十八、游戏控件和子控件

1、进入登录界面切换线路,第一个是0,第二个是1,以此类推,完后ce找到后,od跳转进入后,dd 内存地址(里面存放的是刚才ce搜到的地址) 完后找到上面第一个。


element.1234 (此时会注意到第一个控件字符串list)这种进入后是一堆element.2345 这种就是虚函数表完后在存放1234的地址处,ce搜索访问的指令,选择一个od跳转,查看ecx来源,完后,看看这个来源内存进去是不是刚才第一次看到的list字符串,如果是就找来源吧,完后ce查看访问他的代码,完后od跳转向上找到来源数。


组数量可以查看访问数组地址的代码,找到类似于循环遍历的代码也可以找到数量基地址。


2、也可以点击强行登陆等check复选框,ce搜索1,完后撤销,ce搜索0。


3、子控件偏移就是按照第一步内存中进去发现第一个字符串list,那时候就是偏移。


找控件数组:


找控件数组经验


1、ce搜索密码字符个数 最后找到进入游戏call 他的参数是一个事件id名称 ecx就是对应的控件(大控件就是包含小空间的) 。


2、找ecx来源,发现最后找到一个堆栈地址,ce也搜不到来源,比如要找哪里把数据022cdc写入哪个堆栈地址,可以ce搜那个022dc,完后查看访问指令,从进入游戏界面,点击返回上一步进入选择服务器界面。

查看监视器中的窗口多出一个数组的指令,完后od跳转,接着向上跟,最后找到上面说的的eax,发现进入后是当前控件数组,select_server2,坐标在1e4,有的控件在1d0处周围。


3、找的过程中,发现假如eax来源于一个堆栈地址,ce搜写入这个地址的时候,发现一堆杂乱无章的数据,毫无头绪的时候ce直接搜写入eax的那个值,比如想找到eax的值0x2145001是啥时候被写入那个堆栈地址的,就ce搜0x2145001就行了,完后选择一个,查看访问的指令od跳转接着找。


4、游戏进入游戏窗口,激活后,就是听到音乐后再下断点调试,后期就是不听到音乐下断点,激活后断下后找数据。


5、下断点后,断下来后不能查看内存窗口的偏移,不然汇报不能访问进程内存的错误。


6、od内存窗口查看ascii文本的时候要注意用hex 16位查看,这样当你按减号的时候,可以返回去不然返不回了。
 

 

二十九、游戏登陆验证码

 

1、先进入游戏,完后看到提示输入验证码的对话框后,ce搜索四字节,未知初始化数据,完后刷新验证码,搜变动,几次下来后,移动对话框位置,完后搜不变动,完后写入一些数字,搜不变动,最后剩下4000多个,完后按照地址分几大类,比如23412c、234125c、2341278发现都是234开头,那么就是一类,选择第一个,以此类推,选择10个。

完后ce查看访问代码,注意要看带mov的,而且要是四字节的,最后od跳转后, 看是不是循环复制图片数据进去 里面的数据大概都一样 比如.......p.........p...........p。  

完后剩下两个后, 发现代码存放了好几个图片数据,不知道哪个是要找的时候,就看call结尾,发现此处把一个图片数据复制到了一个固定的地址处 ,那个固定地址就是了。


找验证码图片基地址经验:


1、点击刷新,搜四字节或者字节等变动,持续几个回合,完后输入一些数字,不点击确定,再输入不变动。


完后剩下几千个,你点击确定,这时候弹出验证失败请重新输入,你搜索未变动的,这时候就剩下几百个了。你归类一下,看开头的地址,比如123ffc、123fbv、你发现都是123家族的,你就选择第一个123ffc,以此类推, 这是我在别的教程那里学来的。

完后选择几十个后依次查看访问的代码,完后你点击刷新验证码,完后看监视器里有没有mov 类的指令,没有就找下一个,有就od跳过去看看是不是批复制。


看看是不是批复制类的指令,或者是循环复制某些数据到另外一个内存中图片的数据,一般有很多一样的。

2、记着这些特征,完后把那些数据改一下,你看看验证码发生变化没有, 发生变化,说明就是这个了。完后查看哪些地方访问了这个地址,直到找到一个基地址存放着数据前前后后都不变动,除非点击刷新。

3、有时候有些数据不是图片,是游戏自己画上去的,怎么区分呢,就是修改中间的为ff。查看验证码中间是不是多了一条黑线,如果多了,那就是画上去的。


 

 

三十、游戏窗口以及游戏登陆选择区和服务器

1,直接下showwindow断点(条件断点 不然会一直断下来 无法找到真的)和WritePrivateProfileString断点就可以找到 记住游戏要在选区的界面才行 完后选择一个区 断下来后 就能看到写入游戏ini文件哪些内容  最后GetPrivateProfileString可以得到对应的内容 WritePrivateProfileString写入对应的内容

showwidnows的call的参数可能不变,不用继续向上找,一般是通过getwindowlong得到的一个userdata。
 

 

三十一、进入游戏call和账号密码框输入call

密码账号找call经验:
 

1、ce搜索输入的个数,找到剩下的几个,完后查看访问,一直断下来的先pass掉,找到一个没有输入就不会断下来的,完后输入一个1,断下来后 堆栈窗口向下查看有一个参数是31的那个,诸如返回到某个地址的注释,完后右键汇编窗口中跟随,完后测试。

 
2、ce搜索的时候,最好查看两次访问,看看变化不,有时候查看访问的结果不一样。


3、d找到的call地址会每次启动游戏都变动,所以要getmodulehandle(call的地址-dll的基地址=偏移),  获得dll的基地址,或者百度搜枚举模块dll,或者在od的M窗口右键特征码搜索,搜到的区段 (call的地址减去区段的基地址=偏移)完后浏览器外挂收藏夹里有两篇文章可以参考,搜索pe,指定的区段+ 偏移就是要call的地址了。


4、如果是lua call,调用他可以直接下lua_dostring断点,完后做一个动作 完后断下来,向上层就是主进程领域了,完后调用。


进入游戏找call经验:


1、同上ce搜索密码框个数,完后查看访问的指令,找到一个不下断点就不会断下来的,完后下断点,完后查看k堆栈窗口,完后看有没有挑一个call 的参数是上面说的id,那就找到了。


2、如果是按照bp send找的话,要注意循环发包结构,完后查看访问写入封包的地址的指令,完后od跳转完后下段,完后向上找,挨个nop,直到找打一call被nop掉后,点击进入游戏,什么反应东西都没弹出来。


3、这个call也可以用来干别的,比如焦点转移、点击别的按钮,只有和事件有关的,只是参数变化罢了。 

转载自看雪论坛公众号

猜你喜欢

转载自blog.csdn.net/l198738655/article/details/84028938
今日推荐