John the Ripper 外部模式

定义外部模式。

要定义外部破解模式,需要创建一个名为[List.External:MODE ]的配置文件章节。其中模式是你分配给模式的任何名称。这个部分应该包含一些用类c语言编写的函数。如果您通过命令行启用这种破解模式,John将编译并使用这些函数。

外部函数。

以下是John目前使用的功能:

init() 在启动时调用,应该初始化全局变量
filter() 要求每个词都要试一试,可以过滤掉一些词
generate() 在不使用其他破解模式时调用生成单词
restore() 恢复中断的会话时调用

它们都是“void”类型,没有参数,应该使用全局变量“word”(预定义为“int word[]”),除了init(),它是在“word”初始化之前调用的。变量”word”包含要尝试的当前候选密码,每个数组元素中有一个字符,以零结尾。

对于函数,如果定义它,应该做以下“word”:

  • filter():可以修改单词,或使“word[0]”归零并跳过它;

  • generate():应该将“word”设置为要尝试的下一个单词,或者当破解完成时将“word[0]”设为零(这会导致John终止);

  • restore():应该将全局变量从“word”设置为continue。

您可以单独使用外部模式,也可以与其他破解模式一起使用,在这种情况下,只使用init()和filter()(并且只需要filter())。使用外部过滤器与所有其他破解模式和“–make-charset”命令行选项兼容。

建议您不要使用filter(),或者至少不要在使用外部模式和您自己的generate()时过滤掉太多的单词。最好是修改generate(),而不是生成将被过滤掉的单词。

预定义的变量

除了上面记录的word变量,John the Ripper 1.7.9和更新版本还预先定义了两个额外的变量:abortstatus,都是int类型。当通过外部模式设置为1时,它们分别会导致当前破解会话中止或显示状态行(就像按键一样)。在测试到目前为止处于外部模式的word中的至少所有候选密码之后,将执行这些操作。换句话说,为了处理任何缓冲的候选密码,可能会延迟操作。

语言

编译器支持类C语言,它只包含C语言的一个基本子集,并且在许多方面与C语言不同。支持的关键字是:break, continue, else, if, int, return, void, while。

您可以定义John要调用的函数(上面描述的函数),定义全局和局部变量(包括一维数组),使用C中支持的所有整数操作,以及使用C和c++注释。

以下的是在John的编译器中缺失的C特性或特征:

  • 短路求值(相反,完整的表达式目前正在求值,可能会有任何副作用);

  • 函数调用(任何定义为外部模式的函数只能被John core调用,其他外部模式函数不能调用);

  • “do”和“for”循环(只有“while”);

  • 除“int”以外的数据类型声明、一维数组“int”和“void”;

  • “静态”局部变量(所有的局部变量在默认情况下都是静态的);

  • 指针(数组名单独指向第一个元素);

  • 类型转换(当我们只有“int”时,它是没有用的);

  • 逗号操作符;

  • 可能会有更多吧……

您可以在John提供的默认配置文件中找到一些外部模式示例。

有限的可移植性和未定义的行为

“int”数据类型目前在John中使用系统的本地C“int”数据类型实现。因此,它的大小可以有所不同,但是在John支持的系统上,可以假设它至少是32位(通常正好是32位)。另外,作为有符号整数类型,它的溢出行为是未定义的(但在实践中通常会是二的补充概括)。

从1.8.0版本开始,字面字符常量(用单引号表示,如’a’)被视为“无符号char”,并被转换为“int”,因此产生的值在0到255之间。我们打算在未来的版本中保留这种行为。但是,在1.8.0之前的版本中,设置了8位的文字字符常量可能显示为负的“int”值。

虽然目前的实现和John的所有旧版本到目前为止都缺乏短路计算,将局部变量视为“静态”,仅将数组名视为对第一个元素的引用,但这些属性将来可能会改变。

有限的健壮性和不安全性

虽然当前的实现在使用上相当健壮,但它缺乏数组边界检查。确保数组大小和索引正确是外部模式作者和用户的责任。

目前没有编译时检查被赋值或修改的表达式是否为有效的左值。试图赋值或修改不是有效左值的表达式将导致John崩溃。

通常,外部模式程序(以及John配置文件)被视为可信输入,就像您在John源树中处理C文件一样。恶意外部模式可以使用越界数组访问来触发任意机器代码执行。

本文章首发在 网安wangan.com 网站上。

上一篇 下一篇
讨论数量: 0
只看当前版本


暂无话题~