python编译后的pyd爆破

py文件的编译 反编译 pyc 反编译 安装环境 pip install uncompyle 对pyc文件进行反编译 uncompyle6 test.pyc > test1.py 生成pyd pyd反编译难度太大 from distutils.core import setup from Cython.Build import cythonize setup( name = 'any words.....', ext_modules = cythonize(["file_name.py", 阅读详情
AI摘要

本文介绍了如何分析Python编译后的pyd文件,并通过IDA进行反汇编,寻找关键函数和逻辑,以实现对授权验证的破解。作者详细讲解了从pyd文件到C代码再到汇编指令的对应关系,以及如何利用此信息修改汇编代码以改变程序行为。同时,分享了在pyinstaller打包和pyc反编译过程中的技巧,为Python程序逆向工程提供了参考。

前言

本文的文字及图片来源于网络,仅供学习、交流使用,不具有任何商业用途,如有问题请及时联系我们以作处理。

PS:如有需要Python学习资料的小伙伴可以点击下方链接自行获取

python免费学习资料、代码以及交流解答点击即可加入


最近接触一个国外某app的协议软件,是python3.8写的,它把关键模块都编译成了pyd,然后使用pyinstaller打包发布给用户。软件启动后检查机器码,然后需要输入授权码才可使用,看着很是恼火,所以想尝试破解。其中关键应该是需要爆破pyd里的逻辑,修改汇编代码来实现绕过授权。

前提知识

1. py、pyc、pyo、pyd

py: python 脚本文件(source code)

pyc: 脚本文件编译得到的字节码, 二进制文件,python文件经过编译器编译之后的文件。可以提高文件加载速度。

pyo: 脚本文件开启优化编译选项(-O)编译得到的字节码,二进制文件,优化编译后的文件。可以通过python -O file.py生成。

pyd: 基本的Windows DLL文件,python的动态链接库。

2. 编译pyd

要编译的脚本:uitl1.py

def fun_hello(s):
    if s == 1:
        return 'hello world'
    elif s == 2:
        return '222222222'

提供编译脚本:setup.py

from setuptools import setup
from Cython.Build import cythonize
 
setup(
    name='test',
    ext_modules=cythonize('util1.py')
)

在setup.py文件所在目录下进行如下命令:

python setup.py build_ext --inplace

这样就能看到同级目录下生成pyd文件了。32位的python生成pyd文件是32位的,64位的python生成的是64位的。

 

3. 使用pyd

test.py

import util1
 
if __name__ == '__main__':
    print(util1.fun_hello(2))

4. pyinstaller打包py到exe

pip install pyinstaller
pyinstaller test.py

5. 解包pyinstaller打包的exe

pyinstxtractor.py即可。这个代码不长,可以调试看看,熟悉下打包的exe组成。需要注意的是,被打包的文件都是zlib.compress压缩过后,再按照固定格式组成exe的,所以直接修改打包后的exe的16进制码来爆破貌似不好操作。只能解包后修改pyd,然后找齐依赖的库,重新pyinstaller打包,实现爆破。

https://github.com/countercept/python-exe-unpacker

6. pyc反编译

uncompyle6支持python3.8的pyc的反编译。

需要注意的是,如果是pyinstaller解包后取到的pyc文件,文件头部的magic被抹除过了,所以需要把对应版本python的magic加上来,可以装对应版本python,然后到安装目录下随便找个pyc文件,看一下头部,然后用010Editor复制到解包后的pyc,就可以正常反编译了。

下图是python3.8_32位的magic头:


https://github.com/rocky/python-uncompyle6
pyd文件汇编代码和python脚本的对应关系分析
前面的前提知识,随便搜搜都能找到。但是如何才能直接修改pyd的汇编代码,实现python脚本流程的更改呢?

 

我百度谷歌搜了半天也没找到合适的资料,也许很少有人破解python编译打包的exe吧。

那么下面就是我做的工作了,也是本帖的价值所在了。

我自己写了一个python小脚本,然后编译成了pyd,它会生成一个中间的util1.c文件,代码大概有3000多行。只要花时间精力熟悉这个c文件,然后对照着ida就可以了解python脚本转成C然后编译成汇编指令,它们3者之间大概对应关系了。

下面略过大概1天的工作量,直接给出我们拿到一个pyd后,怎么快速找到我们要找的关键python代码。然后直接爆破。

把要分析的pyd文件拖到对应32位或64位的IDA:

 

 

大概所有的pyd都只有这个一个导出函数,当这个pyd模块被其他py脚本import时会调用这个导出函数进行模块初始化。

 


跳转到dword_1000634C可以看到一个结构体,里面有一个关键的成员__pyx_moduledef_slots。

 

 

这个成员是一个结构体数组。

 

 


里面有个关键函数__pyx_pymod_exec_util1负责初始化python脚本里的所有变量,函数,常量等等,把他们都对应到pyobject,然后就只使用这些pyobject了。所以汇编里看流程就很难,因为没有明显的明文了。

定位到 __pyx_pymod_exec_util1后,我们主要的目的是找常量和pyobject的对照表,python脚本里的函数名和汇编函数的对照表,有这2个表,python脚本和汇编的对应关系就明朗了。这里就只能手动往下翻了。

 

 

翻到类似调用 PyUnicode_InternFromString 的地方,大概就是我们要找的常量对照表了。

 


也就是C文件里的这个表。

 

其中offset dword_10006DFC就是代表字符串"222222222"的pyobject,直接找它的交叉引用就可以定位一些关键代码了。

我们继续在 __pyx_pymod_exec_util1 里找python脚本函数对应汇编函数的那个表。

 

 

跳过去:

 


aFunHello指向python脚本里的函数名。

__pyx_pf_5util1_fun_hello就是对应的汇编函数。

可以看到,只要找到这个表,就很容易定位我们要找的python脚本函数对应的汇编实现了。

其实我们也可以不必如上这么麻烦。只要在.data段里翻一翻。或者string窗口找到感兴趣的字符串交叉引用也能很快找到这个表。

需要知道的就是, aFunHello下面就是对应的汇编实现函数。

现在终于可以去分析fun_hello这个python脚本函数对应的汇编函数了。

 

 

可以看到脚本里的 s == 1 对应的汇编就是 __Pyx_PyInt_EqObjC 然后下面会使用PyObject_IsTrue判断这个函数的返回值。

 


那么爆破点就找到了。把 jz short loc_10004753 改成jnz short loc_10004753即可。

IDA-》edit-》Patch program-》Assemble修改,然后 IDA-》edit-》Patch program-》Apply patches to input file即可得到修改后的pyd文件。

这样就实现了修改python脚本的执行逻辑了。

 

 

正常脚本应该是输出22222222才对,因为我们的爆破,输出了hello world!

这里我只是简单分析了if语句的修改,可以多写几个例子。实现修改其他流程。

在此只是抛转引玉,给大家一点点参考。省一点点时间。

另:大家看了半天以为我是分析那个国外app协议软件,其实我还没有搞定那个破解,所以只把自己这段时间的分析工作贴了上来,仅供参考。

浅谈一下pyd文件的逆向 这里就不展开了,有兴趣,可以自己写个python代码打包成pyd,自己逆向看看。我们的目标就是改变函数功能,将say_hello输出sorry,say_sorry输出hello。的文件,这里我们新开一个py文件,名字叫测试.py。当然,我们可能开始不知道这个里面有啥函数,我们可以利用help命令来开里面的函数。可以看到这个玩意,我们现在的任务就是修改掉这个hello改成sorry。​开始第一次,一般都是从hello,world开始学习,这里我们也用hello来进行逆向。可以看到我们的修改成功了。... 阅读详情

相关推荐

Python逆向实战:从Ciscn长城杯rand0m.pyd题目解析到Z3求解器应用

本文深入解析Ciscn长城杯中的rand0m.pyd逆向题目,从Python逆向工程环境搭建到Z3求解器应用,详细介绍了pyd文件结构分析、符号恢复、加密算法逆向及Z3求解器实战技巧,为安全研究人员提供了一套完整的Python逆向工程解决方案。

weixin_42652674的博客 1150

【Python小技巧】加密又提速,把.py文件编译为.pyd文件(类似dll函数库),你值得拥有!

Python的脚本文件是开源的,若直接发布,就等于开源。对于个人使用或则公开源码的,没有问题。但对于分发部署,就有些不妥了。一则开源任何人都可以修改,可能不安全;二则效率没有编译后的高。所以,需要保护源码,特别是公司的产品,就需要对Python代码进行混淆加密保护。那么,如何编译和加密呢?下面,我们就来说一说。注意:这里还有个版本问题,刚才编译生成的my_fucn.cp310-win_amd64.pyd文件,即表示python3.10 win 64位操作系统环境。

IT里的交易员-博客 1万+

逆向工程实战:Ciscn长城杯rand0m.pyd加密算法解析与Z3求解器应用

本文详细解析了Ciscn长城杯中的rand0m.pyd文件加密算法,通过逆向工程和Z3求解器的应用,展示了如何破解复杂的加密逻辑。文章从文件分析、核心逻辑解密到Z3求解器的实战技巧,为逆向工程爱好者提供了宝贵的经验和方法。

weixin_30882895的博客 924

python中的pyc, pyd文件及生成使用

简介了pyc,pyd等python文件及其生成、使用

whereismatrix的专栏 8976

Reverse学习之exe文件转pyc文件和python的反编译

了解exe文件转换为pyc,并通过pyc文件获取源码,以及如何修改源码得到flag

m0_74421158的博客 2012

CTF逆向实战:从PyInstaller打包到SHA256哈希破解全流程解析

在软件安全与逆向工程领域,理解程序打包原理和代码保护机制是基础技能。PyInstaller作为流行的Python打包工具,将脚本及其依赖编译为独立可执行文件,其核心原理在于将Python字节码和解释器环境一同封装。掌握解包与反编译技术,能够将黑盒程序还原为可读源代码,这对于安全审计、漏洞挖掘和CTF竞赛至关重要。通过分析还原后的代码逻辑,特别是密码学验证部分,可以定位关键算法如SHA256哈希比对。在工程实践中,结合hashcat等工具进行高性能爆破,能够有效应对常见的口令验证场景。本文以一道典型CTF逆向

cuanwei9356的博客 397

【Python小技巧】.py .pyd .pyw 都是干什么用文件?想分发时加密py脚本文件?

学习Python有一段时间了, 但Python的文件格式你都了解么?他们的运行机制有哪些区别?扩展名为 .py 的文件包含 Python 源代码。这是Python语言脚本文件最常用的格式,文件明文展示代码。Python 语言如今已成为非常著名的语言。它可用于系统脚本、网络和软件开发以及数学。Python支持跨平台兼容;意味着用 Python 开发的应用程序可以在不同的平台上运行,如 Windows、MAC、Linux、Raspberry Pi 等。Python 提供了一种类似于英语的简单易读的语法。

IT里的交易员-博客 1万+

将Python打包后的可执行文件还原为.py文件(后端)

将Python打包后的可执行文件还原为.py文件可能是一项复杂的任务,因为反编译的源代码可能与原始代码存在一些差异。然而,通过使用反编译工具和进行代码整理和修复,我们可以尽可能地恢复原始代码的结构和功能。记住,在实际情况下,可能会遇到更复杂的代码和反编译情况,需要更多的手动修复和调整。请注意,反编译的源代码可能与原始.py文件存在一些差异,因为它是从可执行文件还原而来的。请注意,反编译的源代码可能与原始代码存在一些差异,因此你需要仔细检查和修改反编译的代码,以确保其正确性和完整性。

BfuPhp的博客 1907

如何查看pandas._libs下面的pyd文件

pyd文件 pyd实际上就是dll文件,只是后缀名不同。 可以采用od,ida之类的反编译。 .pyd文件是由.c文件生成的;.c由.py或.pyx文件生成。因此只能反编译成.c文件。 pyd是Python Dynamic Module为开发的 基本来说,是很难查看的,目前尚未看到方法 References python,pyd文件如何实现反编译? [原创]python编译后的pyd爆破 ...

漫步量化 1238

pyd文件逆向分析(一) .pdf

pyd文件逆向分析(一) .pdf

J-Flash手动添加华大HC32F460型号全攻略

在嵌入式开发中,Flash编程算法是连接调试工具与微控制器的重要桥梁,它定义了芯片存储器的擦除、编程和校验等底层操作规范。其原理是通过调试接口将算法代码加载到目标芯片的RAM中执行,从而实现对Flash存储器的访问与控制。这项技术的核心价值在于打破了工具链对芯片型号的固有支持限制,使得开发者能够灵活适配各种新兴或定制化的微控制器。在工程实践中,当面对J-Link等主流调试器官方支持包更新滞后时,手动添加芯片型号成为保障开发效率的关键技能。本文以华大半导体的HC32F460系列MCU为例,详细解析了如何通过配

weixin_29192365的博客 350

Python逆向实战:如何用Z3 Solver爆破Ciscn长城杯rand0m.pyd的加密算法

本文详细介绍了如何使用Z3 Solver逆向破解Ciscn长城杯rand0m.pyd加密算法。通过分析加密机制和验证逻辑,结合Z3约束求解工具,成功爆破出flag。文章提供了完整的解密脚本和优化技巧,适合逆向工程和CTF竞赛爱好者学习参考。

weixin_30642561的博客 443

十二、基于FPGA实现slave SelectMAP配置逻辑

slave SelectMAP配置

weixin_41838250的博客 8754

逆向工程实战:从Ciscn长城杯rand0m.pyd到Python加密算法解析

本文以Ciscn长城杯CTF赛题rand0m.pyd为例,详细解析了Python二进制扩展模块的逆向工程实战过程。通过静态分析与动态调试,逐步恢复符号、剖析加密算法,并最终利用Z3约束求解器成功破解混合加密逻辑,还原出完整flag。文章为安全研究人员提供了从.pyd文件入手,到算法逆向与自动化求解的完整技术路径。

weixin_29232507的博客 1270

AI影像组学在结直肠癌诊疗中的应用:从特征提取到临床决策

影像组学通过高通量计算从医学影像中提取定量特征,揭示肿瘤内部的微观生物学行为,这些特征反映了纹理异质性、形状不规则度等影像表型。其核心原理在于将图像数据转化为可分析的数字特征,结合机器学习算法进行模式识别,从而实现对疾病状态的精准预测。这一技术的价值在于能够无创、定量地评估肿瘤特性,为精准医疗提供关键支持。在临床实践中,AI驱动的影像组学模型广泛应用于结直肠癌的诊疗全链条,包括肿瘤良恶性鉴别、基因突变预测、治疗反应评估和预后分析等场景。通过整合影像组学特征与临床数据,可以构建预测模型,辅助医生进行更准确的诊

weixin_28295799的博客 409

基于ROS的机械臂手眼标定-Aruco使用与相机标定

基于ROS的机械臂手眼标定-Aruco使用与相机标定 折腾了一段时间的机械臂的手眼标定,相关资料挺多的,但使用起来都比较复杂,新手一般比较难搞懂。于是想做一个比较简单易懂易用的手眼标定程序。 程序都是Copy的开源代码,所以也开源出来: 开源地址:https://gitee.com/ohhuo/handeye-calib 作为手眼标定中的重要一环,相机中标定板位姿关系获取直接影响标定精度,我们使用aruco这个开源程序来实现坐标的获取。 #mermaid-svg-WkFpFkV4QqzXMvJ4 .labe

生活不止眼前的苟且 1万+

Cython逆向实战:从.pyd文件恢复算法逻辑的完整指南

逆向工程是分析软件内部工作原理、排查安全漏洞的核心技术。其基本原理是通过静态分析与动态调试,将二进制代码还原为可理解的逻辑。在软件安全、漏洞挖掘和CTF竞赛中,逆向技术具有极高价值。当面对Python性能关键模块时,开发者常使用Cython将代码编译为C扩展,生成.pyd或.so文件,这给传统逆向带来了新挑战。Cython编译后的二进制文件丢失了Python元信息,函数名被混淆,逻辑被嵌入复杂的C框架中,直接使用IDA Pro等工具分析会看到大量难以理解的Python C API调用。本文以一道CTF赛题为

Liusuzhi19610221的博客 474

CAP CDS 和 ABAP Cloud 的 CDS 有什么区别?

摘要:SAP生态中的CAP CDS与ABAP CDS虽同名但存在显著差异。CAP CDS定位为全栈应用的领域模型与服务契约语言,支持声明式建模并直接编译为服务接口;而ABAP CDS更侧重数据语义层,与ABAP平台深度集成,服务于SQL优化和服务发布链路。两者在语法、持久化方式、服务暴露机制及权限模型上均有不同:CAP CDS采用CDL语法,支持模型即服务;ABAP CDS基于ABAP DDL,通过视图定义语义并与RAP框架紧密耦合。这些差异反映了二者在不同平台中的设计哲学和应用场景。

2007 年 ~ 2025 年,深耕 SAP 技术 18 年 205

【Python代码/程序综合防护系列第1期】 各层次各方法简介

Python代码程序加密众多方法一览

weixin_51349272的博客 309

23、电器元件符号及封装大全(2025版本)

总计28类电器元件符号和封装。

XU157303764的博客 2656

【WRFDA教程第一期】运行观测预处理程序(OBSPROC)

运行观测预处理程序(OBSPROC)

WW、forever的博客 1894

实战解析:如何从Pyc文件反编译获取Flag(附Python解密脚本)

本文详细解析了如何从Pyc文件反编译获取Flag的完整技术流程,包括反编译工具选择、随机数种子破解和异或解密等关键步骤。通过实战案例和Python解密脚本,帮助读者掌握逆向工程的核心技术,适用于CTF竞赛和网络安全研究。

weixin_42656416的博客 120

蓝牙模块HM-10手册

蓝牙模块HM-10手册,该手册对蓝牙模块HM-10进行了详细的介绍和使用方法以及一些AT指令。

py逆向分享

好了工具说完了我们来说题目吧,一下就是题目的地址,一个是buuctf中的题目还有一个是,另一个比赛中的题目φ(゜▽゜*)♪。uncompyle6是python的一个工具库,下载是直接pip install uncompyle6就好了。去找寻源代码,这里捏~( ̄▽ ̄)~*我使用了uncompyle6,发现这里是给出了四个hash值。py逆向的话我们首先是需要两个工具的,一个是常用的uncompyle6还有一个是pycdc。好那么第一题是buuctf中的一个简单的pyc反编译,我这边用的是pycdc。

Dark_WY的博客 1032

VC中sqlite的使用

在VC中对sqlite的使用,实现数据库大批数据的快速插入,读取数据库中的数据在ListCtrl中显示

最新的sdio 4.0 spec 协议标准 带书签 高清完整PDF版

Part-E1-SDIO-Specification-Ver4.00-Final-120220.pdf:最新的sdio 4.0 spec 协议标准 带书签 高清完整PDF版,包括SDIO 接口的外设,SDIO 接口官方协议等。

昨天线下赛的复盘

这次最大的感受:Re做题的时候不要啥都没分析出来就去写代码,不要觉得自己写着写着就能看懂,不可能的,不如先分析好,即使是先猜一下呢,还有就是测试数据不要写0,会和本身就是空的数据混了 Re1 分最少的一题,附件很大而且F12全是Py开头的 断定是python逆向: pyinstxtractor拆ex

cmdos的专栏 42

IDEA的使用指南

IDEA基于java的使用手册,可以最快速的上手,在使用中不断的丰富自己的使用技巧.

上一篇: 总结了pandas提取数据的15种方法,统统只需1行代码,真香!
下一篇: Python 很慢?Python 之父一句话亮了
酸菜鱼编程
博客等级 码龄6年 155粉丝 63原创
评论 2
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值