1. 文件夹内容变化对比脚本
这个脚本是我在研究淘宝上超低价格Steam兑换码的作用原理时写的。
⚠️不要买盗版!不要买盗版!不要买盗版⚠️
当你淘宝上购买低价兑换后,商家会让你下载一个他们的程序,然后在你电脑上运行,他们的程序会向steam客户端注入木马,从而实现虚假的兑换游戏。
‼️这种方式会导致你的steam账号泄露‼️
file_ckecker.py
import os
import hashlib
import json
import argparse
import sys
from tqdm import tqdm # 导入进度条库
def calculate_file_hash(file_path, block_size=65536):
"""计算文件的 SHA-256 哈希值"""
sha256 = hashlib.sha256()
try:
with open(file_path, 'rb') as f:
for block in iter(lambda: f.read(block_size), b''):
sha256.update(block)
return sha256.hexdigest()
except (PermissionError, FileNotFoundError):
return None
def get_all_files(folder_path):
"""预扫描文件夹,获取所有文件列表用于初始化进度条"""
all_files = []
for root, _, files in os.walk(folder_path):
for name in files:
all_files.append(os.path.join(root, name))
return all_files
def record_folder_state(folder_path, output_file):
"""记录文件夹状态"""
if not os.path.isdir(folder_path):
print(f"错误: 路径 '{folder_path}' 不是文件夹。")
return
print(f"正在预扫描目录结构...")
file_list = get_all_files(folder_path)
file_data = {}
print(f"开始计算哈希值:")
for full_path in tqdm(file_list, desc="进度", unit="file"):
rel_path = os.path.relpath(full_path, folder_path)
file_hash = calculate_file_hash(full_path)
if file_hash:
file_data[rel_path] = file_hash
with open(output_file, 'w', encoding='utf-8') as f:
json.dump(file_data, f, indent=4, ensure_ascii=False)
print(f"\n完成!已记录 {len(file_data)} 个文件。")
def compare_folder_state(current_folder, record_file):
"""对比差异"""
if not os.path.exists(record_file):
print(f"错误: 找不到记录文件 '{record_file}'。")
return
with open(record_file, 'r', encoding='utf-8') as f:
old_data = json.load(f)
print(f"正在预扫描当前目录...")
file_list = get_all_files(current_folder)
current_data = {}
print(f"正在分析当前文件内容:")
for full_path in tqdm(file_list, desc="对比中", unit="file"):
rel_path = os.path.relpath(full_path, current_folder)
file_hash = calculate_file_hash(full_path)
if file_hash:
current_data[rel_path] = file_hash
old_files = set(old_data.keys())
new_files = set(current_data.keys())
added = sorted(list(new_files - old_files))
removed = sorted(list(old_files - new_files))
common = old_files & new_files
changed = sorted([f for f in common if old_data[f] != current_data[f]])
print(f"\n{'='*20} 对比报告 {'='*20}")
print(f"新增 [{len(added)}], 删除 [{len(removed)}], 变动 [{len(changed)}]")
if added:
print("\n新增文件:")
for f in added: print(f" [+] {f}")
if removed:
print("\n删除文件:")
for f in removed: print(f" [-] {f}")
if changed:
print("\n变动文件:")
for f in changed: print(f" [*] {f}")
if not any([added, removed, changed]):
print("\n结果: 没有任何变化。")
print(f"{'='*49}\n")
def main():
parser = argparse.ArgumentParser(description="文件夹变更检测工具")
subparsers = parser.add_subparsers(dest="command")
save_parser = subparsers.add_parser("save", help="记录状态")
save_parser.add_argument("-p", "--path", required=True)
save_parser.add_argument("-o", "--out", default="snapshot.json")
check_parser = subparsers.add_parser("check", help="对比差异")
check_parser.add_argument("-p", "--path", required=True)
check_parser.add_argument("-d", "--db", required=True)
args = parser.parse_args()
if args.command == "save":
record_folder_state(args.path, args.out)
elif args.command == "check":
compare_folder_state(args.path, args.db)
else:
parser.print_help()
if __name__ == "__main__":
main()
效果
运行商家程序前的steam客户端文件

运行商家程序后的steam客户端文件

下面是我把对比报告给gemini后gemini生成的内容
你的这份对比报告非常专业,它直接揭示了这种骗局的“犯罪现场”。通过你抓取的这些文件变动,我们可以精准地还原出这类程序的运作机制:
核心元凶:
xinput1_4.dll(DLL 劫持)这是整场骗局的核心引擎。
- 劫持原理:
xinput1_4.dll本是 Windows 处理手柄输入的系统组件。但是,Windows 程序在加载 DLL 时,通常会优先搜索程序当前目录。- 运作方式: 商家程序在 Steam 根目录下放了一个伪造的
xinput1_4.dll。当 Steam 启动时,它本想加载系统手柄驱动,结果却“错误地”加载了这颗毒药。- 功能: 这个伪造的 DLL 拥有 Steam 进程的所有权限。它在内存中拦截了 API 调用,修改了 Steam 对服务器返回数据的解析结果。这就是为什么你输入无效码,客户端却显示“激活成功”。
关键辅助:
steam.cfg
- 锁定版本与阻止更新:
steam.cfg是 Steam 的高级配置文件,通常用于开发调试。- 猫腻: 商家通过它可能强行禁用了 Steam 的某些安全校验或自动更新功能。如果不禁用更新,官方的补丁可能会导致劫持失效。
数据修改:
config\appdata.vdf和config.vdf
- 本地缓存欺骗:
appdata.vdf存储了本地库中游戏的配置信息。- 伪造入库: 商家程序通过修改这些
.vdf文件,直接在你的本地配置文件里注入了那个游戏的 AppID 和授权信息。这让 Steam 客户端“以为”你已经拥有了这个游戏,并在 UI 界面上显示出来。
现在的潜在风险
你的这份报告证明了该程序已经深度侵入了你的 Steam 环境。即便你现在删掉这几个文件,由于它曾经以管理员权限运行并注入过进程,你仍面临以下风险:
- 缓存污染:
logs目录下大量文件的变动说明程序在频繁记录或拦截你的通信,你的登录令牌(Token)可能已经被记录并发送到了远程服务器。- 后门隐患:
xinput1_4.dll可以执行任何代码。它可以扫描你电脑上的其他软件,甚至记录你的键盘输入。
你的这份对比报告非常专业,它直接揭示了这种骗局的“犯罪现场”。通过你抓取的这些文件变动,我们可以精准地还原出这类程序的运作机制:
核心元凶:
xinput1_4.dll(DLL 劫持)这是整场骗局的核心引擎。
- 劫持原理:
xinput1_4.dll本是 Windows 处理手柄输入的系统组件。但是,Windows 程序在加载 DLL 时,通常会优先搜索程序当前目录。- 运作方式: 商家程序在 Steam 根目录下放了一个伪造的
xinput1_4.dll。当 Steam 启动时,它本想加载系统手柄驱动,结果却“错误地”加载了这颗毒药。- 功能: 这个伪造的 DLL 拥有 Steam 进程的所有权限。它在内存中拦截了 API 调用,修改了 Steam 对服务器返回数据的解析结果。这就是为什么你输入无效码,客户端却显示“激活成功”。
关键辅助:
steam.cfg
- 锁定版本与阻止更新:
steam.cfg是 Steam 的高级配置文件,通常用于开发调试。- 猫腻: 商家通过它可能强行禁用了 Steam 的某些安全校验或自动更新功能。如果不禁用更新,官方的补丁可能会导致劫持失效。
数据修改:
config\appdata.vdf和config.vdf
- 本地缓存欺骗:
appdata.vdf存储了本地库中游戏的配置信息。- 伪造入库: 商家程序通过修改这些
.vdf文件,直接在你的本地配置文件里注入了那个游戏的 AppID 和授权信息。这让 Steam 客户端“以为”你已经拥有了这个游戏,并在 UI 界面上显示出来。
现在的潜在风险
你的这份报告证明了该程序已经深度侵入了你的 Steam 环境。即便你现在删掉这几个文件,由于它曾经以管理员权限运行并注入过进程,你仍面临以下风险:
- 缓存污染:
logs目录下大量文件的变动说明程序在频繁记录或拦截你的通信,你的登录令牌(Token)可能已经被记录并发送到了远程服务器。- 后门隐患:
xinput1_4.dll可以执行任何代码。它可以扫描你电脑上的其他软件,甚至记录你的键盘输入。
建议操作步骤
为了确保你的账号和系统安全,建议立即按以下顺序操作:
- 物理清除: 立即删除 Steam 目录下的
xinput1_4.dll和steam.cfg。- 强制校验: 删除 Steam 目录下除了
steamapps(游戏文件)和steam.exe以外的所有文件夹和文件,然后运行steam.exe让它强制重新下载官方纯净组件。- 修改凭据: 在另一台安全的设备(如手机)上修改 Steam 密码,并选择“注销所有其他设备”。
- 全盘杀毒: 使用可靠的杀毒软件(如火绒或 Windows Defender 深度扫描)检查是否有残留的恶意程序。