本文转载自 iOS 越狱教程-内存基址修改器的神奇之处,感谢 Acreson 分享干货满满的教程。本人进行了重新排版以及小部分内容修改,并根据教程重新截图及录视频(部分)并修改验证。

前言

iGameGuardian(以下简称 iGG) 是一款内存基址修改工具,支持 iOS 8.x ~ 13.3.1 越狱设备。

iGG 官网iGG 官方源地址

整数和浮点数

iGG 支持以下几种格式:整数和浮点数

整数分为:

  • 8 位元整数
  • 16 位元整数
  • 32 位元整数
  • 64 位元整数

浮点数分为:

  • 32 位浮点数
  • 64 位浮点数

整数与浮点数之间的区别

两者的存储方式不一样,整数是直接以二进制形式进行存储,对于浮点数,需要将小数部分和指数部分分开存储。两者之间的区别还有如下:

  1. 整数没有小数部分,浮点数有小数部分;
  2. 浮点数可以表示的范围比整数大;
  3. 对于一些算术运算(两个很大的数相减),浮点数损失的精度更多;
  4. 在任何区间内都存在着无数个实数,所以计算机的浮点数不能表示区间内的所有值,通常只是实际值的近似值;
  5. 过去,浮点运算比整数运算慢。不过有了浮点处理器,速度上的差距有了一定的缩小。

整数

int 类型是有符号整型,可以是正整数、负整数或零,其取值范围依计算机系统而异。

一般而言,存储一个 int 数据需要占用一个机器字长,正负号会占用其中一位。

处理器的机器字长越长,int 的范围越大。ISO C 规定,int 的取值范围最小为 -32768 ~ 32767

八进制、十进制、十六进制 int 型数据的显示:

  • %o - 八进制
  • %d - 十进制
  • %x - 十六进制

如果是需要显示各进制数的前缀 0、0x 和 0X,必须分别使用 %#o、%#x、%#oX。

占用存储空间:short <= int < long < long long

个人 PC 上常见的设置:

  • long long - 64bit
  • long - 32bit
  • int - 16bit/32bit
  • short - 16bit

C 语言标准对基本数据类型之规定的允许的最小大小。

short、long、long long 和 unsigned 类型数据的打印:

  • %u - unsigned int
  • %ld - long int
    • %lo%lx 形式将 long 型数据以八进制、十六进制打印;
    • 对于 short 类型,使用 h 前缀,%hd%ho 等都是有效的;
    • lh 前缀都可以和 u 一块使用。

在使用printf()函数进行打印的时候,确保转换说明的类型与待打印值的类型相匹配,否则,会有意想不到的错误。

对于 short 型数据,不管是以 %hd 形式进行打印还是以 %d 形式进行打印,结果都是一样的。

原因:在给函数传递参数时,C 语言编译器会把 short 类型的数据自动转换成 int

  1. 转换的原因为 int 类型被认为是计算机处理整数类型时最高效的类型,在 shortint 类型的大小不同的计算机中,用 int 类型的参数传递速度更快;
  2. 使用 h 修饰符可以显示较大整数被截断成 short 类型值的情况。

浮点数

float、double、long double

C 语言标准规定,float 类型必须至少能表示 6 位有效数字,且取值范围至少是 10^(-37) ~ 10^(+37)

通常,系统存储一个 float 类型的数据需要占用 32 位,其中 8 位用于表示指数的值和符号,剩下 24 位用于表示非指数部分(也叫做尾数或有效数)及其符号。

double 类型和 float 类型的最小值范围相同,但至少能必须表示 10 位有效数字。

一般情况下,double 类型的数据占用 64 位而不是 32 位,一些系统将多出的 32 位全部用来表示非指数部分,这种做法不仅增加了有效数字的位数(提高精度),还减少了舍入误差。

还有一些系统会把其中的一些位分配给指数部分,以容纳更大的指数,增加可表示数的范围。无论如何,实际情况中 double 类型的数据至少有 13 位有效数字,超过最低标准。

浮点型常量

浮点型常量的基本形式

有符号的数据(包括小数点),后面紧跟 e 或 E,最后是一个有符号数表示 10 的指数。

例如:-1.56E+12、2.87e-3 等

简写形式

+ 可以省略,可以没有小数点「例如:2E5」或指数部分「例如:19.28」,但是二者不能同时省略;

可以省略小数部分「例如:3.E16」或整数部分「例如: .45E-6」,但是二者不能同时省略;

除了上述的简写形式,以下几种简写形式也是有效的「3.14159、.2、4e16、.8E-5、100.0 等」。

注意:不要在浮点型常量中间加空格。

浮点数的使用

float some = 1.0 \* 2.0

默认情况下,编译器假定浮点型常量是 double 类型的精度。

对于上述表达式的处理,4.0 和 2.0 会被存储为 64 位的 double 类型,使用双精度进行乘法运算,然后将乘积截断成 float 类型的宽度。

虽然说这种计算方式得出来结果精度更高,但是会减慢程序的运行速度。

  1. 在浮点数后边加上 f / F 后缀可覆盖默认设置,编译器会将浮点数常量看作是 float 类型;
  2. 使用 l / L 后缀使得数字成为 long double 类型;
  3. 没有后缀的浮点型常量是 double 类型。

浮点数的打印

  • %f - 打印十进制计数法的 floatdouble 类型浮点数「%Lf 等亦可」;
  • %e - 打印指数计数法的浮点数「%Le 等亦可」;
  • %a - 打印十六进制的浮点数(前提是系统支持)「%La 等亦可」。

浮点值的上溢和下溢

上溢(overflow):数字过大,超过当前类型能表达的范围。

下溢(underflow):当前类型数据的全精度被损失。

综述

上面讲了什么?任意截取一段文字进行搜索,就会搜索到上面的整数与浮点数全是来自于 C 语言相关资料。下面介绍 iGG 实际应用方面,仅供个人测试验证。

iGG 设置

如图设置即可
iGG 基础使用教学之整数和浮点数 - 图1

选择进程

最笨的方法是,打开 iGG 后再打开游戏,那么游戏的进程就会显示在进程列表的最下面。

如果需要确定游戏进程,可以使用 Apps Manager 插件找到游戏,点击程序包跳转到 Filza 后看到游戏名称,点击进入后看到 *.app,app 前面就是游戏进程名称。

iGG 基础使用教学之整数和浮点数 - 图2

选择游戏进程后无任何动作及跳转,需自行点击搜索。不要误以为选择进程后,下面就会自动帮你把游戏修改好,还没有那么智能化。

修改游戏

目前《我功夫特牛》(下面简称功夫)仅支持 64 元浮点数和 32 位元整数。

关卡

只有一种方法修改关卡,顾名思义就是跳关了,关卡数是 32 元整数。

在 iGG 中操作为搜索 i32,不管是什么关卡,进去是 1,然后 i32 搜索 1,每打一关,搜索数值递增,一般搜索到第四关就出来了,2 到 4 个结果为准,然后开启右上角开关全改成默认关卡最高关卡,就是当前关卡。

安全第一,比武大会那里修改需要更小心谨慎。

具体操作视频如下:

IMG_0238.TRIM.MOV (34.34MB)

金币、悟性值

改金币很多种,常见的就是碎片兑换、关卡奖励、任务,这里只讲解任务里面的那个,当然也可以改其他,包含任务中的所有奖励,建议是不常见的数字,尽量不要是 1 或者 2,比如 234 和 567 这种。

任务+装备+碎片兑换模式都是 64 位浮点数模块,所有你搜索的时候都是要以 F64 搜索,视频中的奖励悟性值是 90,金币奖励值是 50.0K(自然是 50000)。

  • 悟性值修改时 iGG 搜索 F64 - 90,结果在 100 个以内才行,全部修改自己需要的悟性值数量,建议在 80W 以下。
  • 金币修改时 iGG 搜索 F64 - 50000,结果在 100 个以内才行,全部修改成自己需要的金币数量,建议在 80000000 以下。

安全第一,具体操作视频如下:

金币、悟性值.mp4 (5.04MB)

荣誉值、玄铁、陨铁

改荣誉值有很多种方法,常见的就是关卡奖励、任务,这里只讲解任务里面的那个,当然也可以改其他,包含任务中的所有奖励,建议是不常见的数字,尽量不要是 1 或者 2,比如 234 和 567 这种。

任务+装备+碎片兑换模式都是 64 位浮点数模块,所有你搜索的时候都是要以 F64 搜索,视频中的荣誉值的奖励值是 40,玄铁的奖励值是 1.00K(自然是 1000),陨铁的奖励是 10。

  • 改荣誉值时 iGG 搜索 F64 - 40,结果在 100 个以内才行,全部修改成自己需要的荣誉值数量,建议在 5w 以下。
  • 改玄铁时 iGG 搜索 F64 - 1000,结果在 100 个以内才行,全部修改成自己需要的选贴数量,上限是 999K,你随意。
  • 改陨铁时 iGG 搜索 F64 - 10,结果在 100 以内才行,全部修改成自己需要的陨铁数量,建议 90000000 以下。

安全第一,具体操作视频如下:

荣誉值、玄铁、陨铁.mp4 (4.15MB)

血量、攻击

血量、攻击,具体搜索是 32 元整数。

修改血量时,iGG 搜索 I32 - 当前血量数据,结果在 10 个以下,然后保存,再锁定,即可实现锁血。

修改攻击时,iGG 搜索 I32 - 当前攻击数数据,结果在 100 个以下,全部修改有效。

装备碎片

装备碎片,具体搜索是 32 元浮点数。

可以直接按照自己意愿修改,使用 F64 修改即可,结果在 100 个以下,全部修改有效。

安全第一

修改游戏本就是逆天而行,封号是很正常的事情。数据对比就可以发现作弊行为,适量修改切勿修改过高数据。

iGG 基础使用教学之整数和浮点数 - 图6

悬浮窗插件

MilkyWay 开发者源地址

Pullover Pro 开发者源地址

MilkyWay 支持 iOS 11 ~ 12,MilkyWay2 支持 iOS 13。Pullover Pro 支持 iOS 11 ~ 12,暂未更新支持 iOS 13。