Checkers and Splitters - Pipal Goes Modular
这是一篇简短文档,用于解释新的模块化检查器(checker)和分割器(splitter)系统的工作原理。目前系统尚未完成,未来可能还会更改,我会尽量保持本指南的更新。
您可以从GitHub代码库的modular分支获取新代码。
如果您对这个新的模块化方法有任何问题、建议或一般性评论,请随时联系。
检查器(Checkers)
检查器是Pipal最重要的组成部分,它们接收密码并执行分析。最初所有检查器都内置在主脚本中,难以维护且添加新检查器更加困难,因此我将它们拆分为独立的模块,称为检查器。
其设置方式类似于Apache在某些Linux发行版中处理虚拟主机的方式:存在一个checkers_available
目录和一个checkers_enabled
目录。要启用检查器,只需将其符号链接到启用目录中,系统便会使用它。这样,不关心某些功能(例如Hashcat掩码)的用户就不必浪费处理器周期生成它们。在小列表上这可能影响不大,但在大列表上会有明显效果。
检查器现在的另一个优点是易于编写新的检查器。要了解检查器可以多么简单,请查看checkers_available
中的windows_complexity_checker.rb
文件。仅25行代码就能实现一个检查默认Windows复杂性的检查器;要修改它以覆盖您自己的规则,只需克隆文件、更新正则表达式、名称和一些描述内容,然后将其符号链接到相应位置。
如果您想检查项目列表,这甚至更容易。查看colour_checker.rb
,它只有15行代码。给它一个名称、列表和描述,其余部分都会自动处理。
--list-checkers
参数将显示所有可用检查器及其简要描述的列表。我计划扩展此功能,使每个检查器还包含更详细的描述,并可按需请求查看。
分割器(Splitters)
如果您想处理不仅包含密码的文件(例如还包含用户名),该怎么办?默认操作是将文件中的每个新行视为密码,但现在您可以使用自定义分割器来定义哪些是密码,哪些是额外数据。然后,您可以编写一个能够理解额外数据的自定义检查器,并开始使用。任何不关心额外数据的现有检查器将忽略它,但您的自定义检查器将能够处理它。
作为示例,我创建了一个名为pipe_pass_user.rb
的分割器。顾名思义,这是一个管道符(|)分隔的文件,密码在前,用户名在后。代码同样相当简单:一个包含名为split
的静态方法的类,该方法接收文件中的行并将其拆分为密码和用户名。密码单独返回,用户名放入关联数组中。目前只有username.rb
检查器理解如何处理extras数组中的用户名字段,它会获取该字段并在用户名和密码之间进行各种比较。其余检查器将忽略额外数据并正常工作。
一次只能使用一个分割器。要实现这一点,请将您要使用的分割器符号链接到主Pipal目录中名为custom_splitter.rb
的文件中,系统将自动识别它。