内存修改使用trace对进程和内存实施监控,并修改其中的数值。


{
        //文本配置
        "TextConfig":{
                "GameName":"游戏名称",//显示之用
                "GamePackname":"Android包名",//游戏包名,否则无法识别游戏
                "GameVersion":"版本号",//游戏版本号,否则无法识别游戏
                "CfgName":"配置名称",//给你的一键修改取一个霸气的名字吧
                "CfgVersion": 1|2|3... //配置的版本编号,最开始为1版本,后续为2,3,4...
                "Author":"配置作者",//自己定义了配置,请留上你的大名
                "Discription":"配置简述",//一键修改配置的使用攻略和注意事项
                "ButtonNameModification":"一键修改名称",//默认一键修改
                "ButtonNameRecovery":"一键还原名称"//默认一键还原
        },
        //搜索配置
        "SearchConfig":{
                "NeedToPause":true | false //布尔型,默认 true
                "SearchValueType":1|2|3|4 //整数型,默认4整数
                "SearchValue":"V1,V2,V3...", //字符串型,搜索数值V1,V2,V3,最多10个,单数值为精确搜索,多数值为联合搜索
                "SearchRange": "10d", //整数型,其中L为10进制数字,0则不进行联合搜索
                "SearchOffset": "16h",//偏移距离,16进制,用于双精确等距/强联合搜索,0则不进行强联合搜索
        },
        //筛选-修改-还原配置
        "FilterSettingConfig":[        //筛选过滤配置,可以设置多个
                {
                        "FilterType":"Values" |"Address" //筛选类型,按值筛选/按地址筛选
                        "Offset":"16h"//偏移:字符串类型。表示16进制整数。默认为空。
                        "LastDigits":"16h"//末位数:一般为2~4位。
                        "SourceMatch":"10d", //原始匹配值。
                        "SetValueType":1|2|3|4, //设置的值类型。默认4整数型
                        "SetValueMethod":"equal"|"add",//设置的方法,equal为等值设值,add为差值设值。
                        "SetValue":"10d", //字符串型,设置的数值大小
                        "SetValueLocked": false|true //布尔型,默认false。是否需要锁定数,默认不锁定。
<span style="white-space:pre">			</span>"BackValueType":1|2|3|4,//还原值的类型
<span style="white-space:pre">			</span>"BackValueMethod":"original", "equal", "add", "none"//原值还原,定值还原,差值还原,不还原
                },//配置1
                /*
                {
                        //
                        //
                        //
                }//配置2
                */
        ]
}



现在手机端也出现了一些有名的修改器,如烧饼修改器,八门神器,泡椒修改器。这些修改器都是纯技术类型的修改器。其内核是建立Linux的搜索基础之上的,早


期的烧饼修改器,八门神器,借鉴了开源代码 scanmem 里结构,不过 scanmem 有一个缺陷,搜索速率非常低。比如 ptrace 来调试进程,单内存搜索。就好比我一次抓一把米,一把才1颗。这些修改器优化之后,改为1次抓1把米,1把2048颗米。平铺在手上,可以筛选出颜色不同的米来。

再后来的过程,崛起了一个叫葫芦侠的修改器,这个修改器有一个特点,搜索速度较快,可以理解的其使用了比 ptace 更为底层的接口 trace,甚至更底层。以至于搜索速度能够达到秒的数量级。烧饼2的系列都是要通过ptrace来调试进程,并对进程进行搜索和修改。近期的一些游戏所做的反作弊手段就是通过黑名单,反调试来进行的。anti-ptrace是其中的一种反作弊手段,可是一旦用了更底层的攻击技术,这项防御技术很单薄。

整个内存修改的过程可以分解为:

输入数值->搜索数值->筛选数值->修改数值->还原数值

1、数值输入:

输入的数值可以为小数,整数。类型可以分为Byte, Word, Dword和Float,当然还有更多,比如Array,Text和Double等。这个可以在Cheat Engine里看到起搜索的类型。

2、搜索数值:

搜索方法很多,一共5种。

a内存搜索:这个很直接,直接输入地址,搜索数值。

b精确搜索:间接,搜索具体的数值,然后找到目标内存地址。这个需要多次跟踪搜索过滤掉合适的数值。

c模糊搜索:间接,不特定搜索。根据变化率来进行搜索。根据ΔV 的情况来进行搜索。比如为正,为负,定值来进行搜索。

d联合搜索:介乎于精确。在一定的内存距离内进行数值搜索。linux里有页的概念,因此这段内存距离会控制在2048里。

e等距搜索:即搜索A,B。指定A和B 的距离都为L。返回两个A,B值。


几个搜索方式的优劣比较:

a内存搜索:快速直接,但很难搜。不同的操作系统,搜索的地址是不一致的,有些动态生成的值,此方法不适合。

b精确搜索:直观,搜索步骤较多,很难一步搜完。

c模糊搜索:复杂,搜索步骤较多,需要大量筛选数值。

d联合搜索:较快,搜索步骤最少。

e等距搜索:最快,搜索步骤最少,可以查询到搜索结果。

如果说要推荐意见修改,那么联合搜索和等距搜索是最佳搜索方法。

3、筛选数值

a内存搜索:过滤结果只有1个。Nan或者有效。

b精确搜索:搜索结果不定,需要人工筛选。

c模糊搜索:搜索结果复杂不定,需要结合整数,小数的规律来进行过滤。

d联合搜索:搜索结果很容易确定下来,不过如果距离过小,结果会过少。距离过大,搜索结果会变多。

e等距搜索:结果一般只有几个。很容易搜索到。

4、修改数值

手动改值:找到指定地址,修改为需要的数值。

自动改值:每一帧率都在进行修改。也就是所谓的锁定功能。

5、还原数值

手动改值:找到指定地址,改为需要的还原的数值。


一键修改的过程:

全自动

{
	"TextConfig":{
		"GameName":"天天飞车",
		"GamePackname":"com.tencent.game.SSGame",
		"GameVersion":"1.2.0.40317",
		"CfgName":"一键吸金",
		"Author":"bbe",
		"Discription":"每次开局,一键吸金,卡车之后还原再改",
		"ButtonNameModification":"吸金",
		"ButtonNameRecovery":"不吸金"
	},
	"SearchConfig":{
		"SearchValueType":4,//搜索类型为整数
		"SearchValue":"1077936128;1112014848,1", //联合搜索3.0;50.0;1
		"SearchRange":"8"//设置距离为8
	},
	"FilterSettingConfig":[
		{
			"FilterType":"Values",
			"SourceMatch":"1",//匹配原始值1
			"SetValueType":4,
			"SetValueMethod":"equal", //等值设置值
			"SetValue":"257",//改为257
			"SetValueLocked":false//不用锁定
		},
	]
}

在上面的这个配置里已经很明显的设置了如何自动识别游戏包名,游戏版本名。如何搜索,如何自动筛选数值,如何自动修改和还原。

修改器自动运行一遍,就可以实现一键修改。