现在字节系已经不验证这个该签名了,不多可以作为学习方式来研究学习下深入学习研究下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. 进击的Waymo,掘进无人驾驶深水区
  2. java hashmap非线程安全
  3. vue-lazyload 的vue 懒加载的使用
  4. sql sum条件求和_Hive中使用over()实现累积求和和滑动求和
  5. copyof java_死磕 java集合之CopyOnWriteArrayList源码分析
  6. c语言 宏教程 pdf,C语言之详解_ifdef等宏.pdf
  7. 那些方式可以合并php数组,php中数组合并的几种方法
  8. html中相同结构标签怎么区分,html标签结构总结
  9. IoC(控制反转)的主要组件和注入的两种方式
  10. python程序化设计正则表达式语法_基于python的正则表达式学习笔记
  11. html实现“加入收藏”代码
  12. 高速信号的预加重(Pre-emphasis)和去加重(De-emphasis)
  13. uniapp引入高德地图sdk经纬度解析诚地址名称
  14. 深入理解java8,深入理解Java8新特性与源码剖析
  15. 卷毛机器人抢大龙_LOL:机器人史诗级加强,如果他还没退役,SKT都不敢放机器人...
  16. win10 计算机菜单,win10系统计算机界面菜单栏不见了的还原方案
  17. 《WEB开发-阿里云建站》第1章 建站前的准备
  18. 地址转经纬度(百度)function
  19. python有几种循环语句_[14] Python循环语句(一)
  20. python多线程处理数据并获得子线程返回值

热门文章

  1. 中职计算机vb听课记录,中职学校《VB语言程序设计》教学浅析
  2. appium java 测试用例_Appium+Eclipse编写测试用例
  3. 获取当前季度、前N季度、判断时间是否超出该季度
  4. mac软件:微信双开,一步到位
  5. 福建省高职单招计算机上机试题,福建省高职单招计算机类试卷二
  6. 西邮linux兴趣小组2014纳新免试题(四)
  7. 苹果11怎么把计算机添加到快捷键,苹果11apple pay快捷键使用方法
  8. 骨传导耳机好不好,骨传导耳机的原理是什么?
  9. ESP32开发——SPI驱动水墨屏
  10. 关于DNS、HTTP劫持的一些事