某box平台算法解析(wToken)

发布者:Kaiser6
发布于:2022-05-07 18:00

写在前面:

本文仅限交流学习使用,请勿使用在任何非法商业活动,禁止用于非法用途。否则后果自负。如有侵权,请告知删除,谢谢!


随着元宇宙概念的兴起,国内数字藏品市场也随之发展起来,由于NFT的特性,因此,国内更多用“数字藏品”来表示。数字藏品交易平台,是NFT数字艺术品交易的基础设施,正在呈现出强劲的发展趋势。


环境

  • windows10

  • Nexus 5X(已root)

  • jadx

  • BlackDex32

  • python3.7.2

  • frida 12.8.0

抓包

  • 以登录包为例,如下(可能包含个人信息,部分内容已做删减):

https://api-app.ibox.art/nft-mall-web/v1.1/nft/user/login
 
Accept: */*
Accept-Encoding: gzip, deflate, br
Accept-Language: zh-Hans-CN;q=1, en-CN;q=0.9
Connection: keep-alive
Content-Length: 45
Content-Type: application/json
Host: api-app.ibox.art
IB-APP-VERSION: 1.1.3
IB-DEVICE-ID: 1796j7e5-97e7-499f-b515-7fbb8fds12762
IB-PLATFORM-TYPE: ios
IB-TRANS-ID: ec465gh35-7ff7-42e6-bf82-c19sd46ge3bf_iOS
User-Agent: Box/1.1.3 (iPhone; iOS 15.3.1; Scale/2.00),BoxApp
wToken: e647_uxbnmgn1x3q4uKIl34OyAvHxRugJ0DSkK5nieNSTPtjRbXk5TCvBuN0IoZ/7q3T4GNMk8jK/++wDj4m7Jt8X1Xioyp/UQSoK++VT7EPzKVlUt2NXP4OZu4AZAWCKw+tgrBUdV8mWmzDhgnSK4pgN55dOsI/4Q+c0Tyc1WLD+MsoUgFF+wnzp3e++3AZvFlMS8wFfEF4mkEf/GRsZP3gEp4drE5n8vCQfv1LZ6AJ0w/rNnetE19ia3fSR+poqK97&b7ee_80691B702C79BA20B03FF244FS43FE7ACA9254090BD35B29B8A7
 
 
{"code": "000000","phoneNumber": "11111111111"}
  • 分析可见,请求体为明文,协议头里也仅有一个看起来较为复杂的wToken,本篇便以wToken为例,展开分析

反编译

  • 这个案例app是有壳的,由于脱壳过程并不复杂,这里就不过多叙述。

  • 将脱壳的文件直接拖入jadx,等待反编译完成,直接搜索关键词wToken即可找到如下代码块:


  • 继续跟进,代码如下:

  • 继续往下跟进发现最终是调用了so文件,好了,到此为此我们用frida来hook上面的d方法

  • 由于该app加壳了,不能直接用Java.use加载类,以下是我获取类加载器以及使用的方法:

Java.perform(function () {
 
        var application = Java.use("android.app.Application");
        application.attach.overload('android.content.Context').implementation = function (context) {
            var result = this.attach(context); // 先执行原来的attach方法
            var classloader = context.getClassLoader(); // 获取classloader
            Java.classFactory.loader = classloader;
            var RootCheckUtil = Java.classFactory.use("com.ibox.libs.common.utils.RootCheckUtil");
 
            
            //由于app检测root环境后无法正常运行,hook该方法修改返回值即可解决
            RootCheckUtil.a.implementation = function () {
                return false;
            }
            RootCheckUtil.b.implementation = function () {
                return false;
            }
 
            AliTigerTallyManager.d.implementation = function (str) {
                var result = this.d(str);
                console.log("wToken: " + result);
                return result;
            }
 
        }
    }
);
  • 注入frida,运行成功,输出如下信息,发现与我们想要的信息一致


  • 但是发注入frida输出的wToken被风控,无法正常使用。

  • 已使用unidbg完美输出,未触发风控,感兴趣可联系一起交流学习



声明:该文观点仅代表作者本人,转载请注明来自看雪