文章总结: 本文分析了libtiny.so中的x-mini-mua算法,通过逆向工程发现其结构由Base64编码和压缩数据两部分组成。使用IDA和findcrypt插件定位算法核心,识别出三个关键函数,其中unk_65D240使用Curve25519密钥交换算法生成动态key与iv。文章提供了hook和unidbg分析方法,指出tiny的混淆主要是直接跳转,与shield的间接跳转不同。
综合评分: 80
文章分类: 二进制安全,漏洞分析,移动安全,代码审计,安全工具
x-mini-mua算法分析
原创
K
Frida and So
2025年10月25日 18:34
上海
声明
本文仅供学习交流,如有侵权请联系删除!
文件
版本:8.77
libtiny.so中mini三兄弟之一的x-mini-mua。
前情
首先就是让它在unidbg中跑起来,多次初始化,反射调用,系统调用等,后续单独出一篇,以出值为目的补环境的话会简单很多,如下图,最后返回了mini三兄弟。
分析
x-mini-mua算法很简单,剩下两个参数后续再说,对mua的结构进行分析,以.分割为了两部分,前半部分很明显是一个Base64编码后的结果,可直接解码,而后半段似乎并不是那么简单编码。
eyJhIjoiRUNGQ*****.gm5xmnA4YbIP6q4iiSjjAe_Im6ErbWYoPgKhDm7kKf2Gy3FyhOJD0******
打开ida使用findcrypt插件,找到Base64编码的位置,位于sub_131F60,交叉引用找一下调用位置,不用去hook查看参数,因为这里是x-mini-s1的一个点,从sub_131f60调用处往上看,会发现一个sub_4DFFBC函数,这个函数就是机遇。
如果你想问为什么这么跟,逆向本来就是这样,我第一次没补出环境的时候,硬看然后就跟出来了,非常的神奇。
进入这个函数后,会看到很长的运算操作,看不懂不要紧,丢给GPT,话都这样说了,自实现的一个memcpy函数,发现这个点之后,直接对它进行hook。
hook代码自己去写,hook的时机在加载进入app后,启动Gadget,然后主动调用生成mini参数,日志中的数据有很多都是指纹x1,x13等,然后有一些加密数据,字段,其中这个点78 9c开头,很明显是zip的特征,直接把数据拿过来解压缩一下,把收集到的指纹进行了压缩。
仔细观察打印的日志就会发现,这段数据后续被用到了,当出现这段压缩数据的时候就打印堆栈,跳转到0x4135f4,直接就是ollvm上套一层BR混淆,要么手动修,要么跑firda或unidbg,我是用的unidbg,这个0x4135f4就是压缩后进入的函数内部,还是交叉引用看一下哪里调用了这个函数。
出去后就能看到这三个函数了,这三个函数就是x-mini-mua的核心算法了,我懒得演示去hook入参返回值了,这三个函数的作用如注释而且没有魔改,关键的点在于unk_65D240,前32字节存放的key与iv是动态的,跟踪这32字节就不是单独靠frida能解决的了,只用trace硬看另说。
unk_65D240
这里简单说一下,它采用的是密钥交换算法Curve25519生成的,第一张图是先走的函数0x4D5CF0,最后走的函数是0x4DE63C,至于私钥跟随机数位置,目前还是找不到。
小结
x-mini-mua整体算法还是挺简单的,至于指纹只能单独跟了,混淆跟shield的不同点在于tiny是大部分BR直接跳,而shield是间接跳,tiny是可以通过去跑一遍trace获取寄存器值来改成B跳转,shield不行。
//tiny
A->B
C->D
//shield
A->B(计算具体跳转值)->C
D->B(计算具体跳转值)->F
免责声明:
本文所载程序、技术方法仅面向合法合规的安全研究与教学场景,旨在提升网络安全防护能力,具有明确的技术研究属性。
任何单位或个人未经授权,将本文内容用于攻击、破坏等非法用途的,由此引发的全部法律责任、民事赔偿及连带责任,均由行为人独立承担,本站不承担任何连带责任。
本站内容均为技术交流与知识分享目的发布,若存在版权侵权或其他异议,请通过邮件联系处理,具体联系方式可点击页面上方的联系我。
本文转载自:Frida and So K《x-mini-mua算法分析》