使用python语言如何保密源代码以防止逆向工程?

使用python语言如何保密源代码以防止逆向工程?,第1张

大家都很忙,谁有时间看你的的烂代码!

如果真的怕泄露,别用python

我以前做过这类事情,而且当时更严格,需要打包部署到客户的服务只在有效期内有效,超过有效期必须更新证书才行。

Python代码用任何方法都没法保证保密性,这个时候你可以考虑用一个工具「nuitka」,这个工具会把你的python源代码映射为c++然后编译为二进制,因此对方是无论如何得不到你的源代码的。

代价就是nuitka这个工具并不完美,有一些限制并不能100%完美的转换所有python代码。

1用Cython编译python成 Windows的pyd文件或Linux的so文件,二进制文件相对安全性较高。

2用源码混淆器把代码搞的又臭又长。。。混淆完了再用Cython编译为二进制。。。这样静态反编译逆向难度也不小。

3同其他语言程序一样,可以对调试状态进行检测,当处于调试状态时退出程序或进入混乱代码耗费逆向工程人员心神。

4分享一个跨平台反调试手段,检测函数运行时间,加断点会导致函数运行时间变长,也可感知正在被调试。

Python是提倡开源的,既然选择Python还是拥抱开源才好~ 都开源还担心逆向工程嘛

没有不能逆的软件。

只要汇编语言过关,逆向工程都是可以实现的,不要有其它想法。

你唯一可以做的,就是不让别人用python读取源代码而已。那样实现起来比较简单。

python 适合开发服务器程序,或者自己科研使用的程序,如果是 作为用户程序,安装到 pc 或手机上,还是 其它 c++ 或java 比较合适

1)可以把需要保护的部分用c语言实现,从而编译成so等文件,这样逆向的成本会比较高,可以防止直接打开python文件看到代码逻辑。

2)so文件通过ida等工具也是可以反汇编的,可以通过对c语言进行代码混淆,花指令等 *** 作,提高通过ida等反汇编工具的分析难度。

3)不存在绝对无法逆向的技术手段,因此只能是看具体需求,选择具体的防逆向的技术手段。

有工具类似py2exe转成可执行程序,隐藏全部源代码,虽然bytecode还是可以反编译,但是难度大多了

1 最稳的就是你改cpython加载代码的过程,改zip包读取最稳。

2 借助一些加密工具在编译pyc之前进行一定的混淆,可以防君子,自我安慰一下。

商用一般都是用第一种办法,小打小闹用第二种。
可以考虑使用pymod工具,使用pymod pack 将模块加密打包,发布的时候一个模块就一个文件。

先睹为快,看看一个项目发布的时候,只有几个文件,

mainpy 项目程序入口

settingpy 项目配置

apps 项目模块

plusins 项目插件目录
创建项目 pymod create demo1

cd demo1

创建模块 pymod add mod1

启动pycharm 开始编写功能模块

一个模块默认由三个文件组成

__init__py 、 handlerspy 、param_schemaspy

业务逻辑主要在handlerspy中编写

__init__py

from pymodblueprint import Blueprint api = Blueprint("/mod1") from handlers import

param_schemaspy

schema_sfz = { "type": "object", "required": ["sfz", "nl"], "properties": { "sfz": { "type": "string", "minLength": 18, "maxLength": 18, "description": "身份z明号码" }, "nl": { "type": "integer", "minimum": 0, "maximum": 150, "description": "年龄" } } }

handlerspy

from import api from pymodext import RequestHandler, params_validate,TrueResponse,FalseResponse from param_schemas import schema_sfz from pymodplugins import sfz_check @apiadd_route('/hello') class Hello(RequestHandler): def get(self): selfwrite('Hello World') @params_validate(schema_sfz) def post(self): sfz = selfget_json_arg("sfz") nl =selfget_json_arg("nl") # selfwrite(TrueResponse(sfz=sfz, nl=nl)) if sfz_checkcheck_sfzmhm(sfz): selfwrite(TrueResponse(hint="身份z明号码验证通过")) else: selfwrite(FalseResponse(hint="身份z明号码验证失败"))

三、项目部署

程序调试 修改settingpy

# 开发模式下 运行的模块名称必须填写

modules = ["mod1"] modules_config ={ "mod1": { "deny_ip": "", "allow_ip": "" } }

启动程序 python mainpy

调试没有问题,进入发布模式

在项目目录下

pymod pack mod1

在target目录下生成mod1mod文件,将其复制到apps目录中

修改settingpy

# 开发模式下 运行的模块名称必须填写

modules = []

再次运行 python mainpy 测试

一切OK,系统就可以发布了。
说不能保密的,是没有研究过python的机制的。我做个一个项目,所有源代码自定义加密,运行时解密。


欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/dianzi/10928894.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-05-12
下一篇 2023-05-12

发表评论

登录后才能评论

评论列表(0条)

保存