首页 > 其他分享 >JS逆向实战20——某头条jsvm逆向

JS逆向实战20——某头条jsvm逆向

时间:2023-07-04 13:56:45浏览次数:47  
标签:逆向 这个 20 然后 JS 参数 signature 断点 我们

声明

本文章中所有内容仅供学习交流,抓包内容、敏感网址、数据接口均已做脱敏处理,严禁用于商业用途和非法用途,否则由此产生的一切后果均与作者无关,若有侵权,请联系我立即删除!

网站

目标网站:aHR0cHM6Ly93d3cudG91dGlhby5jb20v
数据接口:aHR0cHM6Ly93d3cudG91dGlhby5jb20vYXBpL3BjL2xpc3QvZmVlZD9vZmZzZXQ9MCZjaGFubmVsX2lkPTk0MzQ5NTQ5Mzk1Jm1heF9iZWhvdF90aW1lPTAmY2F0ZWdvcnk9cGNfcHJvZmlsZV9jaGFubmVsJmRpc2FibGVfcmF3X2RhdGE9dHJ1ZSZhaWQ9MjQmYXBwX25hbWU9dG91dGlhb193ZWI=

抓包分析

这个网站的的数据包有点多,为了更好的筛选,所以我们这里使用charles去抓包,也为了更加清楚的展示。因为charles的包 是分网站的

抓到了如下的包,我们挨个看下 首先我们看看第一个请求

果然是这个数据包,
然后我们看看这个的请求参数 如下图所示

可以看到除了 | channel_id | _signature 除了这两个参数,其他值好像都是定值。
为了确保玩意,我们再抓包一次。

哦吼,我们对比一下 发现好像只有 _signature 不太一样。
第一次:

| channel_id | 94349549395 |
| _signature | _02B4Z6wo00f01z9d1bwAAIDCyiI.IkUKHQM.edEAAKt.NqUmn4ygAiOSxwaKaigCOeg56Ff89u.9vP6b6ub68vuKs2N8MHE1ooq3YQAYT9luKwEo58Z5CbtbU8m9.KvQ5zIywt7.ZVQByMpff7 |

第二次

| channel_id | 94349549395 |
| _signature | _02B4Z6wo00f01NpipegAAIDBLx1PdBeQ8LjaRqFAAFJAobBdiGXrf3fs2SKPrZr3jjY4vZP3kG7vB7l1w4C5LnkJNONZ-driqsx4S8hbVV4x8o4bjxJqi6BYxnSX9CGLBfcQe.nfmtpz8dZ57e |

这个值每次都不一样,所以我们可以大胆猜测 这个值就是我们所需要的值。

寻找参数生成点。

我们直接开始去搜索 _signature 这个值

刚好发现第一个地点 就很像参数生成的地方,我们在这里打上断点。然后再搜索一下_signature 这个值

这里还有个值,我们也打上断点。

发现这个值虽然对了 ,但是好像传的参数不是我们所要的那个链接啊


我们继续往下走,跳过非我们所需的接口 也就是看看 F.getUri(e) 这个值。
在跳过三个请求后 终于找到我们所需要的这个接口了

我们接下里就逐步进栈。然后一直追。这个时候要有些耐心。
在经过几层跳站,终于找到了 参数生成的地点,这个a.call(n, o) 就是生成签名的地方。

我们可以看到 这个o 是个对象,里面是存放的url键值对。
而这个n 应该就是函数,我们把这个n抠出来,应该就大功告成了。

网站扣代码

接上一段。
我们打上断点再逐步进栈。

然后发现进到了acrawler.js 这个文件里面。我们简单过一下这个文件。发现这是个自执行函数啊。那我们直接全部复制下来补环境是不是就ok了。
我们试一试哈。
这里复制下来。会发现后面执行的参数很长,很影响观感。pycharm 设置一下js换行。

如上图设置即可。

我们在下面执行这句话。为什么是这句话呢。我们跳到外面这个栈去看看

window.byted_acrawler.sign({
    "url":"http://localhost:8080"
})


然后运行。这个时候会报错

这个时候就奇怪了。这个地方怎么会报错呢。我们打印一下282行这个值看看。
分别打印下 S[R] R A 你就全懂了。尤其是是打印 A 这不就是妥妥的环境检测吗

我们给他补上

window = global;
window.document = {
    referrer: ''
}

然后我们再次运行,发现还是不行 会报找不到sign这个值

那这就奇怪了,我们放到浏览器环境上运行下看看

发现在浏览器上流程运行,那就只有一种可能了,就是环境没补好。有些环境检测过不去。
我们把断点打在这个地方,这就是底下传参的地方

经过不断的 debugger 测试,将下图的两句话 改成 undefined

改好之后还会报一个错 ,我们再补上

由于这个location里面东西也不是很多,我们就全补上了

window.location = {
    "ancestorOrigins": {},
    "href": "https://www.toutiao.com/?wid=1688368231201",
    "origin": "https://www.toutiao.com",
    "protocol": "https:",
    "host": "www.toutiao.com",
    "hostname": "www.toutiao.com",
    "port": "",
    "pathname": "/",
    "search": "?wid=1688368231201",
    "hash": ""
}

然后还会报一个 Useragent的错误

我们继续补上

navigator = {
    "userAgent": 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/114.0.0.0 Safari/537.36 Edg/114.0.1823.67'
}

然后就扣代码扣成功了。

这个值好短啊。我们对比一下

_02B4Z6wo00f01vfjpbwAAIDBCBxaQ1vn84b3waEAANlo3f
_02B4Z6wo00f01z9d1bwAAIDCyiI.IkUKHQM.edEAAKt.NqUmn4ygAiOSxwaKaigCOeg56Ff89u.9vP6b6ub68vuKs2N8MHE1ooq3YQAYT9luKwEo58Z5CbtbU8m9.KvQ5zIywt7.ZVQByMpff7

足足长了一大截。
我们再挨个进断点看看。在如图的位置打上断点。挨个追栈查看。

后面发现在之前获取浏览器环境中发现,在出_signature之前,获取过一次cookie
所以我们还需要加上cookie 直接写死即可

document.cookie = 'msToken=YT_CAKC4j1yOwgMxbB2jtTTvxroozg34lnY5cf7g7_JSz377gE4XfhP07HZPUjoaoHEVch4egS8RXblHNVYDeiZruwFzZD7GNPayfzsnWyA=; __ac_signature=_02B4Z6wo00f017cKGvwAAIDCQnXwY7ZFvKO3Lh5AAIlpCKNViv2DVvvH6x4q.QT77MgQzrAiF9hMRCiHWWaFPKyKg89Jhy8HzzWEsxOCL0uGv6qSBlqyWa5ptCRdbDDYlnceGFmxuIms3oCRf6; local_city_cache=%E8%8B%8F%E5%B7%9E; csrftoken=a08a7c6e066f7118fe2f379bb779e6f5; _ga_QEHZPBE5HH=GS1.1.1688368982.1.0.1688368982.0.0.0; _ga=GA1.1.1087552243.1688368983; s_v_web_id=verify_ljmjastc_1G6Mv2zQ_Y8pE_4qln_8mk4_sM1M5ze46FYX; tt_scid=F-2KEY1R0ROnAeE9XHLVYZZuLIETYppB9GsM9UL-TAMWFnDlcgdmDViPv9tGci1rf76e'

然后就能运行成功了

然后我们封装一下 顺便替换一下某些值。

结果

部分代码如下图

完成!!

标签:逆向,这个,20,然后,JS,参数,signature,断点,我们
From: https://www.cnblogs.com/zichliang/p/17523649.html

相关文章

  • sql server 2008 ,存储过程[IS2120@BG57IV3]
    USE[master];GOSELECT*FROMsys.all_objectsWHERE([type]='P'OR[type]='X'OR[type]='PC')ORDERBY[name];Objecttype:AF=Aggregatefunction(CLR)C=CHECKconstraintD=DEFAULT(constraintorstand-alone)......
  • 2012年中国县级市面积排行(截止到2012年7月31日) (zz.IS2120@BG57IV3)
    2012年中国县级市面积排行(截止到2012年7月31日)//z2013-02-1813:12:[email protected][T146,L2083,R63,V2084]说明:1、以下数据由宜居城市研究室统计整理,统计时间截止到2012年7月31日,与县级市同级的县、旗等不计算入内;2、以下面积均指陆地面积,不包括海域面积,入榜县......
  • 【ROS学习】基本环境安装-虚拟机VMware、Ubuntu20.04和ROS
    根据网络信息,虚拟机工具有hype-v、virtualbox和VMware,其中hyper-v是windows自带,使用的是物理机虚拟化,效率最高,但也因此带来一些别的影响,其不能使用USB外设,综合起来VMware的表现最为均衡,运行还算流畅,显示方面也挺好安装VMware和Ubuntu20.04Ubuntu20.04中安装ROSnoeticrosdep......
  • 2023春招面试题:Java并发相关知识
    1.基础知识回顾1.1什么是多线程?在没有线程的年代,在同一个进程中,程序的处理流程都是顺序的,下一个流程的开始必须等待上一个流程的结束,如果其中某一个流程非常耗时,那么会影响整个流程的处理时间cpu执行过程中并不是一个程序执行完之后cpu才切换,cpu时间片用完,就会切换到下个线程......
  • unity前后端通信 json解析 HTTP POST(BestHttp插件实现)
    1.配置请求体中的Json字符串1request_data=newRequestBodyClass();2request_data.a="Json第一个字段";3request_data.b="Json第二个字段";4stringbody=JsonUtility.ToJson(request_data);2.实例化HTTPRequest,请求头方法设置为POST,并且设置请求头中类型为json......
  • 差点错过!火山引擎VeDI帮这家企业成功挖掘200余条商机
    更多技术交流、求职机会,欢迎关注字节跳动数据平台微信公众号,回复【1】进入官方交流群与个体消费市场临时性需求大、决策参与人少等情况不同,企业消费市场往往因为长线需求复杂、商品/服务的价格高、参与决策节点多,而导致购买决策链路漫长。 在企业市场场景中,一条营销线......
  • 戴尔g15 5520 换硬盘和迁移系统
    换硬盘和迁移系统相关步骤如下:g155520硬盘推荐换硬盘先试试戴尔官方的硬盘克隆拆机教程_小秋拆机硬盘分区注:系统方面,也可考虑系统重装,windows官网有提供下载,用U盘制作启动盘,进行重装即可。......
  • 实战项目:构建基于Spring Boot和Vue.js的金融项目分享
    学习SpringBoot和Vue.js结合的前后端分离项目可以按照以下步骤进行:掌握SpringBoot:学习SpringBoot的基本概念和核心特性,如自动配置、起步依赖、注解驱动等。了解Spring框架的基本知识,如IoC容器、AOP、MVC模式等。学习Vue.js:学习Vue.js的基本语法、指令和组件,理解Vue实例、数据绑......
  • 第20课 SPI协议详解及裸机程序开发分析
    第001节_SPI协议介绍市面上的开发板很少接有SPI设备,但是SPI协议在工作中经常用到。我们开发了SPI模块,上面有SPIFlash和SPIOLED。OLED就是一块显示器。我们裸板程序会涉及两部分:用GPIO模拟SPI用S3C2440的SPI控制器我们先介绍下SPI协议,硬件框架如下:SCK:提供时钟DO:作为数据输出DI:作......
  • 2023-07-04 如何处理vue中不能监听到父传子组件props的变化
    前言:父传值给子组件,子组件需要根据传进来的值进行watch监听props中的值并遍历插入一个值,然后同时子组件的页面会跟着渲染。问题就是:子组件无法拿到watch更新的props值,比如传进一个list,然后通过watch来监听并在list里面加入一个新的值,前端页面拿不到新的值故而报错。原因:watch无......