2011-01-03 7 views
2

バイナリがUPXで圧縮されているかどうかを検出する方法を理解しようとしています。私は単純なCRCを使用して私のアプリが何らかの形で変わったかどうかを検出しています。パッカーのためにCRCがサイズ上で失敗した場合は、それをOKとして検出したいと思います。プログラムでUPXを検出する

今はUPXから始まっています。

したがって、バイナリにはマーカーがありますか?特定のJMPやその他の指示を検索する必要がありますか?
これは主にWindowsでテストされますが、将来はLinuxにも追加される可能性があります。

助け(とコード)をいただければ幸いです。

追加されました:

私は10個のバイナリに私はUPXまたはそれはUPXで設定されたオフセットを持っている

AddressOfEntryPoint
Import Directory RVA
Resouce Directory RVA

のいずれかのポイントをチェックしていることが分かりました。これに関する情報は? UPX Homepageから

おかげ

+0

UPX unpackerのソースコードを見てみると、UPX検出のアルゴリズムがそこにあるはずです。 – Machinarius

+0

すでにやっています。 –

答えて

0

実行可能ファイルのセクション名を確認してみてください。 UPXはそれらをUPX0、UPX1、UPX2に変更します。

+1

この方法は残念ながら信頼性がありません。いくつかの(パックされた/暗号化された)イメージのセクションは、 "標準"/"従来の"セクション名に名前が変更されます。セクションの名前は、決してローダーによって解釈されることはありません。一部のツールでは、セクションの名前が失われている(削除されている)場合もあります。 – mox

+0

@moxでは、この応答はUPXパッカーに固有のものです。追加のパッカーや難読化ツールを実行すると、セクション名がさらに変更されることがあります。ただし、デフォルトでは、UPXパッカーは上記のセクション名を変更します。 –

2

ダウンロードupxソースコードとオープンsrc/p_w32pe.cppファイル。あなたが探している機能は次のとおりです。

int PackW32Pe::canUnpack() 

この関数は、ファイルがwin32 upxで圧縮されているかどうかをチェックします。

+0

チップをありがとうございますが、私は別のオブジェクトとそのコンストラクタでそのコードに従うのが苦労しています。 Win32の場合は、(.hファイルの) 'PackW32Pe'を呼び出しますが、それは別の呼び出しなどを作成します。私はCのプログラマーであり、オブジェクトは私にはあまり強くありません。あなたはそのコードを読んでから追加するかもしれない特定のものはありますか?再度ありがとう –

+0

私の答えを更新しました。ありがとう。 – ismail

+0

私が何とかそれを使用できるかどうかを見てみましょう –

関連する問題