当前位置:网站首页>浅谈一下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,自己逆向看看。
边栏推荐
- HDF驱动框架的API(1)
- 深入理解IO流(第一篇)
- 洛谷P4799 世界冰球锦标赛
- Go 语言快速入门指南:第二篇 变量与常量
- How can services start smoothly under tens of millions of QPS
- E-Surfing Cloud 4.0 Distributed Cloud Enables Digital Transformation of Thousands of Industries
- How to ensure the security of smart factories?
- 成功部署工业物联网的五个关键
- 通信大学生走向岗位,哪些技能最实用?
- 力扣 622. 设计循环队列
猜你喜欢
随机推荐
力扣 622. 设计循环队列
LiveGBS国标GB/T28181流媒体平台支持主子码流切换主码流stream/streamprofile
VSTO踩坑记录(1)- 从零开始开发outlook插件
Open Source Summer | [Cloud Native] DevOps (5): Integrating Harbor
天翼云4.0来了!千城万池,无所不至!
DevOps之代码检查
大事务故障案例
golang刷leetcode动态规划(10)编辑距离
golang刷leetcode 经典(5)设计哈希集合
指针常量和常量指针概述
危及安全的常见物联网攻击有哪些?
Remember the stuck analysis of an industrial automation control system in .NET
What skills are the most practical for college students in communications?
中断向量表概述
IDEA相关配置(特别完整)看完此篇就将所有的IDEA的相关配置都配置好了、设置鼠标滚轮修改字体大小、设置鼠标悬浮提示、设置主题、设置窗体及菜单的字体及字体大小、设置编辑区主题、通过插件更换主题
我的递归从不爆栈
mongodb的游标
详细教学——1688关键词搜索API操作流程
发挥云网融合优势,天翼云为政企铺设数字化转型跑道
Go 语言快速入门指南: 介绍及安装









![[论文分享] VideoFlow: A Flow-Based Generative Model for Video](/img/da/eac862ab2457384846a0b6b20ea3a9.png)