5

リスト 7.1 Cascade Virus の復号化プログラム

lea si, Start ; position to decrypt (dynamically set)

mov     sp, 0682    ; length of encrypted body (1666 bytes)

Decrypt:
xor     [si],si ; decryption key/counter 1
xor     [si],sp ; decryption key/counter 2
inc     si  ; increment one counter
dec     sp  ; decrement the other
jnz     Decrypt ; loop until all bytes are decrypted

Start:  ; Encrypted/Decrypted Virus Body 

SP (スタック ポインター) レジスターが復号化キーの 1 つとして使用されるため、この復号化プログラムにはデバッグ防止機能があることに注意してください。

SPレジスタの使用がアンチデバッグ機能のように機能する理由を誰かが説明できますか? 私が間違っている場合は修正してください。ただし、デバッガーを実行してもスタック レイアウトが変更されるとは思いません...

前もって感謝します

4

4 に答える 4

5

ブレークポイントまたは割り込みを取得すると、「データがスタックにプッシュされ」、スタック ポインターが参照する領域内のデータ バイトが破損します。したがって、デバッガーを使用してコードにブレークポイント (INT n) を配置すると、(ブレークポイントに遭遇した) デバッグの行為自体が、このコードが復号化しようとしているデータを破壊します。

割り込みが発生しない場合、このコードは DOS で動作する可能性があります。おそらく、最初に割り込みを無効にします。これを Windows または Linux で現実的に使用することはできません (とにかく 16 ビット コード)。

于 2010-10-09T23:55:30.113 に答える
2

スタック セグメントがデータ セグメントと等しい場合 (DS は既に CS と等しいため、.com ウイルスか .exe ウイルスか? .com のように見えます)、スタック (デバッガーまたは割り込み) を使用すると、ss が格納されているメモリが変更されます。 :[sp] は指しており、ウイルス本体のどこかを指しています (カウンターとして使用されるため)。

于 2010-09-20T23:47:50.653 に答える
1

私のx86-fuは錆びていますが、ほとんどのブレークポイントデバッグツールは、CPUの障害をトリガーし、スーパーバイザープロセスとして自分自身をアサートすることで機能することを思い出しているようです。これにより、新しいスタックとそれに応じて変更されたスタックポインターが提供されます。したがって、そのコードをステップsp実行すると、デバッガーによってトラップされていない場合にプロセスが通常表示する値とは異なる値が得られます。

于 2010-09-20T11:24:56.883 に答える
0

ほとんどのデバッガーは、[e]sp が有効であり、スタック領域を指していることを期待しています。sp が有効なメモリを指していない場合、一部のデバッガーがクラッシュする可能性があると思いますが、私は知りません。

于 2010-09-20T11:41:27.943 に答える