除此以外 , Python 解释器还会从环境变量中获取是否不生成 .pyc 文件 , 因此也需要做处理:
[Python/pythonrun.c]--------------------------------------voidPy_InitializeEx(int install_sigs){...f ((p = Py_GETENV("PYTHONDEBUG")) && *p != '')Py_DebugFlag = add_flag(Py_DebugFlag, p);if ((p = Py_GETENV("PYTHONVERBOSE")) && *p != '')Py_VerboseFlag = add_flag(Py_VerboseFlag, p);if ((p = Py_GETENV("PYTHONOPTIMIZE")) && *p != '')Py_OptimizeFlag = add_flag(Py_OptimizeFlag, p);// 移除对 PYTHONDONTWRITEBYTECODE 的处理if ((p = Py_GETENV("PYTHONDONTWRITEBYTECODE")) && *p != '')Py_DontWriteBytecodeFlag = add_flag(Py_DontWriteBytecodeFlag, p);...}
禁止访问字节码对象 co_code仅仅是不生成 .pyc 文件还是不够的 , 恶意用户已然可以访问对象的 co_code 属性来获取字节码 , 进而通过反编译的手段获取到源码 。因此 , 我们也需要禁止用户访问字节码对象:
[Objects/codeobject.c]--------------------------------------static PyMemberDef code_memberlist[] = {{"co_argcount",T_INT,OFF(co_argcount),READONLY},{"co_nlocals",T_INT,OFF(co_nlocals),READONLY},{"co_stacksize",T_INT,OFF(co_stacksize),READONLY},{"co_flags",T_INT,OFF(co_flags),READONLY},// {"co_code",T_OBJECT,OFF(co_code),READONLY},{"co_consts",T_OBJECT,OFF(co_consts),READONLY},{"co_names",T_OBJECT,OFF(co_names),READONLY},{"co_varnames",T_OBJECT,OFF(co_varnames),READONLY},{"co_freevars",T_OBJECT,OFF(co_freevars),READONLY},{"co_cellvars",T_OBJECT,OFF(co_cellvars),READONLY},{"co_filename",T_OBJECT,OFF(co_filename),READONLY},{"co_name",T_OBJECT,OFF(co_name),READONLY},{"co_firstlineno", T_INT,OFF(co_firstlineno),READONLY},{"co_lnotab",T_OBJECT,OFF(co_lnotab),READONLY},{NULL}/* Sentinel */};
到此 , 一个定制的 Python 解释器完成了 。
演示运行脚本通过 -k 选项执行已加密密钥文件 , Python 解释器可以运行已加密和未加密的 Python 文件 。
文章插图
加载模块可以通过 -m <module> 的方式加载已加密和未加密的模块 , 也可以通过 import <module> 的方式来加载已加密和未加密的模块 。
文章插图
禁用字节码通过禁用字节码 , 我们达到以下效果:
.pyc
文章插图
异常堆栈信息尽管代码是加密的 , 但是不会影响异常时的堆栈信息 。
文章插图
调试加密的代码也是允许调试的 , 但是输出的代码内容会是加密的 , 这正是我们所期望的 。
文章插图
思考
- 如何防止通过内存操作的方式找到对象的co_code?
- 如何进一步提升私钥被逆向工程探知的难度?
- 如何能在调试并希望看到源码的时候看到?
推荐阅读
- Elasticsearch中数据是如何存储的?
- Windows 7用户必看 如何升级至Windows 10
- HTTP是如何使用TCP连接
- 如何将 Python 的一个类方法变为多个方法?
- 如何在Mac下生成ssh密钥?
- 这一次,让你完全理解 HTTPS 到底是如何做到数据传输安全的
- 程序员告诉你微信营销号如何防封、解封
- 黑客是如何控制你手机的?出现这几种情况,你的手机可能已中招
- 一文教会你如何申请ios开发者账号
- 更年期的女性 练太极对你的好处到底有多大