专栏首页python3对Python源码加密及反编译前后对比

对Python源码加密及反编译前后对比

关于python的加密

目前软件开发商对 Python 加密时可能会有两种形式,一种是对python转成的exe进行

保护,另一种是直接对.py或者.pyc文件进行保护,下面将列举两种形式的保护流程。

1、 对 python转exe加壳

下载最新版加壳工具,使用加壳工具直接对demo.exe进行加壳操作

2、对.py/.pyc加密

第一步,使用加壳工具对 python 安装目录下的 python.exe 进行加壳,将 python.exe 拖入到加壳工具 VirboxProtector 中,配置后直接点击加壳。

第二步,对.py/.pyc 进行加密,使用 DSProtector 对.py/.pyc 进行保护。

安全技术:

l 虚拟机外壳:精锐5的外壳保护工具,创新性的引入了预分析和自动优化引擎,有效的解决了虚拟化保护代码时的安全性和性能平衡问题。

l 碎片代码执行:利用自身成熟的外壳中的代码提取技术,抽取大量、大段代码,加密混淆后在安全环境中执行,最大程度上减少加密锁底层技术和功能的依赖,同时大量大段地移植又保证了更高的安全性。

l Virbox加密编译引擎:集编译、混淆等安全功能于一身,由于在编译阶段介入,可优化空间是普遍虚拟化技术无法比拟的,对代码、变量的混淆程度也有了根本的提升。

l 反黑引擎:内置R0级核心态反黑引擎,基于***行为特征 的(反黑数据库)反制手段。精准打击调试、注入、内存修改等***行为,由被动挨打到主动防护。

加密效果:

未经深思保护#

生成的dis文件可以用 notepad++ 查看出源码

解决方案#

由上图可看出,没有经过加密的.pyc文件可以很轻易的通过Easy Python Decompiler v1.3.2工具反编译出源码 ,深思对.pyc保护的方式是通过DS Protector工具进行保护 ,防止源码被反编译 。

DS Protector是北京深思数盾自主研发的程序数据保护工具 ,它弥补了加壳VirboxProtector的功能, Virbox Protector是对程序编译后的二进制代码行保护,配合DS Protector数据保护工具就形成了代码,数据三位一体的防护。

而对于 python 开发的程序保护方式主要是对 开发的程序保护方式主要是对 pyc 文件进行加密,可以保护主要代码逻辑不被反编译,从而最大程度保护软件开发者的合法权益。

通过 Virbox Protector先对解析文件的python.exe进行加密,加密时打开 DS Protector 插件功能,然后通过DS Protector对pyc文件进行加密,并使用壳生成的配置将后文件进行加密后的python.exe pyc文件和授权三者关联起来。

经深思保护#

加密后使用 Easy Python Decompiler v1.3.2工具反编译 pyc文件失败。

对可执行的exe进行保护#

未经深思保护#

通过打包工具py2exe和跨平台的PyInstaller工具都可以将 python 脚本打包成可执行文件,打包后的可执行文件不依赖 python,可以直接在没装python 的机器上运行。 注:不同的打包方式原理不同,源码存放位置也不同,所以需要保护具体模块也不同。

使用 Py2exe打包后,只需使用unpy2exe-master,将exe文件放入待反编译的程序目录下,执行 python unpy2XXX.exe件,反编译为 pyc pyc文件;

使用 PyInstaller打包后,将pyinstxtractor.py 放入待反编译的程序目录下,执行 pyinstxtractorXXX.exe,会对应的生成一个文件夹,在文件夹中找到名字和程序相同pyc文件。 然后使用 Easy Python Decompiler v1.3.2工具反编译 pyc 文件,成功后同目录下生成一个带后缀dis的文件,生成的dis文件可以用notepad++查看出源码。

解决方案#

python脚本打包的可执行文件,可以直接使用 Virbox Protector 对exe 程序进行加壳保护,加壳软件中内置了虚拟机、碎片代码执行混淆等多种安全技术,能有效阻止 exe 程序被反编译,无法dump内存。 注:不同的打包方式原理不同,源码存放位置也不同所以需要保护的具体模快也不同

经深思保护:#

加密之后再尝试解压 XXX.exe 失败 ,已经无法进行反编译,使用常规工具也是无法分析的。

加密之后再尝试解压log322.exe失败,已经无法进行反编译,使用常规反编译工具也是无法进行分析的。

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

我来说两句

0 条评论
登录 后参与评论

相关文章

  • python 进程池的简单使用方法

    记得之前面试的时候,面试官问:你知道进程池的默认参数吗? 我没有回答上来,后来才知道,是有默认参数的。下面就看看它的默认参数

    py3study
  • linux的安装3.7python

    py3study
  • centos7安装python3.6.5

    解压后新建文件夹将Python-3.6.5放在/usr/local/python3下

    py3study
  • 如何批量对每一行或者每一列进行排序?

    逍遥之
  • 5分钟面试指南(第一篇)

    本部分我们会为大家提供一些python初级工程师在面试过程中遇到的常见的面试题目,期望达到的效果:

    还是牛6504957
  • 5分钟面试指南(第四篇 循坏迭代大杀器)

    本部分我们会为大家提供一些python初级工程师在面试过程中遇到的常见的面试题目,期望达到的效果:

    还是牛6504957
  • 使用ABAP内表作为数据结构实现非波拉契数列(fibonacci)的生成

    Jerry Wang
  • 模型融合-Stacking&Blending

    模型融合是指通过分层对模型进行集成,比如以两层为例,第一层为基学习器,使用原始训练集训练基学习器,每个基学习器的输出生成新的特征,作为第二层模型的...

    小石头记
  • QTextEdit笔记

    Qt君
  • RocketMQ详解(13)——RocketMQ的消息模式

    先启动2个Consumer程序,再启动单个Producer程序,两个Consumer端控制台输出如下:

    张申傲

扫码关注云+社区

领取腾讯云代金券