如何用PyInstaller打包mitmproxy与Python脚本并保护脚本文件
解决方案
要实现将mitmproxy脚本逻辑与可执行程序一并打包、避免暴露原始脚本,核心是不再通过命令行参数指定外部脚本文件,而是直接在代码中集成脚本逻辑并通过mitmproxy的API启动代理。
步骤1:修改脚本逻辑,直接调用mitmproxy API
原代码通过mitmdump命令行启动并指定外部proxy.py,这会导致mitmproxy依赖外部文件。我们可以调整代码,直接注册请求处理函数并启动代理:
from mitmproxy import http from mitmproxy.tools.dump import DumpMaster, Options async def request(flow: http.HTTPFlow) -> None: if flow.request.method == 'GET': flow.response = http.Response.make( 200, b"Hello World", {"Content-Type": "text/html","access-control-allow-origin": "*"}, ) def main(): # 配置代理选项 options = Options( listen_host='0.0.0.0', listen_port=9999, client_replay_concurrency=-1, websocket=False ) # 创建DumpMaster实例 master = DumpMaster(options) # 注册请求处理函数 master.addons.add(request) try: master.run() except KeyboardInterrupt: master.shutdown() if __name__ == '__main__': main()
步骤2:用PyInstaller打包修改后的脚本
使用以下命令打包,确保所有依赖和逻辑都被嵌入到单个可执行文件中:
pyinstaller --onefile your_modified_script.py
关键说明
- 不再使用
-s proxy.py参数:原来的方式会让mitmproxy从文件系统加载脚本,修改后直接通过master.addons.add()注册处理函数,逻辑完全内嵌在可执行文件中。 - PyInstaller打包注意事项:如果打包后遇到依赖缺失问题,可添加
--hidden-import参数指定mitmproxy的内部模块,比如:
具体缺失的模块可根据运行时报错补充。pyinstaller --onefile --hidden-import mitmproxy.addons.core --hidden-import mitmproxy.addons.proxyserver your_modified_script.py
这样打包后的可执行文件无需依赖外部proxy.py,脚本逻辑不会暴露给用户。
内容的提问来源于stack exchange,提问作者Srijan Sinha
相关产品推荐
相关产品推荐

