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


抓包可以看到header里xxx中包含x1,x2,x3,x4,x5,x6,x7。
x6就是本次分析的目标。
首先就是定位参数, 然后找到参数算法生成的位置, 都是OC层代码, 很简单直接跳过。

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

开始进入分析x6

找到x6生成的地方

可以看到x6的计算为:
w8 ^ w9 = target
查找w8这列数值计算的地方

结果计算的地方

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

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

看下0x42008873生成的地方
继续看W15=0x4d7a9f97的生成

熟悉的朋友想必已经发现0x6a09e667是sha256的h0

回到上头0x42008873的生成中,看W14=0xf485e8dc

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

那么w3分支对应sha256中S0,s0组成的temp1会和temp2有add,temp2中有W[i]参与,目的通过w[i]找明文。

找w[i],发现0x5b74f56中有明文操作经过分析:

w[64] = 0xeefa6859,找到0xeefa6859的生成地方,搜下:

找到W[0]

找0x5f15b545即w[0]的生成,中途看到W[0]参与的计算

对应
继续找w[0]的生成,找到

搜下0xc097c,明文填充0x80,拼接0拼接长度,然后bswap

继续定位 0x5f15b545的来源

发现又是新一次轮sha256,这里标记下,并且汇编地址0xc0b40上面有看到。
w14-> 0xaf9a9a47的生成


找0xf810018,之前图里提过w4=w[i]

找0x633c8d9f即w[i]

找到w[0]

找到填充bwap的地方

看到这里明文为转了大端序:
长度为0x280对不上,结合上面的0x5c,2次sha56,诸多特征当然还有我后续的分析,确定这是HMAC-256。
验证下没问题:

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

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



看截图里0x2AD7D2BB,0xeb86d391还有运算这MD5嘛

找下入参明文,由x1, x2, x3, x4, x5, x7组成。

入参拿到后验证下, 标准md5没问题

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


省略N次
与下面W9分析那里逻辑一致, 解密出来结果的不同部分而已, 直接保存用就行。
查找到w9的值,继续找生成

继续查找找到生成的地方


省略N次...
按这个逻辑对应ida伪代码

这块和上边一样也是对v1通过a45678解码, v1是固定的 a45678也是固定的。结果解出来也是固定的, 直接拿到结果保存使用就行。
本次是iOS基于trace法还原vmp的小尝试,vmp可借鉴材料的不多,自己也算摸索出来了一点皮毛。
文中如有错误,欢迎大家斧正,欢迎交流。
后面有时间会接着写剩下的参数还原~

欢迎大家关注,你们的关注是我自律的最大动力~

trace:
这里用的棕熊的iOS版本qbdi,链接:https://bbs.kanxue.com/thread-287137.htm
frida
charles
IDA
trace:
这里用的棕熊的iOS版本qbdi,链接:https://bbs.kanxue.com/thread-287137.htm
frida
charles
IDA
"x6":"97c8cc421b9ada2d94103c174b5814b617cda51cbf148a8a1eb499609bbc9483"
"x6":"97c8cc421b9ada2d94103c174b5814b617cda51cbf148a8a1eb499609bbc9483"
w8^w9 = target
0xf1^0x66 = 0x97
0x69^0xa1 = 0xc8
0x74^0xb8 = 0xcc
0x09^0x4b = 0x42
0x22^0x39 = 0x1b
0x1a^0x80 = 0x9a
0x78^0x55 = 0x2d
0x57^0xc3 = 0x94
0xe8^0xf8 = 0x10
0x4a^0x3c = 0x76
...
0xf8^0x7b = 0x83
w8^w9 = target
0xf1^0x66 = 0x97
0x69^0xa1 = 0xc8
0x74^0xb8 = 0xcc
0x09^0x4b = 0x42
0x22^0x39 = 0x1b
0x1a^0x80 = 0x9a
0x78^0x55 = 0x2d
0x57^0xc3 = 0x94
0xe8^0xf8 = 0x10
0x4a^0x3c = 0x76
...
0xf8^0x7b = 0x83
add w8, w9, w8 ;W8=0x42 -> 0xf1, W9=0xaf // 0xf1
add w8, w9, w8 ;W8=0x0 -> 0x69, W9=0x69 //0x69
add w8, w9, w8 ;W8=0x88 -> 0x174, W9=0xec //0x174 strB
add w8, w9, w8 ;W8=0x73 -> 0x109, W9=0x96
add w8, w9, w8 ;W8=0x40 -> 0x122, W9=0xe2
add w8, w9, w8 ;W8=0x73 -> 0x109, W9=0x96
add w8, w9, w8 ;W8=0x40 -> 0x122, W9=0xe2
add w8, w9, w8 ;W8=0xe -> 0x1a, W9=0xc
省略N次...
add w8, w9, w8 ;W8=0x42 -> 0xf1, W9=0xaf // 0xf1
add w8, w9, w8 ;W8=0x0 -> 0x69, W9=0x69 //0x69
add w8, w9, w8 ;W8=0x88 -> 0x174, W9=0xec //0x174 strB
add w8, w9, w8 ;W8=0x73 -> 0x109, W9=0x96
add w8, w9, w8 ;W8=0x40 -> 0x122, W9=0xe2
add w8, w9, w8 ;W8=0x73 -> 0x109, W9=0x96
add w8, w9, w8 ;W8=0x40 -> 0x122, W9=0xe2
add w8, w9, w8 ;W8=0xe -> 0x1a, W9=0xc
省略N次...
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 B..s@...0o...T.m
(dst=0x13bd375b0, src=0x13bd36ed8, n=32)0010: 8b dc f9 04 c7 7d 26 75 76 84 2e fc 3f a4 ce 94 .....}&uv...?...
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 B..s@...0o...T.m
(dst=0x13bd375b0, src=0x13bd36ed8, n=32)0010: 8b dc f9 04 c7 7d 26 75 76 84 2e fc 3f a4 ce 94 .....}&uv...?...
0x1003e8b40 0xc0b40 add w14, w15, w14 ;W14=0xf485e8dc -> 0x42008873, W15=0x4d7a9f97
0x1003e8b40 0xc0b40 add w14, w15, w14 ;W14=0xf485e8dc -> 0x42008873, W15=0x4d7a9f97
传播安全知识、拓宽行业人脉——看雪讲师团队等你加入!