AliTigerTally wtoken算法分析
一.获取样本
我的这个样本来源某网上自行查找,分析一通才发现和大佬说的完全不一样,大厂的更新速度真是太快了.
我这边上传的 wtoken:
0002_84288D08C9374C3BD0201E3A8581A637A4F10635D6C1AD364FF9AD35A3073D4AAD68B431ACBEB332ABC3AC3CA8CB7A3B8815EA47C900QufkJeD6QRw50f/FZmE56tVVB3+Xf7tsOWNwpGmRtV9c+9XVaEGi91mRse0WDGYDqSKE/Fi4XTybRySzpSqrj1b5OkdVEbBlAX1Y0laawyer+eMW3IR7qcVnEbup+zYaNy0rR4i8OSKMf/DrpghjUfkyybAhFBTgzjK5+dvGugTLWxfHU2gnYdnn79x3D/jz/EJEpBrN3O/FdanEn8S5wb0VbqzQ/iRbmMZxwq6hUJzCy7CvSH5gjDPX+8BpJUwaxVAy2VR5EhvhDFqPvm/YAuY6ZcfATB2Zh5x5kVkDUFWZGWtNp3OfWodBY6oT34iNKl7/DJl0v97g4JYEcUlXkVAUNTIb1+hAhRZb6stIR3DJoIO9LVAVTYBN5QzURu017Ob6/NjHUOwAd38REY5M6VLITharAN30Z61J0cYAp/xio4RBhojNqWl2FwPRnKbr
0002应该是该风控的版本号
我们这次来的目的就是为了把 wtoken 给完全解开
二.开始分析
根据官网的说明文档
if(![[AliTigerTally sharedInstance]initialize:@"****OpKLvM6zliu6KopyHIhmneb_****u4ekci2W8i6F9vrgpEezqAzEzj2ANrVUhvAXMwYzgY_****vc51aEQlRovkRoUhRlVsf4IzO9dZp6nN_****Wz8pk2TDLuMo4pVIQvGaxH3vrsnSQiK****"])
{
NSLog(@"初始化失败");
return;
}
NSString *signBody =@"hello";
NSString *wToken= [[AliTigerTally sharedInstance] vmpSign:[signBody dataUsingEncoding:NSUTF8StringEncoding]];
NSLog(@"wToken== %@",wToken);
1.固定随机数
首先是hook initialize 方法,拿到其中的appkey
然后hook vmpSign,固定入参,想办法把输出结果固定下来
然后发现生成的结果还是在变,分析其中的导入函数,hook其中可以产生随机值的地方
在hook arc4random 和 gettimeofday 终于将生成的结果固定唯一
2.分析结构组成
wtoken基本由四部分组成
版本号
0002_
时间戳
84288D08C9
整体的签名
374C3BD0201E3A8581A637A4F10635D6C1AD364FF9AD35A3073D4AAD68B431ACBEB332ABC3AC3CA8CB7A3B8815EA47C900
设备信息
QufkJeD6QRw50f/FZmE56tVVB3+Xf7tsOWNwpGmRtV9c+9XVaEGi91mRse0WDGYDqSKE/Fi4XTybRySzpSqrj1b5OkdVEbBlAX1Y0laawyer+eMW3IR7qcVnEbup+zYaNy0rR4i8OSKMf/DrpghjUfkyybAhFBTgzjK5+dvGugTLWxfHU2gnYdnn79x3D/jz/EJEpBrN3O/FdanEn8S5wb0VbqzQ/iRbmMZxwq6hUJzCy7CvSH5gjDPX+8BpJUwaxVAy2VR5EhvhDFqPvm/YAuY6ZcfATB2Zh5x5kVkDUFWZGWtNp3OfWodBY6oT34iNKl7/DJl0v97g4JYEcUlXkVAUNTIb1+hAhRZb6stIR3DJoIO9LVAVTYBN5QzURu017Ob6/NjHUOwAd38REY5M6VLITharAN30Z61J0cYAp/xio4RBhojNqWl2FwPRnKbr
3. 解密出来的数据基本如下
num:[0x00] data:[b'com.xxxxxx.cn']
num:[0x01] data:[b'xxxxxx']
num:[0x02] data:[b'5.1.0']
num:[0x03] data:[b'2.1.5']
num:[0x05] data:[b'apple']
num:[0x06] data:[b'iPhone13,1']
num:[0x0a] data:[b'375x812']
num:[0x0c] data:[b'19A346']
num:[0x0d] data:[b'15.0']
num:[0x12] data:[b'\xe4\xb8\xad\xe5\x9b\xbd\xe7\xa7\xbb\xe5\x8a\xa8']
num:[0x14] data:[b',46002']
num:[0x24] data:[b'0852D226-E454-44DD-A3C2-5797E8DA7979']
num:[0x25] data:[b'none']
num:[0x26] data:[b'57156ED654C6E9FE41DC0D5DBEE2EB18']
num:[0x64] data:[b'|']
num:[0x0b] data:[b'Darwin Kernel Version 21.0.0: Sun Aug 15 20:55:58 PDT 2021; root:xnu-8019.12.5~1/RELEASE_ARM64_T8101']
num:[0x1d] data:[b',fd8d:d307:fcd9:d273:1821:4efe:5d02:b134']
num:[0x1e] data:[b'192.168.2.1']
num:[0x27] data:[b'AC0A2433-92DB-4296-82661-F7D2E047C3a']
num:[0x2e] data:[b'10.42.23.8,fe80::ec8e:52ff:feb4:6ac7']
num:[0x31] data:[b'/private/var/containers/Bundle/Application/C2D127FB-54E5-436E-BD56-468DDEBE8CD6/SNKRS.app/SNKRS']
num:[0x33] data:[b'403373.19.420688398']
num:[0x34] data:[b'31ffddade56c6ab0277263c2eb55dda3']
num:[0x35] data:[b'1ffabaa42b305297f1c5421a3d89b8c6']
num:[0x39] data:[b'1198000']
num:[0x3b] data:[b'zh-Hans-CN|en-CN']
num:[0x3c] data:[b'ARM64']
num:[0x6d] data:[b'0']
num:[0x6e] data:[b'0']
num:[0x70] data:[b'0']
num:[0x71] data:[b'0']
num:[0x72] data:[b'TMPDIR=/private/var/mobile/Containers/Data/Application/B62336DD-18D6-4A17-9FE1-A38B36525045/tmp/|']
num:[0xc9] data:[b'42|42']
数据有一部分进行了加密或者脱密处理,使我们不能直接看到原始信息
但是在分析过程中,SDK获取的信息基本为:
环境检测
动态库检测
调试检测
hook检测
越狱文件检测
/Applications/Cydia.app
/Library/MobileSubstrate/MobileSubstrate.dylib
/bin/bash
/usr/sbin/sshd
/etc/apt
/usr/bin/cycript
/usr/bin/gdbhd
dladdr检测列表
x0 = 0x00000001a42cefa0 libsystem_c.dylib`sysctl
x0 = 0x00000001a42dd990 libsystem_c.dylib`fopen
x0 = 0x00000001a42f7c08 libsystem_c.dylib`getenv
x0 = 0x00000001a44ad760 libsystem_kernel.dylib`stat
x0 = 0x00000001a44b9608 libdyld.dylib`_dyld_get_image_name
x0 = 0x00000001a44b9710 libdyld.dylib`dladdr
x0 = 0x00000001a4597598 CoreFoundation`-[NSArray containsObject:]
x0 = 0x00000001a459ceb8 CoreFoundation`+[NSLocale preferredLanguages]
x0 = 0x00000001a45b1a74 CoreFoundation`+[NSLocale currentLocale]
x0 = 0x00000001a45b9600 CoreFoundation`+[NSTimeZone localTimeZone]
x0 = 0x00000001a495b73c SystemConfiguration`CNCopyCurrentNetworkInfo
x0 = 0x00000001a4979a84 Foundation`+[NSBundle mainBundle]
x0 = 0x00000001a497d624 Foundation`+[NSProcessInfo processInfo]
x0 = 0x00000001a497e030 Foundation`-[NSBundle bundleIdentifier]
x0 = 0x00000001a4980f90 Foundation`-[NSString rangeOfString:]
x0 = 0x00000001a498690c Foundation`-[NSFileManager fileExistsAtPath:]
x0 = 0x00000001a4996978 Foundation`-[NSString initWithUTF8String:]
x0 = 0x00000001a49a1db0 Foundation`+[NSDictionary(NSDictionary) dictionaryWithContentsOfFile:]
x0 = 0x00000001a49b69e4 Foundation`-[NSFileManager attributesOfFileSystemForPath:error:]
x0 = 0x00000001a49b6c6c Foundation`-[NSFileManager contentsOfDirectoryAtPath:error:]
x0 = 0x00000001a49b7124 Foundation`-[NSFileManager attributesOfItemAtPath:error:]
x0 = 0x00000001a49ff65c Foundation`-[NSBundle executablePath]
x0 = 0x00000001a79082cc CFNetwork`CFNetworkCopySystemProxySettings
x0 = 0x00000001a83d8194 UIKitCore`-[UIDevice name]
x0 = 0x00000001a83d81f0 UIKitCore`-[UIDevice model]
x0 = 0x00000001a83d83b0 UIKitCore`-[UIDevice systemVersion]
x0 = 0x00000001a83d8468 UIKitCore`-[UIDevice identifierForVendor]
x0 = 0x00000001a83d8cac UIKitCore`-[UIDevice batteryState]
x0 = 0x00000001a83d8cb8 UIKitCore`-[UIDevice batteryLevel]
x0 = 0x00000001a83e4198 UIKitCore`-[UIScreen brightness]
x0 = 0x00000001a8eaab3c CoreTelephony`-[CTCarrier carrierName]
x0 = 0x00000001a8eaab4c CoreTelephony`-[CTCarrier mobileCountryCode]
x0 = 0x00000001a8eaab5c CoreTelephony`-[CTCarrier mobileNetworkCode]
x0 = 0x00000001a8eaab6c CoreTelephony`-[CTCarrier isoCountryCode]
x0 = 0x00000001a8eade3c CoreTelephony`-[CTTelephonyNetworkInfo currentRadioAccessTechnology]
x0 = 0x00000001a8eae2c4 CoreTelephony`-[CTTelephonyNetworkInfo subscriberCellularProvider]
x0 = 0x00000001bd6b5cc4 AdSupport`-[ASIdentifierManager isAdvertisingTrackingEnabled]
x0 = 0x00000001bd6b5d28 AdSupport`-[ASIdentifierManager advertisingIdentifier]
三.总结
从技术角度来讲确实逆向的难度比较大,主要是掺杂了大量的自定义算法,比如在拼接设备信息之后,按照字节的补位数一共有16种加密算法,还有魔改的sha256,hash算法,大部分时间都花在还原这一部分算法上面了.整体难度很大
AliTigerTally wtoken算法分析相关推荐
- 2022 nike wtoken 算法分析
前面的抓包分析和java层定位我这里就不分析了 libtiger_tally.so 具体加密在这里so里面 这个是ali安全的so Java层: com/aliyun/TigerTally/Tiger ...
- 2023 nike/snkrs wtoken 抽签/加车算法
2023 nike App/snkrs wtoken 抽签/加车算法分析 通过分析发现,具体加密在这里libtiger_tally.so里 经过搜索我们知道这是ali安全的风控sdk,为了便于测试,我 ...
- 基于FCN,U-Net的深度学习医学影像分割算法(细胞分割算法)以及传统算法分析
本博文主要分析了基于传统计算机视觉的细胞分割算法和基于深度学习的细胞分割算法.主要针对医学影像分割算法.包括了FCN全卷积网络的细胞分割效果,U-Net细胞分割效果.查阅了采用深度学习分割医学影像的几 ...
- Weiss的数据结构与算法分析(C++版)源码编译说明
最近尝试编译Weiss的那本数据结构与算法分析(C++版)提供的源代码时,遇到一些问题,特记录如下: 考虑到该书提供的代码是使用模板技术较多,这在提供简洁代码的同时,也给源码的编译带来了一些问题.因而 ...
- 反汇编算法介绍和应用——递归下降算法分析
上一篇博文我介绍了Windbg使用的线性扫描(linear sweep)反汇编算法.本文我将介绍IDA使用的递归下降(recursive descent)反汇编算法.(转载请指明来源于breaksof ...
- 数据结构与算法分析(C++版)(第二版)
查看书籍详细信息: 数据结构与算法分析(C++版)(第二版) 内容简介 本书采用程序员最爱用的面向对象C++语言来描述数据结构和算法,并把数据结构原理和算法分析技术有机地结合在一起,系统介绍了各种类型 ...
- 总结:DCIC算法分析赛完整方案分享!
↑↑↑关注后"星标"Datawhale 每日干货 & 每月组队学习,不错过 Datawhale干货 作者:阿水,北航计算机硕士,Datawhale成员 DCIC2020 本 ...
- 算法分析赛:从数据中挖掘价值,72万奖金,DCIC 2020 大数据赛道来了!
01 DCIC 2020:数字中国创新大赛 DCIC 是国内赛事中少有的开放政府真实数据的经典赛事,除了高知名度,高影响力,高奖金,对能力履历,学术研究和企业技术应用都提供了很好的机会.作为数字中国 ...
- 线性排序算法分析总结
线性排序(Linear sort),指的是 时间复杂度为 O(n) 的排序算法.之所以时间复杂度能达到线性,是因为这种排序不是基于比较的,但它的适用场景也有很大的局限性. 线性排序有三种:桶排序.计数 ...
最新文章
- 批量 ping 测试脚本(IP 扫描)
- 请写php合并数组,合并PHP数组
- linux重启memcache_Linux下的Memcache安装方法
- 结构类型需要重载GetHashCode和Equals
- 微信3.3.0 for Mac全新发布:新增视频号 可搜索微信号添加朋友
- MVC开发中的常见错误-02-在应用程序配置文件中找不到名为“OAEntities”的连接字符串。...
- 两个栈实现队列+两个队列实现栈----java
- java GC的优化
- 瀑布流布局的实现方式
- 牛客网 斐波那契数列
- 建筑电气工程设计常用图形和文字符号_电气设计绘图线宽是什么标准,需要遵循哪些基本原则?你知道吗?...
- 控制系统--系统结构图
- 在centos系统上安装python
- System Repair Engineer (SREng) 2.5 常用操作
- 遥感NDVI估算植被覆盖度
- python 温度 符号_python中温度单位转换的实例方法
- ftp服务器要什么配置文件,ftp服务器要求什么电脑配置
- stm32命名规范总结
- HTTPS 和 SSL/TLS 协议:密钥交换(密钥协商)算法及其原理
- Python 爬虫实战(1):分析豆瓣中最新电影的影评