目录:
String vmpSign(int signType, byte[] input);
功能:对输入的数据进行签名,并且返回签名串。
接口参数:
:int类型,取值固定为1,表示默认的签名算法。
:byte[]类型,表示待签名的数据。
待签名数据一般是整个请求体(RequestBody)。
如果请求体为空(例如,POST请求的Body为空或者使用了GET请求),则设置成空对象(null)或者空字符串的Bytes值(例如,"".getBytes("UTF-8"))。
返回值:String类型,返回签名串。
请求体签名过程如图5-1所示:
图5-1
.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、加密设备数据与签名组合
.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字节
BYTE iv[1][16] = {
还原后加密数据与SDK内存中加密数据相同,如图6-1所示:
图6-1
sha256_init(&ctx);
对于这种高强度混淆的SDK逆向分析难度还是比较高的,主要分为三步,一是解密appkey,二是获测设备风险与获取设备指纹,三进行签名。
采集设备异常风险特征包括:
使用模拟器、使用代理、Root设备、调试模式、App被hook、App多开。
其中采集设备信息与加解密算法都是通过混淆的,如果对常见算法逻辑不熟悉,要完整还原算法是需要花费一定的时间。整体来讲安全度还是比较高。
但是强混淆与多重反射会影响效率、代码重复率高、体积大。
我个人理解从老版本到新版本更新迭代这个业务比较成熟才是,但是从注册到获取SDK集成到配置策略发布大概需要2-3天的时间,其实整个流程下来完全可以实现自动化操作与自检验,节省时间的同时提升体验与更快的响应,但是期间我需要多次联系WAF技术支持人员获取App防护SDK包且反响时间较长。
版本变更内容未说明,黑盒状态,新增功能?功能调整?BUG修复?可能是因为整体架构都是全新开发的原因吧。
我是小三,目前从事软件安全相关工作,虽己工作多年,但内心依然有着执着的追求,信奉终身成长,不定义自己,热爱技术但不拘泥于技术,爱好分享,喜欢读书和乐于结交朋友,欢迎加我微信与我交朋友(公众号输入框回复“wx”即可)