当前位置: 首页 > news >正文

某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防护的好的地方挑一些出来讲讲.


http://www.mrgr.cn/news/74926.html

相关文章:

  • 怎么只提取视频中的声音?从视频中提取纯音频技巧
  • 游戏引擎学习第19天
  • 掌握 Spring 事务管理:深入理解 @Transactional 注解
  • 「Mac玩转仓颉内测版21」基础篇1 - 仓颉程序的基本组成
  • 云原生之k8s服务管理
  • Linux上安装单机版ElasticSearch6.8.1
  • 【紧急】2024年github全面启用2FA安全认证才能继续使用,国内GitHub 2FA如何启用该验证操作
  • 【阅读记录-章节1】Build a Large Language Model (From Scratch)
  • 【PHP】ThinkPHP基础
  • 19名专家被通报批评!国家科技重大专项评审违规!
  • 超五千亿居民存款进入资本市场,股市的好日子回来了?
  • python学习-序列操作符及常用方法
  • OpenAI官方发布:利用ChatGPT提升写作的12条指南
  • UAC2.0 speaker——24/32bit 支持
  • 4个开源免费的NVR系统:NVR管理平台EasyNVR具备哪些特点?
  • 【C++课程学习】:继承:默认成员函数
  • 一级注册消防工程师《消防安全技术实务》真题及详解
  • 1.0版-结构化(经典)软件开发方法: 需求分析阶段+设计阶段
  • 自闭症机构解析:去机构是否是最好的选择?
  • openwebui二改界面环境搭建
  • 通过MongoDB Atlas 实现语义搜索与 RAG——迈向AI的搜索机制
  • RK3568笔记六十九: 事件回调处理之Libevent 简单使用
  • 就是这个样的粗爆,手搓一个计算器:加倍时间计算器
  • 不吹不黑,客观理性深入讨论国产编程语言
  • cmake 语法
  • Dolby TrueHD和Dolby Digital Plus (E-AC-3)编码介绍