• 按键公众号 :
按键精灵电脑版
立即下载

软件版本:2014.06
软件大小:22.9M
更新时间:2021-12-03

按键精灵安卓版
立即下载

软件版本:3.7.2
软件大小:46.2M
更新时间:2023-05-10

按键精灵iOS版
立即下载

软件版本:1.8.0
软件大小:29.2M
更新时间:2023-03-21

按键手机助手
立即下载

软件版本:3.8.0
软件大小:262M
更新时间:2023-05-30

快捷导航

登录 后使用快捷导航
没有帐号? 注册

发新话题 回复该主题

[13的秘密教程] 字库?不不,我有更好的选择----内存 [复制链接]

1#

字库?不不,我有更好的选择----内存



您所在的用户组无法下载或查看附件



说你是否还在为字库的制作如此繁琐而烦恼,是否还在思索如何提高字库识别的效率,恩。。。这个可以通过控制搜索范围来提高哦,咳咳咳,其实我今天想说的是,我们直接用内存命令来解决这个问题吧。

您所在的用户组无法下载或查看附件

一、原理及思路(长篇大论~我也不想滴~orz

  在游戏中,我们看到酷炫的界面,精美的原画等等等等,都是经过运算后从内存中取出来的,因此,我们可以在内存中就获取到屏幕上所显示的内容,需要做的就是从茫茫多的内存数据中取出我们需要的数据做处理。

  如此多的数据(几十至几百兆大小),不经过过滤的话基本上没有找出的可能性,因此我们需要过滤的条件。

  首先我们需要了解一部分游戏制作的知识,游戏中的数据存放,肯定也是有规律的(程序猿们也要自己写的清楚明白不是?),或许是一个数据结构,或者是一个类,因此,我们可以依赖游戏中所显示的内容,作为我们查找的依据。

  就从最简单的地方开始,我们知道的,游戏中肯定存在具体化的数值,可能是等级,可能是金币数,从这些可见的地方开始,肯定能拿到我们想要的东西----在内存中的位置,也叫地址:


您所在的用户组无法下载或查看附件




  那么我们拿到这个地址能够直接使用吗?答案是否定的,安卓是跑在虚拟机上的,我们每次打开应用,系统分配的内存地址块都是不同的,我们两个打开应用得到的地址都不会是一样的。然后我们又想到,我们既然是根据等级金币等数据来获取内容,那么每个号的这些数据都不会是完全一样的,甚至来说是都不一样的。那么两个都无法确定的东西,我们要来干嘛?丢弃之。

  咳咳,别打,先看个教程冷静一下:[按键精灵手机版2.5基础教程] 4.图色操作http://bbs.anjian.com/showtopic-585878-1.aspx

  好吧,我就是在打广告,但我肯定不会做这么单纯的事情,我们从这篇教程中看到了多点找色,也就是FindMultiColor这个命令,他用到了一个很好理解的东东----相对偏移,那么内存中是否也存在这样的关系,我们这么理解,有两个账号:

  等级:20

  等级:30

  这两个号虽然等级不一样,但是他们的描述是一样的啊,我们是否可以去获取“等级:的位置,在根据他们的偏移,来得到想要得到的等级呢?

  实践是检验真理的唯一标准,我们立马尝试。。。。请看第二个步骤。

二、具体操作步骤

下面以搜索游戏<武林萌主>的数据作为例子(搜索借助内存修改器):

1.打开游戏之后,点进人物详情页


您所在的用户组无法下载或查看附件




2.从人物详情中取出我们看到的数据,这边使用经验值作为搜索依据,打开内存修改器,我这边使用烧饼修改器联合搜索图中的数据,比如395和1118(经验值)


您所在的用户组无法下载或查看附件



您所在的用户组无法下载或查看附件



您所在的用户组无法下载或查看附件



您所在的用户组无法下载或查看附件




  搜索到两对数据, 一般游戏内的相邻数据间隔是4,因此34这一对才是正确的地址(当然你可以两个都改改看就知道哪一组是对的~)

3.得到地址后,长按上图的第三条数据,点击查看附近内存:

您所在的用户组无法下载或查看附件



您所在的用户组无法下载或查看附件



4.接下来,我们就尝试在这个地址的附近找到可以用来定位的数据。(这里有个技巧,我们可以双开模拟器,在两个模拟器中打开不一样的账号,同时搜索同时滑动同样的距离)


您所在的用户组无法下载或查看附件



  我们在经验值附近发现一个这样的数据(图中的5390),每个账号偏移相同的量的地方都是这个数据,于是我们的搜索定位用的数据就确定是这个数据了。


5.我们需要再次确认搜索用的数据,一个数据的搜索会有多个地址, 因此需要继续搜索这个数据附近的值,我们在这个5390附近发现了一个也是固定的数值,他和5389的偏移是24。


您所在的用户组无法下载或查看附件



.至此,数据定位完毕,我们先到测试一下:


您所在的用户组无法下载或查看附件


  图中冒号后的24就是数据间的偏移为24,点击搜索,能得到唯一的一对数据说明根据固定数值定位基址成功。

您所在的用户组无法下载或查看附件


  OK,和预想的一致。

三、代码实现

  1. Dim 当前应用包名
  2. 当前应用包名 = sys.GetFront()
  3. TracePrint 当前应用包名
  4. Dim addr = "0x0"
  5. Dim tb1 = {"lv":5389} //第一个数据(第二个步骤中定位的地址)
  6. Dim tb2 = {"lv":5390,"offset":24} //第二个数据,以及他相对于第一个数据的偏移(第二个步骤中定位的地址)
  7. //没错,如此漫长的定位,实际上就是为上面的两个table(T_T)
  8. Dim tb = {tb1, tb2}
  9. Dim t = TickCount()
  10. Dim A = Sys.MemorySearch(当前应用包名, True,addr, tb, "i32",0,1) //参数为包名,是否从上次结果中继续搜索(无上次搜索则开始新的搜索),地址起点,数据,数据类型,搜索模式(0为完整搜索),搜索数据条数 返回值为一个数组
  11. //内存命令暂时只支持4.4及以下的android系统
  12. TracePrint "搜索地址为:"&A(0)&",耗时"&(TickCount()-t) //A(0)为搜索到的第一个地址
  13. Dim 等级地址 = 地址相加(A(0), 116) //进行地址偏移(偏移116为等级地址)
  14. TracePrint "偏移后得到等级地址"&等级地址

  15. Dim t1 = TickCount()
  16. TracePrint "当前等级为:"&Sys.MemoryRead(当前应用包名,等级地址, "i32") //读取地址的值
  17. TracePrint "读地址耗时"&(TickCount()-t1)

  18. Function 地址相加(地址, 偏移) //简单封装一下偏移的函数
  19. Dim A = Right(地址,Len(地址)-2)
  20. Dim B = Clng("0x"&A)
  21. TracePrint B
  22. Dim C = B+偏移
  23. Dim D = Hex(C)
  24. Dim E = "0x"&D
  25. 地址相加 = E
  26. End Function
复制代码

游戏下载地址


  想知道更多吗?请继续偷偷关注13(T_T)



您所在的用户组无法下载或查看附件

(微信扫一扫,加关注按键精灵公众号)









点评

萌柠  能录制一个视频就完美了  发表于 2016/12/20 22:23:16
i198907021  偏移怎么得到的没说清楚啊,24怎么得到?116怎么得到的?  发表于 2016/9/13 14:24:48

本主题由 超级版主 瑞祥幽冥狼 于 2022/1/24 14:15:38 执行 审核帖子 操作
2#

地址是一个十六进制数,两个地址相减就是偏移值

3#


最后编辑i198907021 最后编辑于 2016-09-13 20:42:12
<a href="http://bbs.anjian.com/thread-576954-1-1.html" target="_blank"><strong><font size="4">按键精灵14周年庆典火热进行中!点击领奖</font></strong></a>
4#


5#
6#


7#

学习 期待更多教程

8#

终于出教程了,之前直接2个晚上没睡觉通宵.....

9#

回复 1楼兄弟工程师13的帖子

想用这个办法找刀塔传奇已用体力的数值

怎么找也找不到。。。求指教

10#

回复 1楼兄弟工程师13的帖子

内存修改器求分享.

11#

楼主,这个没找静态的地址吧,动态的话重进游戏就变了,没什么用吧

12#

还是说我没看懂

13#

请问用的什么模拟器,可以用烧饼的?

14#

那么问题来了,先说说怎么用修改器查找模拟器的内存?

15#

回复 11楼a865186652的帖子

所以tb1和tb2就是用来根据固定数值查找动态地址,然后再偏移116到血值上,你多看几遍就懂了。

16#

楼主说的不是很详细,很多小细节都没说清楚,能录制一个视频就完美了

17#

完全没听懂

18#

厉害了我去试试

19#

完全看不懂

20#

您好 看了之后有2个问题请教
1 那个查找内存的软件在哪里能下载 这个软件对其他游戏通用吗?
2 如果在安卓实体机上跑程序 上边的一切还成立吗? 能否查到这些信息?单次打开游戏 是不是全部内存就会锁死了呢?

发新话题 回复该主题