RelocAlloc: .relocセクションを使用して一般的な割り当て呼び出しを置き換える
コードの説明:
- まず、プロセスにマップされているすべてのDLLのアドレスを特定します。
- 次に構造体の配列を構築し、いくつかのデータで埋めます。これが**Initialize()**関数です。
- 配列が完成したら、次のステップは適切なアドレスを検索することです。
- **GetSuitableAddress(SIZE_T ShellcodeSize)**を呼び出すと、その処理が行われます。つまり、シェルコードのサイズに合う適切なコードケーブ(メモリ内の空き領域)を見つけます。
- 見つかった場合はそれが返されます。
- 使用するには、メモリ保護を書き込み可能/実行可能に調整する必要があります...(PoCは直接rwxです)
デモ:
img1
img2
注: これは小さなシェルコードでのみ動作します。マップされているDLLに依存するため、.relocセクションが大きいほど有効なアドレスを取得できる可能性が高くなります。さらに、これはx64マシンでのみテストされていますが、x86でも動作するはずです(たぶん :p)
# さらなる情報をお待ちください
120064592-a5c83480-c075-11eb-89c1-78732ecaf8d3