吾爱破解 - 52pojie.cn

 找回密码
 注册[Register]

QQ登录

只需一步,快速开始

查看: 4323|回复: 22
收起左侧

[Android 原创] 某视频app已知签名算法获取盐值(salt)

[复制链接]
lz52zr 发表于 2021-7-22 21:27
本帖最后由 lz52zr 于 2021-7-23 12:14 编辑

因为此次破解没有什么难度,所以重点分享了分析前的思路

某视频app由于历史悠久,早期Android开发不规范,导致所有签名都在Java层明文计算,后来提高了安全性,签名算法转移到了native层,但盐值依然以明文的形式储存,再之后以AES加密储存,但密钥和密文放在了一起,和明文几乎没有区别,最后终于分段加密存储,并且更新了盐值,给静态分析带了了很大麻烦。不过旧的盐值并没有被弃用,新盐值仅用在注册登录等安全性要求较高的场景,所以要模拟登录就要解出新盐值

所需工具
IDA -静态分析+动态调试
虚拟机 -提供root运行环境

最开始的思路和之前一样,通过静态分析找出盐值存储位置,解密后导出,但新存储方式比较复杂,分析了一会儿觉得不值等继续深挖,毕竟只是为了获取一个盐值,没必要把人家底裤挖出来,况且下一次更新换个算法,之前努力全白费,所以换成了动态分析,简单快捷。

一 静态分析
动态分析的思路就比较简单了,因为已知加密算法,所以只要找到函数入口,等数据自己过来就行,但是第一步就遇到了困难,使用findcrypt插件无法找出位置
image001.png

好在用来计算签名的函数被单独放在一个.os里,体积仅40kb,里边包含的函数也仅有100多个。所以拿到.so后逐个函数查看,很快就找到了加密函数的位置
image003.png

其实这个还是挺好看出来的
比如这是一个SHA256摘要算法
2021-07-22_21-00-54.png
基本上一堆固定参数来回位运算就是了

但这个函数是加密的循环体,如果数据太长需要调用很多次,有代码注入还好说,但我不太会用ida,不确定是否可以注入代码,所以选择了此函数的上一级
image005.png
在循环体外下断点,那就开始调试吧。

二 动态调试
首先上传android_server,运行并做好端口映射
image007.png
image009.png

打开app,ida内选择附加进程
image011.png
image013.png
image015.png

找到入口后直接f9即可
image017.png

ctrl+s选择需要调试的.so
image019.png

按g跳转到函数入口(就是上面分析的sub_2340),下断点
image021.png

app内操作登录一下,成功进入加密函数,并且跟踪到寄存器R1为明文
image023.png

但这里出现了个问题,盐值并不是直接附加在明文尾部
image025.png

不过问题不大,因为加密是分块计算的,所以允许分段输入
[JavaScript] 纯文本查看 复制代码
let sign = crypto.createHash(algorithm)
sign.update(data1)
sign.update(data2)
sign.update(data3)
sign.update(data4)
sign.update(data5)
……
let hash = sign.digest()


最后肯定会有盐值明文过来,直接f9,果然传入了8字节(byte)明文
image027.png

继续f9
image029.png

把得到的四组8字节组合得到32字节明文,就是所需的盐值了
然后验证一下
image031.png

可以看到sign已经被服务器接受

最后
因为不知道分析结果是否属于成品,所以全程打码并且隐藏了一部分信息,新人第一帖,望见谅

免费评分

参与人数 2威望 +1 吾爱币 +21 热心值 +1 收起 理由
qtfreet00 + 1 + 20 + 1 感谢发布原创作品,吾爱破解论坛因你更精彩!
wwwnwx + 1 用心讨论,共获提升!

查看全部评分

发帖前要善用论坛搜索功能,那里可能会有你要找的答案或者已经有人发布过相同内容了,请勿重复发帖。

 楼主| lz52zr 发表于 2021-7-24 09:18
SysEntry 发表于 2021-7-23 15:11
没混淆流程还是很清晰的.盲猜加密函数有点强.

确实流程比较简单,特别是此app还单独把签名部分拿了出来。实际上这个.so里就包含了两个加密过程,一个是计算api sign,还有一个是计算apk签名(修改apk重新签名会闪退),因为计算apk签名部分用了特征比较明显的x.509(包含BEGIN CERTIFICATE),所以很快就判断出api sign是哪个了
 楼主| lz52zr 发表于 2021-7-24 20:20
SysEntry 发表于 2021-7-24 19:05
FindCrypto 竟然没提示出来。。

因为把四个初始值
A=0x01234567
B=0x89ABCDEF
C=0xFEDCBA98
D=0x76543210
都拆开了, 比如
A=0x01234566+1
这样FindCrypto就没办法了
Hmily 发表于 2021-7-23 10:59
 楼主| lz52zr 发表于 2021-7-23 11:06
Hmily 发表于 2021-7-23 10:59
图没上传成功?

是的,编辑的时候刷新了一下,想再编辑就审核了,现在电脑没在身边,回去把图补上,不好意思

点评

嗯,回头补下。  详情 回复 发表于 2021-7-23 11:12
Hmily 发表于 2021-7-23 11:12
lz52zr 发表于 2021-7-23 11:06
是的,编辑的时候刷新了一下,想再编辑就审核了,现在电脑没在身边,回去把图补上,不好意思

嗯,回头补下。
ocno 发表于 2021-7-23 11:18
新人赞一个,等待上图。
qweqwezaq 发表于 2021-7-23 14:21
学到了,等图
 楼主| lz52zr 发表于 2021-7-23 14:24

我看有图啊,难道还不行吗
qweqwezaq 发表于 2021-7-23 14:29
lz52zr 发表于 2021-7-23 14:24
我看有图啊,难道还不行吗

换电脑看,有了
qq597865619 发表于 2021-7-23 15:00
学习一下,谢谢分享
SysEntry 发表于 2021-7-23 15:11
没混淆流程还是很清晰的.盲猜加密函数有点强.
您需要登录后才可以回帖 登录 | 注册[Register]

本版积分规则

返回列表

RSS订阅|小黑屋|处罚记录|联系我们|吾爱破解 - LCG - LSG ( 京ICP备16042023号 | 京公网安备 11010502030087号 )

GMT+8, 2024-11-24 15:18

Powered by Discuz!

Copyright © 2001-2020, Tencent Cloud.

快速回复 返回顶部 返回列表