zoukankan      html  css  js  c++  java
  • Android 内存修改与一键修改

    内存修改使用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。是否需要锁定数,默认不锁定。
                    },//配置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//不用锁定
    		},
    	]
    }

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

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


    转自:http://android.codemach.com/android-nei-cun-xiu-gai-yu-yi-jian-xiu-gai.html
  • 相关阅读:
    学习笔记:类与类之间的关系
    学习笔记Controller
    学习笔记JPA
    学习笔记dao,domain,service三层理解
    学习笔记@注释
    【练习6.6】拉普拉斯cvLaplace团块及边缘检测、图像数据类型转换cvConvertScaleAbs
    【练习6.5】cvSobel及参数要求、cvCartToPolar坐标空间映射、cvMinMaxLoc求自大最小值、cvAvg求平均值
    【练习6.2】cvFilter2D及3×3高斯核、cvFilter2D当使用一维核时anchor注意事项、float乘法除法注意事项
    【练习6.1】阈值化、腐蚀、cvFilter2D及自定义滤波器
    【练习5.12】阈值化cvThreshold、自适应阈值cvAdaptiveThreshold、各参数效果对比
  • 原文地址:https://www.cnblogs.com/xieyuan/p/3787256.html
Copyright © 2011-2022 走看看