python实现批量对代码可读化操作,方便逆向分析

查看 122|回复 9
作者:shiquda   
Github项目链接:https://github.com/shiquda/code-readable
code-readable
[Python] 纯文本查看 复制代码import os
import json
from cssbeautifier import beautify as css_beautify
from bs4 import BeautifulSoup
from jsbeautifier import beautify as js_beautify
base_dir = r"path\to\your\dir" # 你的文件夹路径
class btf:
    def __init__(self, input_file, output_file):
        self.input_file = input_file
        self.output_file = output_file
    def js(self):
        with open(self.input_file, "r", encoding='utf-8') as f:
            compressed_code = f.read()
        uncompressed_code = js_beautify(compressed_code)
        with open(self.output_file, "w", encoding='utf-8') as f:
            f.write(uncompressed_code)
        print(f"处理完成:\t{self.output_file}")
    def css(self):
        with open(self.input_file, "r", encoding='utf-8') as f:
            compressed_code = f.read()
        # 使用 css_beautify 格式化 CSS
        uncompressed_code = css_beautify(compressed_code)
        with open(self.output_file, "w", encoding='utf-8') as f:
            f.write(uncompressed_code)
        print(f"处理完成:\t{self.output_file}")
    def html(self):
        with open(self.input_file, "r", encoding='utf-8') as f:
            compressed_code = f.read()
        soup = BeautifulSoup(compressed_code, 'html.parser')
        uncompressed_code = soup.prettify()
        with open(self.output_file, "w", encoding='utf-8') as f:
            f.write(uncompressed_code)
        print(f"处理完成:\t{self.output_file}")
    def json(self):
        with open(self.input_file, "r", encoding='utf-8') as f:
            compressed_code = f.read()
        # 不需要将 JSON 字符串转换成对象再转回字符串
        uncompressed_code = json.dumps(json.loads(compressed_code), indent=2, ensure_ascii=False)
        with open(self.output_file, "w", encoding='utf-8') as f:
            f.write(uncompressed_code)
        print(f"处理完成:\t{self.output_file}")
def walk_dir(directory):
    for root, dirs, files in os.walk(directory):
        for file in files:
            input_path = os.path.join(root, file)
            output_path = os.path.join(root, file)
            if file.endswith(".js"):
                print(f'正在处理文件:\t{input_path}')
                btf(input_path, output_path).js()
            elif file.endswith(".css"):
                print(f'正在处理文件:\t{input_path}')
                btf(input_path, output_path).css()
            elif file.endswith(".html"):
                print(f'正在处理文件:\t{input_path}')
                btf(input_path, output_path).html()
            elif file.endswith(".json"):  # 添加对 JSON 文件的处理
                print(f'正在处理文件:\t{input_path}')
                btf(input_path, output_path).json()
            else:
                print(f'跳过文件:\t{input_path}')
    print("所有文件处理完成!")
walk_dir(base_dir)
介绍
本项目可以对指定目录进行批量的代码可读化操作。目前支持以下代码格式:
- `.js`
- `.html`
- `.css`
- `.json`
使用方法
1. 安装依赖
[Asm] 纯文本查看 复制代码pip install jsbeautifier cssbeautifier beautifulsoup4
2. 修改指向的目录
[Asm] 纯文本查看 复制代码base_dir = r"path\to\your\dir" # 你的文件夹路径
将此行改为你的目标目录,填在双引号中间
3. 运行脚本
效果展示



Snipaste_2023-08-27_22-05-07.png (547.88 KB, 下载次数: 0)
下载附件
2023-8-27 22:07 上传




Snipaste_2023-08-27_22-05-36.png (177.88 KB, 下载次数: 0)
下载附件
2023-8-27 22:07 上传

后面的代码可读性较高,方便逆向分析。
PS:本脚本是楼主在逆向分析某浏览器插件的时候顺手写的,批量处理后分析十分方便,有需要的可以使用。如果能顺手给个Star就更好了{:1_905:}

代码, 文件

shiquda
OP
  


吃橘的皮 发表于 2023-8-28 00:57
emmm,纯路人,为什么不用vscode或者webstorm等编译器/编辑器去格式化一下呢?批处理也能做到吧

VScode编辑器确实可以使用Prettier等插件进行格式化,但是我这个脚本可以遍历目标目录,然后所有支持格式化的文件都会执行一次操作,免得多次操作。
至于您提到的批处理是指直接用批处理来实现这个功能?还是指调用vscode的代码格式化功能?不好意思,我对批处理不是很了解。
hrh123   

看起来就是个批量格式化操作,但还是欢迎原创和开源!
不过提个建议,requirements.txt不是手打的,虚拟环境的话用pip的freeze语句导出,非虚拟环境可以用第三方库pipreqs实现
吃橘的皮   

emmm,纯路人,为什么不用vscode或者webstorm等编译器/编辑器去格式化一下呢?批处理也能做到吧
shiquda
OP
  


hrh123 发表于 2023-8-28 00:55
看起来就是个批量格式化操作,但还是欢迎原创和开源!
不过提个建议,requirements.t ...

感谢大佬,学到了!之前一直没搞懂如何导出 requirements,有的时候还要去全部依赖那边翻来找去
52soft   

学习的好东东
kings0b   

学习了!!!!
chengyafu   

谢谢分享
feiyu361   

感谢分享
lcg2014   

真不错,支持
您需要登录后才可以回帖 登录 | 立即注册

返回顶部