Pwndbg怎么改

极客

Pwndbg怎么改?手把手教你魔改这个神器!

说实话,第一次听到有人问“Pwndbg怎么改”的时候,我脑子里蹦出来的第一个念头就是——兄弟,你也是有追求的人啊!Pwndbg这玩意儿,做Pwn题的朋友应该都不陌生吧?那可是咱CTF选手和二进制安全研究者的心头好,基于GDB的增强插件,用起来那叫一个丝滑,但是吧,用久了总会有点自己的想法,比如想改个颜色、加个命令、换个显示布局啥的,这时候“Pwndbg怎么改”就成了一个绕不开的问题了。

Pwndbg怎么改

今天咱就好好唠唠这个事儿,把我自己折腾Pwndbg的经验分享给大家,保证你看完之后也能动手改出自己的专属版本!

先搞清楚Pwndbg的目录结构

你想改Pwndbg,首先得知道它长啥样吧?不能上来就一顿乱改,那肯定要出事儿的。

Pwndbg装好之后,它的源码目录大概是这样婶儿的:

pwndbg/
├── pwndbg/
│   ├── commands/      # 各种命令的实现
│   ├── color.py       # 颜色配置
│   ├── config.py      # 配置文件
│   ├── gdbinit.py     # 入口文件
│   ├── theme/         # 主题相关
│   └── ...
├── setup.sh
└── ...

你看,commands目录里面就是各种命令的实现,比如你想加个新命令,或者改一下telescope的显示效果,基本上就是在这儿动手,theme目录呢,就是管颜色的,想换配色方案的话就去那儿折腾。

Pwndbg怎么改?从改配置开始

如果你只是想简单改改,不想动源码,那最省事儿的方式就是改配置了,Pwndbg本身提供了不少可以配置的选项,你在GDB里面直接输入:

pwndbg config

就能看到一大堆可以调的参数,或者你也可以在~/.gdbinit里面加上你自己的配置,

# 修改反汇编颜色
pwndbg.config.disasm_color = "blue"
# 修改telescope显示的行数
pwndbg.config.telescope_lines = 20

这种改法是最安全的,不会把源码搞坏,升级的时候也不影响,但是吧,能改的东西有限,如果你想要更个性化的效果,那就得往下看了。

动手改源码,打造专属Pwndbg

好,现在进入正题——Pwndbg怎么改源码?

改颜色和主题

找到pwndbg/color.py这个文件,里面定义了一堆颜色类,比如你想把telescope里面的地址颜色改掉,就找到对应的颜色定义,改一下就行,或者更优雅的方式是在pwndbg/theme/目录下面看看,那里有主题相关的文件。

我记得有一次我嫌默认的绿色太刺眼,就把pwndbg/color.py里面的green改成了一个柔和一点的色值,爽多了!

加自定义命令

这个就有意思了,比如你想加一个命令,一键打印当前栈上所有可能的ROP gadget,咋整?

在pwndbg/commands/目录下面新建一个文件,比如叫mycommand.py,然后写:

import pwndbg.commands
import gdb
@pwndbg.commands.Command("myrop", category="MyCommands")
def myrop():
    """我自己的ROP搜索命令"""
    # 你的逻辑
    print("这是我的自定义命令!")

然后在pwndbg/commands/__init__.py里面import一下,重启GDB,就能用myrop命令了,是不是挺简单的?

改显示布局

Pwndbg默认会在每次断下来的时候显示一堆上下文信息,寄存器、栈、反汇编啥的,如果你觉得太啰嗦,或者想加点自己的东西,可以去pwndbg/gdblib/或者pwndbg/commands/context.py里面改。

我自己就把context改了一下,去掉了一些不常用的显示项,加上了当前堆块的摘要信息,用起来顺手多了。

改完之后怎么生效?

改完源码之后,有几种方式让它生效:

  1. 重启GDB:最简单粗暴,直接退出GDB再进来就行。
  2. reload:在GDB里面执行source ~/pwndbg/gdbinit.py,不过有时候不太靠谱。
  3. pip install -e:如果你是用开发模式装的,改完直接生效,方便得很。

我个人推荐第三种,pip install -e .装一下,改完代码直接就能看到效果,调试起来贼方便。

几个坑要注意

说到Pwndbg怎么改,我必须得提醒几句:

  • 备份!备份!备份! 重要的事情说三遍,改之前先git commit一下,不然改崩了哭都来不及。
  • Python版本:Pwndbg对Python版本有要求,改代码的时候注意语法兼容性。
  • 升级问题:你改了源码之后,下次git pull可能会冲突,所以要有个心理准备。

总结一下

其实Pwndbg怎么改这个问题,说到底就是看你想要改到什么程度,小改就动配置,大改就动源码,核心就是找到对应的文件,理解它的逻辑,然后动手就行了。

别怕改坏,反正有git嘛,大不了回滚,而且改着改着你会发现,这玩意儿的设计其实挺清晰的,模块化做得不错,改起来还挺上瘾的。

好了,今天就唠到这儿,如果你也在折腾Pwndbg,欢迎一起交流哈!有啥问题评论区见,我看到都会回的!

文章版权声明:除非注明,否则均为极客网安-咸鱼原创文章,转载或复制请以超链接形式并注明出处。

目录[+]