吾爱汇编

 找回密码
 立即注册

QQ登录

绑定QQ避免忘记帐号

查看: 3032|回复: 83

[经验资料] 某APPiOS修改数据

  [复制链接] 出处:吾爱破解
ShareKing 发表于 2022-2-13 18:00 | 显示全部楼层 |阅读模式

动物餐厅 iOS 数据修改
女朋友玩动物餐厅,但是太慢了,而且好多都要看广告所以想能不能逆向修改数据,看了论坛上其他帖子
基本两种方式,一种通过修改内存中的数据,还一种就是抓包修改
因为我是iOS没越狱,所以只能使用抓包的方式修改
之前有相关教程,而且还提供了线上版,但是没有详细的使用说明
《动物餐厅》-----抓包修改教程-----完整代码超详细
https://www.52hb.com/thread-54468-1-1.html
我用了,直接修改小鱼一千万,返回-1000,之后怎么修改都不行了,游戏中上传都失败,后来才知道被封了,幸亏这是我的账号,不然被女朋友乱棍打死。
看来这不能随便乱搞,只能自己一步一步来了
逆向过程
1.看了下动物餐厅使用的是cocos2d,移动端和小程序代码逻辑是一样的,所以直接先逆向微信小程序,找出源码,这到处都有相关教程就不写了,逆向后如下。
H3676046980194df8865410fea1bbf96cG.png
2.查看源码,主要代码都在project.xx.js文件中,首先看了下载文档downloadRecord方法,发现有签名验证,没有私钥就没法修改,所以只能通过uploadRecord修改了
3.接下来就是抓包了,我是用的是charles,抓包教程就不写了,自行百度,查看uploadRecord接口抓取到的数据,发现record中数据都有加密,接下来找加密方式
record数据
H3d8e54734319474f9ed09faccd3ca803d.png
4.找到加密方式getEncryptString,其中globalKey就是openid,这有个坑,如果之前使游客登陆的则是orgOpenId,请求参数中有openid,但是机密编码后的在请求方法request中可找到(t.openid = this.crypt.encrypt(t.openid, "base64")),,所以我们需要的是登录后返回的openid,后来发现在record中有openid和orgOpenId,这样我们就不需要再去抓登录请求了
注:上面帖子提到的openid我不知道他用的哪个,感觉应该是之前openid没有加密,现在和之前不一样了
机密和解密方法
Hda612455b10a4646b4dd6bf8c92c85f9k.png
5.上传参数中有checkSign2来验证record是否被修改,在uploadRecordToServer方法中找到生成方法
var i = r.MD5("32roiFEI" + e.record + n.openid).toString(); e.checkSign2 = i.charAt(8) + i.charAt(3) + i.charAt(21) + i.charAt(10) + i.charAt(16) + i.charAt(9) + i.charAt(11) + i.charAt(23),
这里的openid就是登录用户的openid
6.接下来就可以修改要上传的数据了,上面帖子是通过提供界面来修改数据的,但是很多都不更新了,而且我也并不想修改那么多,我只需要增加一些去广告券和钻石就可以了,不然游戏就没乐趣了
注:我看现在参数比之前多了很多,像总鱼干总钻石数,之前应该没有,你如果要修改记得要都修改,不然后台校验数据异常被封号就只能找客服了,还有数据不要修改太大!!!!
7.因为不知道后台有哪些校验,所以尽可能在原来提交的数据上进行修改来降低风险,所以我是通过charles的Map Remote把上传接口代{过}{滤}理到本地
Hf35331cd2ef14c3f84cb72ea3b8be244o.png
H031dfd7135db410bb235a864c9a6d7c6S.png
8.本地通过node起个uploadRecord接口服务,然后修改参数来提交,这里我直接每次提交增加520钻石。
H0c4309ea99f14b6d99668d37c8ca0d1c8.png
9.数据上传完成,必须下载下来才能有,总不能重新安装,在源码中查找哪里调用下载记录,发现有两处
1、在上传前会先查询记录checkRecord通过返回的status来展示是下载还是上传等,以为上传功能我还得用所以放弃。
2、打开时调用checkLogin当status是1时会下载存档,我直接用本地代{过}{滤}理修改返回值,重新打开游戏就是修改后的数据了
保存checkLogin的返回结果到本地,并修改status为1
H0fd15c41c4854873b1df59e0f0bfeab2q.png
代{过}{滤}理到本地
H88fcf3253ff0404d9676567919e2521fy.png
代码
我只能确保iOS程序可使用,小程序和安卓我都没试,不保证可以用,可自行调试
会的可以自己建个项目,添加依赖,不会的如下
1.安装依赖
npm install crypto request express -g
2.新建index.js文件,代码如下
[Asm] 纯文本查看 复制代码
var request = require('request');
var express = require("express");

var app = express();
app.use(express.json({ extended: false }))

var baseUrl = 'https://ios-inland-restaurant.twomiles.cn:8060';
var openid = "";
var globalKey = "";

app.post('/uploadRecord', function (req, res) {
    let reqBody = req.body;
    // 格式化record 方便查看
    formatRecord(reqBody.record);

    // 修改数值,后台有校验,改的太大或不对可能会封号,小心修改
    changeData(reqBody);

    // 重新签名
    setCheckSign2(reqBody);

    //上传记录
    uploadRecord(reqBody, res);
});

var server = app.listen(8080, 'localhost', function () {
    var host = server.address().address
    var port = server.address().port
    console.log("应用实例,访问地址为 http://%s:%s", host, port)
})

// 修改数值
var changeData = function (reqBody) {
    var record = JSON.parse(reqBody.record);
    let openidJson = JSON.parse(record.openid);
    openid = openidJson.openid;
    if (openidJson.orgOpenId) {
        globalKey = openidJson.orgOpenId
    } else {
        globalKey = openid
    }
    console.error(openid, globalKey);

    // 免费跳广告
    let money_skipAdCard = decode=1Data(record.money_skipAdCard);
    record.money_skipAdCard = getEncryptString(money_skipAdCard + 200, "money_skipAdCard");

    // 钻石,之前应该是没总数,最好也修改后台可能有校验
    let addDiaNum = 520;
    let money_diamond = decode=1Data(record.money_diamond);
    let cumulative_money_diamond = decode=1Data(record.cumulative_money_diamond);
    record.money_diamond = getEncryptString(money_diamond + addDiaNum, "money_diamond");
    record.cumulative_money_diamond = getEncryptString(cumulative_money_diamond + addDiaNum, "cumulative_money_diamond");
    reqBody.dia = reqBody.dia + addDiaNum;

    reqBody.record = JSON.stringify(record);
}

var setCheckSign2 = function (reqBody) {
    var i = md5("32roiFEI" + reqBody.record + openid).toString();
    reqBody.checkSign2 = i.charAt(8) + i.charAt(3) + i.charAt(21) + i.charAt(10) + i.charAt(16) + i.charAt(9) + i.charAt(11) + i.charAt(23);
}

var uploadRecord = function (reqBody, res) {
    request({
        url: baseUrl + '/uploadRecord',
        method: "POST",
        json: true,
        headers: {
            'Accept-Encoding': 'gzip, deflate, br',
            "content-type": "application/json",
            'User-Agent': 'restaurant-mobile/1.2 CFNetwork/1197 Darwin/20.0.0'
        },
        body: (reqBody)
    }, function (error, response, body) {
        if (!error && response.statusCode == 200) {
            res.end(JSON.stringify(body));
        }
    });
}

var md5 = function (data) {
    var crypto = require('crypto');
    return crypto.createHash('md5').update(data, 'utf-8').digest('hex');
}

// 数据加密
var getEncryptString = function (e, t, i) {
    i || (i = 100 + Math.floor(900 * Math.random()));
    var n = e + 100 + i, a = md5(n + globalKey + t).toString();
    return "t" + (a.charAt(17) + a.charAt(3) + a.charAt(27) + a.charAt(11) + a.charAt(23)) + i + e;
}

// 解密数据
var decode=1Data = function (value) {
    if (!value || "string" != typeof value) return 0;
    let n = value.substring(9);
    return parseFloat(n);
}

// 格式化record
var formatRecord = function (record) {
    let recordFromat = record.replace(/:"t\w{8}/g, ':"');
    recordFromat = recordFromat.replace(/:"(\d{13})",/g, function (r, time) {
        return `:"${formatDate(time)}",`;
    });
    console.log(JSON.parse(recordFromat));
}

// 格式化时间戳
var formatDate = function (datetime) {
    console.error(datetime);
    var date = new Date(datetime * 1);
    var year = date.getFullYear(),
        month = ("0" + (date.getMonth() + 1)).slice(-2),
        sdate = ("0" + date.getDate()).slice(-2),
        hour = ("0" + date.getHours()).slice(-2),
        minute = ("0" + date.getMinutes()).slice(-2),
        second = ("0" + date.getSeconds()).slice(-2);
    var result = year + "-" + month + "-" + sdate + " " + hour + ":" + minute + ":" + second;
    return result;
}

评分

参与人数 25HB +23 THX +9 收起 理由
花盗睡鼠 + 2 + 1 [吾爱汇编论坛52HB.COM]-学破解防破解,知进攻懂防守!
DDK4282 + 1 + 1 [吾爱汇编论坛52HB.COM]-感谢楼主热心分享,小小评分不成敬意!
attackmyth + 2 [吾爱汇编论坛52HB.COM]-感谢楼主热心分享,小小评分不成敬意!
楠楠啊 + 1 [吾爱汇编论坛52HB.COM]-软件反汇编逆向分析,软件安全必不可少!
潜水的猫 + 1
一路走来不容易 + 1
消逝的过去 + 1
459121520 + 1
weiran324 + 2 [吾爱汇编论坛52HB.COM]-吃水不忘打井人,给个评分懂感恩!
极速菜 + 1
爱汇编爱汇编 + 1 [吾爱汇编论坛52HB.COM]-软件反汇编逆向分析,软件安全必不可少!
冷亦飞 + 1
我不喜欢吃冰糖 + 1
temp + 1
凌夏随缘 + 1
xgbnapsua + 2
三月十六 + 1
ldljlzw + 1
szukodf + 1 [吾爱汇编论坛52HB.COM]-软件反汇编逆向分析,软件安全必不可少!
小生搞不懂 + 1
成丰羽 + 1 [吾爱汇编论坛52HB.COM]-感谢楼主热心分享,小小评分不成敬意!
crosssss + 1 [吾爱汇编论坛52HB.COM]-学破解防破解,知进攻懂防守!
muker + 1
PDWORD + 1
zxjzzh + 2 [吾爱汇编论坛52HB.COM]-学破解防破解,知进攻懂防守!

查看全部评分

吾爱汇编论坛-学破解,防破解!知进攻,懂防守!逆向分析,软件安全!52HB.COM
afxKhM081 发表于 2022-2-13 18:05 | 显示全部楼层
吾爱汇编论坛-学破解,防破解!知进攻,懂防守!逆向分析,软件安全!52HB.COM
pUcvSEeV58 发表于 2022-2-13 18:08 | 显示全部楼层

谢谢分享
吾爱汇编论坛-学破解,防破解!知进攻,懂防守!逆向分析,软件安全!52HB.COM
KcthLpNC593 发表于 2022-2-13 18:24 | 显示全部楼层
吾爱汇编论坛-学破解,防破解!知进攻,懂防守!逆向分析,软件安全!52HB.COM
GtOMoVfW708 发表于 2022-2-13 18:44 | 显示全部楼层

如果楼主能每天都分享一些,那就更好了
吾爱汇编论坛-学破解,防破解!知进攻,懂防守!逆向分析,软件安全!52HB.COM
pUcvSEeV58 发表于 2022-2-13 18:50 | 显示全部楼层
吾爱汇编论坛-学破解,防破解!知进攻,懂防守!逆向分析,软件安全!52HB.COM
CYTNRFji381 发表于 2022-2-13 18:53 | 显示全部楼层

我现在已经把楼主作为我的学习目标了!
吾爱汇编论坛-学破解,防破解!知进攻,懂防守!逆向分析,软件安全!52HB.COM
XeTI3 发表于 2022-2-13 19:13 | 显示全部楼层

感谢楼主
吾爱汇编论坛-学破解,防破解!知进攻,懂防守!逆向分析,软件安全!52HB.COM
oIUCxRZ85960 发表于 2022-2-13 19:34 | 显示全部楼层

感谢楼主
吾爱汇编论坛-学破解,防破解!知进攻,懂防守!逆向分析,软件安全!52HB.COM
NQYHnsv4372 发表于 2022-2-13 20:38 | 显示全部楼层

谢谢分享
吾爱汇编论坛-学破解,防破解!知进攻,懂防守!逆向分析,软件安全!52HB.COM
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

警告:本站严惩灌水回复,尊重自己从尊重他人开始!

1层
2层
3层
4层
5层
6层
7层
8层
9层
10层

免责声明

吾爱汇编(www.52hb.com)所讨论的技术及相关工具仅限用于研究学习,皆在提高软件产品的安全性,严禁用于不良动机。任何个人、团体、组织不得将其用于非法目的,否则,一切后果自行承担。吾爱汇编不承担任何因为技术滥用所产生的连带责任。吾爱汇编内容源于网络,版权争议与本站无关。您必须在下载后的24个小时之内,从您的电脑中彻底删除。如有侵权请邮件或微信与我们联系处理。

站长邮箱:SharkHeng@sina.com
站长QQ:1140549900


QQ|RSS|手机版|小黑屋|帮助|吾爱汇编 ( 京公网安备11011502005403号 , 京ICP备20003498号-6 )|网站地图

Powered by Discuz!

吾爱汇编 www.52hb.com

快速回复 返回顶部 返回列表