一. JTR
1. JTR中算法部分的各大函数
get_salt():从密文输出中还原计算时用的salt,比较多的密文输出时候都是对真实的密文值,还有salt值进行16进制化输出;
get_binary():从密文输出中还原计算出的真实密文结果;
set_key():对明文进行的,参与计算之前的转化操作,有转化成UTF16编码,大小写转换等操作;
set_salt():跟set_key()同理;
cry_all():算法实现的的主要流程,其中的#ifdef _OPENMP,#ifdef _SIMD_xxx等是优化相关的宏。
看串行原理的时候,可以先全部去掉;
get_key():set_key()的逆向操作,一般不用管。
2. 想在JTR源码中printf()算法中间结果,如何去改写的问题
这时候必须去掉openmp和simd这些优化项,直接在优化代码中插入printf()语句,输出会各种奇怪,总之就不是想要的结果。
但是光在具体算法文件undef或者去掉这些宏,可能会出问题的。
其中的主要原因就是,有些算法会关联其他实现文件,而这些宏在其他文件中,会影响到函数的定义。光在目标中去掉这些宏,而在依赖文件中不去掉,会出现函数未定义的错误。
解决方法非常简单,根据错误提示,找到所有的文件,把相关宏全部去掉就OK。
例子就是itunes_fmt_plug.c,
在依赖的其他文件中,这些宏影响到底是定义pbkdf2_sha1_sse(),还是定义pbkdf2_sha1()。
二. hashcat
1. interface.c中的算法描述结构
hashcat的这个文件,会有一大段类似这样的结构体,其中有挺多信息的。
(以很简单的131号算法,sql server2000的加密算法为例)
case 131: hashconfig->hash_type = HASH_TYPE_SHA1;
hashconfig->salt_type = SALT_TYPE_EMBEDDED;
hashconfig->attack_exec = ATTACK_EXEC_INSIDE_KERNEL;
hashconfig->opts_type = OPTS_TYPE_PT_GENERATE_BE
| OPTS_TYPE_PT_UTF16LE
| OPTS_TYPE_PT_UPPER
| OPTS_TYPE_ST_ADD80
| OPTS_TYPE_ST_ADDBITS15
| OPTS_TYPE_ST_HEX;
hashconfig->kern_type = KERN_TYPE_SHA1_PWUSLT;
hashconfig->dgst_size = DGST_SIZE_4_5;
hashconfig->parse_func = mssql2000_parse_hash;
hashconfig->opti_type = OPTI_TYPE_ZERO_BYTE
| OPTI_TYPE_PRECOMPUTE_INIT
| OPTI_TYPE_PRECOMPUTE_MERKLE
| OPTI_TYPE_EARLY_SKIP
| OPTI_TYPE_NOT_ITERATED
| OPTI_TYPE_APPENDED_SALT
| OPTI_TYPE_RAW_HASH;
hashconfig->dgst_pos0 = 3;
hashconfig->dgst_pos1 = 4;
hashconfig->dgst_pos2 = 2;
hashconfig->dgst_pos3 = 1;
hashconfig->st_hash = ST_HASH_00131;
hashconfig->st_pass = ST_PASS_HASHCAT_PLAIN;
break;
A. hashconfig->opts_type
注意到hashconfig->opts_type这个项,这个参数里描述的是在计算之前,对于pwd和salt值的处理。
对,主要就是JTR的set_key和set_salt的信息,不过会包含get_salt的一部分信息,毕竟破解嘛,要从密文输出中提取并还原原来的salt值。
另外,可能有时处理会不全?记忆有点模糊了。
其类型分为OPTS_TYPE_PT和OPTS_TYPE_ST,这个PT和ST分别代表 pwd还有salt。
OPTS_TYPE_PT_GENERATE_BE,可能还有OPTS_TYPE_ST_GENERATE_BE?这个是不用管的,对于我们的目标来说,没有信息。
OPTS_TYPE_ST_ADD80和OPTS_TYPE_ST_ADDBITS15也没有关于pwd和salt转换处理的信息。
OPTS_TYPE_PT_UPPER表示pwd进行计算前,要先全部转换为大写。
OPTS_TYPE_PT_UTF16LE表示pwd进行计算前,要先进行小端模式的UTF16编码转换。
OPTS_TYPE_ST_HEX是get_salt()的信息,意思就是salt在转换为输出之前要进行16进制化转换,所以提取得到salt自然要进行逆转换;
B. hashconfig->parse_func
其实这个也没太多信息吧,就是跟你说用哪个函数对于密文输出进行parse,就是如何从密文输出中提取salt相关字段,密文相关字段,还有去掉标志字段等
hashconfig->parse_func = mssql2000_parse_hash;
就是说,sql server2000要用这个函数进行parse;
C