当前位置:网站首页>浅谈一下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。
这里是使用的16进制,我们随便找个网站,将sorry转为16进制
转完之后,将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,自己逆向看看。
边栏推荐
- golang刷leetcode 经典(3) 设计推特
- Smart Microelectronics Releases Low-Power MM32L0130 Series MCU Products
- 开源一夏 |【云原生】DevOps(五):集成Harbor
- 魔豹联盟:佛萨奇2.0dapp系统开发模式详情
- 载20(S)-人参皂苷/细胞穿膜肽-单克隆抗体-载丝裂霉素白蛋白纳米微球的制备
- C#里如何简单的校验时间格式
- [深入研究4G/5G/6G专题-49]: 5G Link Adaption链路自适应-5-上行链路自适应ULLA-PUSCH信道
- 54.【system系统互动函数大总结】
- 洛谷P1502 窗口的星星
- 一朵“云“如何带来产业新变革
猜你喜欢
监控易火星版即将亮相:分布式运维帮助TOP3000大企业跨越管理鸿沟
sed 命令
有关代购系统搭建的那点事
DevOps之代码检查
leetcode:622. 设计循环队列【循环队列板子】
LeetCode 2349. 设计数字容器系统(SortedSet)
多聚体/壳聚糖修饰白蛋白纳米球/mPEG-HSA聚乙二醇人血清白蛋白纳米球的制备与研究
pydev debugger: warning: trying to add breakpoint to file that does not exist: /tmp/xxx
shell中awk命令的if条件语句引入外置变量
Playing in the cloud | The key technology of Tianyi cloud object storage ZOS high availability is revealed
随机推荐
LeetCode 2336. 无限集中的最小数字(SortedSet)
redis总结_多级缓存
Openharmony - 基于ArkUI(TS)开发颜色选择器
一朵“云“如何带来产业新变革
中断向量表概述
MySQL基本操作和基于MySQL基本操作的综合实例项目
有关代购系统搭建的那点事
ROS基本编程概述
研发运营一体化(DevOps)能力成熟度模型
洛谷P2880 Balanced Lineup G
55.【sort函数的升序降序】
LiveGBS国标GB/T28181流媒体平台支持主子码流切换主码流stream/streamprofile
What skills are the most practical for college students in communications?
LeetCode 2333. 最小差值平方和(贪心)
灵动微电子发布低功耗 MM32L0130 系列 MCU 产品
常用随机变量的数学期望和方差
判断文件属主
mysql四种隔离级别
Enterprise cloud cost control, are you really doing it right?
影响PoE供电传输距离的除了网线还有啥?