unity应用协议分析


01
样本分析

样本:Y2MuamNsZC50YW9qaW5jaGVuZ3poZW4=

版本号:1.2.0

加固:360



02
抓包分析
unity应用协议分析

现在APP不知道为什么进不去了,用的之前的图片凑合一下。通过截图看得出来,有signaturenonce和signature很像加密。多次抓包比对,同样的参数提交signature都不一样,那么这个signature就是我们要处理的参数了,同时返回值也进行了加密。


03
脱壳&反编译
unity应用协议分析

先查一下壳,360免费版的。免费的360还是随便脱的。脱好了之后直接拖入jadx来看一下。

unity应用协议分析

就一处,不会这么简单就完结了吧。

unity应用协议分析

timestampkeep没见过,frida hook一下
let SecurityUtil = Java.use(“net.security.device.api.SecurityUtil”);
SecurityUtil[“sendPopRequest”].implementation = function (str, map, map2) {
console.log(‘sendPopRequest is called’ + ‘, ‘ + ‘str: ‘ + str + ‘, ‘ + ‘map: ‘ + map + ‘, ‘ + ‘map2: ‘ + map2);
let ret = this.sendPopRequest(str, map, map2);
console.log(‘sendPopRequest ret value is ‘ + ret);
return ret;
};

发现不走这里,换下思路,signature 是40位的,首先想到的就是sha1,那就HOOK一下哈希算法试下。
    
var md = Java.use('java.security.MessageDigest');
md.getInstance.overload('java.lang.String','java.lang.String').implementation = function (a,b) {
send("======================================");
send("算法名:" + a);
return this.getInstance(a, b);
}
md.getInstance.overload('java.lang.String').implementation = function (a) {
send("======================================");
send("算法名:" + a);
return this.getInstance(a);
}
md.update.overload('[B').implementation = function (a) {
send("======================================");
send("update:" + ByteToString(a))
return this.update(a);
}
md.update.overload('[B','int','int').implementation = function (a,b,c) {
send("======================================");
send("update:" + ByteToString(a) + "|" + b + "|" + c);
return this.update(a,b,c);
}
md.digest.overload().implementation = function () {
send("======================================");
var result = this.digest();
send("digest结果:" + BytesToHex(result));
//console.log("digest结果:" +ByteToString(result));
return result;
}
md.digest.overload('[B').implementation = function (a) {
send("======================================");
send("digest参数:" + ByteToString(a));
var result = this.digest(a);
send("digest结果:" + BytesToHex(result));
//send("digest结果:" + ByteToString(result));
return result;
}
也不走这里。


04
初识unity
unity应用协议分析

注意到app页面在第一次加载的时候有明显的卡顿,怀疑不是纯java开发。解压查看一下lib库都有哪些。注意到这里有个unity的so,大概率是unity开发的APP了。unity主要可以看成两类,dll游戏和libil2cpp游戏。这里没有看到libil2cpp,那么大概率就是dll游戏了。解压APK资源assetsbinDataManaged这个路径下找到Assembly-CSharp.dll就是主要逻辑所在的dll了反编译这个来进行逆向。


05
反编译Unity与还原算法
unity应用协议分析

下载安装ILSpy,需要.net 的运行环境,如果没有的话第一次启动会跳转到.net的下载。将dll拖进去。

选择保存代码。Vscode打开文件夹,查看代码资源。搜索signaturenonce 可以看到很明了的代码。

unity应用协议分析

那么signature就是 signaturenonce=×tamp=&body=按照ascii码升序排序,之后加一个盐值tGgFVEed0KSZ5So4VgcXAluyELikd1eF然后进行sha1计算。验证一下,解决。

unity应用协议分析

另外就是返回值解密部分。

unity应用协议分析
unity应用协议分析

AES ECB模式,测试一下:

unity应用协议分析


06
总结
unity主要可以看成两类,dll游戏和libil2cpp游戏。其中dll游戏可以通过反编译直接看到源码来进行逆向修改,属于比较简单的。本次样本360的免费加固+dll的unity属于入门级的适合练手,并且没有对dll进行加密,也没有对算法进行魔改,基本上没有安全性。


unity应用协议分析


看雪ID:wx_Deity

https://bbs.kanxue.com/user-home-951489.htm

*本文由 wx_Deity 原创,转载请注明来自看雪社区

unity应用协议分析

# 往期推荐

1、在 Windows下搭建LLVM 使用环境

2、深入学习smali语法

3、安卓加固脱壳分享

4、Flutter 逆向初探

5、一个简单实践理解栈空间转移

6、记一次某盾手游加固的脱壳与修复


unity应用协议分析


unity应用协议分析

球分享

unity应用协议分析

球点赞

unity应用协议分析

球在看

原文始发于微信公众号(看雪学苑):unity应用协议分析

版权声明:admin 发表于 2023年10月7日 下午6:00。
转载请注明:unity应用协议分析 | CTF导航

相关文章

暂无评论

您必须登录才能参与评论!
立即登录
暂无评论...