• 斑马斑马-12-白云之上-python 源码加密


    一、简介

      Python 语言写的程序无需编译成二进制文件代码,可以直接从源代码运行程序。在计算机内部,Python 解释器把源代码转换成字节码的中间形式,然后再把它翻译成计算机使用的机器语言并运行,这使得 Python 程序更加易于移植。

      通过打包工具(py2exe、PyInstaller 等)将 Python 脚本打包成可执行文件。不同的打包工具基本都可以通过反编译工具将 exe 文件反编译出源码来。

      第一种加密Python源代码的方式,是将.py文件转化为.pyc文件,但这种加密方式很容易被反编译,因此实用性并不高。
      第二种加密Python源代码的方式,是将.py文件转化为.so文件,这样加密的可靠性非常高,无法被被人破解,也就很好地保护了源代码。

    二、demo

    1:环境简介  

    • 系统:CentOS Linux release 8.1.1911 (Core)  【linux查看命令:cat /etc/redhat-release】
    • python:python3.6 

    2:Hello,Demo

      其中Cython为Python的第三方模块。安装的命令如下:pip3 install cython  

      

       我们创建三个文件

      2.1 待加密的文件,也就是我们核心业务代码  

    import datetime
    
    class Today():
        def get_time(self):
            print(datetime.datetime.now())
    
        def say(self):
            print("hello from JC!")
    mytest.py

      2.2 setup.py 加密方法

    from distutils.core import setup
    from Cython.Build import cythonize
    
    setup(ext_modules = cythonize(["mytest.py"]))
    setup.py

      2.3 so_test.py 调用mytest文件进行测试

    from mytest import Today
    t=Today()
    t.get_time()
    t.say()
    so_test.py

     

     

       python3 so_test.py   --测试

      python3 setup.py build_ext --加密

      

     生成的so文件一方面对我们的源程序进行了加密,另一方面,我们还能继续调用原来的mytest.py文件中的内容。为了验证此功能,我们先删除mytest.py,再运行so_test.py文件,如下:

     

     三、利用第三方工具

     

    1:Virbox Protector Trial简介

      一键加壳工具,提供强大的代码虚拟化、高级混淆与智能压缩技术,保护您的程序免受逆向工程和非法修改,并与您的程序链接在一起,使得您的程序无法离开保护代码正常运行。

    2:特点

    高级虚拟化:将被保护的程序代码转换为虚拟机代码,程序运行时,虚拟机将模拟程序执行,进入和离开虚拟机都有高级代码混淆。虚拟机配合代码混淆可以达到很好的保护效果,尤其是开发者的私有逻辑。

    代码混淆:高级混淆利用花指令和代码非等价变形等技术,将程序的代码,转换成一种功能上等价,但是难于阅读和理解的代码,可充分干扰静态分析。

    智能压缩:应用程序的解压缩含有动态密码,让一切自动脱壳工具失效,有效的阻止 .Net、PE 程序的直接反编译,并且有效的防止了加壳后的应用体积膨胀。

    3:使用

      3.1 下载试用并安装:https://shell.virbox.com/apply.html

        3.2 文档教程:https://shell.virbox.com/vpsdocs/index.html

    由于需要费用,暂时不考虑这种方案

  • 相关阅读:
    立即执行函数
    刷题-函数-闭包-返回函数
    刷题-js对象-属性遍历
    并发——无缓冲通道,带缓冲的通道,通道的多路复用,关闭通道
    并发——轻量级线程,通道,单向通道
    包——基本概念,自定义包,创建包,导出包中的标志符
    接口——嵌套,接口和类型间的转换,空接口类型,类型分支
    接口——定义,实现接口的条件,类型与接口的关系,类型断言
    结构体——内嵌,初始化内嵌结构体,内嵌结构体成员名字冲突
    结构体——方法和接收器,为任意类型添加方法
  • 原文地址:https://www.cnblogs.com/YK2012/p/12848623.html
Copyright © 2020-2023  润新知