web-dev-qa-db-ja.com

シェルコードがdll内のエクスポートされていない関数を呼び出すことは可能でしょうか?

今日頭に浮かんだのはただの質問です。 getprocaddressを使用して、実行時にエクスポートされた関数の場所を取得できることを知っています。

https://stackoverflow.com/questions/2918234/calling-a-non-exported-function-in-a-dll

ここで誰かがバイナリパターンを検索することを提案しました。たとえば注入されたシェルコードを処理するときにこれが機能しない理由はありますか?

または、エクスポートされた関数の実行時に生のアドレスを取得し、エクスポートされていない関数へのオフセットを計算して呼び出すことができますか?また、これは、違反を引き起こすことなく、最新のメモリ緩和策で機能しますか?

3
Xenocide

それができるだけでなく、関数の途中で呼び出しを行うことができます。
https://en.wikipedia.org/wiki/Return-directiond_programming

マルチバイト命令(x86上)の途中で呼び出すことも可能であり、その結果、それらの命令の解釈が完全に異なると思います。

そうそう。そのためのツールがあります。

1
Jeff K