现在字节系已经不验证这个该签名了,不多可以作为学习方式来研究学习下深入学习研究下jsvmp的原理以及工作流程,为后续打好基础。

一、抓包接口分析

在该接口中携带了_signature加密参数;

第一步,全局搜索_signature:

 结果就两个,而且可以确定的是不是我们要找的地方。

二、跟值

既然通过全局搜索的方式无法确定该参数生成的地方,那么就只能通过xhr断点或则通过调用栈观察该参数的来源。

在接口的Initiator功能选项中可以看到该接口请求的调用栈,可以看到第一个“send”为javascript发起网络请求的位置,那么,我们就可以从这个位置开始一步步向上跟踪,直到出现签名位置。但是这个这个方法有个缺陷,在你刷新该页面的时候,它不可能只有这一个网络请求,所以推荐使用xhr断点,可以只对某一条请求进行过滤断点。

在这里使用了xhr断点后,就可以刷新页面去触发这个断点了。

可以看待,这个时候以及在这条url上断住了,那我们就需要查看下这条网络请求携带的参数中有哪些东西,是否有我们的signature存在,我们可以在控制台(console)中查看。通过观察后会发现参数this中携带了完整的url,其中就包括了_signature,那么我们可以通过google浏览器自带的Call Stack查看堆栈情况了。如图:

在堆栈中我们可以看到一个XMLHttoRequest.send方法,这里我们可以下一个疑问,为什么在一个网络请求内,会出现两个send呢,带着这个疑问我们来分析下栈前栈后。

通过分析后,我们会发现经过这个地方后,我们的堆栈中就出现了signature,但这明明是一个XMLHttpRequest,我们也没有发现疑似的网络请求。答案只有一个,该send方法被重构了。通过控制台查看一下这个方法:

果然,他重构了XMLHttpRequest.send方法,并将他指向了一个混淆过的vm中。

那么,这里就作为生成signature的"入口"了。

三、Jsvmp分析

通过特征可以发现,这是一个jsvmp,那么我们可以使用插桩大法来查看加密流的过程,从而更加细致的观察计算过程。

接下来重新刷新页面查看输入值arguments的变化:

可以看到,它将logout这个url传入到url中了,那么,可以确定的是,有“人”向调用入口传递了某种信息,所以,我们就需要开始观察它的计算过程了。

1、流程分析

在分析vmp前,我们需要了解下vmp是什么,以及它的执行流程原理等, 这里就不赘述了,大家有兴趣的可以去详细了解一波。下面是基于了解vmp的基础上对该代码进行分析,想学习的小伙伴们一定要先去了解下,不然听起来就像天书一样(我就是其中一位);

通过分析,我们可以得出_0x613229 = []在该代码中作为一个缓冲区的角色,计算的每一个步骤都会寄存在_0x613229中,那么,我们可以先通过插桩的方式来查看该变量中的数值变化:

结果如下:

 在密密麻麻的结果中,我们可以看到_signature和x-bogus出现了,那么我们可以得出以下结论

  • x-bogus以及_signature都是通过这个这个方法生成的
  • 找到入口十分重要
  • 必须通过插桩的方式观察流程计算

2、结果分析

在vmp中,是存在流程控制的,具体是通过解析字节码得出结果后进行逻辑索引。该代码中计算的位置在:

在这一点的基础上,我们开始观察分析签名的生成过程

 可以看到,_signature是由一段一段拼接起来的,那么,我们该怎么去确定这些字符串的由来?

3、逻辑跟踪

在第2点中介绍了逻辑索引,我们先将这些逻辑索引打印出来查看他们是什么样的。

vmp会通过判断这两个逻辑索引来控制不同的逻辑条件分支,我们可以通过这个索引进行条件断点来观察每个字符串的生成。

字节_signature完整算法分析以及实现!(混淆vm版本)相关推荐

  1. 深入理解JVM(三)—— HelloWorld字节码完整解析

    目录 1.字节码由来 2.hello代码字节码结构和使用javap -v指令查看字节码结构 2.1 hello代码字节码结构 2.2 javap -v指令查看字节码结构 3.字节码完整解析 3.1 魔 ...

  2. 带平滑功能的斜坡函数(多段曲线控温纯S型曲线SCL源代码+完整算法分析)

    S型曲线算法专栏之前也有详细介绍,之前的专栏大家可以参看这篇博客: 博途PLC1200/1500PLC S型速度曲线变频器控制应用(SCL完整源代码)_RXXW_Dor的博客-CSDN博客PLC运动控 ...

  3. Linux安装MySQL的完整步骤并有关MySQL8.0版本的问题方法

    目录 QUESTION:Linux安装MySQL的完整步骤? ANSWER: 一:使用wget 直接下载 二:安转软件源,将platform-and-version-specific-package- ...

  4. php版主动推送,织梦php主动推送完整实例(单篇推送版本)

    织梦php主动推送完整实例(单篇推送版本) 织梦无忧 2018-12-06 11:51 摘要: 打开article_add.php文件,查找如下代码 ------- if($artUrl==) { $ ...

  5. kali2020.3 vm版本内核是多少_Zircon Fuchsia 内核分析 启动(内核初始化)

    相关阅读: Zircon - Fuchsia 内核分析 - 启动(平台初始化) 简介 前面已经介绍了 Zircon 内核启动的汇编代码部分,主要是一些 CPU 的初始化. 现在 prime CPU 已 ...

  6. android 混淆debug版本,在Android Studio中的混淆debug與release

    一.有關混淆: 什么是代碼混淆 Java是一種跨平台的.解釋型語言,Java源代碼編譯成中間"字節碼"存儲於class文件中.由於跨平台的需要,Java字節碼中包含了很多源代碼信息 ...

  7. 【五子棋AI循序渐进】发布一个完整的有一定棋力的版本(含源码)

    本博文来自于:http://www.cnblogs.com/zcsor/archive/2012/12/25/2832820.html 经过这半年左右的学习和探索,现在对五子棋AI有了一定的认识,给大 ...

  8. python五子棋ai棋力最高_【五子棋AI循序渐进】发布一个完整的有一定棋力的版本(含源码)...

    本博文来自于:http://www.cnblogs.com/zcsor/archive/2012/12/25/2832820.html 经过这半年左右的学习和探索,现在对五子棋AI有了一定的认识,给大 ...

  9. TB6600原理图(最完整并量产过的版本!!)

    原文档地址:https://wenku.baidu.com/view/cca3bd2ae009581b6ad9eba0.html

最新文章

  1. Linux 下 SVN 添加多个文件的方法
  2. Visual Basic 永远29岁,Visual Basic 谢幕!
  3. 慢查询优化,我终于在生产踩到了这个坑!!
  4. 一和零(二维01背包)
  5. Android Activity Launch Mode 启动模式详解
  6. Javascript的面对对象的理解 【下】(prototype的使用)
  7. mysql noinstall_免安装版MySql安装与配置
  8. 文件 图片 上传 及少许正则校验
  9. ASP.NET MVC 5 学习教程:控制器传递数据给视图
  10. 深扒支点的梦起与破灭-千氪
  11. C#中的修饰符及其说明
  12. 使用preparedStatement执行sql语句 20210411094249744
  13. java康纳塔评测_JAVA性能、扩展对比
  14. UVA12657 Boxes in a Line【模拟】
  15. 什么是hibernate N+1查询
  16. Vim 编辑器底端 [noeol], [dos] 的含义
  17. pyQT指定窗口截图
  18. STC89C52是51单片机吗?
  19. java多线程和长连接,三方转换通信的实践(2)——数据库端服务程序
  20. Python数据分析中 DataFrame axis=0与axis=1的理解

热门文章

  1. 百度C++工程师的那些极限优化(并发篇)
  2. 汇编语言:简单的英文字母大小写转换
  3. 2020年全球网速排名
  4. 权限系统模型有哪些?
  5. 基于TensorFlow的CNN卷积网络模型花卉分类GUI版(2)
  6. 四级真题图表作文计算机,2017年12月英语四级作文框架:图表作文
  7. 推荐一个李建忠老师创办的网站 -- Boolan(关注经典技术书籍)
  8. 智能音箱再生变数:腾讯叮当智能屏杀入市场
  9. C++ Lambda表达式详解
  10. 怎么看xp计算机mac地址,xp查看mac地址_xp查看mac地址命令