Тема: L2 PTS
Показать сообщение отдельно
Непрочитано 20.08.2016, 23:37   #19
Аватар для Sojang
Пользователь

Автор темы (Топик Стартер) Re: L2 PTS

Цитата:
Сообщение от n3k0nation Посмотреть сообщение
А нафига Вы компилите под 386й?)

Качаете, например, fasm и пишите чето типа этого:
Код:
use64
push 0x7fffffff
ret
Компилите это:
Код:
fasm tramp.asm tramp.bin
Открываете в хексе аутпут и видите чето типа этого:


Берем эти замечательные байты и пихаем в сишную прогу. Должно получится чето типа:
Код:
unsigned char trampTemplate[ ] = {
0x68, //push
0x00, 0x00, 0x00, 0x00 //address
0xc3 //ret
};
Адрес кодируется, как беззнаковое 4х байтовое слово. В общем, через костыль и жопу, грубо говоря (вместо того, чтобы дать нормальную поддержку push 8bytes). Пляшем с бубном, вычисляем наш адрес.
Готовим трамплин (псевдокод):
Код:
unsigned char* tramp = new unsigned char[6];
memcpy(tramp, trampTemplate, 6);
((DWORD*)(&tramp[1]))* = adr;
А далее, как обычно, даем через VirtualProtect права на запись куска памяти, где будем переписывать код и пишем наш трамплин туда.
спасибо за развернутый ответ
но чет я кажись кривой и он пишет в память не push адрес ret а бред полный

код:
Свернуть ↑Развернуть ↓
Sojang вне форума Ответить с цитированием