长亭百川云 - 文章详情

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

矛和盾的故事

67

2024-07-13

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

目录:

五、签名流程

5.1、整体流程

签名请求数据接口定义:
String vmpSign(int signType, byte[] input);

功能:对输入的数据进行签名,并且返回签名串。
接口参数:
:int类型,取值固定为1,表示默认的签名算法。
:byte[]类型,表示待签名的数据。
待签名数据一般是整个请求体(RequestBody)。
如果请求体为空(例如,POST请求的Body为空或者使用了GET请求),则设置成空对象(null)或者空字符串的Bytes值(例如,"".getBytes("UTF-8"))。
返回值:String类型,返回签名串。

签名流程:

请求体签名过程如图5-1所示:

                        图5-1

5.2、组合请求体与签名

获取要签名的请求体数据:
.text:C70B7AF8             getbody_sub_CDEF3AF8 

进入签名主函数

.text:C71166C8             vmpsing_sub_CDF526C8 

组合数据

生成随机数

.text:C7161304             sub_C7161304 
7DD6CFBE50

请求体+服务器返回设备指纹+设备风险+crc+随机数

.text:C7112E44             ; 组合数据

组合后数据

CF274E00  69 20 61 6D 20 74 68 65  20 72 65 71 75 65 73 74  i am the request

计算hmac值

.text:C71057A4             encbody_hmac_sha256_sub_CDF417A4

多次计算hmac

appkey解密现来数据加密后与第一次计算得到的hmac组合b5c0d0a4-4763-44e8-baa6-dfca9a66efdb 再次计算hmac

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

结果转换成字符串,随机数+hmac

7DD6CFBE50FD7930742D168D58099A46D14AE3C7B67341C880 B9BA4EEE79E5FCAEBCE9F68B //组合签名时用到中间50字节

5.3、加密设备数据与签名组合

压缩aes与base64加密参与签名的设备数据
.text:C7117244             vm_enc_body_sub_C8E49244                ; CODE XREF: getinfo_sub_CDF805D0+6D2↑p

生成aeskey

7dfd964a-0377-4188-ada7-0758b4f7f63b me5值

AES加密

.text:C70FFB10

base64加密aes加密后的数据

iJByjqu4/3AEZUxyQNgMlC7jWAIjZrVEK0YQ1bU1OnGaTAeh3AYalxfKYpkqI3fGhOBlr9FamFhDPPv/yN0+k6iGOzLhheXvQAPEAHadlgJ4CNKxIlMnhusyXeoz4vElOPG4W2TxMbhFoowx7USetpEe01ALAhX5aXeNpQA4Sdaz/o5ufdFF6g50cRgeQPoO7/PY5WjuJwpMtyJcdd4uIH7tt9JCAa6GaSwtw9lD2Yj6Gx6A9tuj3+GHde0iMogaEWJrJMRIM1XGpnbvFxgBxVIEKIYzqXpDK9mfV+CaGLJc9PRPjJmGvF46Zg4N9jacxZvDzO+BUx9Ffq3ZrUWl8ftkPXzUzTZyHqLZACoLs4JPLl/tFP3wIlcxf/7O36etnod4D2vzVp3GXbCzI9LWKe/w1Fi0GmOSCGHxEUL0kEE=

组合签名

appk解密出的常量字符+AES+base64加密后的数据+appk解密出的常量字符+hamc(请求体+设备数据+appkey解密现来数据)前50字节

六、算法还原

6.1、加密设备数据算法

BYTE iv[1][16] = {

还原后加密数据与SDK内存中加密数据相同,如图6-1所示:

                        图6-1

6.2、签名算法

  sha256_init(&ctx);

七、总结

技术角度:

对于这种高强度混淆的SDK逆向分析难度还是比较高的,主要分为三步,一是解密appkey,二是获测设备风险与获取设备指纹,三进行签名。
采集设备异常风险特征包括:
使用模拟器、使用代理、Root设备、调试模式、App被hook、App多开。
其中采集设备信息与加解密算法都是通过混淆的,如果对常见算法逻辑不熟悉,要完整还原算法是需要花费一定的时间。整体来讲安全度还是比较高。
但是强混淆与多重反射会影响效率、代码重复率高、体积大。

业务角度:

我个人理解从老版本到新版本更新迭代这个业务比较成熟才是,但是从注册到获取SDK集成到配置策略发布大概需要2-3天的时间,其实整个流程下来完全可以实现自动化操作与自检验,节省时间的同时提升体验与更快的响应,但是期间我需要多次联系WAF技术支持人员获取App防护SDK包且反响时间较长。
版本变更内容未说明,黑盒状态,新增功能?功能调整?BUG修复?可能是因为整体架构都是全新开发的原因吧。

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

作者简介:

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

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

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