3

ELF形式がどのように機能するか、またはコードを介してそのヘッダーとデータにアクセスする方法についての知識はありませんが、ELFバイナリがLinux用のUPXで圧縮(パック?)されているかどうかを確認する必要があります。

バイナリをチェックするとstrings文字列UPX!が表示されたので、それを使用できると思います。バイナリを16進編集すると文字列が表示され、バイナリ内の位置については、ELFのヘッダーの1つの一部であると見なすことができます(間違っている場合は修正してください)。これはそのダンプです:

00000000    .ELF........................4...
00000020    ........4. ...(.................
00000040    ........................@...@...
00000060    @.....................[.UPX!....
00000080    ............T............?d..ELF

これがよさそうかどうかわかりません、ごめんなさい。

LinuxでUPXを検出する方法を知っている人はいますか?そうでない場合、ヘッダーにアクセスしてそのUPX!文字列(ヘッダーの名前?)を取得する方法は?

私はUPXソースコードを調べましたが、すべてがC ++であり、これをCでコーディングしようとしています。そして、それを追跡するのは非常に困難です。

ありがとう、どんな助けでも歓迎します。

編集:バウンティについて。以下のサンプルのように、私がさまざまなアプローチを試したが、常に機能するとは限らないため、彼らの答えは確かな例を示しているに違いありません。
ありがとうございました

4

2 に答える 2

4

これらは、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

ファイル内のオフセットがどのように指定されているかを確認します。

たとえば、プログラムでは次のことを行う必要があります。

  1. テスト対象のファイルを開いて読み取ります
  2. これらのオフセットの1つにスキップします
  3. 期待される文字列がそこにあるかどうかを確認します
  4. オフセットがなくなるまで繰り返します

興味深いことに、私のubuntu 64ビットでは、このテストが次の場所にないため、UPX圧縮ファイルは検出されません/usr/share/misc/magic

>>180   string      UPX!        UPX compressed (64-bit)
于 2011-02-03T16:06:23.043 に答える
2

UPXのソースコードには、 (実行可能ファイルの解凍)を実行int PackW32Pe::canUnpack()したときに最初にテストとして実行される関数があります。upx -d <file>これは、ファイルがUPXでパックされているかどうかを検出するためにテストするオフセットを示しています。コードが明確でわかりやすいことがわかりました。構文が強調表示されたエディターをお勧めします。

UPXのソースコードはプロジェクトサイトからダウンロードできます。

于 2011-02-09T11:55:20.293 に答える