长亭百川云 - 文章详情

美团外买APP设备指纹风控分析一(初始化)

矛和盾的故事

76

2024-07-13

一、电商类APP业务风险类型二、设备指纹在业务中的应用三、整体框架四、初始化流程分析五、反爬虫mtgsig签名六、设备指纹分析七、设备指纹攻击八、黑产工具特征检测九、总结

一、电商类APP业务风险类型

电商行业的各个业务场景面临不同的风险种类:客户端漏洞利用、协议逆向、注册小号、商品信息被抓取、推广渠道作弊、营销活动被薅羊毛、商品秒杀等。
大多的防御方案是通过端上安全、链路安全、接口和数据传输安全保护,再借助设备安全核验技术、人机识别及时发现各种模拟行为和异操作风险、同时集合风控策略实现多节点防护。

二、设备指纹在业务中的应用

设备指纹技术是使用更多的信息来完成对终端设备的唯一性识别,在业务中可以有效辨别设备是真实用户还是机器在注册、登录,及时检测出单设备登入多帐号、防止批量注册、登录等操作行为。

三、整体框架

因为框架流程过于复杂,我将框架分为两个部分,一是初始化,二是设备指纹,这样会更清楚些,如图3-1与3-2所示:

                                图3-1

                                图3-2

四、初始化流程分析

4.1、初始化准备

java层调用init()初始化,获取Context,包名,AppInfo,XML配置信息等,然后加载so libmtguard.so 在so中注册一个Native方法,该Native方法传入不同的数字代表不同的功能,代码如下所示:

Lcom/meituan/android/common/mtguard/MTGuard;->loadSo(Ljava/lang/String;)V

4.2、系统环境检测

调用Native层Object[] v12_2 = NBridge.main3(1, new Object[1]),传入参数为1,表示检测环境, 检测系统目录中是否有ls文件且是否为elf格式:

.text:B1BF744E 01 26       MOVS            R6, #1

检测root:

//检测root 直接用svc指令,防止hook

检测XPOSED、代理、ROM是否为自己编译的

//检测

检测关键方法是否被hook

//检测方法是否被hook

其它检测,代码如下:

boolean v2 = MTGuard.isEmu();

4.3、读取资源文件并解密

4.3.1、读文件META-INF/SANKUAI.RSA计算MD5

代码如下:

.text:B65E1FE4 F0 B5       PUSH            {R4-R7,LR}

读取的数据与APk包中的内容是一样的。

B3C7B000  30 82 03 F5 06 09 2A 86  48 86 F7 0D 01 07 02 A0  0.......H.......

检测是否为RSA文件:

.text:B65EFCBC             isRSA_sub_CB471CBC 

计算MD5值

int __fastcall md5_sub_C6FEF398(int a1, int a2, int a3)

计算后的值为:

638C81261479C2104EDE3F2518E91725

该值会作为解密资源密钥的一部分。

4.3.2、解密assets/ms_com.sankuai.meituan
组合密钥:

包名+常量字符(WU@TEN)+META-INF/SANKUAI.RSA(md5)

com.sankuai.meituanWU@TEN638C81261479C2104EDE3F2518E91725

将组合后的字符串加密Sha1值

.text:C1D52AA4 F0 B5       PUSH            {R4-R7,LR}

加密后的值为:

//该值为解密assets/ms_com.sankuai.meituan的密钥

读取资源文件assets/ms_com.sankuai.meituan

int __fastcall ReadFile_unzip_sub_C6BAE74C(int *a1, int a2, int a3)

读取后内容(部分)

BCF4A000  89 50 4E 47 0D 0A 1A 0A  00 00 00 0D 49 48 44 52  .PNG........IHDR

解析解密图片得到PIC数据

int __fastcall ParsePng_sub_CB4C8858(

得到PIC数据(部分)(这个数据是伴随APP整个生命周期,主要用途是加解密密钥)

BDC74300  2E 50 49 43 90 01 00 00  10 02 00 00 B0 02 00 00  .PIC............

4.4、采集系统环境信息加密

4.4.1、循环获取信息 0x34次
.text:C1AF5224 02 98       LDR             R0, [SP,#8]

在下面地方下是跳转到每一个采集信息方法入口的地方,下好断点:

.text:C207A134 80 00       LSLS            R0, R0, #2              ; 跳到真实执行方法

获取的系统环境信息

{
4.4.2、加密设备信息

压缩信息

 result = deflateInit_(&strm, -1, a128, 56);

压缩后信息

C3904500  78 9C 9D 92 DB 0A C2 30  0C 86 DF 25 D7 CD E8 61  x...............

解密PIC数据获取加密key 上面计算得到的sha256值,(包名+固定字符+SANKUAI.RSA的MD5值)->转换成hex

69fe5963f3b95d9718c8d3e4f924ad9379500e9b51d80686e65347890e1748fe

取前0x10字节

69 FE 59 63 F3 B9 5D 97 18 C8 D3 E4 F9 24 AD 93

生成AES KEY

.text:C1AE9DA2 0A A8       ADD             R0, SP, #0x28 ; '('     ; 生成AES key

生成最终的AES KEY

68 98 08 02 F2 80 1C 94 08 C8 90 E4 A0 04 AC 82

AES 解密pic

//IV 0102030405060708

解密解压后PIC数据

{"a1":0,"a10":400,"a2":"com.sankuai.meituan","a11":"c1ee9178c95d9ec75f0f076a374df94a032d54c8576298d4f75e653de3705449","a3":"0a16ecd60eb56a6a3349f66cdcf7f7bf5190e5a42d6280d8dc0ee3be228398ec","a4":1100030200,"k0":{"k1":"meituan1sankuai0","k2":"meituan0sankuai1","k3":"$MXMYBS@HelloPay","k4":"Maoyan010iauknaS","k5":"34281a9dw2i701d4","k6":"X%rj@KiuU+|xY}?f"},"a5":"11.3.200","a0":"pw/LhTdeoTTyaxPHcHMy+/ssGNS1ihNkrJ+uBI74FIfd90KlTil1m0i7FF/n0bhY","a6":"/HntC9XIfdUyII/UiVfx020EQPpHz2XZY3qzM2aiNmM0i0pB1yeSO689TY9SBB3s","a7":"QsHnU6kFjTYR8Z6tHEvkGMO2Hrt+NRnVQhmxg6EtVBzuzQcBpma3AdhTWNMpesFT","c0":{"c1":true,"c2":false},"a9":"SDEzWXi5LHL/cuMCZ1zYyv+0hIViqWWf+ShbUYILWf4=","a8":1603800117167}

解析json获取key k6

X%rj@KiuU+|xY}?f

计算压缩后信息的CRC值

.text:C1B2C832             crc32_loc_CCBA9832  

计算后的CRC值为 744d7275 组合加密压缩后设备环境信息的key

744d7275X%rj@Kiu //crc32+k6前8字节

AES加密压缩后数据

.text:C1AE750E 32 00       MOVS            R2, R6

加密后数据(部分)

C37514E0  2E 5D 33 AF C8 C3 6B 6A  7F C2 9F F6 39 16 52 57  .]3...kj.......W

base64加密

.text:C1ACFE62 27 DB       BLT             loc_C1ACFEB4

Base64加密后

Ll0zr8jDa2p/wp/2ORZSVx3LAf+i+kgLLSt+OXPrZecUk1nZFfLXy8dA3LWdDTQWnL9pxlSXgchpeiYDv/rz2aPSvjiwmUhKXlbwxohUeb1WhpanQNRhMm2kB1XxRkbvTqHKhvgeaQkLz20FO9MPtGN4ZW2t97LEdYbFNbVvQrr6r+dMVkHPNkaGPuARozWeaQGSSMkoMMJ+ve9rA1L+aQTgGSootSpmPnT3TPLrCPN0Z6HzPKtpxopqfsjfcIV7YcP7M8Wc847wXfhMA2hYTRO24or97heGubGuxo8hQyw=

将CRC值与Base64加密后值组合,(签名时使用到)

744d7275Ll0zr8jDa2p/wp/2ORZSVx3LAf+i+kgLLSt+OXPrZecUk1nZFfLXy8dA3LWdDTQWnL9pxlSXgchpeiYDv/rz2aPSvjiwmUhKXlbwxohUeb1WhpanQNRhMm2kB1XxRkbvTqHKhvgeaQkLz20FO9MPtGN4ZW2t97LEdYbFNbVvQrr6r+dMVkHPNkaGPuARozWeaQGSSMkoMMJ+ve9rA1L+aQTgGSootSpmPnT3TPLrCPN0Z6HzPKtpxopqfsjfcIV7YcP7M8Wc847wXfhMA2hYTRO24or97heGubGuxo8hQyw=

4.5、第二次加密设备信息

设备信息数据

{"voltage":"1","type":"user","brand":"google","psuc":"adb","temp":"1","suc":"midi,adb","id":"PQ2A.190305.002","sus":"midi,adb","tags":"release-keys","timestamp":"1631688160837","hardware":"sailfish","version":"9","model":"Pixel"}

压缩数据

C42FEF80  78 9C 55 8E 41 12 82 30  0C 45 EF D2 35 32 2D 8C  x.U.A..0.E...2-.

解密PIC数据获取key(k1),流程和上面一样

解密后得到key meituan1sankuai0

AES 加密压缩后数据

.text:C1AE7510 56 F0 30 FF BL              AES_set_Encrypt_key_sub_CB601374 ; R0:key,R1:长度,R2:返回值

加密后数据(部分)

DEED6F00  2E 0F E3 72 62 1C 2B FB  35 B0 A9 CA E5 29 9F 79  ......+.5....).y

Base64加密后

Lg/jcmIcK/s1sKnK5SmfecY38ALLFxKubj1erOumtd0zuSSp9OBtbGTWduRliGxv81Mg+rP4AmxtvHXJh2aSzlF6vAm/aV3Awwpxd0Zb4IHiFWcFW4dILQ3U+pnvHKy9UyZWExaRaKjsWx/YX/Rhu/oqLwO1P24CblftRouhGgr1xec4n+WOcLGM1s/o1RZv9jY7pdgrPdmDvRfFP6o9liGe0rCXBoG85J1mm/6GmqQ=

4.6、代码混淆

代码逻辑跳转动态计算:

模板1

字符串解密:

.text:C1D46060             DecString

流程混淆:

.text:C1AF41F0 00 2C       CMP             R4, #0

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

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

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