卡巴斯基免费版的Windows安装包下载URL获取
下载页面
目前,KFA 仅通过 Kaspersky Global 站点提供,且不公开提供下载页面。
下载页面 URL 为:
https://www.kaspersky.com/downloads/free-antivirus
API
在 2024-02-17,此页面会通过一个 API 请求动态获取安装包下载链接:
快速请求(使用浏览器访问此 API 可绕过反爬虫)
https://api-router.kaspersky-labs.com/downloads/search/v3/b2c?productcodes=5003617&businesspurposes=Update&licensetiers=Free&sites=https%3A%2F%2Fwww.kaspersky.com&sites=https%3A%2F%2Fwww.kaspersky.com%2Fcarribean&sites=https%3A%2F%2Fwww.kaspersky.com%2Fisrael&sites=https%3A%2F%2Fwww.kaspersky.com%2Fsouth-east-asia&sites=https%3A%2F%2Fwww.kaspersky.com%2Findonesia&sites=https%3A%2F%2Fwww.kaspersky.com%2Fthe-european-union&sites=https%3A%2F%2Fwww.kaspersky.com%2Flatvia&sites=https%3A%2F%2Fwww.kaspersky.com%2Flithuania&sites=https%3A%2F%2Fwww.kaspersky.com%2Festonia&sites=https%3A%2F%2Fwww.kaspersky.com%2Funited-kingdom&sites=https%3A%2F%2Fwww.kaspersky.com%2Fcalifornia&sites=https%3A%2F%2Fwww.kaspersky.com%2Fbrazil
它会返回一个包含各操作系统安装包下载链接的 JSON 对象。
观察参数,可以构建一个这样的请求,使其搜索简体中文版的免费安装包:
https://api-router.kaspersky-labs.com/downloads/search/v3/b2c?productcodes=5003617&businesspurposes=Update&licensetiers=Free&sites=https%3A%2F%2Fwww.kaspersky.com.cn
题外话,对于 KSOS,有:
https://api-router.kaspersky-labs.com/downloads/search/v3/b2c?productcodes=2911399&businesspurposes=Update&licensetiers=KSOS&sites=https%3A%2F%2Fwww.kaspersky.com.cn
API(已弃用)
曾经,此页面还会在下载前请求另一个 API:
fetch("https://api-router.kaspersky-labs.com/pcp/PdcProxy/downloadurl", {
referrer: "https://www.kaspersky.com/downloads/free-antivirus",
body: '{"ApplicationId":[2269],"localization":["en-INT"],"Platform":"Windows","CppId":39971,"VersionNumber":"21.16.6.467","customizationParams":{"StartupScenario":"Free"}}',
method: "POST",
mode: "cors",
credentials: "include",
});
但此 API 似乎已被废弃。
KFA 激活码
在一些情况下,安装的 KFA 仍然会请求激活码:
简体中文版:3SXCM-M9RJM-6985N-PWKP7
或A23B5-44EXM-85MVF-KM2GQ
英文版:ZM4YW-FUTDY-W9B62-GSK26
自动化
# Install Kaspersky Free Antivirus for Windows
# This script requests for free antivirus installer from free-antivirus download page API and install it with a fake activation code.
# https://www.kaspersky.com/downloads/free-antivirus
import os
import subprocess
import tempfile
import requests
ALLOWED_LOCALES = ["en-INT", "zh-Hans-CN"]
# The FAKE_ACTIVATION_CODE skips the Kaspersky account login process when first run KFA.
# The code is hardcoded in the Kaspersky activation dll file and used only for free versions.
# We are only sure about codes for the two locales now.
FAKE_ACTIVATION_CODE = {
"en-INT": "ZM4YW-FUTDY-W9B62-GSK26",
"zh-Hans-CN": "3SXCM-M9RJM-6985N-PWKP7",
}
SITES = {
"en-INT": "https://www.kaspersky.com",
"zh-Hans-CN": "https://www.kaspersky.com.cn",
}
def get_installer_url(locale):
site = SITES[locale]
params = {
"productcodes": "5003617",
"businesspurposes": "Update",
"licensetiers": "Free",
"sites": [site],
}
response = requests.get(
"https://api-router.kaspersky-labs.com/downloads/search/v3/b2c",
params=params,
)
response.raise_for_status()
versions = response.json()[0]["response"]["Windows"]["Kaspersky4Win"]["Downloader"][
site
]
max_version_key = max(
versions, key=lambda k: float(k) if k.isdigit() else -1
) # Get the max version, usually only one version, just in case
url = versions[str(max_version_key)][locale]["Link"]
return url
def download_and_get_path(url):
temp_dir = tempfile.mkdtemp()
response = requests.get(url, stream=True)
response.raise_for_status()
file_name = url.split("/")[-1]
with open(os.path.join(temp_dir, file_name), "wb") as f:
for chunk in response.iter_content(chunk_size=8192):
f.write(chunk)
return os.path.join(temp_dir, file_name)
if __name__ == "__main__":
if os.name != "nt":
raise NotImplementedError("Only Windows is supported.")
default_locale = "zh-Hans-CN"
if len(os.sys.argv) > 1:
locale = os.sys.argv[1]
if locale not in ALLOWED_LOCALES:
raise ValueError(f"Unsupported locale: {locale}")
else:
locale = default_locale
if locale not in FAKE_ACTIVATION_CODE:
raise ValueError(f"Unsupported locale: {locale}")
print("This script will install Kaspersky Free Antivirus (KFA) for Windows.")
print(
"Attention: If you cancel the installation, do not use the installer shortcut on the desktop, it will not activate KFA automatically."
)
print(
"If KFA asks for login or activation code, please use the activation code: "
+ FAKE_ACTIVATION_CODE[locale]
)
print(
"If KFA requests for an email address, please close the window and open KFA again."
)
installer_url = get_installer_url(locale)
print(installer_url)
installer_path = download_and_get_path(installer_url)
print(installer_path)
subprocess.Popen(
[
installer_path,
"/pSKIPPRODUCTCHECK=1",
"/pACTIVATIONCODE=" + FAKE_ACTIVATION_CODE[locale],
],
)
留下评论