2016-09-04 9 views
0

タイトルによれば、これはどのように行われますか?オペコードの先頭に1バイトを追加すると、1バイトのメモリ内のアドレスがプッシュされます。実行に影響を与えずにPEにバイトを追加する

0x1 mov ecx, 10 
0x2 mov eax, 1 
0x3 inc eac 
0x4 cmp eax 
0x5 jl 0x3 

追加バイト:

0x1 NOP 
0x2 mov ecx, 10 
0x3 mov eax, 1 
0x4 inc eac 
0x5 cmp eax 
0x6 jl 0x3 

は、私は手動ですべてのJMPを設定しなければならない、などを呼び出すか、実行する他の方法があるあなたは質問を理解していけない場合それ?

+1

プログラムで使用されているすべてのメモリアドレスを手作業で調べて、調整する必要があるかどうかを確認する必要があります。重要ではないプログラムでは、修正する必要のあるアドレスがどこにでも存在できるため、これは実用的ではありません。また、リストされている指示のほとんどが1バイト以上の長さであることに注意してください。 –

+0

これは正確な複製ではないかもしれません。私が選んだdupターゲットは、新しいコードを追加する方法(新しいセクションに入れて既存のinsnをjmpに置き換える方法)ですが、Jean-Françoisの答えは他の手法を指摘しています。 –

答えて

2
コードが位置独立でない場合、それは

  • シフトいくつかの相対的なジャンプ(ないそれらのすべて)
  • シフト移転を相殺するよう

    悪い考え私はゲームをクラックするために使用さ

私はNOPをコードの代わりに置きましたが、それは大丈夫でしたが、それ以上のことをする必要がある場合もありました。

代替手段:

  • 無料の/未使用のプログラムゾーン(たとえば、到達不能なロバストネスコードなど)を見つけ、そこで元のコードを移動します。それからjsrにカスタムコードを追加してください。
  • 実行可能ファイルを逆アセンブルして、再アセンブルしてコードを自由に追加できるようにします。この方法では、すべてのコード&データセクションを識別する必要がありますので、より難しくなりますが、最終的にプログラムに何かを追加することができます。
+0

実行ファイルを逆アセンブルした場合。バイトが命令かメモリ位置の一部かどうかはどのようにわかりますか?たとえば、私はmov命令0x89を探していて、すべての0x89 movsで見つけることができますが、mov eax、dword_0x4C89でも見つけることができます。 –

+0

@JF:私がこれを再開すべきだと思ったら教えてください。私はそれをdup-hammeringで急いでいるかもしれません。 –

+0

@Peterあなたのようなコードですが、私はあなたが正しいと思います。リンクされた答えは素晴らしいと非常に完全です。 –

関連する問題