当前位置:网站首页>浅谈一下pyd文件的逆向
浅谈一下pyd文件的逆向
2022-08-02 18:01:00 【黑剑客与剑】
1.何为pyd文件
.pyd 文件是由非 Python,其它编程语言编写 (或直接把 .py 文件转换成 .c 中间文件) 编译生成的 Python 扩展模块,是类似 .so .dll 动态链接库的一种 Python 文件。(当然,python代码也可以打包为pyd)
为啥要打包成pyd文件呢?因为pyd文件可以更好的防止反编译,只能反汇编。如果你直接打包将python代码直接打包为exe,是可以直接反编译源代码的。还有可以将c++,c等编译为pyd给python调用。
2.浅浅试一下逆向hello,world
开始第一次,一般都是从hello,world开始学习,这里我们也用hello来进行逆向。
from distutils.core import setup
from Cython.Build import cythonize
setup(ext_modules=cythonize("test1.py"))
这个main.py代码是用来将python代码编译为pyd的代码
#-*- coding : utf-8-*-
def say_hello():
print("hello")
def say_sorry():
print("sorry")
这个test.py我写了两个函数,一个say_hello,一个say_sorry。我们的目标就是改变函数功能,将say_hello输出sorry,say_sorry输出hello。
我们现在运行main.py。会直接生成test1.cp38-win_amd64.pyd的文件,这里我们新开一个py文件,名字叫测试.py。在这个代码里面输入这样的代码。其实这个pyd就是和python的模块差不多。可以通过import调用里面的函数。
import test1
test1.say_hello()
test1.say_sorry()
#hello
#sorry
这样就会输出hello和sorry。当然,我们可能开始不知道这个里面有啥函数,我们可以利用help命令来开里面的函数
help(test1)
可以看到以下输出。
Help on module test1:
NAME
test1
FUNCTIONS
say_hello()
say_sorry()
DATA
__test__ = {
}
FILE
e:\xxxx\xxxxx\test1.cp38-win_amd64.pyd
None
里面的FUNCTIONS我们可以进行调用。
3.开始逆向
这里,我们要用ida进行逆向。将pyd文件拿到ida里面。
点击这个view,选择里面对的string。查看字符串
这里我们以GCTL为界限,我们查看以上的字符串。

可以看到,我们看到了sorry和hello这两个字符串。以及我们的函数名字。这里我们点击进入hello。

可以看到这个玩意,我们现在的任务就是修改掉这个hello改成sorry。再保存到pyd文件就行。
4.修改字节

点击这个edit,选择这个
选出change byte。![[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-JVvEaHFb-1659422415676)(C:/Users/zha/AppData/Roaming/Typora/typora-user-images/image-20220802142004663.png)]](/img/c1/c20ab0a6d154b8b2118dd6806bbf0f.png)
这里是使用的16进制,我们随便找个网站,将sorry转为16进制![[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-QHIA4fRa-1659422415677)(C:/Users/zha/AppData/Roaming/Typora/typora-user-images/image-20220802142058479.png)]](/img/80/8fb8b34b79c8b9637b060c1ab326b3.png)
转完之后,将16进制填上去
填完毕后,可以看到。hello已经变成了sorry了
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-ThoW633U-1659422415677)(C:/Users/zha/AppData/Roaming/Typora/typora-user-images/image-20220802142222550.png)]
这里我们保存一下,还是再patch program里面,选择apply xxxx input file 保存文件。保存完成后。
5.测试一下修改的pyd
还是同样的代码。
import test1
test1.say_hello()
test1.say_sorry()
可以看到输出的两个sorry。可以看到我们的修改成功了。
6.其他方法
当然,除了这个ida修改字符串等,还有其他方法,比如hook python代码。获取传参等。比如,你通过dir函数看到这个pyd文件用了base64模块。那你可以直接hook base64模块。来获取传参。这里就不展开了,有兴趣,可以自己写个python代码打包成pyd,自己逆向看看。
边栏推荐
- mysql四种隔离级别
- 衡量软件产品质量的 14 个指标
- How to mitigate the attack of corporate account hijacking?
- 为何国内年轻人都抢购iPhone,因为它更实惠也更亲民
- Why young people are snapping up domestic iPhone, because it is much cheaper and more populist
- 织梦提示信息提示框美化
- 魔豹联盟:佛萨奇2.0dapp系统开发模式详情
- “12306”的架构到底有多牛逼?
- NeRF: The Secret of 3D Reconstruction Technology in the Popular Scientific Research Circle
- redis summary_distributed cache
猜你喜欢
Interviewer: can you talk about optimistic locking and pessimistic locks

玩转云端 | 天翼云对象存储ZOS高可用的关键技术揭秘

详细教学——1688关键词搜索API操作流程

MySQL基本语法

手机银行体验性测试:如何获取用户真实感受

NeRF: The Secret of 3D Reconstruction Technology in the Popular Scientific Research Circle

什么是会话劫持以及如何阻止它

LeetCode 2349. 设计数字容器系统(SortedSet)

灵动微电子发布低功耗 MM32L0130 系列 MCU 产品

研发运营一体化(DevOps)能力成熟度模型
随机推荐
宝塔搭建实测-基于ThinkPHP5.1的wms进销存源码
2022最新版SSM源码分析:一套教程助你深入理解底层原理,提高核心竞争力!
洛谷P4799 世界冰球锦标赛
研发运营一体化(DevOps)能力成熟度模型
影响PoE供电传输距离的除了网线还有啥?
记一次 .NET 某工控自动化控制系统 卡死分析
VSTO踩坑记录(1)- 从零开始开发outlook插件
E-Surfing Cloud 4.0 Distributed Cloud Enables Digital Transformation of Thousands of Industries
通信大学生走向岗位,哪些技能最实用?
织梦提示信息提示框美化
golang刷leetcode 经典(5)设计哈希集合
IDEA相关配置(特别完整)看完此篇就将所有的IDEA的相关配置都配置好了、设置鼠标滚轮修改字体大小、设置鼠标悬浮提示、设置主题、设置窗体及菜单的字体及字体大小、设置编辑区主题、通过插件更换主题
POE交换机常见问题解答
Playing in the cloud | The key technology of Tianyi cloud object storage ZOS high availability is revealed
My recursive never burst stack
TSF微服务治理实战系列(一)——治理蓝图
HDF驱动框架的API(2)
C# 术语
进程与线程
WPF使用Prism登录