首页
社区
课程
招聘
1
[原创]逆向百例之蜂窝参数分析
发表于: 2024-12-9 10:54 2704

[原创]逆向百例之蜂窝参数分析

2024-12-9 10:54
2704

特别声明:本文章中所有内容仅供学习交流,不可用于任何商业用途和非法用途,否则后果自负,如有侵权,请联系作者立即删除!由于本人水平有限,如有理解或者描述不准确的地方,还望各位大佬指教!!

图片

目录:

    一、前言

    二、抓包分析

    三、unidbg辅助分析

    四、zzzghostsigh分析

    五、oauth_signature分析

    六、结言

图片


图片

一、前言

    今天我们要分析的app是马蜂窝。样本下载

1
https://http://www.wandoujia.com/apps/492643/history_v1039

二、抓包分析

第一步抓包分析。通过抓包发现oauth_signature和zzzghostsigh是加密的。而这个zzzghostsigh的长度是40位的,猜测应该是SHA1加密。oauth_signature_method为HMAC-SHA1,由此可以初步判断oauth_signature的加密方式为HMAC-SHA1。

图片

没有壳,直接jadx打开apk,搜索zzzghostsigh,java层不多说,里面有涉及到java的反射,最终找到下图这里

图片

其中xPreAuthencode是生成zzzghostsigh的方法,xAuthencode是生成oauth_signature的方法。接下来,我们打开ida进入到so。
在导出函数里搜索java,发现没搜到,函数是动态加载的。

图片


三、unidbg辅助分析

1
package com.mafengwo;

运行,我们要分析的两个函数的地址也打印出来了

图片


四、zzzghostsigh分析

先静态分析一下伪代码,看看能不能获取有用的信息

图片

没有找到什么有用的信息,sub_3C9C4还是签名校验函数,后面是一大串的运算然后给v36赋值。那我们就换个路子,用unidbg把汇编执行流trace下来

1
package com.mafengwo;

通过模拟执行出来的结果为:result=2f45b7dd81d48343c79ddbc14cddb756d7353190
去CyberChef上看看是不是标准的SHA1加密,发现对不上;没关系,继续往下分析

图片

在trace里搜索一下前八位0x2f45b7dd,发现这些正是加密结果,我们跳转到0x3f360

图片

发现大量的运算,我们hook一下这个sub_3E1D0函数的入参和出参

图片

这参数1不就是我们的入参吗,记住mx0的内存地址,继续查看结果。使用blr下个临时断点

图片

这不就是结果的小端序吗。我们来到sub_3E1D0函数初始化赋值的地方,可以看到对参数1进行取值

图片

相等于

1
v18 = 0x67452301

仔细一看,这好像是SHA1的魔值,下面这个是标准的魔值

1
A = 0x67452301

通过对比,发现魔改了第4和5,我们在标准的SHA1算法修改一下魔值,对比一下生成的结果

1
# sha1-v1

发现也对不上,说明该样本对SHA1算法进行了魔改,并不是只修改了IV。SHA1和MD5采用了相同的结构,每512比特分组需要一轮运算,我们的输入长度不超过一个分组的长度,所以只用考虑一轮运算。一轮运算是80步,每隔20步是一种模式。
我们打印出每一步正常情况下应该得到的结果,然后对比tracecode
对比之前我们先看看伪代码,伪代码里面出现了比较多的数字,我们把它摘抄出来

图片

1
hex(1518500249) = 0x5a827999

可以看到这些数字是算法源码里面的k值,我们在tracecode里搜索0x5a827999

图片

图片

这是1-3轮的运算结果,跟正常得到的是一样的,我们继续往下看

图片

发现在第16轮之后就找不到了,我们回到伪代码中查看下一个k值是什么

图片

下一个是0x6ed9eba1

图片

我们搜索一下看看出现了多少次

图片

出现了4次,也就是说第17-20轮的k值是0x6ed9eba1,继续往下看

图片

图片

按照这个思路第21-40轮的k值是0x8f1bbcdc

图片

图片

第41-60轮的k值又用回0x5a827999

图片

图片

最后20轮的k值跟源码一样是0xca62c1d6
样本的80轮运算为

1
for t in range(0, 80):

修改后的加密结果

1
69276ad7 3eea0449 9de68070 ec5535d6 3fa7c266  (修改80轮后得到的结果)

可以发现中间两段对不上,我们再次回到伪代码里

图片

在函数的末尾我们发现a1的顺序是4-2-3-1-0。我们在最后一次轮换中也按这个顺序,也就是c和d调换顺序

1
if t == 79:

现在完全对的上了。


五、oauth_signature分析

通过抓包oauth_signature_method为HMAC-SHA1,由此可以初步判断oauth_signature的加密方式为HMAC-SHA1。先跳转到0x3998c看看伪代码

图片

看起来sub_3B168就是对明文进行加密,点进去看看,里面有很多操作看不懂,看不懂没关系,我们hook一下这个函数的入参和出参

1
public void xAuthencode() {

这个函数被调用了很多次,我们查看它的调用次数

1
public void hookDebugger() {

图片

一共调用了5次,并且在第3次之后明文才被取出来

图片

图片

图片

图片

这里,先说一下标准的HMAC-X的加密流程

  1. 将密钥用 0x00 填充达到分组长度

  2. 将第一步填充后的密钥和 0x36 做异或运算

  3. 第二步得到的密钥后拼接明文

  4. 对第三步得到的数据做对应加密

  5. 将第一步填充后的密钥和 0x5c 做异或运算

  6. 将第四步所得结果附加到第五步所得数据的末尾

  7. 对第六步所得数据做加密,得到最终结果

上面的截图跟加密流程对比,基本上可以确定是HMAC-SHA1加密

图片

跟unidbg模拟执行出来是对的上的,到此这个样本的两个参数已经分析出来了。


六、结言

算是第二篇app的文章了,这里的源码已经放在了星球,欢迎大家加我微信跟我一起讨论,同时星球会丢更多的一些辅助工具。

图片

图片描述图片既然已经看到这里了,不妨留个关注吧!!


[培训]内核驱动高级班,冲击BAT一流互联网大厂工作,每周日13:00-18:00直播授课

收藏
免费 1
支持
分享
赞赏记录
参与人
雪币
留言
时间
kagayaki
你的帖子非常有用,感谢分享!
2024-12-11 00:35
最新回复 (2)
雪    币: 20
能力值: ( LV1,RANK:0 )
在线值:
发帖
回帖
粉丝
2
关注公众号:关于代码那些事,获取更多资源
2024-12-9 16:40
0
雪    币: 3143
活跃值: (5897)
能力值: ( LV3,RANK:20 )
在线值:
发帖
回帖
粉丝
3
2024-12-11 00:34
0
游客
登录 | 注册 方可回帖
返回

账号登录
验证码登录

忘记密码?
没有账号?立即免费注册