0

不幸なレガシー アプリケーションをリバース エンジニアリングしています。私は次のことを知っています:

username=> hashFunction() =>8BYUW6iFeL9mmSBW7xjzMw~~

password=> hashFunction() =>VszQfe5n0+CooePc7CS9kw~~

ハッシュの長さは常に 22 文字のようです。システムはレガシー microsoft .net アプリケーションです。それらも元に戻すことができると信じる理由があります (ただし、これは正しくない可能性があります)。

末尾の 2 つのチルダは、これを識別できるはずだと感じさせます。どのタイプのハッシュが使用されているかを把握するにはどうすればよいですか?

4

4 に答える 4

2

末尾の「~」文字がフィラーであると仮定すると (これは通常のケースではありません (通常は「=」です))、ユーザー名は次のようになります。

f0 16 14 5b a8 85 78 bf 66 99 20 56 ef 18 f3 33

パスワードは次の場所に表示されます。

56 cc d0 7d ee 67 d3 e0 a8 a1 e3 dc ec 24 bd 93

16 進数で。これは、他のポスターの 128 ビットと一致します。AES-128 暗号化または MD5 ハッシュの出力のように聞こえます。サンプルがこれほど小さく、ソースが何であるかがわからないため、これは残す必要がある場所のようなものです。あなたはそれらが可逆的であるかもしれないと思ったと言ったので、それはAES-128を指しています. より大きなサンプルと入力データがなければ、それでできることはそれだけです。

文字列「username」と「password」の MD5 ハッシュを実行してみましたが、それらは異なる値になります。それが AES で暗号化されていた場合、それ以上のヒントがなければ不運です。

がんばれ / ボブ・ブライアン

于 2012-08-06T01:52:57.230 に答える
2

ただの勝手な推測

64^21  <  2^128  <=  64^22 

128 ビット ハッシュの base-64 エンコーディングには 22 文字が必要です。

上記の引数は、64 を 57 から 68 までの任意の整数に置き換えた場合にも機能します。Base-67 エンコーディングは一般的ではないと思いますが、それを念頭に置いても害はありません。

サンプルには、少なくとも 63 文字 (大文字 26 文字、小文字 26 文字、10 桁、プラス記号) が含まれているようです。

于 2012-08-01T22:15:21.040 に答える
2

「hashFunction」関数がレガシー アプリケーションの一部である場合は、.net リフレクターなどのリフレクション ツールを使用してコードを反転し、関数の動作を確認できます。

于 2012-08-01T22:13:18.063 に答える
1

ここに興味深い値があります:

Fj83STvXE+6q57GVjIi9aQ==

たまたま37か所までのPIだと知っています(1E37倍)

3141592653589793238462643383279502884

すべてのbase64値がハッシュまたは暗号化されるわけではありません。値をもたらすプロセスについての知識がなければ、ランダムな128ビット文字列で多くのことを行うことは不可能です。

よろしく、/ボブブライアン

于 2012-08-07T00:52:02.890 に答える