2010-12-02 13 views
2

私は自分のツールを使って処理できるように、もともとはVisual Basic 6で書かれたプログラムで生成されたデータファイルを読み込もうとしています。RC4のような難読化を克服するにはどうすればいいですか?

このプログラムは、米国政府によって作成されたパブリックドメインソフトウェアです。これを禁止するライセンス契約はありません。プログラマーがおそらく来年のバージョンの難読化を変更してしまう可能性があるため、プログラムの名前やWebサイトへのリンクについて言及することはできません。私はリバースエンジニアリングの努力を繰り返さなければならないでしょう。

基礎となるデータファイル形式はテキストベースで、難読化はハードコーディングされたキーを持つ何らかの種類のストリーム暗号です。私はXORデータファイルを一緒にしてデータの一部を取り出すことができます(文字列フィールドの1つを繰り返しASCII文字で埋めてください)が、私のプログラム内にキーストリーム全体を埋め込むことを避けたいと思います。

.exeファイルを検索すると、RC4iniという名前のサブルーチンと、キーと思われる文字列が表示されます(ユーザーインターフェイスのどこにも表示されません)。私はPlanet Source Codeにこの暗号化ライブラリのソースコードがあり、RC4(JavaScriptで、私が主に働いているプログラミング言語である)の実装を正しく変更し、それを使ってみた。

ファイル内のすべてのオフセットで暗号化されたデータを検索しようとしましたが、復号に成功しませんでした。なぜこれが起こっているのですか?

+4

パブリックドメインの場合、それにリンクを設定します。 –

+0

@Igor Skochinsky:新しいバージョンのプログラムが毎年リリースされています。次のリリースは2011年初めに開始される予定で、プログラムの名前に言及すると(Web検索で表示される)、プログラムをもう一度やり直す必要があります。 – PleaseStand

+2

アルゴリズムの独自の実装を見ることなく、どのように実際のものと同じ結果を与えていないのか、誰が賢明な答えを返すのでしょうか? – caf

答えて

0

Googleを使用して疑わしい暗号鍵を検索すると、Javaコードを公開ソースにしたことがわかりました(暗号化キーとして見つかった文字列をはっきりと識別できます)。その後、彼はsvn:ignoreに入れた別のクラスに鍵をリファクタリングした(おそらくそれを変更したが、私はまだチェックしていない)。

私の解読プログラムはPlanet Source Codeの実装と正確には一致しなかった。ここではRC4 PRGAのWikipedia's descriptionです:

i := 0 
j := 0 
while GeneratingOutput: 
    i := (i + 1) mod 256 
    j := (j + S[i]) mod 256 
    swap values of S[i] and S[j] 
    K := S[(S[i] + S[j]) mod 256] 
    output K 
endwhile 

Visual BasicおよびJavaコードの両方が最初の2行(:= 0とj = 0 i)を省略しました。

2

RC4を使用している場合は、いくつかのオプションがあります。

1つのオプションは、RC4を呼び出してキーまたは平文メッセージをダンプするときを見つけることです。これはWindbgやおそらくollydbgのようなデバッガを使って簡単に行うことができます。基本的に彼らは暗号法を破っており、このプロパティのためにすべてのDRMが失敗します。

もう1つの攻撃は、2つのメッセージに同じキーが使用されている場合、1つのメッセージのプレーンテキストを知っている場合、PRNGストリームを公開するために対応する暗号テキストでxorできます。このPRNGストリームは、未知のメッセージの暗号テキストとXORされて、対応する平文を得ることができる。当然ながら、キーがメッセージごとに異なる場合(IVの使用など)、この攻撃は機能しません。

+0

@idealmachineデバッガを使用します。 – rook

関連する問題