某咖啡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 有更多的一些思路交流,如果对老师们有所帮助,不甚欣喜。
z6810753 发表于 2021-3-12 21:09
github上啥工具?
我用的是这个工具:https://github.com/rscloura/Doldrums
是在darter的issue里面看到的,darter只支持旧版的,这个工具支持新版 昨天搞的一个flutter写的apk,sign通过长度判断是sha256的,然后flutter编译出来一个libapp.so,在github上找了个工具导出了so里面的函数名称和地址,然后hooksha256的加密方法最终找到了计算sign的方法 qq204259 发表于 2021-7-29 06:45
能发一下工具吗 大佬
https://github.com/hdw09/darter 学习到了 感谢分享,前来支持~ 谢谢楼主分享!!! 谢谢分享,学习了 只能模板一下
做不了 Light紫星 发表于 2021-3-11 15:31
昨天搞的一个flutter写的apk,sign通过长度判断是sha256的,然后flutter编译出来一个libapp.so,在github上 ...
老师优秀{:1_921:} 学习一下,感谢分享 大佬牛逼