本質的に私の友人は、自分が作成した暗号化されたコンテナから自分自身をロックしました。パスワードを入力するときには、コンテナにアクセスできないため、入力ミスをしているに違いありません。私たちはそれが何であるかを知っており、実際のパスワードはこれのバリエーションであるか、それに非常によく似ています。私は、パスワードまたはパスワードが知られているパターンの既知の部分が与えられた場合、この「曖昧な」パスワードクラッキングの概念を扱うコードまたはホワイトペーパーを探しています。言語は重要ではありません。私はすでにパスワードプロンプトを強要する方法を開発しました。私が必要とするのは、私が知的にそれを解読しようとするアルゴリズムを開発して、すべての可能な組み合わせを試す必要はありません。私は他の誰かが既にこれをしていると思います。私はこれの背後にある概念をある程度理解していますが、すでに誰かがこの問題を解決しているかもしれないコードやホワイトペーパーを探しています。既知のアルゴリズム、オープンソースプログラム、またはパスワードの既知の部分が与えられたときにパスワードをクラックするためのホワイトペーパーはありますか?
UPDATE だから私は、パスフレーズであるかもしれない文字を使用して、辞書(パイソンが、任意の言語での例を送ること自由に感じ)を構築してきました。 Shiftキーの近くにあるので、標準的なQWERTYキーボードのキーストローク近接、1337相当のスピード、各文字の偶発的な '/'文字が考慮されました。そこからサンプルのパスフレーズが供給され、各文字が試されます。これは、この例を以下の通りです:架空の「オープン・セサミ」は暗号化されたボリュームのこの特定のタイプのマウントに変更するユーティリティですhttp://code.activestate.com/recipes/535171-password-cracker/
import os
from commands import getoutput
known = {
'_': ('_', ' ', '-', '.', '/'),
'b': ('b', 'B', '3', '8', '*', 'v', 'V', 'n', 'N', 'g', 'G', 'h', 'H', ' ', '/'),
'g': ('g', 'G', '6', '^', 'f', 'F', 'h', 'H', 'b', 'B', 'v', 'V', 't', 'T', '/'),
'l': ('l', 'L', '1', '!', ';', ':', 'k', 'K', 'o', 'O', '.', '>', ',', '<', 'p', 'P', '/'),
'e': ('e', 'E', '3', '#', '4', '$', 'r', 'R', 'w', 'W', 'd', 'D', '/'),
'h': ('h', 'H', '4', '$', 'g', 'G', 'j', 'J', 'y', 'Y', 'b', 'B', 'n', 'N', '/'),
'i': ('i', 'I', '1', '|', '!', '\\', 'u', 'U', 'o', 'O', 'k', 'K', '8', '*', '9', '(', '/'),
't': ('t', 'T', '7', '&', '+', 'r', 'R', 'y', 'Y', 'g', 'G', '4', '5', '%', '6', '^', '/'),
'r': ('r', 'R', 'e', 'E', 't', 'T', 'f', 'F', '4', '$', '5', '%', '/'),
}
command = 'open-sesame %s' # hey, use your imagination ;)
# I obviously supplied only needed letters for this example, I can't tip you
# off to the real pass phrase ;) This conveys the general idea....
passwdBasic = 'Big_Leg_Hitter'
def main():
arrays = [known[ltr] for ltr in passwdBasic]
start = [ltrs[0] for ltrs in arrays]
end = [ltrs[-1] for ltrs in arrays]
indexes = [0] * len(arrays)
maxes = [len(ltrs)-1 for ltrs in arrays]
chrs = [ltrs[i] for ltrs, i in zip(arrays, indexes)]
while chrs != end:
passx = ''.join(chrs)
open('tries.txt', 'a+').write(passx + '\n')
out = getoutput(command)
if 'wrong password' not in out:
print 'GOT IT!', passx
return
# Next letter
for i in range(len(indexes)-1, -1, -1):
if indexes[i] <= maxes[i]-1:
indexes[i] += 1
break
else:
indexes[i] = 0
# Make up the chrs
chrs = [ltrs[i] for ltrs, i in zip(arrays, indexes)]
if __name__ == '__main__':
main()
、それはPythonで書かれていませんでしたが、そのコマンドラインツールに行われていますこのスクリプトはそのスクリプトと対話できます。
挑戦/研究の方向性のカップル:
- 「/」文字が誤ってShiftキーの代わりに見舞われた場合、これは実際にはパスフレーズに文字を追加することになりますので、任意の前に現れる可能性があり手紙これは、ソリューション内で考慮する必要があります。
- @rrenaudによって提案されたスペルチェッカユーティリティで、これを統合するとよいでしょう:http://norvig.com/spell-correct.html
- 私はスペルチェックの問題を解決するために適用された確率統計のベイズのTheorumのアプリケーションによって魅了よ。誤ったキーストロークや特定の単語やフレーズを入力するときに特定のキーに当たる確率についての調査があるかどうかは疑問です。このロジックは、一般的なスペルミスの既知のリストから恩恵を受けるスペルチェックユーティリティとほぼ同じ方法でパスワードクラッキングに適用できます。私はニューラルネットユーティリティを「訓練」するための誤ったキーストロークデータを持っていません。
私は大きな助けに感謝しています。私はこれまでのところどこにいても、皆の利益のために共有したいと思っていました。
私の「友人」もこの回答に興味があります; – nachito
秒当たりの試行回数はどれくらいの速さですか? – corsiKa
これは参考になりますが、これとrrenaudのコードを組み合わせる方法が不思議です:http://code.activestate.com/recipes/535171-password-cracker/ – Dan