某app最新版 vmp算法分析一
本系列预计3篇
某app使用了一种X开头的HTTP 签名。该应用程序对服务器的请求在其标头中有6个x签名。该应用程序通常使用此签名来确保数据的安全性和完整性。代号花露水.
6个x签名都来自古希腊神话中的某个神.
分别是蛇发女妖(G),柯罗诺斯(K,时间之神),拉顿(L),阿尔戈斯(A),赫利俄斯(H),美杜莎(M),据内部消息,L和A即将退役,新的神叫索忒耳(S).本故事纯属虚构,如有雷同,纯属巧合
目前我已经将6个全部还原,除掉退役的L和A,K是时间之神,就剩下G和H和M
待S稳定下来我会第一时间还原出来.
6个参数以最难的M为100分标准,A=30分,H=L=10分,G=5分,G不在vmp,所以给5分,剩下的4个都在vmp里(仅个人观点).某app最早2020年由GK提供签名防护,后来升级加了A和L,22年末加了H和M,H用来替代L,M用来替代A,当然中间还有些其他的比如T,后来也是退役了.本篇是关于G的还原,后续一篇是H,一篇M,从易到难,当然我不会透露算法细节,只是从这几个签名中挑一些有意思的算法或者对抗分享出来,所以各位看官看看热闹就行.如果你可以抗的住对方的律师函或者帮我打官司,我也可以写的很详细.
因为8月份我在看雪发表了一篇某大厂的vmp算法,写了大概有两天14000多字,挺适合vmp算法入门分析的,可惜两个小时就下架了.好不容易的一篇精华帖啊!
2020年左右各大厂商的签名算法远远没有如今的复杂,但是近年来由于灰黑产业的泛滥,app不得不不断升级,造成了今天这个ollvm,vmp盛行的局面,普通的ollvm就可以难倒90%的逆向人员,而arm vmp要比ollvm难上个好几倍,因为ollvm只是阻扰静态分析,动态调试还可行,vmp直接把动态调试的指令翻了几个数量级,所以你会发现现在一个大厂的算法执行一次要跑2000万行汇编,vmp就占1900万左右(这个app估计的),如果是ollvm的,最多就几十万行,参考某手,某书的签名分析.但作为早期2020年的时候,G签名还是很强的.不过是双方技术都升级了
回归本篇的重点 G的还原
首先需要确定是在哪个位置生成的,早期的几乎都是搜索大法,现在都不行了,app体积大了,搜的很多结果,而且很多连key都是在so的,压根搜不到,这6个可以通过hook newStringutf找到,然后跟踪堆栈找到对应so,接着找对应的java中的注册方法.这里有个注意事项,如果选择降级抓包,app走ms开头的那个类在java调native的函数,如果走quic,app会在ssc开头的那个so里跳转到met开头的(也就是目标so)的函数完成加密,ssc是早期的改so实现抓包的so,后来有了降级开关.
定位到so后打开一看导出函数
hey man,are you sss bbb? 怎么还玩这种
然后就是so有多层花指令,那种跳转完的地方还有花,就是一个函数会被多次插花,有些复杂,不过到vmp的地方去不去都差不多,因为压根没法看,看不到有用代码的,如果能还原虚拟机逻辑的话另说.
不要小看这个看似没有很多线缠在一起的,如果是vmp的话会比那种ollvm难上几个数量级,比如下面的boss app,只是一个ollvm
事实上这个app就是vmp,这个函数内部跑了1900多万行汇编,基本上就是在做异或,与,或,加,取值,赋值的重复操作.这个vmp的我们后面两篇介绍,如果还能发的话,但愿吧.
由于没有vmp,很容易就可以借助ida看到伪代码
首先是初始化了一个256的表,这个表由0-255生成的,这个很像是rc4的特征,然后v9应该是秘钥,不过rc4很简单,直接对着c代码扣下来就行了,然后就是一些很简单的操作了,没有vmp,直接看代码那种,不过有一个key是不同版本变化着的,这个也很好办,直接拿抓包的结果对比就能猜出秘钥.
G就说这么多吧,恶心的还是M,里面的hash算法不同版本支持一键算法变异,16套,有些是改常量,一套hash大概有好几个常量不固定,有些是直接逻辑有小变化,不过匹配特征还是可以做到短时间还原全部算法,如果是重新来一遍的话估计得让你坐在板凳上几个星期.好像没说什么,你可以理解为G比较简单没什么好说的,看个热闹就行了,国内环境就这样,参考看雪这篇[讨论]现在安全文章都这么隐晦了吗,各种某某某,XXX-茶余饭后-看雪-安全社区|安全招聘|kanxue.com
没办法写详细咯,下一篇是H算法的还原,不过我不会透露算法细节,可以分享出一些好的逆向思路或者app防护的好的地方挑一些出来讲讲.