小红书自动化工具 卡密 逆向

Sherry 发布于 2025-07-30 156 次阅读 文章 最后更新于 2025-07-30 1029 字


🍔环境准备

  • pycdc

  • nmap

  • hydra

  • fiddler

  • proxifier

  • anaconda

  • python3.11

  • pyinstxtractor

🌭项目实施

说来也巧,刷咸鱼偶然刷到这个自动化工具,突发奇想能不能破解一下。🥰

也是通过我的超绝社工大法获得了一张卡密,哈哈(一天)

然后今天才想起来要看看

软件卡密验证大体样子,如上。

推测是网络验证,我们配置一手proxifier规则之后配合fiddler进行抓包

很清晰的一个发包流程,都拿到网址了,肯定先看看web页,如果web页能进入,那我们也就变成卡密管理了哈哈😎

nmap扫一手端口,看看有没有利用的,可以看到8080 3389,也是非常的经典。

我们浏览器看看

flask写的后端,下面有个pin码,如果有pin码那我们就可以执行任意代码了。

很可惜,我们并没获得,想爆破来着,但是没那个耐心哈哈(也爆了几分钟)

刚刚还看到3389端口,我们尝试使用hydra爆破一下

也是爆破了有一会爆破不出来

web端没法渗透进去,那我们另辟蹊径,看看软件端能不能逆向

这种自动化软件一般都是python写的,也是祈祷一波没有加密

使用python3.11写的

我们需要使用python3.11解包才能解密全

src 中存在完整项目代码

我们用ai自动化通过pycdc进行项目反编译

import os
import subprocess
import sys
from pathlib import Path

# 定义源目录和输出目录
SRC_DIR = "PYZ-00.pyz_extracted/src"
OUTPUT_DIR = "decompiled_src"

def ensure_dir_exists(dir_path):
    """确保目录存在,如果不存在则创建"""
    if not os.path.exists(dir_path):
        os.makedirs(dir_path)

def decompile_file(pyc_path, output_path):
    """使用pycdc反编译单个pyc文件"""
    try:
        # 确保输出目录存在
        os.makedirs(os.path.dirname(output_path), exist_ok=True)

        # 执行pycdc命令
        result = subprocess.run(
            ["pycdc", pyc_path, "-o", output_path],
            capture_output=True,
            text=True
        )

        if result.returncode != 0:
            print(f"反编译 {pyc_path} 失败: {result.stderr}")
            return False
        else:
            print(f"成功反编译: {pyc_path} -> {output_path}")
            return True
    except Exception as e:
        print(f"处理 {pyc_path} 时出错: {str(e)}")
        return False

def process_directory(src_dir, output_dir):
    """处理目录中的所有pyc文件"""
    success_count = 0
    failure_count = 0

    # 遍历源目录中的所有文件
    for root, dirs, files in os.walk(src_dir):
        for file in files:
            if file.endswith('.pyc'):
                # 构建源文件路径
                pyc_path = os.path.join(root, file)

                # 构建目标文件路径
                rel_path = os.path.relpath(pyc_path, src_dir)
                py_file = os.path.splitext(rel_path)[0] + '.py'
                output_path = os.path.join(output_dir, py_file)

                # 反编译文件
                if decompile_file(pyc_path, output_path):
                    success_count += 1
                else:
                    failure_count += 1

    return success_count, failure_count

def main():
    # 检查pycdc是否已安装
    try:
        subprocess.run(["pycdc", "--version"], capture_output=True)
    except FileNotFoundError:
        print("错误: 未找到pycdc工具。请确保已安装pycdc并添加到PATH中。")
        print("可以从 https://github.com/zrax/pycdc 获取pycdc。")
        return

    # 确保输出目录存在
    ensure_dir_exists(OUTPUT_DIR)

    print(f"开始反编译 {SRC_DIR} 目录中的所有pyc文件...")
    success, failure = process_directory(SRC_DIR, OUTPUT_DIR)

    print("\n反编译完成!")
    print(f"成功: {success} 文件")
    print(f"失败: {failure} 文件")
    print(f"反编译后的文件保存在: {os.path.abspath(OUTPUT_DIR)}")

if __name__ == "__main__":
    main() 

直接去看卡密验证接口

我们可以看到最上面有本地卡面配置存储路径

self.license_file = Path.home() / '.xhs_toolkit' / 'license.json'

这个软件第二次启动会先尝试读取本地路径,是否存在卡密配置

我们打开可以看到中间有个结束时间,哈哈让我找到弱点了,我们直接修改时间戳

yes!!

🍕感悟

还是得深入学习一下渗透,一个经典的python逆向,也是挺有套路的,幸好程序没有加密!!上次遇到一个python加密的恶心死我了………