imxz | 发布于 2019-02-08 18:39:32 | 阅读量 379 |
发布于 2019-02-08 18:39:32 |

又名,打飞机的正确姿势!


前几天看到 IOS 12.1.2 有大佬放出越狱漏洞,这两天各个大佬都开始实现工具.
正好今天(昨天了)安装上了 文件管理器,可以访问和修改安装的程序数据目录. 
嘿嘿,正好前两天下了个游戏 消灭病毒 .
就是打飞机游戏.不过比较肝.我也不是喜欢肝的人.
只好看看能不能修改存档变得不用肝了!

准备工具:
1.一台越狱手机 
2.IPA 砸壳 工具
(http://iosre.com/t/frida-ios-dump/11640)
3.脑子
4.哦 还有一台Mac

首先是 砸壳,
[
为毛要砸壳?
从APPStore 商店下载安装的APP 默认都被苹果加了一层壳,加了壳后我们就无法使用 class-dump , Hook 等功能,这里的壳与Win平台上的加密壳类似,但脱壳的难度比Win平台的低。
还有一种得到 脱壳后的ipa 的方法,直接在第三方平台上下载越狱应用. PP助手上就行.前提是找得到.
]
使用大神写好的工具可以一键砸壳,
哎,舒服滴很.
砸完壳我们就得到了一个 可以随意蹂躏的 ipa.
将其使用WinRAR解压后在里面翻找一些有用的信息.并清理无用的文件.

未清理前


清理后



这是一个Html5 游戏引擎 LayaBox 所编写的跨平台游戏.
[https://www.layabox.com/ 官网]
这个游戏是有安卓版本的.
这个引擎之前制作网页传奇类游戏辅助接触过,
其中的资源目录是重点.
这里面包含了 图片 以及核心的JS脚本.

我们不可能去看JS脚本捋逻辑,
我们要先看存档,
一般的游戏存档放在程序的数据目录下的Documents目录下
但是这款是却放在了程序的数据目录下的Library/Caches/localstorage/下名为stand.alone.version.txt里面
内容如下


我开始的时候直接修改了money 发现进去不认,存档也被重置了.
最后看到了 sign 那就需要找到 签名的地方才行了.
根据经验来说,这个典型的MD5.
只要知晓它用那些数据加密就行了.
我们要在核心逻辑JS中找.
使用010Editer 或者 notepad++ 
直接在 文件夹中 搜索 zuanShi 或者 money 等信息 来直接定位核心js文件.
为何不直接找?
因为cache里面的文件名都是以hash值命名的...一个一个翻找太慢了...
直接定位到被轻微混淆和压缩过得主逻辑JS.
网上美化格式化一波.
然后开始搜索定位.

一下就定位了保存的地方.
可以看到箭头指向 dataLocal 中的后续添加的字段和 存档一致.
最后 调用this.sign() 签名 
这个JS写的我表示比较蛋疼,其实这个 emmm 啥玩意中 是没有 sign 这个方法的
这个方法在 Si 这个对象里面


呐~ 在这里!
从箭头指向可以看出来.
传入参数t就是dataLocal 
显示获取 t 中的 额 好像是 键,
然后排序键,最后循环取出对应值 键+值
最后 舍去一位?
然后调用MD5 进行 hash
它新加了个sign字段 然后将hash结果放上去

这样就得到了 签名!
OK 关键的地方已经完全搞定!
上HBuilderX!代码复制修改一下~

核心JS代码:
<!DOCTYPE html>
<html>
	<head>
		<meta charset="utf-8" />
		<title></title>
		<script src="js/md5.js" type="text/javascript"></script>
		<script>
				
	var dataLocal = {};
	var theSave = {};
	dataLocal.uid = "936F495A-CDE8-4986-85F5-D0675B527A8D";
	dataLocal.isSoundOff = false;
	dataLocal.isShackOff = false;
	dataLocal.level = 121;//关卡 
	dataLocal.lDamage = 999;//火力
	dataLocal.lCount = 356;//射速
	dataLocal.lJiaZhi = 999;
	dataLocal.lRiChang = 999;
	dataLocal.curFu = -1;
	dataLocal.levelFuCount = [32, 32, 32, 32, 32, 32, 32, 32, 32, 32];
	dataLocal.levelFuDamage = [999, 999, 999, 999, 999, 999, 999, 999, 999, 999];
	dataLocal.getTime = "";
	dataLocal.bgIndex = 1;
	dataLocal.bgmIndex = 1;
	dataLocal.money = "999999999999999999999999999";
	dataLocal.tipFU = false;
	dataLocal.isGuide = false;
	dataLocal.tiLi = 999999999;
	dataLocal.tiLiBackTime = -1;
	dataLocal.today = 0;
	dataLocal.playCount = 0;
	dataLocal.shareCount = 0;
	dataLocal.videoCount = 0;
	dataLocal.isGuanZhu = 0;
	dataLocal.isShouCang = 0;
	dataLocal.tryFuCount = 0;
	dataLocal.zuanShi = 999999999;
	dataLocal.teQuanTime = -1;
	dataLocal.isTeQuaned = false;
	dataLocal.jiFenId = [""];
	dataLocal.getTime2 = -1;
	dataLocal.teQuanShowed = false;
	dataLocal.teQuanGetTime = -1;

var t = dataLocal;
var e = [],i = "";
t.sign = "";
for (var s in t)
{
	e.push(s);
}
e.sort(function (t, e) {
    return t > e ? 1 : t < e ? -1 : 0;
});
var n;
for (n in e)
{
	i += (s = e[n]) + t[s];
}
i = i.substring(0, i.length - 1);

dataLocal.sign = hex_md5(i);
theSave.plane_touTiao = JSON.stringify(dataLocal);

document.write( i +"<br /><br /><br /><br />")

document.write( JSON.stringify(theSave) +"<br />")

		</script>
	</head>
	<body>
		
	</body>
</html>


大致如此吧.
这样我们就可以随意修改存档,然后覆盖到之前的存档文件内容即可.
最终效果!







变态滴很~





心无所恃,
隨遇而安。
或許更適合的,
是孜然一身吧。
或许是渴望...算了...
 
2019.02.07_01.08



内容更新于: 2019-02-08 19:12:14
链接地址: http://imxz.cn/post/%E8%AE%B0-%E6%B6%88%E7%81%AD%E7%97%85%E6%AF%92-%E6%B8%B8%E6%88%8F%E5%AD%98%E6%A1%A3%E7%94%9F%E6%88%90%E5%99%A8%E5%AE%9E%E7%8E%B0%E8%BF%87%E7%A8%8B

上一篇: 逆向之记<狙击行动3D:代号猎鹰>存档修改器的实现

下一篇: 记一款IOS单机游戏《地牢防御》存档修改器的诞生

379 人读过
立即登录, 发表评论.
没有帐号? 立即注册
0 条评论
文档导航