私は実行可能なパッカーに取り組んでおり、これまで圧縮と暗号化の部分を行ってきました。ここで、解凍/復号化スタブ/ルーチンを圧縮ファイルに保存する必要があります。私の質問は、このスタブを HEX コードで記述するか、それともアセンブリ命令を直接配置できるかということです。後で可能であれば、どのように?
質問する
2381 次
2 に答える
3
作業パック バイナリを作成するには、次のものが必要です。
- PE ジオメトリを変更する
- コードを挿入する
コードのサイズによっては、セクション パディングを使用したり、独自のセクションを追加したりすることができます。
次に、コードを挿入するには (ASM の直接挿入を好むようです)、解読コードを EIP に依存しないようにしてから、YASM などで純粋なコード ( -o
) としてアセンブルし、アセンブルされたバイナリとしてコードを直接含めることをお勧めします。 .
アセンブルされたコードも「挿入」するため、最初のリファレンスとして役立つミニパッカーをいくつか書きました。
于 2013-05-21T10:01:11.433 に答える
1
「読み取り可能」「書き込み可能」「コードを含む」「実行可能」という特性を持つセクションが必要です
Address of Entry Point: 0x00019860
Section Header #1
Name: UPX0
Virtual Size: 0x00010000 (65536)
Virtual Address: 0x00001000
Size of Raw Data: 0x00000000 (0)
File Pointer to Raw Data: 0x00000400
File Pointer to Relocation Table: 0x00000000
File Pointer to Line Numbers: 0x00000000
Number of Relocations: 0
Number of Line Numbers: 0
Characteristics: 0xE0000080
Section contains uninitialized data.
Section is executable.
Section is readable.
Section is writeable.
Section Header #2
Name: UPX1
Virtual Size: 0x00009000 (36864)
Virtual Address: 0x00011000
Size of Raw Data: 0x00008A00 (35328)
File Pointer to Raw Data: 0x00000400
File Pointer to Relocation Table: 0x00000000
File Pointer to Line Numbers: 0x00000000
Number of Relocations: 0
Number of Line Numbers: 0
Characteristics: 0xE0000040
Section contains initialized data.
Section is executable.
Section is readable.
Section is writeable.
Section Header #3
Name: .rsrc
Virtual Size: 0x00001000 (4096)
Virtual Address: 0x0001A000
Size of Raw Data: 0x00000800 (2048)
File Pointer to Raw Data: 0x00008E00
File Pointer to Relocation Table: 0x00000000
File Pointer to Line Numbers: 0x00000000
Number of Relocations: 0
Number of Line Numbers: 0
Characteristics: 0xC0000040
Section contains initialized data.
Section is readable.
Section is writeable.
簡単に言えば、UPX は、圧縮されたコードと解凍ルーチンを含む 1 つのセクションと、初期化されていないが書き込み可能で実行可能な特性を持つことが許可されている 2 番目のセクションを生成します。解凍ルーチンは、コードを初期化されていないセクションに解凍し、元のエントリポイントの実行を続行します...
于 2013-05-16T06:28:50.347 に答える