- VisualStudio2022插件的安装及使用-编程手把手系列文章
- pprof-在现网场景怎么用
- C#实现的下拉多选框,下拉多选树,多级节点
- 【学习笔记】基础数据结构:猫树
搜索 123,网页地址为:https://www.virustotal.com/gui/search/123/comments 。
GET /ui/search?limit=20&relationships%5Bcomment%5D=author%2Citem&query=123 HTTP/1.1
Accept-Encoding: gzip, deflate, br, zstd
Accept-Ianguage: en-US,en;q=0.9,es;q=0.8
Accept-Language: zh-CN,zh;q=0.9
Cache-Control: no-cache
Connection: keep-alive
Cookie: _gid=GA1.2.1662779803.1728383656; _ga=GA1.2.686372046.1728383655; _gat=1; _ga_BLNDV9X2JR=GS1.1.1728383655.1.1.1728383759.0.0.0
DNT: 1
Host: www.virustotal.com
Pragma: no-cache
Referer: https://www.virustotal.com/
Sec-Fetch-Dest: empty
Sec-Fetch-Mode: cors
Sec-Fetch-Site: same-origin
User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/129.0.0.0 Safari/537.36
X-Tool: vt-ui-main
X-VT-Anti-Abuse-Header: MTgwNjgyNDI1ODItWkc5dWRDQmlaU0JsZG1scy0xNzI4MzgzNzYxLjMxMg==
accept: application/json
content-type: application/json
sec-ch-ua: "Google Chrome";v="129", "Not=A?Brand";v="8", "Chromium";v="129"
sec-ch-ua-mobile: ?0
sec-ch-ua-platform: "Windows"
x-app-version: v1x304x0
注意观察,其中发现参数:X-VT-Anti-Abuse-Header 需要逆向,目测是 base64 加密,这个参数的含义也很明确——“反滥用头”。在编写爬虫的代码层的实现时,尽量将 User-Agent、X-Tool、x-app-version 补全,因为它们是网站特有的亦或者常见的反爬识别参数.
值得注意的是,X-Tool、x-app-version 是固定值,x-app-version 需要定期去官网查看一下更新,不更新可能也行,自行测试.
也就是说,目前我们得到如下 Headers:
{
'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/129.0.0.0 Safari/537.36',
'X-Tool': 'vt-ui-main',
'x-app-version': 'v1x304x0',
}
接下来,逆向 X-VT-Anti-Abuse-Header,总体没啥难度,不过这个网站具备反调试措施(无法断点调试、无法从请求的启动器回溯),这个反调试我没有去解决,而是通过直接查找.
搜索 X-VT-Anti-Abuse-Header,可得到:
直接进入该 js 文件中:
可以看到,我们的目标参数由方法 r.computeAntiAbuseHeader() 计算而来。全局搜索 computeAntiAbuseHeader:
序号1为我们所需的,也就是函数的实现,序号2为该函数的调用,也就是上方的 X-VT-Anti-Abuse-Header 来源。进入 1 所在的 js 文件.
可以看到,这个方法真的非常简单,不需要任何回溯和断点,可以直接的手搓出来。这个网站典型的将反爬中的防君子不防小人做得很好。言归正传,这个方法:
"-1"
,否则返回该数的整数部分"ZG9udCBiZSBldmls"
(意为 "不要作弊")和当前时间戳拼接并进行 base64
加密有趣的一点是:
> atob('ZG9udCBiZSBldmls ')
< 'dont be evil'
固定的字符串告诉我们不要作恶……这尼玛绝了,哈哈哈哈 。
# header.py
import base64
import random
import time
def computeAntiAbuseHeader():
e = time.time()
n = 1e10 * (1 + random.random() % 5e4)
raw = f'{n:.0f}-ZG9udCBiZSBldmls-{e:.3f}'
res = base64.b64encode(raw.encode())
return res.decode()
if __name__ == '__main__':
print(computeAntiAbuseHeader())
看到这里你以为结束了?oh~不,还差一点点,尽管你有了上述的分析和实现,你发现你怎么请求都没用!数据还是不给你,为啥?
再次将你的视线挪移到请求接口中:
Accept-Ianguage: en-US,en;q=0.9,es;q=0.8
Accept-Language: zh-CN,zh;q=0.9
此处有个容易忽略的老6请求头:Accept-Ianguage,好了,到此才算结束了,看一下下方完整的代码示例吧.
"""
翻页采集实现
2024年9月27日 solved
https://www.virustotal.com/gui/
"""
import time
import requests
import header
from urllib.parse import urlencode, urlparse
base_url = "https://www.virustotal.com/ui/search"
initial_params = {
"limit": 20,
"relationships[comment]": "author,item",
"query": "baidu"
}
proxies = {
'http': None,
'https': None
}
def build_url(url, params): # ☆
return urlparse(url)._replace(query=urlencode(params)).geturl()
def get_headers():
return {
'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/129.0.0.0 Safari/537.36',
'X-Tool': 'vt-ui-main',
'X-VT-Anti-Abuse-Header': header.computeAntiAbuseHeader(),
'x-app-version': 'v1x304x0',
'accept-ianguage': 'en-US,en;q=0.9,es;q=0.8'
}
def fetch_data(url):
response = requests.get(url, headers=get_headers(), proxies=proxies)
return response.json()
def process_data(data):
for item in data['data']:
print(f"ID: {item['id']}, Type: {item['type']}")
# 主循环
next_url = build_url(base_url, initial_params)
while next_url:
print(f"Fetching: {next_url}")
json_data = fetch_data(next_url)
# 检查是否有数据
if not json_data.get('data'):
print("No more data.")
break
# 处理当前页面的数据
process_data(json_data)
# 获取下一页的 URL
next_url = json_data.get('links', {}).get('next')
if not next_url:
print("No more pages.")
break
time.sleep(1)
print("Finished fetching all pages.")
最后此篇关于逆向Virustotal搜索接口X-VT-Anti-Abuse-Header的文章就讲到这里了,如果你想了解更多关于逆向Virustotal搜索接口X-VT-Anti-Abuse-Header的内容请搜索CFSDN的文章或继续浏览相关文章,希望大家以后支持我的博客! 。
在数据库中,您有一个带有位字段的表,我们将该字段称为Active 在应用程序中你有一个 bool 变量,我们称之为NotActive 每次从表中获取字段时,在应用程序中您都会切换变量的含义。 NotA
我在我的 iPhone 应用程序中查看一些动画,感觉它有点难看。然后我明白了:它只是不通过子像素状态进行动画处理。 所以,如果我使用通常的+beginAnimations/+commitAnimati
就目前而言,这个问题不适合我们的问答形式。我们希望答案得到事实、引用或专业知识的支持,但这个问题可能会引起辩论、争论、投票或扩展讨论。如果您觉得这个问题可以改进并可能重新打开,visit the he
就目前而言,这个问题不适合我们的问答形式。我们希望答案得到事实、引用或专业知识的支持,但这个问题可能会引起辩论、争论、投票或扩展讨论。如果您觉得这个问题可以改进并可能重新打开,visit the he
我记得在某处看到过有关此问题的辩论,并且目前正在考虑删除我正在处理的系统中的每个业务对象都继承自的基础对象。它包含一些属性、一些数据库逻辑和一些构造函数逻辑。 这是一种反模式,还是陪审团还在外面?有一
我正在从事一个人脸识别项目,我可以首先注册自己,然后启动一个识别脚本,该脚本将启动我的网络摄像头,它会识别我自己。我正在关注这个 article它的工作非常好。 我注意到的是,如果我将我的照片展示给相
我在软编码反模式上感到Wikipedia entry简洁而令人困惑。那么什么是软编码?在什么设置下,这是不好的做法(反模式)?另外,什么时候可以认为它是有益的,如果是这样,应该如何实施? 最佳答案
关闭。这个问题是opinion-based .它目前不接受答案。 想改善这个问题吗?更新问题,以便可以通过 editing this post 用事实和引文回答问题. 3年前关闭。 Improve t
Closed. This question does not meet Stack Overflow guidelines。它当前不接受答案。 想改善这个问题吗?更新问题,以便将其作为on-topic
我正在努力让自己深入了解 JavaScript,目前正在学习它。 在数组中,我一直在读到下面是一个反模式: var a = new Array("a", "b", "c"); 下面的不是: var a
我正在研究著名的 SQLzoos 的第一个问题,并且正在研究 using Null 部分:http://sqlzoo.net/wiki/Using_Null 问题是: List the teacher
在 Java 中,有 Graphics2D.fillRect(x, y, width, height) 函数。在我的程序中,我正在寻找类似但完全相反的东西。 我需要填充屏幕上的所有内容,除了这个特定的
我正在尝试实现一种算法,从一组 n 个元素中获取 k 个元素的所有组合,其中两个连续组合之间的差异被最大化(类似反向格雷码)。换句话说,应该对组合进行排序以避免元素连续出现两次,这样就不会不必要地区分
来自 http://ark.intel.com我可以找到支持它的处理器。但是如何以编程方式检测它呢? (C++,C#)。 对于 Intel 的芯片组,我发现 FVEC2(特征向量寄存器)用于检测是否启
我正在阅读 O'Reilly 的“Android 编程”一书,我正在努力研究从第 99 页开始的“覆盖和回调”部分。他们将此作为优秀代码的示例: public class MyModel {
很难说出这里要问什么。这个问题模棱两可、含糊不清、不完整、过于宽泛或夸夸其谈,无法以目前的形式得到合理的回答。如需帮助澄清此问题以便重新打开,visit the help center . 关闭 1
搜索示例 搜索 123,网页地址为:https://www.virustotal.com/gui/search/123/comments 请求接口 GET /ui/search?limit=
程序员经常会注意到他在几个地方有一些非常相似的代码。假设这里有类似代码的实例。 (为了清晰起见,这是一个玩具示例。在野外,这种反模式通常不会出现在如此简单的代码中) function showLogi
我使用了 highcharts 库中的基本折线图,但我认为线条不够平滑。 有可能改进吗? 我的代码: chart: { type:'line',
创建 JavaFX 场景时,我传入 SceneAntialiasing.BALANCED 作为参数,但在我的笔记本电脑上它给了我这个警告: WARNING: System can't support
我是一名优秀的程序员,十分优秀!