Я не вижу практического применения для этого, кроме черт его :-)
Итак, сначала вы должны принять решение о платформе. Нет никакого способа в аду, вы можете сделать это кросс-платформенным способом. На самом деле это может быть довольно сложно сделать так, чтобы работать с несколькими компиляторами, даже на одной платформе. Тогда тип процессора, конечно :-)
Тогда вам следует как-то проверить, что код, который вы копируете, можно переместить. Не все может быть перемещено, как вам хочется.
Вы должны хорошо понимать соглашения о вызовах, чтобы убедиться, что вы не испортили стек.
Знайте, как пролог/эпилог, сгенерированный вашим компилятором. Возможно, вы можете обманывать, добавляя в начале и конце функций некоторые кодовые последовательности, которые ничего не делают, но вы можете использовать их как подпись, а затем искать (например, nop; nop; nop; xor ax, ax; nop; push ax; pop ax; nop; nop; nop;). Удостоверьтесь, что компилятор не оптимизирован :-)
Убедитесь, что вы можете написать/выполнить этот код. Современные процессоры и ОС обычно не позволяют писать в сегменте кода или выполнять сегмент без кода. Таким образом, вам нужно будет выяснить, каковы способы изменения прав (100% ОС).
Затем получайте удовольствие от боевых действий, таких как «рандомизация расположения пространства адреса», «рандомизация стека», «предотвращение выполнения данных», «рандомизация кучи».
В любом случае, много работы. И бессмысленно, за исключением того, что у вас есть хороший вызов и в процессе выучите некоторые сборки и внутренние элементы ОС. O для доказательства себя как «1337», но потом, спрашивая о том, как это сделать, не совсем «1337», если вы спросите меня :-)
В любом случае, удачи.
@ Hippiehunter: да, это действительно здорово хакерский – RageZ
@RageZ: Да, но это также кажется довольно аккуратным. Запретный плод, я думаю. – bcat
Вы хотите, чтобы вы цепочки операций функций? – Alon