cython混淆加密

2023-05-16

    python代码是一种解释型的语言,有了代码和环境就可以执行,它无需编译。如果需要对代码进行混淆,可以借助cython这个库。它的安装很简单,直接运行pip install cython就可以安装。

    进行代码混淆之前,还需要一个环境,就是msvc,其实就是visual studio 2017环境安装。

    使用cython其实最麻烦的在于vc环境的安装,有了这一步,后面才可以把py文件生成pyd文件,达到加密的目的。

    可以准备一个简单的py文件:

    hallo.py 

def hello(name):
    return "hello,%s" % name


def add(a, b):
    return a + b

    在hallo.py同目录下新建一个setup.py文件

from distutils.core import setup
from Cython.Build import cythonize
setup(ext_modules=cythonize("hallo.py"))

    接着就可以执行如下命令:

python setup.py build_ext

    不出意外,运行如下:

C:\Users\buejee\PycharmProjects\pythonProject>python setup.py build_ext
Compiling hallo.py because it changed.
[1/1] Cythonizing hallo.py
C:\Users\buejee\AppData\Local\Packages\PythonSoftwareFoundation.Python.3.10_qbz5n2kfra8p0\LocalCache\local-packages\Python310\site-packages\Cython\Compiler\Main.py:369: FutureWarning: Cython directive 'language_level' not set, using 2 for now (Py2). This will change in a later release! File: C:\Users\buejee\PycharmProjects\pythonProject\hallo.py
  tree = Parsing.p_module(s, pxd, full_module_name)
running build_ext
building 'hallo' extension
"D:\tools\Microsoft Visual Studio\2017\Community\VC\Tools\MSVC\14.16.27023\bin\HostX86\x64\cl.exe" /c /nologo /O2 /W3 /GL /DNDEBUG /MD "-IC:\Program Files\WindowsApps\PythonSoftwareFoundation.Python.3.10_3.10.2544.0_x64__qbz5n2kfra8p0\include" "-IC:\Program Files\WindowsApps\PythonSoftwareFoundation.Python.3.10_3.10.2544.0_x64__qbz5n2kfra8p0\Include" "-ID:\tools\Microsoft Visual Studio\2017\Community\VC\Tools\MSVC\14.16.27023\include" "-IC:\Program Files (x86)\Windows Kits\NETFXSDK\4.6.1\include\um" "-ID:\Windows Kits\10\include\10.0.14393.0\ucrt" "-ID:\Windows Kits\10\include\10.0.14393.0\shared" "-ID:\Windows Kits\10\include\10.0.14393.0\um" "-ID:\Windows Kits\10\include\10.0.14393.0\winrt" "-ID:\Windows Kits\10\include\10.0.14393.0\cppwinrt" /Tchallo.c /Fobuild\temp.win-amd64-cpython-310\Release\hallo.obj
hallo.c
"D:\tools\Microsoft Visual Studio\2017\Community\VC\Tools\MSVC\14.16.27023\bin\HostX86\x64\link.exe" /nologo /INCREMENTAL:NO /LTCG /DLL /MANIFEST:EMBED,ID=2 /MANIFESTUAC:NO "/LIBPATH:C:\Program Files\WindowsApps\PythonSoftwareFoundation.Python.3.10_3.10.2544.0_x64__qbz5n2kfra8p0\libs" "/LIBPATH:C:\Program Files\WindowsApps\PythonSoftwareFoundation.Python.3.10_3.10.2544.0_x64__qbz5n2kfra8p0" "/LIBPATH:C:\Program Files\WindowsApps\PythonSoftwareFoundation.Python.3.10_3.10.2544.0_x64__qbz5n2kfra8p0\PCbuild\amd64" "/LIBPATH:D:\tools\Microsoft Visual Studio\2017\Community\VC\Tools\MSVC\14.16.27023\lib\x64" "/LIBPATH:C:\Program Files (x86)\Windows Kits\NETFXSDK\4.6.1\lib\um\x64" "/LIBPATH:D:\Windows Kits\10\lib\10.0.14393.0\ucrt\x64" "/LIBPATH:D:\Windows Kits\10\lib\10.0.14393.0\um\x64" /EXPORT:PyInit_hallo build\temp.win-amd64-cpython-310\Release\hallo.obj /OUT:build\lib.win-amd64-cpython-310\hallo.cp310-win_amd64.pyd /IMPLIB:build\temp.win-amd64-cpython-310\Release\hallo.cp310-win_amd64.lib
  正在创建库 build\temp.win-amd64-cpython-310\Release\hallo.cp310-win_amd64.lib 和对象 build\temp.win-amd64-cpython-310\Release\hallo.cp310-win_amd64.exp
正在生成代码
已完成代码的生成

    构成成功,生成的pyd文件在build目录下:

 

    这个文件虽然名字叫hallo.cp310-win_amd64.pyd,但是你可以像hallo.py文件一样调用。

 

     而这个pyd文件就是经过加密之后的文件,类似dll,可以反汇编,但是不能反编译。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

cython混淆加密 的相关文章

  • Python,使用多处理进一步加速 cython 函数

    此处显示的代码经过简化 但会触发相同的 PicklingError 我知道关于什么可以腌制和什么不能腌制有很多讨论 但我确实从他们那里找到了解决方案 我编写了一个简单的 cython 脚本 具有以下功能 def pow2 int a ret
  • 使用最小 Cython 模块时 Python 崩溃(Python3、Anaconda3、Windows7)

    我尝试在 Windows 7 下将 Cython 与 Python3 Anaconda3 一起使用 通过编辑文件 cygwinccompiler py 解决了 distutils 中的错误后 参见在 Windows 7 下使用 python
  • Python运行时:重新编译和重用C库

    我正在开发一个用于用户定义函数的数值分析的工具 这个想法是用 Python 制作一个方便的 UI 用户可以在其中输入 C 函数 然后按下按钮 并接收一些输出数据 计算可能需要几分钟或几小时 因此仅使用 Numpy 的性能是不可接受的 我尝试
  • Python 3.4:为 64 位 Windows 编译 cython 模块

    我有一个 pyx 模块 我一直在尝试通过各种方式编译它以与 Windows 上的 64 位 python 3 4 一起使用 但没有成功 经过大量的试验和错误 它确实可以编译 python setup py build ext inplace
  • 在 Cython 类中,使用 __init__ 和 __cinit__ 有什么区别?

    代码块1使用 init cython 3 cdef class c cdef int a str s def init self self a 1 self s abc def get vals self return self a sel
  • Cython 中的复数

    在 Cython 中处理复数的正确方法是什么 我想使用 dtype np complex128 的 numpy ndarray 编写一个纯 C 循环 在 Cython 中 关联的 C 类型定义在Cython Includes numpy i
  • 对于结构,此处不允许使用 cdef 语句

    我有一个带有结构定义的简单 Astruct pyx Astruct pxd cdef struct A int x int y int z 以及使用它的 Cython 函数 struct test pyx from random impor
  • 从另一个 cython 包的 cdef 类内联 cdef 方法

    我有一个 cython 类 如下所示 cdef class Cls cdef func1 self pass 如果我在另一个库中使用此类 我是否能够内联 func1 这是一个类方法 或者我应该找到解决方法 例如 通过创建一个将 Cls 指针
  • 将 pandas 数据框中的行和上一行与数百万行进行比较的最快方法

    我正在寻找解决方案来加速我编写的函数 以循环遍历 pandas 数据帧并比较当前行和前一行之间的列值 例如 这是我的问题的简化版本 User Time Col1 newcol1 newcol2 newcol3 newcol4 0 1 6 c
  • Cython 和 Python 项目测试驱动开发和 .pyx 文件结构建议

    构建一个的最佳方式是什么python cython项目 以便我可以对驻留在其中的代码进行单元测试 pyx文件 是否可以就地对该代码进行单元测试 或者重构可以让我以另一种方式实现这一目标 我是新来的cython但有 Python TDD mo
  • 在 Cython 中使用半精度 NumPy 浮点数

    我正在尝试从一些 Cython 代码将 float16 数据发送到 Nvidia P100 卡 当我使用 float32 时 我可以在 Cython 中定义我的类型 如下所示 DTYPE np float32 ctypedef np flo
  • 在分析 Cython 代码时,什么是“stringsource”?

    我有一个繁重的 Cython 函数 我正在尝试优化它 我正在根据以下教程进行分析http docs cython org src tutorial profiling tutorial html http docs cython org s
  • 使用多核的 Numpy np.einsum 数组乘法

    我用MKL编译了numpy 1 6 2和scipy 希望有更好的性能 目前我有一个严重依赖 np einsum 的代码 并且我被告知 einsum 不适用于 MKL 因为几乎没有矢量化 所以我想用 np dot 和切片重新编写一些代码 只是
  • 使用 C 函数扩展 Numpy

    我正在尝试加速我的 Numpy 代码 并决定实现一个特定的函数 而我的代码大部分时间都在 C 中使用 我实际上是 C 的菜鸟 但我设法编写了一个函数 将矩阵中的每一行归一化为 1 我可以编译它 并用一些数据 在 C 中 测试它 它满足了我的
  • 如何直接从 Cython 调用 numpy/scipy C 函数,而不需要 Python 调用开销?

    我正在尝试在 Cython 中进行计算 该计算严重依赖于一些 numpy scipy 数学函数 例如numpy log 我注意到 如果我在 Cython 中的循环中重复调用 numpy scipy 函数 则会产生巨大的开销 例如 impor
  • Cython 优化

    我正在用 Python 编写一个相当大的模拟 并希望从 Cython 获得一些额外的性能 然而 对于下面的代码 我似乎没有得到那么多 即使它包含一个相当大的循环 大约 10 万次迭代 我是否犯了一些初学者错误 或者这个循环大小是否太小而无法
  • 向量化 for 循环 NumPy

    我对 Python 比较陌生 并且有一个嵌套的 for 循环 由于 for 循环需要一段时间才能运行 因此我试图找到一种方法来向量化此代码 以便它可以运行得更快 在本例中 coord 是一个 3 维数组 其中 coord x 0 0 和 c
  • 如何在“语言=c++”模式下使用C复数?

    我的大部分库都是用 Cython 在 正常 C 模式下编写的 到目前为止 我很少需要任何 C 功能 但总是假设 有时确实如此 如果我愿意 我可以将一个模块切换到 C 模式 所以我有大约 10 个 C 模式模块和 1 个 C 模式模块 现在的
  • Cython指定固定长度字符串的numpy数组

    我有一个函数 我想使用 Cython 来处理大量固定长度的字符串 对于标准 cython 函数 我可以像这样声明数组的类型 cpdef double g double in arr cdef double out arr np zeros
  • 是否可以在 Cython 中声明和定义位字段?

    在 C C 中你可以声明一个位域 https en cppreference com w cpp language bit field作为结构体 通过指定用于结构体中给定字段的位数 例如 typedef struct char threeB

随机推荐

  • [Java] synchronized在代码块中修饰.class与this的区别

    synchronized是java中的关键字 xff0c 表示同步 xff0c 可以在多线程环境中起到锁的作用 它是jvm层面的锁 xff0c 不需要人为获取释放锁资源 xff0c 由jvm决定 synchronized可以直接用在方法上
  • java面向对象编程中可能出现的隐藏hide、遮蔽shadow、遮掩obscure

    在java面向对象编程中 xff0c 我们最常遇到的两个场景是覆盖和重载 这两种情形是因为方法名相同的不同展现形式 方法覆盖是表现在父类和子类之间 方法重载发生在一个类的内部 在面向对象编程中 xff0c 我们还可能出现下面几种场景 xff
  • java控制台输出颜色设置

    在java中 xff0c 控制台输出 xff0c System out println 显示默认黑色 xff0c 如果是System err println 显示红色 要想让控制台输出改变颜色 xff0c 需要做一些设置 就像在linux终
  • java删除非空文件夹

    java中删除文件和空文件夹很简单 xff0c 直接调用File api xff0c file delete 就可以删除文件或者空文件夹本身 但是如果是非空文件夹 xff0c 这个方法就会失败 xff0c 就像在linux下我们使用命令rm
  • springboot项目中PropertySource读取yaml配置文件

    springboot项目中 xff0c 当我们使用 64 Value注解读取配置属性 xff0c 默认的配置文件是properties类型文件 xff0c 如果一些配置来自yaml格式配置文件 xff0c 那么就需要做一个配置 Proper
  • Java内存溢出问题排查分析

    目录 前言 一 MAT xff08 Memory Analyzer Tool xff09 二 软件初识 三 捕获dump文件 1 主动方式 2 被动方式 四 分析dump文件 总结 前言 项目运行过程中 xff0c 我们可能会遇到Java内
  • Excel行变列,列变行技巧以及单元格换行

    在excel操作中 xff0c 有可能有这样的需求 xff0c 就是一列数据 xff0c 我们最终需要把他们放在一行上展示 xff0c excel提供了复制粘贴功能 xff0c 在粘贴的时候 xff0c 右键选择 选择性粘贴 xff0c 再
  • snakeyaml生成yaml文件空值显示问题

    snakeyaml开源库 xff0c 可以很方便的加载和生成yaml文件 xff0c 普通的加载 xff0c 其实springboot项目都可以实现 xff0c 在生成yaml文件的时候 xff0c 有几个问题需要注意 xff0c 第一个是
  • java反射调用System.out.println实现控制台打印

    在java编程中 xff0c 我们最常用的控制台打印就是System out println 我们如果想用反射的方式来实现打印 xff0c 该如何操作呢 xff1f 我们可能会想着直接这样使用 Class forName 34 java l
  • vscode官方下载太慢解决办法

    不说话 xff0c 直接上动态图 xff1a 详细步骤 xff1a 1 打开官网 xff1a Visual Studio Code 点击下载 2 在下载器这里复制下载链接 xff0c 粘贴到浏览器地址栏 3 改变官网地址主地址为 vscod
  • node通过node-java库调用java

    node有一个库 node java xff0c 可以通过js的方式调用java语言 xff0c 听起来好像很好玩 xff0c 但是这个玩意要求很复杂 1 本机安装msbuild环境 这个东西简单的安装方式就是npm install g w
  • node-gyp编译c++编写的node扩展

    node有一个模块addon xff0c 翻译过来 xff0c 是插件 xff0c 但是有的地方也叫扩展 xff0c 这部分是用c 43 43 来编写的 xff0c 最后可以通过node gyp来针对各个平台编译适合自己平台的扩展 xff0
  • log4j日志漏洞问题

    去年 xff0c log4j被爆出了一个漏洞 xff0c 说可以通过利用日志格式化中的远程注入控制主机 当时 xff0c 这个漏洞被形容为史诗级漏洞 xff0c 因为这个远程操作可以执行一些操作 xff0c 如果这个操作有恶意 xff0c
  • postgresql数据备份与恢复

    postgresql数据备份与恢复在实际工作中可能会用到 xff0c 这里记录一下自己整理的备份与恢复的过程 xff0c 备份一般使用pg dump来做 xff0c 但是它备份的结果有两种格式 xff0c 默认不加 Fc参数 xff0c 产
  • bat批处理脚本大全

    目录 1 echo 2 注释 3 常见cmd命令 4 参数与变量 5 for循环 6 函数 7 数组 在windows上编程或者制作一些小工具 xff0c 少不了使用批处理脚本 xff0c 而且在各种开发环境搭建中我们经常会看到批处理脚本
  • node日志log4js库使用示例

    在node开发或者electron项目开发中 xff0c 我们可能需要记录日志的功能 xff0c 便于我们出错排查问题 今天介绍node中的日志库log4js log日志记录 xff0c 一般需要配置日志记录的级别 xff0c 日志输出类型
  • Maven项目引用本地jar涉及scope配置

    在项目开发过程中 xff0c 难免遇到需要引用私有jar的情况 xff0c 这时候最好是将该jar推送到私服仓库 xff0c 但是由于种种 现实问题 xff0c 比如权限不够 时间不够等等 于是就可以尝试将jar放入项目中进行集成 xff0
  • postgresql使用pg_basebackup备份与恢复

    postgresql可以使用pg dump pg restore等命令来进行备份与恢复 xff0c 那种情况不用停止pgsql服务 xff0c 只需要执行备份恢复命令即可 今天介绍的这种备份方式 xff0c 类似于文件系统的备份与恢复 xf
  • java中list与数组相互转换

    java中 xff0c list转数组 xff0c 很方便 xff0c list本身自带一个方法toArray xff0c 但是这个方法默认返回的数组类型是Object xff0c 我们可以给toArray 方法传递一个类型参数 xff0c
  • cython混淆加密

    python代码是一种解释型的语言 xff0c 有了代码和环境就可以执行 xff0c 它无需编译 如果需要对代码进行混淆 xff0c 可以借助cython这个库 它的安装很简单 xff0c 直接运行pip install cython就可以