· Начало · Отвђтить · Статистика · Поиск · FAQ · Правила · Установки · Язык · Выход · WASM.RU · Noir.Ru ·

 WASM Phorum —› WASM.ASSEMBLER —› Как сделать JMP по заданному адресу или узнать EIP (коды должны быть в пределе 0x01..0x7F)

. 1 . 2 . >>

Посл.отвђт Сообщенiе


Дата: Май 22, 2004 01:20:35

При написании эксплоита (ограничение на коды: 0x01..0x7F) возникла проблема:

1) Необходимо сделать JMP по заданному адресу: ни ret, ни call, ни jmp в заданные ограничения не вписываются...

2) Как можно узнать адрес выполняемого в данный момент кода...
(смещение относительно содержимого esp или какого-нибудь другого регистра высчитать _невозможно_!!!! по условию...)

Как я делал, когда можно было использовать почти все комманды (0x01..0xFF):

db E8,FF,FF,FF,FF,C3
pop eax ; EAX = EIP

(т.е

call $+4 (E8 FF FF FF FF)
inc ebx (FF C3)
pop eax
)

Теперь незнаю что и делать... хотел организовать поиск моего кода начиная с ESP по сигнатуре... но не смог организовать цикл (любой переход назад содержит недопустимые символы...)


Дата: Май 22, 2004 01:30:29

> Необходимо сделать JMP по заданному адресу: ни ret, ни call, ни jmp в заданные ограничения не вписываются...

Условные вписываются, тебе лишь нужно заставить выполнять прыжок по твоему условию..


Дата: Май 22, 2004 01:36:39

Условные вписываются, тебе лишь нужно заставить выполнять прыжок по твоему условию..

Забыл указать: адрес, куда нужно делать переход хранится в регистре... (может я что незаметил, но условные переходы возможны только по относительным или абсолютным адресам... а jne [eax] - не получится... или я торможу?)


Дата: Май 22, 2004 02:01:18

Тогда не получиться..
Когда-то на reversing'е обсуждалась тема что-то там написать используя лишь ASCII кода, но у меня сейчас под рукой нет, нужно перезагружаться в другую винду, я потом гляну, если там что-то есть полезное завтра запощу.


Дата: Май 22, 2004 02:11:36

Тогда не получиться..
...если там что-то есть полезное завтра запощу.

Буду ждать...

Прочитал: Phrack Inc Volume 0x0b, Issue 0x39, Phile #0x0f of 0x12 (Writing ia32 alphanumeric shellcodes), не помогло... им там известен адрес кода... и поэтому сгенерировать какой-нибудь JMP ESP уже можно...


Дата: Май 22, 2004 05:44:41

jmp eax


Дата: Май 22, 2004 05:50:53

jmp eax
это
FF E0
соответственно не подходит под условие


Дата: Май 22, 2004 05:52:26

Какое условие я не понял?


Дата: Май 22, 2004 05:53:49

ограничение на коды: 0x01..0x7F


Дата: Май 22, 2004 05:56:19

В смысле опкод должен начинатся с [01...7f] ?


Дата: Май 22, 2004 06:00:13

Ну да, видимо, и не только начинаться, вообще любые составляющие байты должны удовлетворять этому условию.


Дата: Май 22, 2004 06:25:32

Единственный код который модифицирует EIP <= 7F(т.е. позволит изменить его i.e. перейти на нужный участок) это jcc с знаковым байтом в качестве операнда который расширяется до полного размера заполнением старшего бита и прибавляется к текущему EIP (текущим будет начало инструкции с 7xh + 2 (размер команды)) Это позволяет сделать выводы следующие:
1. Если прыжок будет на расстояние не в пределах -128..+127 то это невозможно.
2. Даже если это в пределах, то вставить пользуясь данными из регистра нужное значение (рассчитать смещение технически возможно) можно будет только если разрешено изменение в странице кода.


Дата: Май 22, 2004 06:35:53

А SEH тоже противопоказан?


Дата: Май 22, 2004 06:40:32

Quantum
Мне интересно как ты будешь оперировать указанными байтами при постановке SEH'а ;-)


Дата: Май 22, 2004 07:12:12

Asterix
push reg32 ; загоняем адрес обработчика
push 1
pop eax
dec eax ; это вместо xor eax,eax
push DWORD PTR fs:[eax] ; тут есть один 0xFF :-(
; * * *
Потом надо вызвать null-pointer exception

Трабла вообще с FS. Надо как-то переместить FS в регистр.

. 1 . 2 . >>


Powered by miniBB 1.6 © 2001-2002
Время загрузки страницы (сек.): 0.048