某讯滑块动态明文数组构造

2024-03-08 10:36

本文主要是介绍某讯滑块动态明文数组构造,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

声明:

        本文章中所有内容仅供学习交流使用,不用于其他任何目的,严禁用于商业用途和非法用途,否则由此产生的一切后果均与作者无关!若有侵权,请添加(wx:wyqlxl99)联系删除

前言:

        这段时间摆烂了、有点不知道自己该干嘛了 陷入了迷茫,然后听群友问起某讯滑块的动态明文数组顺序怎么搞?动态key要怎么获取?一开始我也听过这个滑块但是好像补环境比较方便一点,抱着探索的心态开启下面的逆向旅程.

        通过接口的堆栈直接定位到加密的位置,然后往里面跟可以看到window.TDC.getData(!0)就是生成collect参数的调用方法

图片

图片

        再往里面跟就可以跟到熟悉的tdc.js文件,这里面是一个jsvmp,既然是vmp我们先找一下主入口、堆栈、操作这些都是怎么做的

图片

            单步往下跟几步就会跳到这个地方,可以看到这个R就相当于ip即指向下一个要取的字节码,w则是存贮字节码的数组,G可以看到是存放操作函数的数组,那这一部分的操作应该是根据R取w中的字节码,然后从G中到字节码所对应的函数执行,如果存在返回值则会跳出这个for循环 否则将一直执行这段操作。

图片

图片

        这里我们只分析动态明文数组如何构造,加密部分就不多说了,我们找到+操作的部分打上日志断点h[h.length - 2], '+' ,h.at(-1) 注意!断点里面不能用h.pop()因为日志里面的代码是执行了如果你跟网页上一样在日志中使用了pop则会打乱vmp堆栈的执行顺序导致报错!

图片

滑动滑块等日志输出完毕,我们可以在控制台看到一共四个部分组成其中第一个部分属于环境数组、第二部分则是轨迹、第三部分也是环境数组里、第四部分则是setTdcData方法设置进去的

图片

图片

图片

图片

        其中第一部分和第三部分的环境顺序是会根据不同的字节码去改变的、因为这个文件是动态的所以每次解析的字节码都是不同的所以每次生成的环境数组顺序是动态的,我们在下面这个位置插桩'push',H[0][H[1]],H可以看到,我们要的环境值都来自于一个37数组,看操作应该是一次取出37数组里的对象执行get方法获取到响应的环境值。

图片

图片

        对于37数组以及刚才的四部分,确实补环境比较方便,如果我们要搞算法的话需要处理几种情况:

        第一:我们需要拿到37数组每个闭包方法的起始ip,这样的话我们就可以根据起始ip写一个vmp或者利用他本身的vmp执行根据执行里面操作的特征来判断当前这个方法是属于环境检测的哪一条

        第二:我们需要找到他切割的点,就是第一部分和第三部分中间会被切开那这个切开是按什么去切的?

        第三:动态的key数组我们要怎么获取?

图片

        一步一步来首先我们要先获取到37数组,那么怎么拿这个37数组呢?我们划完执行这个方法单步跟进去,控制台输出h查看堆栈,可以看到在走整个加密之前37数组就已经生成了,那说明这个37数组大概率是在vmp初始化的时候已经生成!

图片

图片

        跟栈的过程就不说了直接控制台搜u.appendChild(d)下个断点然后重新触发滑块之后点script断点一般点1-2下就回到tdc.js文件开始加载的地方,这个时候就可以插桩分析找到37数组的位置

图片

图片

        其实可以拿到37数组的位置有很多,我找了下面这个位置用来拿我的37数组,当然这是在浏览器上,浏览器上当然可以拿到37数组我们要做的是如果在本地拿到。

图片

        我们先把整个文件拿下来放本地,然后在我们找到的位置写好判断并且设定一个全局变量用来把37数组给取出来,在初始化完vmp之后打印一下arr37.

图片

图片

        直接执行发现还是空数组?难道我们写的判断错了没有取到37数组?刚才我们说是浏览器上取到的,本地要取的话是不是会缺了一些环境呢?

        那我们怎么知道少了一些啥?我们要的是执行拿到37数组就行就是要保证初始化vmp完整运行,最起码在我取到37数组之前不要报错!所以我们在catch的部分打印一下因为啥报错了

图片

        然后补了十几行我们发现37数组就已经有值了.

图片

            我们依次执行可以看到有返回值,但是有些是空有些是0,这个我怎么判断当前这个方法是取了哪一块环境呢?

图片

        还记得我上面是如何获取到环境数组部分的值的么?对就是一样插桩然后用网页的跟本地的进行对比,一一对应我们就可以知道这部分实际的值是什么然后推出大致是取得哪部分的值。

图片

        但是单凭这一点还不能够完全确定,所以我们要在vmp里面动手脚,我们找到这个部分下面这部分是将字节码转换成字符串的操作我们写一段输出。我们找第五个执行可以看到我们的返回值是[undefined]但是实际值是720,我们可以看到我们刚才日志输出的位置打印出来screen,height

图片

图片

        那我们是不是可以在他输出height这个特征的时候写一个判断然后抛出异常,走异常处理再把异常信息返回出来.

图片

图片

        再次执行的时候可以看到返回的信息就变成我们抛出错误的信息了,这样我们就可以判断当前这个索引所对应的是哪一块的信息,再写一些判断就可以完美的还原环境数组了,建议有一些简单的环境可以直接补上对于dom监测点一些很恶心的操作就不管了

图片

        后续我差不多补了80行左右不涉及子节点的添加删除,一些乱七八糟的dom操作,成功获取到了动态key已经相关的动态环境,关于动态key可以根据K[K.length - 2] = K[K.length - 2] + K.pop()部分观察规律写出相对应的判断代码将其存下来

图片

图片

        仔细观察你可以发现有这一段字符串,这一段其实就是我所说的第二部分轨迹加密的加密值,这就是为什么我没有调用window.TDC.getData(!0)也可以拿到动态key的原因,而且这个部分就是分割动态环境数组的分割点(一开始我想着是不是根据某个值处理判断),那一切就变得很简单了,我的处理方式是讲这段索引的所对应的值改成动态key数组值,后面根据这个动态key数组分割,前面的部分为第一部分,动态key数组为第二部分,分割后的部分为第三部分,最后setTdcData的部分为第四部分。

图片

        运用到实际代码中,嗖的一下errorCode:0 成功啦!后续能不能用就没有继续测试了

图片

有兴趣的可以加入我的星球后续会持续分享和更新!

图片

这篇关于某讯滑块动态明文数组构造的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/786826

相关文章

Java中的数组与集合基本用法详解

《Java中的数组与集合基本用法详解》本文介绍了Java数组和集合框架的基础知识,数组部分涵盖了一维、二维及多维数组的声明、初始化、访问与遍历方法,以及Arrays类的常用操作,对Java数组与集合相... 目录一、Java数组基础1.1 数组结构概述1.2 一维数组1.2.1 声明与初始化1.2.2 访问

一文详解SpringBoot中控制器的动态注册与卸载

《一文详解SpringBoot中控制器的动态注册与卸载》在项目开发中,通过动态注册和卸载控制器功能,可以根据业务场景和项目需要实现功能的动态增加、删除,提高系统的灵活性和可扩展性,下面我们就来看看Sp... 目录项目结构1. 创建 Spring Boot 启动类2. 创建一个测试控制器3. 创建动态控制器注

MySQL查询JSON数组字段包含特定字符串的方法

《MySQL查询JSON数组字段包含特定字符串的方法》在MySQL数据库中,当某个字段存储的是JSON数组,需要查询数组中包含特定字符串的记录时传统的LIKE语句无法直接使用,下面小编就为大家介绍两种... 目录问题背景解决方案对比1. 精确匹配方案(推荐)2. 模糊匹配方案参数化查询示例使用场景建议性能优

关于集合与数组转换实现方法

《关于集合与数组转换实现方法》:本文主要介绍关于集合与数组转换实现方法,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录1、Arrays.asList()1.1、方法作用1.2、内部实现1.3、修改元素的影响1.4、注意事项2、list.toArray()2.1、方

springboot如何通过http动态操作xxl-job任务

《springboot如何通过http动态操作xxl-job任务》:本文主要介绍springboot如何通过http动态操作xxl-job任务的问题,具有很好的参考价值,希望对大家有所帮助,如有错... 目录springboot通过http动态操作xxl-job任务一、maven依赖二、配置文件三、xxl-

MySQL JSON 查询中的对象与数组技巧及查询示例

《MySQLJSON查询中的对象与数组技巧及查询示例》MySQL中JSON对象和JSON数组查询的详细介绍及带有WHERE条件的查询示例,本文给大家介绍的非常详细,mysqljson查询示例相关知... 目录jsON 对象查询1. JSON_CONTAINS2. JSON_EXTRACT3. JSON_TA

Java调用C#动态库的三种方法详解

《Java调用C#动态库的三种方法详解》在这个多语言编程的时代,Java和C#就像两位才华横溢的舞者,各自在不同的舞台上展现着独特的魅力,然而,当它们携手合作时,又会碰撞出怎样绚丽的火花呢?今天,我们... 目录方法1:C++/CLI搭建桥梁——Java ↔ C# 的“翻译官”步骤1:创建C#类库(.NET

MyBatis编写嵌套子查询的动态SQL实践详解

《MyBatis编写嵌套子查询的动态SQL实践详解》在Java生态中,MyBatis作为一款优秀的ORM框架,广泛应用于数据库操作,本文将深入探讨如何在MyBatis中编写嵌套子查询的动态SQL,并结... 目录一、Myhttp://www.chinasem.cnBATis动态SQL的核心优势1. 灵活性与可

Mybatis嵌套子查询动态SQL编写实践

《Mybatis嵌套子查询动态SQL编写实践》:本文主要介绍Mybatis嵌套子查询动态SQL编写方式,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录前言一、实体类1、主类2、子类二、Mapper三、XML四、详解总结前言MyBATis的xml文件编写动态SQL

SpringBoot实现Kafka动态反序列化的完整代码

《SpringBoot实现Kafka动态反序列化的完整代码》在分布式系统中,Kafka作为高吞吐量的消息队列,常常需要处理来自不同主题(Topic)的异构数据,不同的业务场景可能要求对同一消费者组内的... 目录引言一、问题背景1.1 动态反序列化的需求1.2 常见问题二、动态反序列化的核心方案2.1 ht