John the Ripper 規則
Wordlist規則語法
每個wordlist規則由可選的規則拒絕標志和一個或多個簡單命令組成,這些命令都列在一行中,可以選擇用空格分隔。還有一個預處理器,它為單個源代碼行生成多個規則。下面是對規則拒絕標志、規則命令(其中許多與Crack 5.0a中的命令兼容)和預處理器語法的描述。
規則拒絕標志
-: no-op: 不拒絕-c 拒絕此規則,除非當前哈希類型是區分大小寫的-8 拒絕此規則,除非當前哈希類型使用8位字符-s 拒絕此規則,除非一些密碼散列在加載時被分割-p 拒絕此規則,除非當前允許詞對命令
數值常量和變量
數值常量可以指定,變量可以用以下字符引用:
0...9 為0…9A...Z 為10…35* 為最大長度- 為最大長度-1+ 為最大長度+ 1a...k 用戶定義的數值變量(使用“v”命令)l 初始或更新的單詞長度(當使用“v”時更新)m 首字母或記憶單詞最后一個字符的位置p 用”/“或”%”命令最后找到的字符的位置z “無限”位置或長度(超過字尾)
這里max_length是當前哈希類型所支持的最大明文長度。
這些參數可用于指定字符位置、子字符串長度和其他數值參數,以便根據給定命令對命令進行規則處理。字符位置從0開始編號。例如,初始值“m”(最后字符位置)比初始值“l”(長度)小1。
字符類
?? 匹配”?”?v 匹配元音:“aeiouAEIOU”?c 匹配輔音:“bcdfghjklmnpqrstvwxyzBCDFGHJKLMNPQRSTVWXYZ”?w 匹配空格:空格和水平制表字符?p 匹配標點:“。,:,“? !和雙引號字符?s 匹配符號” $ % ^ & *()_ + = | \ < >[]{}# @ / ~”?l 匹配小寫字母[a-z]?u 匹配大寫字母[A-Z]?d 匹配的數字[0 - 9]?a 匹配字母[a-zA-Z]?x 匹配字母和數字[a-zA-Z0-9]?z 匹配所有字符
類的補碼可以通過其名稱的大寫來指定。例如,“?D”匹配除了數字之外的所有內容。
簡單的命令
: no-op:對輸入單詞不做任何操作l 轉換為小寫字母u 轉換成大寫c 大寫C 第一個字母小寫,其余字母大寫t 單詞中所有字符的切換大小寫TN 字符在N位置的切換情況r 反轉:“Fred”->“derF”d 復制:“Fred”->“FredFred”f 反射:“Fred”->“FredderF”{ 向左旋轉單詞“jsmith”->“smithj”} 向右旋轉單詞:“smithj”->“jsmith”$X 將字符X附加到單詞^X 在單詞前加上字符X
字符串命令
AN"STR" 將字符串STR插入到單詞的N位置
要追加一個字符串,指定“z”作為位置。若要在單詞前面加上字符串,請指定“0”作為位置。
雖然使用雙引號有利于提高可讀性,但您可以使用STR中沒有的任何其他字符。當STR包含雙引號字符時,這特別有用。沒有辦法在字符串中轉義您所選擇的引號字符(防止它結束字符串和命令),但是您可以通過逐個指定多個命令來實現相同的效果。例如,如果您選擇使用正斜杠作為您的引號字符,但它碰巧出現在一個字符串中,而您不想重新考慮您的選擇,您可以寫入“Az/yes/$/Az/no/”,它將附加字符串“yes/no”。當然,為了達到同樣的效果,使用“Az,yes/no”會更簡單、更有效。
長度控制命令
<N 拒絕該單詞,除非它的長度小于N個字符>N 拒絕該單詞,除非它的長度大于N個字符'N 以N的長度截斷該單詞
英語語法命令
p 復數形式:“crack”->“crack”等(僅限小寫)P “crack” -> “cracked”等(僅限小寫)I “crack” -> “cracking”等(僅限小寫)
插入/刪除命令
[ 刪除第一個字符] 刪除最后一個字符DN 刪除位置N中的字符xNM 從位置N中提取至多M個字符的子字符串iNX 在N位置插入字符X,然后右移其他字符oNX 用字符X覆蓋位置N的字符
另外,請參閱下面“內存訪問命令”下面的“X”命令(提取和插入子字符串)。
注意,方括號(“[“和”]”)是預處理程序的特殊字符:如果使用這些命令,應該使用反斜杠(“")對它們進行轉義。
字符集轉換命令
S 轉換例子:”Crack96” -> “cRACK(^”V 小寫元音,大寫輔音:”Crack96” -> “Crack96”R 按鍵盤將每個字符右移:“Crack96”->“Vtsvl07”L 按鍵盤左移每個字符:”Crack96” -> “Xeaxj85”
內存訪問命令
M 記憶單詞(用于與“Q”、“X”連用,或更新“m”)Q 查詢內存并拒絕該單詞,除非它已經改變XNMI 從內存中提取子字符串NM并插入到當前字I中
如果“Q”或“X”沒有在“M”之前使用,他們就會從“word”開始讀。換句話說,您可以假設在每個規則的開頭都有一個隱含的“M”,并且沒有必要在規則的開頭使用“M”(因為“M”將是一個no-op)。“M”唯一合理的用法是在規則的中間,在一些命令可能修改了這個詞之后。
“Q”命令的預期用途是幫助避免多個類似規則可能導致的重復候選密碼。例如,如果您的規則集中有規則“l”(小寫),并且您想添加規則“lr”(小寫和反向),那么您可以將后者寫成“lMrQ”,以避免產生重復的回文候選密碼。
“X”命令從內存(或者從從未使用過“M”的初始單詞)中提取一個子字符串,從位置N開始(在已記憶的或初始單詞中),最多提取M個字符。它將子串插入到當前字的位置i。目標位置可以是“z”用于附加子串,“0”用于在字前面加上子串,或者它可以是任何其他有效的數值常量或變量。一些示例使用,假設我們在一個規則或一個“M”后,將“X011”(重復第一個字符),“Xm1z”(重復最后一個字符),“dX0zz”(一式三份)這個詞,”< 4 x011x113x215”(重復每個字符在短單詞),“> 9 x5zx05z”(旋轉長單詞5個字符,留下的一樣“> 9 {{{{{> 9 vam4xa50’l“),(向右旋轉5字符,一樣“> 9}}}}}”)。
數字命令
vVNM 更新“l”(長度),然后從N中減去M,賦值給變量V
“l”被設置為當前單詞的長度,并且它的新值可以被這個命令使用(如果N或/和M也是“l”)。
V必須是a到k中的一個。N和M可以是任何有效的數值常量或初始化的變量。在同一個命令中多次甚至三次引用同一個變量是可以的。例如,“va00”和“vaaa”都將變量“a”設置為零(但是后者將要求“a”之前已經初始化),而“vil2”將變量“i”設置為當前單詞的長度減2。如果在單詞被進一步修改之前使用“i”作為字符位置,它將指從末尾開始的第二個字符。中間變量值變為負數是可以的,但是這些值不應該直接用作位置或長度。例如,如果在同一規則中稍后的某個地方使用“vj02vjij”遵循“vil2”,則將“j”設置為“i”加2,或者設置為該規則中較早處理“vil2”命令時單詞的長度。
字符類命令
sXY 將單詞中的所有字符X替換為Ys?CY 將單詞中所有C類字符替換為Y@X 從單詞中清除所有字符X@?C 從單詞中清除類C的所有字符!X 如果單詞包含字符X,則拒絕該單詞!?C 如果單詞包含類C中的字符,則拒絕該單詞/X 拒絕該單詞,除非它包含字符X/?C 拒絕該單詞,除非它包含類C中的字符=NX 拒絕該單詞,除非位置N的字符等于X=N?C 拒絕該單詞,除非N位置的字符在類C中(X 拒絕該單詞,除非它的第一個字符是X(?C 拒絕該單詞,除非它的第一個字符在類C中)X 拒絕該單詞,除非它的最后字符是X)?C 拒絕該單詞,除非它的最后一個字符在類C中%NX 拒絕該單詞,除非它至少包含X的N個實例%N?C 拒絕該單詞,除非它包含至少N個類C字符
額外的單一破解模式命令
在定義“single crack”模式規則時,可以使用額外的命令來支持單詞對,以控制其他命令是否應用于第一個、第二個或兩個單詞:1 僅限第一個單詞2 僅限第二個單詞+ 兩者的連接(只能在“1”或“2”之后使用)
如果您在規則中使用了上面的一些命令,它將只處理單詞對(例如,來自GECOS字段的全名)并拒絕單個單詞。除非您手動指定,否則在使用這些命令的任何規則的末尾都假設有一個“+”。例如,“1l2u”將把第一個單詞轉換為小寫,第二個單詞轉換為大寫,并將兩者連接起來。“+”的用法可能是應用更多的命令:“1l2u+r”將在分別對兩個單詞應用一些命令之后,逆轉這兩個單詞的連接。
預處理程序規則
預處理器用于將類似的規則合并到一個源代碼行中。例如,如果您需要讓John嘗試添加數字的小寫單詞,您可以為每個數字編寫一條規則,總共10條規則。現在想象一下附加兩位數——配置文件將變得又大又難看。
使用預處理器,您可以更容易地完成這些工作。只需編寫一個源代碼行,其中包含這些規則的公共部分,后面是將放在不同規則中的字符列表,用方括號表示(在regexp中使用的方法)。然后,預處理器將為您生成規則(在John startup時用于語法檢查,在崩潰時再次生成,但不會將所有擴展的規則保存在內存中)。對于上面的示例,源代碼行是“l$[0-9]”(小寫并附加一個數字)和“l$[0-9]$[0-9]”(小寫并附加兩個數字)。這些源代碼行將分別擴展為10條和100條規則。順便說一下,預處理命令是從右到左處理的,而字符列表是從左到右處理的,這導致了上述示例和其他典型情況中的數字的自然排序。注意,字符范圍和字符列表的任意組合都是有效的。例如,”[aeiou]”將使用元音字母,而”[aeiou -9]”將使用元音字母和數字。如果您需要John嘗試元音后面跟所有其他字母,您可以使用“[aeiua -z]”——預處理器足夠聰明,在這種情況下不會產生重復規則(盡管這種行為可能會被下面描述的“\r”魔術轉義序列禁用)。
規則中有一些特殊字符(“[”啟動一個預處理器字符列表,“-”標記列表中的一個范圍,等等),如果你想把它們放在規則中而不使用它們的特殊含義,你應該在它們前面加上反斜杠(“\”)。當然,這同樣適用于“\”本身。另外,如果您需要在一行的最開始開始一個預處理器字符列表,那么您必須在它前面加上一個“:”(no-op規則命令),否則它將被視為一個新的節的開始。
最后,預處理器支持一些魔術轉義序列。這些字符以反斜杠開始,并使用通常不需要轉義的字符。在下面描述轉義的段落中,單詞“range”指的是像上面所示的用方括號括起來的字符列表和/或范圍的單一實例。
當前支持的是“\1”到“\9”,用于對之前范圍的反向引用(這些將被當前替換所引用范圍的相同字符所替代,其范圍編號為1,從左到右),“\0”用于反向引用前一個范圍,“\p”用于前一個范圍,使該范圍與前一個范圍“并行”處理,“\p1”到“\p9”用于與特定的引用范圍“并行”處理該范圍,”\p0”使該范圍與前面的范圍”并行”處理,”\r”使該范圍產生重復字符。“\r”轉義只有在區域與另一個區域“并行”或至少有一個區域與此區域“并行”時才有用,因為您不應該希望實際產生重復的規則。
JOHN THE RIPPER安裝中文使用說明教程
推薦文章: