🍔环境准备
-
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加密的恶心死我了………
Comments NOTHING