- Java锁的逻辑(结合对象头和ObjectMonitor)
- 还在用饼状图?来瞧瞧这些炫酷的百分比可视化新图形(附代码实现)⛵
- 自动注册实体类到EntityFrameworkCore上下文,并适配ABP及ABPVNext
- 基于Sklearn机器学习代码实战
本文章中所有内容仅供学习交流,抓包内容、敏感网址、数据接口均已做脱敏处理,严禁用于商业用途和非法用途,否则由此产生的一切后果均与作者无关,若有侵权,请联系我立即删除! 。
目标网站: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'
然后就能运行成功了 然后我们封装一下 顺便替换一下某些值.
部分代码如下图 完成!! 。
最后此篇关于JS逆向实战20——某头条jsvm逆向的文章就讲到这里了,如果你想了解更多关于JS逆向实战20——某头条jsvm逆向的内容请搜索CFSDN的文章或继续浏览相关文章,希望大家以后支持我的博客! 。
实战-行业攻防应急响应 简介: 服务器场景操作系统 Ubuntu 服务器账号密码:root/security123 分析流量包在/home/security/security.pcap 相
背景 最近公司将我们之前使用的链路工具切换为了 OpenTelemetry. 我们的技术栈是: OTLP C
一 同一类的方法都用 synchronized 修饰 1 代码 package concurrent; import java.util.concurrent.TimeUnit; public c
一 简单例子 1 代码 package concurrent.threadlocal; /** * ThreadLocal测试 * * @author cakin */ public class T
1. 问题背景 问题发生在快递分拣的流程中,我尽可能将业务背景简化,让大家只关注并发问题本身。 分拣业务针对每个快递包裹都会生成一个任务,我们称它为 task。task 中有两个字段需要
实战环境 elastic search 8.5.0 + kibna 8.5.0 + springboot 3.0.2 + spring data elasticsearch 5.0.2 +
Win10下yolov8 tensorrt模型加速部署【实战】 TensorRT-Alpha 基于tensorrt+cuda c++实现模型end2end的gpu加速,支持win10、
yolov8 tensorrt模型加速部署【实战】 TensorRT-Alpha 基于tensorrt+cuda c++实现模型end2end的gpu加速,支持win10、linux,
目录如下: 为什么需要自定义授权类型? 前面介绍OAuth2.0的基础知识点时介绍过支持的4种授权类型,分别如下: 授权码模式 简化模式 客户端模式 密码模式
今天这篇文章介绍一下如何在修改密码、修改权限、注销等场景下使JWT失效。 文章的目录如下: 解决方案 JWT最大的一个优势在于它是无状态的,自身包含了认证鉴权所需要的所有信息,服务器端
前言 大家好,我是捡田螺的小男孩。(求个星标置顶) 我们日常做分页需求时,一般会用limit实现,但是当偏移量特别大的时候,查询效率就变得低下。本文将分四个方案,讨论如何优化MySQL百万数
前言 大家好,我是捡田螺的小男孩。 平时我们写代码呢,多数情况都是流水线式写代码,基本就可以实现业务逻辑了。如何在写代码中找到乐趣呢,我觉得,最好的方式就是:使用设计模式优化自己
我们先讲一些arm汇编的基础知识。(我们以armv7为例,最新iphone5s上的64位暂不讨论) 基础知识部分: 首先你介绍一下寄存器: r0-r3:用于函数参数及返回值的传递 r4-r6
一 同一类的静态方法都用 synchronized 修饰 1 代码 package concurrent; import java.util.concurrent.TimeUnit; public
DRF快速写五个接口,比你用手也快··· 实战-DRF快速写接口 开发环境 Python3.6 Pycharm专业版2021.2.3 Sqlite3 Django 2.2 djangorestfram
一 添加依赖 org.apache.thrift libthrift 0.11.0 二 编写 IDL 通过 IDL(.thrift 文件)定义数据结构、异常和接口等数据,供各种编程语言使用 nam
我正在阅读 Redis in action e-book关于semaphores的章节.这是使用redis实现信号量的python代码 def acquire_semaphore(conn, semn
自定义控件在WPF开发中是很常见的,有时候某些控件需要契合业务或者美化统一样式,这时候就需要对控件做出一些改造。 目录 按钮设置圆角
师父布置的任务,让我写一个服务练练手,搞清楚socket的原理和过程后跑了一个小demo,很有成就感,代码内容也比较清晰易懂,很有教育启发意义。 代码 ?
? 1 2
我是一名优秀的程序员,十分优秀!