对Python代码进行保护

** Python代码应该是公开的**, 但是由于各种原因(主要是公司利益考虑)需要对代码进行混淆, 以防止他人获取源代码, 窃取成果.

参考资料:

[1]. Protecting a Python codebase - part1

[2]. Protecting a Python codebase - part2

[3]. Protecting a Python codebase - part3

[4]. Building an obfuscated Python interpreter: we need more opcodes


To protect a python codebase, just need to:

  1. customize python interpreter
  2. compile the sourcecode
  3. distribute the bytecode

To customize python interpreter, just need to:

  1. git clone git@github.com:citrusbyte/python-obfuscation.git
  2. python python-obfuscation/custom_interpreter/opcodes/scramble-opcodes.py --python-source PYTHON_SRC_DIR
  3. cd PYTHON_SRC_DIR
  4. ./configure --enable-shared --prefix=/opt/python LDFLAGS=-Wl,-rpath=/opt/python/lib
  5. make && make install

To create more opcode, just need to(copy from [4]):

  1. add line in Include/opcode.h, such as #define LOAD_FAST_ZERO_LOAD_CONST 148
  2. update the big switch in Python/ceval.c
case LOAD_FAST_ZERO_LOAD_CONST:
  x = GETLOCAL(0);
  if (x != NULL) {
    Py_INCREF(x);
    PUSH(x);
    x = GETITEM(consts, oparg);
    Py_INCREF(x);
    PUSH(x);
    goto fast_next_opcode;
}
format_exc_check_arg(PyExc_UnboundLocalError,
                     UNBOUNDLOCAL_ERROR_MSG,
                     PyTuple_GetItem(co->co_varnames, oparg));
break;

转载于:https://my.oschina.net/alazyer/blog/737961

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值