本帖最后由 h080294 于 2019-12-20 12:27 编辑
很久没接触小游戏了,现在除了路上偶尔玩玩数独外,已然无欲无求。
然而今天无意中误点了小程序中的某推广链接,跳到一个小游戏动物餐厅。可谓是“食之无味,弃之可惜”,感觉再怎么玩也只是浪费时间。干脆索性探索一下如何“从入门到放弃”,被动式防沉迷。
一、入门
通过一段时间试玩,发现游戏数据会保存在云端,那么根据以往的思路可以在内部逻辑上修改,也可以通过抓数据包修改。
通常抓包是更快捷的方式。相对于数据上传,下载过程因不涉及到请求参数的加密等因素,更容易修改。
抓包看一下下载数据,根据灵觉找到key,发现也是加密的。
这就褶子了,想要修改还得去找加、解密方法。
二、精通
小游戏解包后,通过灵觉定位到如下图关键地方。注意这里的globalKey根据使用情况,其实是自己的openid,而不是twgame_rj32io。
三、放弃
拷贝代码出来,从抓包结果中拿出一条数据运行一下,能够通过自我校验说明没问题。
?l" alt="" />
剩下的就是如何修改返回值了,方法不要太多。有电脑的可以用charles等软件或anyproxy,没电脑可以用thor之类的软件进行手机抓包修改。
删除小程序,重新打开,这时下载的数据是经过修改。瞧,鱼干已经更新了,9900万......觉得不够,把评价(星星)也改掉,就是这么索然无味。
?l" alt="" />
退出小游戏,长按图标,拖动到最底下删除。简简单单,从入门到放弃,被动式防沉迷。
最后附上代码
const r = require("crypto-js");
const globalKey = ""; // 你的openid
function getEncryptString(e, t, i) {
i || (i = 100 + Math.floor(900 * Math.random()));
var o = e + 100 + i,
a = r.MD5(o + globalKey + t).toString();
return "t" + (a.charAt(17) + a.charAt(3) + a.charAt(27) + a.charAt(11) + a.charAt(23)) + i + e;
}
function getDecrypeString(e,t){
var i = e.substring(6, 9), o = e.substring(9), a = parseFloat(o);
return getEncryptString(a, t, parseInt(i)) == e ? a : 0;
}
console.log("加密结果: " + getEncryptString(parseInt(90000000), 'money'));
|