ELFにLinuxのUPXが詰め込まれているかどうかを確認する
質問
ELF形式がどのように機能するか、またはコードを介してヘッダーとデータにアクセスする方法についての知識はありませんが、Linux用のUPXを使用してELFバイナリが圧縮されている(パックされているか)かどうかを確認する必要があります。
バイナリを確認します strings
文字列を見ました UPX!
だから私はそれを使うことができると思います。バイナリの六角化は文字列を示しており、バイナリの位置については、それがELFのヘッダーの一部であると仮定できます(間違っている場合は修正してください)。これはそのダンプです:
00000000 .ELF........................4...
00000020 ........4. ...(.................
00000040 ........................@...@...
00000060 @.....................[.UPX!....
00000080 ............T............?d..ELF
これがよさそうだったかどうかはわかりません、ごめんなさい。
LinuxでUPXを検出する方法を知っている人はいますか?そうでない場合は、ヘッダーにアクセスしてそれを取得する方法 UPX!
文字列(ヘッダーの名前?)?
UPXソースコードを調べましたが、すべてがC ++です。これをCでコーディングしたいと思っていますが、従うのは本当に難しいです。
ありがとう、どんな助けも歓迎されます。
編集:賞金について。私はさまざまなアプローチを試してみて、以下のサンプルのように、常に機能するわけではないので、彼らの回答は確かな例を挙げなければなりません。
ありがとうございました
解決
これらは、UPX圧縮ファイルを検出するためのテストです。
>>>>(0x3c.l+0xf8) string UPX0 \b, UPX compressed
>>>>(0x3c.l+0xf8) search/0x140 UPX2
>>>(&0x7c.l+0x26) string UPX \b, UPX compressed
>>>&0x26 string UPX \b, UPX compressed
>>85 string UPX \b, UPX compressed
使用する
man 5 magic
ファイル内のオフセットがどのように指定されているかを確認します。
たとえば、プログラムでは:
- 読み取りのためにテスト中のファイルを開きます
- これらのオフセットのいずれかをスキップします
- 予想される文字列があるかどうかを確認してください
- オフセットがなくなるまで繰り返します
興味深いことに、私のubuntu 64bitでは、このテストが欠落しているため、UPX圧縮ファイルは検出されません。 /usr/share/misc/magic
:
>>180 string UPX! UPX compressed (64-bit)
他のヒント
UPXへのソースコードには、機能があります int PackW32Pe::canUnpack()
あなたがするときに最初にテストとして実行されました upx -d <file>
(実行可能ファイルを開梱)。ファイルにUPXが詰まっているかどうかを検出するために、どのオフセットをテストするかを示します。コードが明確で、簡単にフォローできることがわかりました。構文の強調表示を備えたエディターをお勧めします。
UPXのソースコードをダウンロードできます プロジェクトサイト.