导航:首页 > 编程语言 > python混淆保护

python混淆保护

发布时间:2023-08-05 16:00:22

python混淆代码后还能找回来么

Python程序的混淆和加密
混淆
为了增加代码阅读的难度, 源代码的混淆非常必要, 一个在线的Python代码混淆网站. 如果你觉得有用, 可以购买离线版本.
同时需要注意的是, 这个混淆其实还是被很多人怀疑的, 因为即使混淆了, 也没有改变代码的结构. 所以, 必要的话, 在编程的时候, 可以故意做点提高逆向难度的事情:
结构稍微改变, 合并几个类到同一个文件.
面向对象的结构中, 偶尔穿插一些无伤大雅的范式编程风格.
加密
最基本的方法是发布pyc文件, 也就是将所有的.py源文件转换成pyc对外发布. 详情可以参考一个blog.
pyc有一个局限性是依赖于python解析器的版本, 使用某一个版本的python解释器生成的pyc必须要在相同版本下的python解释器下才可以正常工作.
使用上述方法可以方便的生成pyc, 初步的隐藏代码了. 不过pyc依然可以被容易的破解, 所以另一种方案是借助cython. cython可以将python文件转换成c, 并编译成pyd文件. 一般将核心模块编译成pyd, 这样被破解的风险就大大降低了. 关于如何使用cython可以参考官网或者这篇文章 或者 这篇
有一个经验之谈, 你可以将所有每个模块中的某个一个位置的变量抽出, 放到一个python文件中, 使用cython来处理这个文件. 这样就会增加破解者从其他pyc文件中移除pyd文件依赖的难度了.
总结
Stackoverflow上有一个长贴关于隐藏python代码实现的. 有兴趣的可以读这里. 技术上方法和手段都是有的, 但是还有不可忽视的一点是法律上的保护和约定.
什么是pyc文件
pyc是一种二进制文件,是由py文件经过编译后,生成的文件,是一种byte code,py文件变成pyc文件后,加载的速度有所提高,而且pyc是一种跨平台的字节码,是由python的虚拟机来执行的,这个是类似于java或者.NET的虚拟机的概念。pyc的内容,是跟python的版本相关的,不同版本编译后的pyc文件是不同的,2.5编译的pyc文件,2.4版本的 python是无法执行的。
什么是pyo文件
pyo是优化编译后的程序 python -O 源文件即可将源程序编译为pyo文件
什么是pyd文件
pyd是python的动态链接库。
为什么需要pyc文件
这个需求太明显了,因为py文件是可以直接看到源码的,如果你是开发商业软件的话,不可能把源码也泄漏出去吧?所以就需要编译为pyc后,再发布出去。当然,pyc文件也是可以反编译的,不同版本编译后的pyc文件是不同的,根据python源码中提供的opcode,可以根据pyc文件反编译出 py文件源码,网上可以找到一个反编译python2.3版本的pyc文件的工具,不过该工具从python2.4开始就要收费了,如果需要反编译出新版本的pyc文件的话,就需要自己动手了(俺暂时还没这能力^--^),不过你可以自己修改python的源代码中的opcode文件,重新编译 python,从而防止不法分子的破解。

Ⅱ python 的混淆后的代码可以还原么

混淆是丢失信息量的操作。
没有办法找回丢失的信息量。
全局批量替换变量名吧?
那你就全局查找,一个一个理顺就好哇。又不是什么加密。

Ⅲ python软件注册机杀毒软件报

Python程序在一些杀毒软件中会被误报为恶意程序,特别是那些与注册码生成器有关的程序。这是因为注册机器往往使用了一些类似于病毒的技术,如加壳、混淆代码等,这些技术也被某些杀毒软件视为恶意行为。

如果你开发了一个使用Python编写的注册机器,并且它被杀毒软件误报为恶意程序,可以考虑以下几种解决方案:

1. 更新杀毒软件:有些杀毒软件可能会对某些误报进行修复信运首,因此建议将杀毒软件更新到最新版本,看看是否可以解决问题。

2. 添加排悄手除项:在杀毒软件中添加排除项,将该Python程序排除在误报范围之外,这样程序就能够正常运行。

3. 修改程序代码:尝试修改程序代码,去掉使用到的一些可能会被杀毒软件误报的技术,如加壳、混淆代码等。

4. 使用其他开发语言:如果以上方法均不能解决问题,可以考虑使用其他开发语言,如C++,来编写注册机器,这样程序可能就不会滑数被杀毒软件误报了。

不管你采取了哪种方案,确保你的软件不含有任何恶意代码是非常重要的。

Ⅳ python项目的加密方案有哪些

Python 本来一种崇尚开源的语言,但随着越来越多程序员和公司接受Python这种语言的时候,代码保护显得尤为严重。
开始Python只作为脚本参与到项目,但越来越多的项目开始完全使用Python开发。

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

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

如果真的怕泄露,别用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 将模块加密打包,发布的时候一个模块就一个文件。

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

main.py 项目程序入口

setting.py 项目配置

apps 项目模块

plusins 项目插件目录

创建项目 pymod create demo1

cd demo1

创建模块 pymod add mod1

启动pycharm 开始编写功能模块

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

__init__.py 、 handlers.py 、param_schemas.py

业务逻辑主要在handlers.py中编写

__init__.py

from pymod.blueprint import Blueprint api = Blueprint("/mod1") from .handlers import *

param_schemas.py

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

handlers.py

from . import api from pymod.ext import RequestHandler, params_validate,TrueResponse,FalseResponse from .param_schemas import schema_sfz from pymod.plugins import sfz_check @api.add_route('/hello') class Hello(RequestHandler): def get(self): self.write('Hello World') @params_validate(schema_sfz) def post(self): sfz = self.get_json_arg("sfz") nl =self.get_json_arg("nl") # self.write(TrueResponse(sfz=sfz, nl=nl)) if sfz_check.check_sfzmhm(sfz): self.write(TrueResponse(hint="身份证明号码验证通过")) else: self.write(FalseResponse(hint="身份证明号码验证失败"))

三、项目部署

程序调试 修改setting.py

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

moles = ["mod1"] moles_config ={ "mod1": { "deny_ip": "", "allow_ip": "*" } }

启动程序 python main.py

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

在项目目录下

pymod pack mod1

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

修改setting.py

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

moles = []

再次运行 python main.py 测试

一切OK,系统就可以发布了。

说不能保密的,是没有研究过python的机制的。我做个一个项目,所有源代码自定义加密,运行时解密。

Ⅵ 有没有好的 python 混淆器 推荐一个

代码混淆,其实很简单。原理就是查找、替换而已。市面上有很多混淆工具,最好是在混淆工具的基础上,自己再写一下,二次混淆。算法也不难。如果需要全局混淆,以及自动混淆,那么就复杂一些了,需要再加上词法分析和语法分析。

如何使用:

1,首先得安装Python。

2,把这个下面这个 confuse.py 文件,复制目标文件夹

3,更改 raw_name_list 列表里的字符串。改成你想混淆的变量名或者类名方法名。

4,运行pythonconfuse.py 即可混淆该文件夹下的.cs文件。

这段代码其实还是很简单的,只是为大家说明一下混淆思想。如果想更方便的使用,需要再加入一些词法分析、语法分析的算法。

代码如下:

#! /usr/bin/env python

#coding=utf-8


import hashlib

import random

import os

###############################

# Describe : 混淆Unity脚本文件

# D&P Author By: 常成功

# Create Date: 2014-11-25

# Modify Date: 2014-11-25

###############################


#想混淆的变量/方法名

raw_name_list = ["function_1", "function_2", "var_1", "var_2",]

#混淆后的变量/方法名

new_name_list = []


#随机可选的字母表

alphabet = ["a", "b", "c", "d", "e", "f", "g",

"h", "i", "j", "k", "l", "m", "n", "o", "p", "q",

"r", "s", "t", "u", "v", "w", "x", "y", "z",

]



#生成新的变量名

def create_new_name() :

m = hashlib.md5()

#生成随机变量名

for raw_name in raw_name_list:

m.update(raw_name)

#生成一个16位的字串

temp_name = m.hexdigest()[0:16]

#合法名称校验

#强制以字母作为变量/方法名的开头

if temp_name[0].isdigit():

initial = random.choice(alphabet)

temp_name = initial + temp_name

temp_name = temp_name[0:16]

#不能重名

while(1):

if temp_name in new_name_list :

initial = random.choice(alphabet)

temp_name = initial + temp_name

temp_name = temp_name[0:16]

else:

new_name_list.append(temp_name)

break


#混淆文件

def confuse_file(path_filename):

file_content = ""

#读文件内容

f = file(path_filename)

# if no mode is specified, 'r'ead mode is assumed by default

while True:

line = f.readline()

if len(line) == 0: # Zero length indicates EOF

break

#混淆

name_index = 0

for raw_name in raw_name_list:

the_new_name = new_name_list[name_index]

line = line.replace(raw_name, the_new_name)

name_index += 1

file_content += line

f.close()

#重写文件

f = file(path_filename, 'w')

f.write(file_content)

f.close()

#遍历当前目录下的所有.cs文件

def confuse_all():

#获取当前目录

dir = os.getcwd()

for root, dirs, filename in os.walk(dir):

for file in filename:

path_filename = os.path.join(root, file)

if path_filename.endswith('.cs'):

confuse_file(path_filename)

print "Confuse File: ", path_filename


if __name__=="__main__":

create_new_name()

confuse_all()

#打印一下混淆的情况.

#如果用文本保存起来, 那么以后可以反混淆, 还原文件

print "Start Confuse ...."

for j in range(0, len(raw_name_list)) :

print raw_name_list[j] , " --> " , new_name_list[j]

print "Confuse Complete !"


Ⅶ 为什么python不可加密

可以加密。 python 代码加密甚至可以做到比用汇编手写混淆,用 c 手写混淆更加难以解密。具体做法略复杂仅简单说个过程。

第一级别是源码级别的混淆,用 ast 和 astor ,再自己手写一个混淆器,三五百行的脚本直接混淆到几万行,整个文件面目全非,基本可以做到就算直接放脚本给你拿去逆,除非你再写出来一个逆向前面的混淆算法的脚本来逆(在熟悉 python 的情况下需要花几天,且不说需要了解程序构造原理),手动去调试脚本几乎达到不可行的地步(话费时间再乘以 2 )

第二级别是个性化定制 pyinstaller , pyinstaller 会打包所有需要的库,将脚本也包含进打包的 exe ,但是, pyinstaller 有一个 stub ,相当于一个启动器,需要由这个启动器来解密脚本和导入模块,外面有直接导出脚本的工具,但是那是针对 pyinstaller 自带的启动器做的,完全可以自己修改这个启动器再编译,这样逆向者就必须手动调试找到 main 模块。配合第一级别加密,呵呵,中国就算是最顶尖的逆向专家也要花个一两周,来破解我们的程序逻辑了,就我所知,实际上国内对于 py 程序的逆向研究不多。

第三级别是再上一层,将 py 翻译为 c 再直接编译 c 为 dll ,配合第一阶段先混淆再转 c 再编译,在第一步混淆之后,会产生非常多垃圾(中间层)函数,这些中间层函数在 c 这里会和 py 解释器互相调用,脚本和二进制之间交叉运行,本身混淆之后的源码就极难复原,再混合这一层,想逆向,难。

第四级别是利用 py 的动态特性,绝大多数逆向者都是 c ,汇编出身,对于程序的第一直觉就是,程序就是一条一条的指令,后一条指令必然在这一条指令后面,然而, py 的动态特性可以让代码逻辑根本就不在程序里面,这一点不想多讲,涉及到我一个项目里的深度加密。

第五级别,数学做墙。了解过比特币原理的知道要想用挖比特币就得提供大量算力去帮网络计算 hash ,这个成为 pow ,那么既然已经采用 py 了估计已经不考虑太多 cpu 利用率了,那就可以采用 pow (还有其他的手段)确保程序运行时拥有大量算力,如果程序被单步调试,呵呵,一秒钟你也跑不出来几个 hash 直接拉黑这个 ip (这个说法可能比较难理解,因为我第四层的加密没有说明,不过意思就是拒绝执行就对了)

阅读全文

与python混淆保护相关的资料

热点内容
程序员主动离职和被裁员哪个好 浏览:790
360命令行 浏览:726
程序员骗色 浏览:668
cisco2950重启命令 浏览:459
加密货币区块链可以增发吗 浏览:290
黄龙公式源码 浏览:773
linux系统ftp服务器 浏览:321
山西配电服务器机柜云主机 浏览:452
量化选股模型公式源码 浏览:9
龙卡购车分期怎么绑app 浏览:779
python读取bios信息 浏览:113
程序员老爸初体验 浏览:729
aes加密后长什么样子 浏览:978
语言有编译器吗 浏览:31
解压声控怎么调大音量 浏览:216
缠论中的高精度画笔源码 浏览:824
通用计算型云服务器 浏览:620
程序员手机分享 浏览:296
pdfsmart 浏览:425
nginx部署php 浏览:666