写在前面:
本文仅限交流学习使用,请勿使用在任何非法商业活动,禁止用于非法用途。否则后果自负。如有侵权,请告知删除,谢谢!
随着元宇宙概念的兴起,国内数字藏品市场也随之发展起来,由于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,运行成功,输出如下信息,发现与我们想要的信息一致