【iOS逆向】iOS某大厂vmp参数还原

admin 2025年6月9日16:57:39评论1 views字数 5723阅读19分4秒阅读模式

前言

文章中所有内容仅供学习交流使用,不用于其他任何目的,抓包内容、敏感网址、数据接口均已做脱敏处理。严正声明禁止用于商业和非法用途,否则由此产生的一切后果与作者本人无关。若有侵权,请在vx【amuncocoL】联系我

说明

工具说明

trace:    这里用的棕熊的iOS版本qbdi,链接:https://bbs.kanxue.com/thread-287137.htm#msg_header_h1_1fridacharlesIDA

样本:脱敏!保密!保命!【iOS逆向】iOS某大厂vmp参数还原

抓包

【iOS逆向】iOS某大厂vmp参数还原抓包可以看到header里xxx中包含x1,x2,x3,x4,x5,x6,x7。 x6就是本次分析的目标。

分析

首先就是定位参数, 然后找到参数算法生成的位置, 都是OC层代码, 很简单直接跳过。【iOS逆向】iOS某大厂vmp参数还原

进入核心算法触发的调用点,固定入参发现结果一直在变,找到内部的随机数逻辑hook掉。 跑一个trace,这个样本倒不是很大。

【iOS逆向】iOS某大厂vmp参数还原

开始进入分析x6

【iOS逆向】iOS某大厂vmp参数还原

x6:

"x6":"97c8cc421b9ada2d94103c174b5814b617cda51cbf148a8a1eb499609bbc9483"

找到x6生成的地方

【iOS逆向】iOS某大厂vmp参数还原

可以看到x6的计算为: w8 ^ w9 = target

  w8^w9   = target0xf1^0x66 = 0x97   0x69^0xa1 = 0xc80x74^0xb8 = 0xcc0x09^0x4b = 0x420x22^0x39 = 0x1b0x1a^0x80 = 0x9a0x78^0x55 = 0x2d0x57^0xc3 = 0x940xe8^0xf8 = 0x100x4a^0x3c = 0x76...0xf8^0x7b = 0x83

W8分析

查找w8这列数值计算的地方【iOS逆向】iOS某大厂vmp参数还原结果计算的地方

【iOS逆向】iOS某大厂vmp参数还原

同样是由w8,w9两个值add得到

add w8, w9, w8 ;W8=0x42 -> 0xf1, W9=0xaf // 0xf1add w8, w9, w8 ;W8=0x0 -> 0x69, W9=0x69 //0x69add w8, w9, w8 ;W8=0x88 -> 0x174, W9=0xec  //0x174 strBadd w8, w9, w8 ;W8=0x73 -> 0x109, W9=0x96add w8, w9, w8 ;W8=0x40 -> 0x122, W9=0xe2add w8, w9, w8 ;W8=0x73 -> 0x109, W9=0x96add w8, w9, w8 ;W8=0x40 -> 0x122, W9=0xe2add w8, w9, w8 ;W8=0xe -> 0x1a, W9=0xc省略N次...
w8即0x42这列分析

搜一下【iOS逆向】iOS某大厂vmp参数还原

Call addr: 0x20a19b8d0 [libsystem_platform.dylib!_platform_memmove] (dst=0x13bd375b0, src=0x13bd36ed8, n=32)源内存内容: (dst=0x13bd375b0, src=0x13bd36ed8, n=32)0000: 42 00 88 73 40 0e 03 08 30 6f c1 b1 07 54 11 6d   [email protected] (dst=0x13bd375b0, src=0x13bd36ed8, n=32)0010: 8b dc f9 04 c7 7d 26 75 76 84 2e fc 3f a4 ce 94   .....}&uv...?...

继续找这块数据生成的部分

【iOS逆向】iOS某大厂vmp参数还原

看下0x42008873生成的地方

0x1003e8b40 0xc0b40  add w14, w15, w14 ;W14=0xf485e8dc -> 0x42008873, W15=0x4d7a9f97

继续看W15=0x4d7a9f97的生成

【iOS逆向】iOS某大厂vmp参数还原
0x1003e8b40 0xc0b40  add w14, w15, w14 ;W14=0xe370b930 -> 0x4d7a9f97, W15=0x6a09e667 

熟悉的朋友想必已经发现0x6a09e667是sha256的h0【iOS逆向】iOS某大厂vmp参数还原回到上头0x42008873的生成中,看W14=0xf485e8dc

【iOS逆向】iOS某大厂vmp参数还原
W14=0xf485e8dc = 0xaedaced5+ 0x45ab1a070x1003e8aec 0xc0aec  add w13, w3, w15 ;W13=0x23b32947 -> 0xaedaced5, W3=0xa9237f7f, W15=0x5b74f56 0x1003e8af0 0xc0af0  add w13, w13, w14 ;W13=0xaedaced5 -> 0xf485e8dc, W14=0x45ab1a07    //  W13+W14 = (w3+w15)+w14

继续W13=0xaedaced5的生成中w3=0xa9237f7f的生成

0x1003e8aec 0xc0aec  add w13, w3, w15 ;W13=0x23b32947 -> 0xaedaced5, W3=0xa9237f7f, W15=0x5b74f56 

【iOS逆向】iOS某大厂vmp参数还原那么w3分支对应sha256中S0,s0组成的temp1会和temp2有add,temp2中有W[i]参与,目的通过w[i]找明文。

【iOS逆向】iOS某大厂vmp参数还原找w[i],发现0x5b74f56中有明文操作经过分析:

0x1003e8aa4 0xc0aa4  add w16, w16, w17 ;W16=0x3102044 -> 0x9a4d5032, W17=0x973d2fee0x1003e8aa8 0xc0aa8  add w15, w16, w15 ;W15=0xedfe1951 -> 0x884b6983, W16=0x9a4d50320x1003e8aac 0xc0aac  add w15, w15, w3 ;W15=0x884b6983 -> 0x504b6e0b, W3=0xc80004880x1003e8ab0 0xc0ab0  add w15, w15, w5 ;W15=0x504b6e0b -> 0x16bce6fd, W5=0xc67178f2 // w5 = K[i] = 0xc67178f2为K表的常量最后一轮0x1003e8ab4 0xc0ab4  add w15, w15, w4 ;W15=0x16bce6fd -> 0x5b74f56, W4=0xeefa6859  //  w16+w17+w15+w3+w5(即K[i])+w4[即W[i]]

【iOS逆向】iOS某大厂vmp参数还原w[64] = 0xeefa6859,找到0xeefa6859的生成地方,搜下:【iOS逆向】iOS某大厂vmp参数还原找到W[0]

0x1003e8aa0 0xc0aa0  ldr w4, [x6, x4] ;W4=0x0 -> 0x5f15b545, X6=0x13bd36d58     // W[0]
【iOS逆向】iOS某大厂vmp参数还原

找0x5f15b545即w[0]的生成,中途看到W[0]参与的计算【iOS逆向】iOS某大厂vmp参数还原对应

for i from 16 to 63        s0 := (w[i-15] rightrotate  7) xor (w[i-15] rightrotate 18) xor (w[i-15] rightshift  3)        s1 := (w[i-2] rightrotate 17) xor (w[i-2] rightrotate 19) xor (w[i-2] rightshift 10)        w[i] := w[i-16] + s0 + w[i-7] + s1

继续找w[0]的生成,找到【iOS逆向】iOS某大厂vmp参数还原搜下0xc097c,明文填充0x80,拼接0拼接长度,然后bswap【iOS逆向】iOS某大厂vmp参数还原继续定位 0x5f15b545的来源

0x1003e8b40 0xc0b40  add w14, w15, w14 ;W14=0xaf9a9a47 -> 0x5f15b545, W15=0xaf7b1afe // 得到 0x5f15b545 新一轮sha256

【iOS逆向】iOS某大厂vmp参数还原发现又是新一次轮sha256,这里标记下,并且汇编地址0xc0b40上面有看到。 w14-> 0xaf9a9a47的生成

0x1003e8aec 0xc0aec  add w13, w3, w15 ;W13=0x65fc8355 -> 0x2fd71d2c, W3=0x20561d14, W15=0xf8100180x1003e8af0 0xc0af0  add w13, w13, w14 ;W13=0x2fd71d2c -> 0xaf9a9a47, W14=0x7fc37d1b0x1003e8af4 0xc0af4  stp w13, w16, [sp, #8] ;W13=0xaf9a9a47, W16=0x37c43fab, SP=0x13bd36d30
【iOS逆向】iOS某大厂vmp参数还原
0x1003e8aec 0xc0aec  add w13, w3, w15 ;W13=0x65fc8355 -> 0x2fd71d2c, W3=0x20561d14, W15=0xf810018

【iOS逆向】iOS某大厂vmp参数还原找0xf810018,之前图里提过w4=w[i]【iOS逆向】iOS某大厂vmp参数还原找0x633c8d9f即w[i]

【iOS逆向】iOS某大厂vmp参数还原找到w[0]【iOS逆向】iOS某大厂vmp参数还原找到填充bwap的地方【iOS逆向】iOS某大厂vmp参数还原看到这里明文为转了大端序:

38 d7 48 09 f8 1e 1f 55 73 24 fa 38 cf 68 05 b7

长度为0x280对不上,结合上面的0x5c,2次sha56,诸多特征当然还有我后续的分析,确定这是HMAC-256。 验证下没问题:【iOS逆向】iOS某大厂vmp参数还原

Key的还原略过,找到后异或就行了。 继续分析数据明文:

38 d7 48 09 f8 1e 1f 55 73 24 fa 38 cf 68 05 b7
【iOS逆向】iOS某大厂vmp参数还原
0x1003fd29c 0xd529c  eor w8, w9, w8 ;W8=0x1c -> 0x38, W9=0x240x1003fd29c 0xd529c  eor w8, w9, w8 ;W8=0xfe -> 0xd7, W9=0x290x1003fd29c 0xd529c  eor w8, w9, w8 ;W8=0xe8 -> 0x48, W9=0xa00x1003fd29c 0xd529c  eor w8, w9, w8 ;W8=0x20 -> 0x9, W9=0x290x1003fd29c 0xd529c  eor w8, w9, w8 ;W8=0xfc -> 0xf8, W9=0x40x1003fd29c 0xd529c  eor w8, w9, w8 ;W8=0x5 -> 0x1e, W9=0x1b0x1003fd29c 0xd529c  eor w8, w9, w8 ;W8=0xa7 -> 0x1f, W9=0xb80x1003fd29c 0xd529c  eor w8, w9, w8 ;W8=0xa9 -> 0x55, W9=0xfc0x1003fd29c 0xd529c  eor w8, w9, w8 ;W8=0x8c -> 0x73, W9=0xff0x1003fd29c 0xd529c  eor w8, w9, w8 ;W8=0xdf -> 0x24, W9=0xfb0x1003fd29c 0xd529c  eor w8, w9, w8 ;W8=0x75 -> 0xfa, W9=0x8f0x1003fd29c 0xd529c  eor w8, w9, w8 ;W8=0xba -> 0x38, W9=0x820x1003fd29c 0xd529c  eor w8, w9, w8 ;W8=0x97 -> 0xcf, W9=0x580x1003fd29c 0xd529c  eor w8, w9, w8 ;W8=0x77 -> 0x68, W9=0x1f0x1003fd29c 0xd529c  eor w8, w9, w8 ;W8=0x91 -> 0x5, W9=0x940x1003fd29c 0xd529c  eor w8, w9, w8 ;W8=0xd0 -> 0xb7, W9=0x67
w9=0x24这列数据

找一下和文章最后w9分析一致,v1通过a45678解码,v1是固定的,a45678也是固定的,结果解出来也是固定的,直接拿到结果保存使用就行。

W8=0x1c这列数据:

【iOS逆向】iOS某大厂vmp参数还原【iOS逆向】iOS某大厂vmp参数还原

0x1003fcea4 0xd4ea4  add w8, w9, w8 ;W8=0x24 -> 0x11c, W9=0xf8 // w8 = w8+w9(ldr)0x1003fcea4 0xd4ea4  add w8, w9, w8 ;W8=0x68 -> 0xfe, W9=0x960x1003fcea4 0xd4ea4  add w8, w9, w8 ;W8=0x96 -> 0xe8, W9=0x520x1003fcea4 0xd4ea4  add w8, w9, w8 ;W8=0x64 -> 0x120, W9=0xbc0x1003fcea4 0xd4ea4  add w8, w9, w8 ;W8=0x39 -> 0xfc, W9=0xc30x1003fcea4 0xd4ea4  add w8, w9, w8 ;W8=0x3c -> 0x105, W9=0xc90x1003fcea4 0xd4ea4  add w8, w9, w8 ;W8=0x29 -> 0xa7, W9=0x7e0x1003fcea4 0xd4ea4  add w8, w9, w8 ;W8=0x83 -> 0xa9, W9=0x260x1003fcea4 0xd4ea4  add w8, w9, w8 ;W8=0xf7 -> 0x18c, W9=0x950x1003fcea4 0xd4ea4  add w8, w9, w8 ;W8=0x3f -> 0xdf, W9=0xa00x1003fcea4 0xd4ea4  add w8, w9, w8 ;W8=0x70 -> 0x75, W9=0x50x1003fcea4 0xd4ea4  add w8, w9, w8 ;W8=0xd9 -> 0x1ba, W9=0xe1省略...
找24 68 96 64

【iOS逆向】iOS某大厂vmp参数还原看截图里0x2AD7D2BB,0xeb86d391还有运算这MD5嘛【iOS逆向】iOS某大厂vmp参数还原找下入参明文,由x1, x2, x3, x4, x5, x7组成。【iOS逆向】iOS某大厂vmp参数还原入参拿到后验证下, 标准md5没问题【iOS逆向】iOS某大厂vmp参数还原

W9=0xf8这列
0xf8 0x96 0x52 0xbc 0xc3 0xc9 0x7e 0x26保密...

找一下和文章最后w9分析一致, v1通过a45678解码, v1是固定的,a45678也是固定的,结果解出来也是固定的, 直接拿到结果保存使用就行。

w9即0xaf这列分析
【iOS逆向】iOS某大厂vmp参数还原

【iOS逆向】iOS某大厂vmp参数还原省略N次 与下面W9分析那里逻辑一致, 解密出来结果的不同部分而已, 直接保存用就行。

W9分析

查找到w9的值,继续找生成【iOS逆向】iOS某大厂vmp参数还原继续查找找到生成的地方

【iOS逆向】iOS某大厂vmp参数还原【iOS逆向】iOS某大厂vmp参数还原省略N次...

按这个逻辑对应ida伪代码

【iOS逆向】iOS某大厂vmp参数还原这块和上边一样也是对v1通过a45678解码, v1是固定的 a45678也是固定的。结果解出来也是固定的, 直接拿到结果保存使用就行。

最后

本次是iOS基于trace法还原vmp的小尝试,vmp可借鉴材料的不多,自己也算摸索出来了一点皮毛。 文中如有错误,欢迎大家斧正,欢迎交流。 后面有时间会接着写剩下的参数还原~【iOS逆向】iOS某大厂vmp参数还原欢迎大家关注,你们的关注是我自律的最大动力~

【iOS逆向】iOS某大厂vmp参数还原

报课优惠、工作避坑&内推(仅成都)、技术交流、商务合作、技术交流群

扫码或者搜ID:geekbyte

【iOS逆向】iOS某大厂vmp参数还原

原文始发于微信公众号(编角料):【iOS逆向】iOS某大厂vmp参数还原

免责声明:文章中涉及的程序(方法)可能带有攻击性,仅供安全研究与教学之用,读者将其信息做其他用途,由读者承担全部法律及连带责任,本站不承担任何法律及连带责任;如有问题可邮件联系(建议使用企业邮箱或有效邮箱,避免邮件被拦截,联系方式见首页),望知悉。
  • 左青龙
  • 微信扫一扫
  • weinxin
  • 右白虎
  • 微信扫一扫
  • weinxin
admin
  • 本文由 发表于 2025年6月9日16:57:39
  • 转载请保留本文链接(CN-SEC中文网:感谢原作者辛苦付出):
                   【iOS逆向】iOS某大厂vmp参数还原https://cn-sec.com/archives/4149537.html
                  免责声明:文章中涉及的程序(方法)可能带有攻击性,仅供安全研究与教学之用,读者将其信息做其他用途,由读者承担全部法律及连带责任,本站不承担任何法律及连带责任;如有问题可邮件联系(建议使用企业邮箱或有效邮箱,避免邮件被拦截,联系方式见首页),望知悉.

发表评论

匿名网友 填写信息