python代码混淆与代码打包

阿里云国内75折 回扣 微信号:monov8
阿里云国际,腾讯云国际,低至75折。AWS 93折 免费开户实名账号 代冲值 优惠多多 微信号:monov8 飞机:@monov6

0x00 背景

自己写的项目又想保护源码自己做个混淆是最方便的了。

0x01 实践

这里使用开源工具 GitHub - astrand/pyobfuscate: pyobfuscate虽然git上才500多star但是很好用。它的使用场景是混淆单个py文件。很多事物有开始就有结束有混淆就有反混淆所以为了增加反混淆难度我这里先将py文件进行混淆再把混淆后的py代码编译成pyc这样反解难度就大大增加啦

下面创建一个pyc_change.py 用于将py编译成pyc:

#!/usr/bin/env python
# encoding=utf-8

'''
pyc 文件只有在文件被当成模块导入时才会生成。也就是说 Python 解释器认为只有 import 进行的模块才需要被重用。 生成 pyc 文件的好处显而易见当我们多次运行程序时不需要重新对该模块进行重新的解释。主文件一般只需要加载一次不会被其他模块导入所以一般主文件不会生成 pyc 文件。

所以这个脚本的功能是将所有py文件编译为pyc

需要统一.pyc文件的名称例如python3.6环境下util.py生成的.pyc文件名为util.cpython-36.py此时直接使用:

import util
会报错

ImportError: No module named 'util'
需要将util.cpython-36.pyc重命名为util.pyc
'''

import compileall


def compile_run():
    '''
    将当前目录下的py文件预编译为pyc文件
    :return:
    '''
    compileall.compile_dir(r'./dest')


if __name__ == '__main__':
    compile_run()

编写一个一键编译脚本a.bat:

del /F /S /Q dest
md dest
set name=yourcodename
python36 pyobfuscate-master/pyobfuscate.py yourcodename_suffix.py >dest/%name%.py
python36 pyc_change.py
move dest\__pycache__\%name%.cpython-36.pyc ./%name%.pyc

上面bat文件的意思是先创建一个dest 目录然后执行当前目录的 pyobfuscate-master 将yourcodename_suffix.py 进行混淆混淆后的代码命名为yourcodename.py再对yourcodename.py 编译成 yourcodename.pyc。

文件夹位置截图

生成的结果在dest目录。注意一次只能混淆编译一个文件哦。

0x02 打包

打包这里介绍2种吧一种是打zip包并执行它常用于渗透测试。

例如参考这篇文章Python 的 zipapp构建可执行的 Zip 应用程序-云社区-华为云

python打zip包并执行

$ zip hello.zip __main__.py
  adding: __main__.py (stored 0%)

$ python ./hello.zip
Hello, World!

第二种是项目发布常用的打rpm包格式(要提前安装rpm)

fpm -s dir -t rpm -n release_engine -v 1.0.0 --iteration release --prefix /opt/test_engine/ --rpm-digest md5 --architecture x86_64 --description leeezp --package /tmp -C /tmp/zip/

-n 是rpm文件名-v 版本信息 --prefix 是安装后解压到哪个目录--description 为添加的描述--package 为打包到哪个目录-C 为将哪个目录下的文件打包成rpm。

0x03 后记

1.分享一下我的文件混淆的思路

单个文件混淆一层编译为pyc。

多个文件混淆主文件编译为pyc。引用(import)的文件编译成pyc。

也就是说每个文件都要以pyc运行。

2.反编译网站只可以解密一点

python反编译 - 在线工具

.

阿里云国内75折 回扣 微信号:monov8
阿里云国际,腾讯云国际,低至75折。AWS 93折 免费开户实名账号 代冲值 优惠多多 微信号:monov8 飞机:@monov6
标签: python