关于 Pwntools¶
无论你是用pwntools去编写exp,还是将它作为一个其它软件工程的一部分,你都可以决定如何使用它。
在历史上pwntools是被用来编写一系列exp的领域特定语言(DSL),在当前的pwntools版本中,我们只需要简单地用 from pwn import *
短短一行代码就可以使用各种漂亮的作用。
当我们重构pwntools的2.0版本时,我们注意到了两个相反的目标:
- 我们更愿意构造一个“寻常的”python模块结构,来使得使用者更快速地了解和使用pwntools。
- 我们想拥有更多的炫酷效果,尤其是将终端设为raw模式。
为了实现上面两个目标,我们决定开发两个不同的python模块, pwnlib
是一个整洁的python模块,而 pwn
则是我们在CTF中使用和编写exp的模块。
pwnlib
— 标准的python模块¶
这个模块是我们使用“纯净”python开发的,一般地,我们不想在引用 pwnlib
或是在使用其子模块时出现这样那样的副作用。
大多数情况下,你只会得到你想使用的功能。例如,如果你不使用 import pwnlib.util
,你将没有权使用 pwnlib.util.packing
这个子模块。
尽管pwnlib中有一些特例,例如 pwnlib.shellcraft
, 影响这整个模块的简洁,但它们仍可在没有隐性副作用的情况下被使用。