Как найти "странные" гаджеты ROP в обычной DLL? Компиляторы никогда бы этого не сделали. (Возвратно-ориентированное программирование) - PullRequest
3 голосов
/ 17 января 2020

Гаджет:

pushad
ret

из определенной DLL не имеет смысла для меня в программе le git.

Если предположить, что DLL - это le git, как это? возможно ли найти гаджет с помощью автоматического поиска c? Пример использования функции может быть полезным.

1 Ответ

5 голосов
/ 17 января 2020

Кодировка инструкции:

60  pushad
c3  ret

Поэтому, где бы ни встречались эти два байта, получается гаджет pushad; ret. Например, эта инструкция может разумно существовать в коде SSE:

66 0f 60 c3  punpcklbw xmm0, xmm3

См. В нем гаджет 60 c3? В качестве альтернативы, гаджет может получить от некоторых сразу. Например, предположим, что в 0x4800c360 есть какая-то переменная, и мы пытаемся загрузить ее адрес:

b8 60 c3 00 48  mov eax, 0x4800c360

Еще раз увидеть гаджет?

Существует множество других способов появления этого гаджета. в совершенно нормальном коде.

...