Вливаем немного кода и медленно перемешиваем |
[Jan. 5th, 2013|02:47 pm] |
[Tags | | | 16, 32, 64, i386, indy, ldt, linux, modify_ldt, poc, wasm, x86_64 | ] |
Я уже, как-то пользовался подобной фичей, а тут умница Indy (я ведь не ошибаюсь, Danilova на васме - это он?), напомнил. В результате получился вот такой кодик:
( ... )
L1: mov edx, 0xc88cffff
db 0x66, 0xea
dd L2
jae L2 ( ... )
format db "EAX=%08x EDX=%08x", 10, 0
EAX=7 EDX=FFFF
Для тех, кто в танке, можно и подробнее:
( ... )
Ага?
P.S. Привет дизассемблерам и кривоэмуляторам. Indy - respect.
UPD. Чтобы жизнь медом не казалась, переходим на x64:
( ... ) |
|
|
.dynamic |
[Oct. 9th, 2008|07:27 pm] |
К 32-м нулям в .dynamic зарезервированым для prelink можно ещё добавить DT_INIT/DT_FINI (в экзешках линкер игнорирует эти таги, а в библиотеках их можно использовать, как точку входа). А можно не убивать, а заменить на DT_FLAGS со значением DF_BIND_NOW, после чего можно грохнуть команды (push .../jmp _plt) в .plt и получить 16 + <number of .plt entries>*10 байт. Можно связать освобождённое таким образом место при помощи «EB 06». И следить за тем, чтобы в собственном коде не было инструкций длинее 8 байт.
( Где-то так... ) |
|
|
Расширение сегмента кода |
[Oct. 9th, 2008|02:36 pm] |
Принцип «Работает — не трогай!» называют иногда «золотым правилом». Только вот беда, это «золотое» правило возвращает нас в бронзовый век. Если метод прост, надёжен и используется десяток лет, то никто и не пытается его улучшить. Пока не придёт кто-нибудь с непрокомпостированными мозгами, например Якуб Желинек. В начале сам допёр, разглядывая бинари, а потом сообразил, что именно так и работает prelink.
( Как? ) |
|
|