darbra 发表于 2021-3-11 13:24

某咖啡app网络请求签名算法分析与解密

1 接口请求分析
抓包:

加密参数:sign

2 加密参数分析
脱壳, jadx反编译后,进行全局搜索“sign”,并进行相应的hook尝试均无功而返。
接着全局搜索“System.loadLibrary”,定位到com/*******/safeboxlib/CryptoHelper.java。




对md5_crypt进行hook分析,可以确定加密位置就是这个native函数。

从hook的结果中,我们发现,参数1是请求的query的key与value(还有cookie里的uid和其value)用“=”号拼接,并用“;”组合而成。

接着我们hook 之前截图中的StubApp.getString2("17534") 得到so的名称为crypt**D。

旋即打开这个so,一眼就瞄准了export中的某md5,点进去探索一番。


可以看到graph略微花哨,用了混淆,但影响不大,我们只要抓住关键点就行。

我们在代码中锁定了doMD5sign,进行相应的hook,和结果一致。

进入doMD5sign探索一番,看到了两个关键函数:md5和bytesToInt。
我们发现,md5函数的入参数,在原有的query基础上添加了salt。

我们进行相应的验证,和上图结果一致。


我们接着发现,bytesToInt的某输出是最终结果的一部分。

通过此bytesToInt函数名字的顾名思义,和流程分析,我们可以确认,在上一部md5的digest结果基础上,分成四部分,各四个字节,并将每一个部分进行“int.from_bytes”,如果小于零则✖️-1.

最终算法如下图所示:

与结果一致,大功告成了啊。

在 本人github.com/darbra/sign 有更多的一些思路交流,如果对老师们有所帮助,不甚欣喜。

Light紫星 发表于 2021-3-13 09:24

z6810753 发表于 2021-3-12 21:09
github上啥工具?

我用的是这个工具:https://github.com/rscloura/Doldrums
是在darter的issue里面看到的,darter只支持旧版的,这个工具支持新版

Light紫星 发表于 2021-3-11 15:31

昨天搞的一个flutter写的apk,sign通过长度判断是sha256的,然后flutter编译出来一个libapp.so,在github上找了个工具导出了so里面的函数名称和地址,然后hooksha256的加密方法最终找到了计算sign的方法

Light紫星 发表于 2021-7-29 09:32

qq204259 发表于 2021-7-29 06:45
能发一下工具吗 大佬

https://github.com/hdw09/darter

李现在哪 发表于 2021-3-11 13:30

学习到了

Airey 发表于 2021-3-11 13:41

感谢分享,前来支持~

温故而知新 发表于 2021-3-11 13:56

谢谢楼主分享!!!

bao2330 发表于 2021-3-11 14:04

谢谢分享,学习了

ares313 发表于 2021-3-11 14:11

只能模板一下
做不了

darbra 发表于 2021-3-11 15:36

Light紫星 发表于 2021-3-11 15:31
昨天搞的一个flutter写的apk,sign通过长度判断是sha256的,然后flutter编译出来一个libapp.so,在github上 ...

老师优秀{:1_921:}

影子记忆 发表于 2021-3-11 16:06

学习一下,感谢分享

masker_k 发表于 2021-3-11 16:27

大佬牛逼
页: [1] 2 3 4 5
查看完整版本: 某咖啡app网络请求签名算法分析与解密