安卓版按键精灵内存读取游戏人物的坐标详细教程

按键精灵手机官方一直表示按键精灵为绿色软件,官方论坛会屏蔽掉相关讨论。而且市场上只有某猿的教程,感觉用按键精灵写的内存脚本现在还没有推广开来,大多数人都是不清楚,很多人用GG自带的lua或者Xscript来实现功能。手游脚本其实还是按键精灵用的人比较多,对新手比较友好,好上手。我来给大家稍微解密一下,我也是初学者。只是想重现一下自己的思路,巩固一下。先不从基址和特征码入手,先直接讲命令的内容。
惯例先上效果图勾引.
安卓版按键精灵内存读取游戏人物的坐标详细教程 
现在就说一下内存搜索,单独的内存搜索.看下官方的例子
安卓版按键精灵内存读取游戏人物的坐标详细教程 
先简述一下官方的例子。使用固定的两个内存地址的值来找特征然后根据这个特征值找附近想要找的数据
tb1就是特征1,tb2就是特征2,根据他们的距离,就是offset,在游戏这个进程里搜索内存,(就像按键精灵的多点找色,找十个点,规定第一个点的坐标颜色,规定第二点的坐标和第二个点的的颜色,依次在截图的数据里面找符合这些特征点的位置,找到了返回第一个点的坐标。)找到了之后就会返回特征1的内存地址,然后根据特征1的内存地址读取自己想要的相关的数值。(其实也可以设置很多特征。一般两个三个就可以了)
我们要用到雷电模拟器和GG修改器。因为只说内存搜索这一条命令所以就不说用CE在外部搜索了,CE也可以搜出来,但是大多数是找特征码这个功能。
找一个游戏吧,只要有坐标的游戏就差不多可以,目前大多数手游还是没有保护的,不像端游,一搜就崩溃封号啥的,不过后期肯定会加强的。
打开游戏,打开GG的搜索框,有一点点常识的人都知道坐标值是一个浮点数,在手游里面来说最主要的搜的就是人物的状态,怪物的状态和地图的状态,浮点数分为双精度,和单精度,双精度就是存在计算机内存里面的位置大一点,占用8个字节,能精确到小数点后面十几位,单精度只能精确到小数点的后面几位,占用4个字节。
安卓版按键精灵内存读取游戏人物的坐标详细教程 
第一次搜索就输入坐标范围选择浮点数点击新搜索。
安卓版按键精灵内存读取游戏人物的坐标详细教程 
安卓版按键精灵内存读取游戏人物的坐标详细教程 
第一次回搜索到很多。搜索到了1W+
安卓版按键精灵内存读取游戏人物的坐标详细教程 
现在来走动一下,再点击GG悬浮窗,点击搜索,填入39~41,类型不变点击改善
安卓版按键精灵内存读取游戏人物的坐标详细教程 
安卓版按键精灵内存读取游戏人物的坐标详细教程 
现在只有100多个了。接下来就是一样的套路了。走动一下,重新输入范围值搜索一下。
安卓版按键精灵内存读取游戏人物的坐标详细教程 
经过几轮走路搜索。走路搜索,剩下只20多个,我们来随便找个数据跳转到此地址看一下,比如这个886F9040这个地址。一般X坐标和Y坐标在一起。
安卓版按键精灵内存读取游戏人物的坐标详细教程 

对比一下地图上显示的X坐标和Y坐标。现在就可以发现游戏显示的坐标是浮点数四舍五入的方式显示的。886F9040这个是存放X地址信息的地址。16进制的。下面的886F9048是存放Y地址信息的地址。他们地址相减的间隔是为8.X坐标地址后面的比如421E82B5h这个数据16进制转10进制浮点数就是39.67451858521。转10进制整数就是1109308085。后面的后最h就代表这个数据是16进制的。
安卓版按键精灵内存读取游戏人物的坐标详细教程 安卓版按键精灵内存读取游戏人物的坐标详细教程 
然后39.674518588521F,后面的F应该就是代表浮点数。大F就是双精度的,11093080B5D,后面的D就是代表Dword,就是十进制整数.
安卓版按键精灵内存读取游戏人物的坐标详细教程 
好,接下来就写代码了,我在代码里写备注比较好懂,因为这是直接查找内存地址,内存地址在重启游戏会变的。所以这里只是讲命令。只有特征码和基址在重启游戏的时候不会变。在游戏更新的时候会变吧。
 

[Asm] 纯文本查看 复制代码
01
02
03
04
05
06
07
08
09
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
Dim 当前应用包名,X坐标,Y坐标
当前应用包名 = sys.GetFront()
TracePrint 当前应用包名
Dim addr = "0x7"//开始搜索的起始值,我们要找的X坐标信息的地址为886F9040,我们可以填0x7,比8小一点。因为在特征码定位和基址定位中地址是不变的,所以作用是用来加快搜索速度
Dim tb1 = {"lv":1109308085} //第一个特征点的坐标,我们就拿X坐标的值来。显然有点画蛇添足,其实直接拿X坐标地址去读内存就直接获取X坐标的值了
Dim tb2 = {"lv":1116455199,"offset":8}//第二个特征点的坐标。GG里面Y坐标的地址比X坐标地址大,偏移就是为正数
Dim tb = {tb1, tb2}
Dim t = TickCount()//按键自带命令,计算内存搜索时间的
Dim A = Sys.MemorySearch(当前应用包名, True,addr, tb, "i32",0,1)//这里的True代表新搜索,显然第一次是新搜索,i32的意思就是特征点的数据类型tb1和tb2这两个键表值的类型,i就是int,1109308085和1116455199,是32位整数型,0代表搜索范围,0为最广,1是搜索次数。只搜索一次。
//返回的A为一个数组。可能在数组中会搜索到很多结果,一般以数组第一个为准,所以搜索到保存A坐标的信息的地址是是A(0)
TracePrint "搜索地址为:"&A(0)&",耗时"&(TickCount()-t)
//此时A(0)应该是为16进制的地址字符串,偏移为10进制数据,要把结果转换成10进制数值加上偏移再转成16进制的数据。最后转成字符串才能在内存搜索这个命令里面去使用
Dim X地址 = 地址相加(A(0), 0)//该函数下面有注释
Dim Y地址 = 地址相加(A(0), 8)
TracePrint X地址 //6进制的地址字符串
Do
 
X坐标 = Sys.MemoryRead(当前应用包名, X地址, "f32")//我们GG搜索到的值为双精度浮点数,所以为f32,这里大小写应该不敏感,官方的提示全部是大写。我用小写也可以搜到
TracePrint X坐标 //输出X的浮点数坐标值
 
Y坐标 = Sys.MemoryRead(当前应用包名, Y地址, "f32")
TracePrint Y坐标//输出Y的浮点数坐标值
ShowMessage "x坐标为:"&X坐标&"\ny坐标为"&Y坐标//页面直接显示一下
        Delay 300//循环读取加点间隔
Loop
 
Function 地址相加(地址, 偏移)
    Dim A = Right(地址,Len(地址)-2)//去掉16进制左边的0x
    Dim B = Clng("0x"&A)//把这个16进制数据强制转换成十进制整型
    Dim C = B+偏移 //结果加偏移
    Dim D = Hex(C) //强制转16进制
    Dim E = "0x"&D //加上0x,转成字符串
    地址相加 = E
End Function



安卓版按键精灵内存读取游戏人物的坐标详细教程