长亭百川云 - 文章详情

App防Bot新版AliTigerTally方案浅析与算法还原一

矛和盾的故事

59

2024-07-13

本文仅限学习交流,请勿用于非法以及商业用途,由于时间和水平有限,文中错漏之处在所难免,敬请各位大佬多多批评指正。

目录:

一、产品概述

对旧版产品本感兴趣的可以移步到这里: 旧版产品 

1.1、App端防护能决哪些安全问题

App防护提供的SDK安全方案解决以下原生App端的安全问题:

恶意注册、撞库、暴力破解
针对App的大流量CC攻击
短信、验证码接口被刷
薅羊毛、抢红包
恶意秒杀限时限购商品
恶意查票、刷票(例如,机票、酒店等场景)
价值资讯爬取(例如,价格、征信、融资、小说等内容)
机器批量投票
灌水、恶意评论

1.2、如何为应用开启App防护

注册登录,提交配置,获取APPKEY与SDK,APP中集成SDK后可以在后台开启App防护状态开关,并设置App防护策略,流程如图1-2所示:

                        图1-2

二、产品整体框架

App集成SDK主要用于对通过App客户端发起的请求时对请求体进行签名发送到应用服务器。WAF服务端获得应用服务器收到的请求后,通过解析校验签名串(wToken)进行风险识别、拦截恶意请求,识别App业务中的风险,实现App防护的目的。它整体的框架如图2-1所示:

                        图2-1

三、初始化逻辑

3.1、初始化

SDK初始化接口定义:

int init(Context context, String appkey, int type);

功能:初始化SDK,执行一次初始化采集。一次初始化采集表示采集一次终端设备信息,您可以根据业务的不同,重新调用init函数进行初始化采集。
初始化采集分为两种模式:采集全量数据、采集除需授权字段外的数据(不采集涉及终端设备用户隐私的字段,包括:imei、imsi、simSerial、wifiMac、wifiList、bluetoothMac)。
接口参数:
:Context类型,传入您应用的上下文。
:String类型,设置为您的SDK认证密钥。
:CollectType类型,设置采集模式。取值:
DEFAULT:表示采集全量数据。
NO_GRANTED:表示采集除需授权字段外的数据。
返回值:int类型,返回初始化结果,0表示成功,-1表示失败。

java层:

加载so与定义几个Native方法:

public class TigerTallyAPI {

Native方法说明:

.text:CB138170 F2 F7 16 F8 BL              Dec_RiskString_sub_CEE741A0

Native层JNI_OnLoad:

解密字符串,so中字符串都是加密的,全部解密方法如下:

.text:CB129D30             DecString_loc_CEE73D30

注册Native方法:
解密Native方法名

.data.rel.ro:CB215C28                                                     ; "_genericNt"

注册方法

.text:CB1381D8 F1 F7 AA FD BL              DecString_loc_CEE73D30  ; com/aliyun/TigerTally/TigerTallyAPI

3.2、解密APPKEY

native int _genericNt2(int arg0, String[] arg1)

获取java层传入的sdk appkey

.text:CB131490             getString_sub_CF0FF490 

获取到的sdk appkey

E2CAD3C0  73 76 67 46 39 77 6B 42  42 62 36 32 62 7A 70 78  svgF9wkBBb62bzpx

Base64与AES解密appkey

.text:CB18E1C0             DecAppkey_SplitStr_sub_CF15C1C0 

解密后得到几个字符串,后续做为密钥:

55b4dc20eaf2a88a|0ea7_7dfd964a-0377-4188-ada7-0758b4f7f63b|ff4b_b5c0d0a4-4763-44e8-baa6-dfca9a66efdb

四、环境检测与设备指纹

4.1、环境风险检测

检测xp、frida、miksg、hook、root、accessibility、debug
检测root:
"com.thirdparty.superuser"

检测magisk

/sbin/.magisk

检测xposed

getSystemClassLoader

检测多开

io.va.exposed64

检测frida

查找内存中特征

检测hook

.text:C70EF776             check_start_loc_C472C776 

检测调试

//TracerPid

4.2、设备指纹

双重反射采集信息:

统一入口,动态调用不同的方法获取设备信息

.text:C70C5350 

JNI反射调用forName、getDeclaredMethod获取设备信息

.text:C70F02D8             call_getDeclaredMethod_loc_C4AB92D8
单条加密设备信息:

获取完一组信息后单条加密:

.text:C711C232             vm_enc_Deviceinfo_sub_D5C4A232

最终会走到VM_Entrance_loc_CDF4C384中进行加密,90%的功能都是在这里面动态调用不同方法完成的。

.text:C711C384             VM_Entrance_loc_CDF4C384

组合设备信息再次加密:

组合加密后的设备信息

.text:C7112E44             getbody_crc_sub_CDA4AE44                ; CODE XREF: getinfo_sub_CDF805D0+69C↑p

组合后数据(部分)

//组合请求体 计算设备信息crc 第10位起是crc

压缩加密组合后数据

.text:C7117244             vm_enc_body_sub_C8E49244

生成AES密钥

计算 7dfd964a-0377-4188-ada7-0758b4f7f63b 的md5值,该值为sdk appkey解密出来的

计算后的MD5值

C7094F80  CB C5 B0 32 9C 91 1A 82  0D F1 0C 30 6D 81 99 10

AES 加密

//初始化key

加密后(部分)

DE749300  21 90 DA C9 7A 71 49 C4  0C 6F E0 87 66 88 21 9B  !...zqI..o....!.

发送服务器请求设备指纹:

反射java层发送网络请求

.text:C70C7244             postnet_sub_C8DF9244 

存储服务器返回的设备指纹:

.text:C70C65E0             t4_save_TT_COOKIEID_sd_data_sub_CDB195E0

样本获取方式,关注公众号,公众号输入框回复“att” 获取下载链接。

作者简介:

我是小三,目前从事软件安全相关工作,虽己工作多年,但内心依然有着执着的追求,信奉终身成长,不定义自己,热爱技术但不拘泥于技术,爱好分享,喜欢读书和乐于结交朋友,欢迎加我微信与我交朋友(公众号输入框回复“wx”即可)

相关推荐
关注或联系我们
添加百川云公众号,移动管理云安全产品
咨询热线:
4000-327-707
百川公众号
百川公众号
百川云客服
百川云客服

Copyright ©2024 北京长亭科技有限公司
icon
京ICP备 2024055124号-2