質問

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

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

たとえば、プログラムでは:

  1. 読み取りのためにテスト中のファイルを開きます
  2. これらのオフセットのいずれかをスキップします
  3. 予想される文字列があるかどうかを確認してください
  4. オフセットがなくなるまで繰り返します

興味深いことに、私のubuntu 64bitでは、このテストが欠落しているため、UPX圧縮ファイルは検出されません。 /usr/share/misc/magic:

>>180   string      UPX!        UPX compressed (64-bit)

他のヒント

UPXへのソースコードには、機能があります int PackW32Pe::canUnpack() あなたがするときに最初にテストとして実行されました upx -d <file> (実行可能ファイルを開梱)。ファイルにUPXが詰まっているかどうかを検出するために、どのオフセットをテストするかを示します。コードが明確で、簡単にフォローできることがわかりました。構文の強調表示を備えたエディターをお勧めします。

UPXのソースコードをダウンロードできます プロジェクトサイト.

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top