Сейчас на форуме: (+5 невидимых)

 eXeL@B —› Программирование —› Выполнение кода в стеке.
Посл.ответ Сообщение

Ранг: 51.7 (постоянный)
Активность: 0.020
Статус: Участник

Создано: 01 ноября 2007 22:48
· Личное сообщение · #1

Вопрос совместимости. Есть следующий код к примеру:

push XXXX
push XXXX
push XXXX
push XXXX
jmp esp

Т.е. положили в стек опкод и прыгнули на его выполнение. На всех ли процессорах разрешен запуск кода в стеке? Просто слышал что новые процесоры запрещают это. Правдо ли???



Ранг: 88.3 (постоянный), 3thx
Активность: 0.040
Статус: Участник

Создано: 01 ноября 2007 22:53
· Личное сообщение · #2

На всякий случай, его еще DEP Windows запрещает.



Ранг: 309.8 (мудрец), 21thx
Активность: 0.170
Статус: Участник

Создано: 01 ноября 2007 23:32
· Личное сообщение · #3

push eax
push esp
push PAGE_EXECUTE_READWRITE
push max_size
push esp
call VirtualProtect
pop eax

optimized

-----
Shalom ebanats!




Ранг: 12.2 (новичок)
Активность: 0.010
Статус: Участник

Создано: 02 ноября 2007 00:00
· Личное сообщение · #4

Автор ответь мне на вопрос какая разница гденаходится адрес кода куда мы будем прыгать???
стек ето участок памяти! который содержит чтото! вданном случае участок памяти содержит адрес твоего кода и неимеет значения откуда его читать!



Ранг: 309.8 (мудрец), 21thx
Активность: 0.170
Статус: Участник

Создано: 02 ноября 2007 00:03
· Личное сообщение · #5

вообще DEP призван бороться с шелкодесами, чтобы при каком-то переполнении код не мог просто так выйти в стек без того самого call VirtualProtect (вроде SVKP так делает). а стековый полиморфизм просто "попал под раздачу"

-----
Shalom ebanats!




Ранг: 9.5 (гость)
Активность: 0.010
Статус: Участник

Создано: 02 ноября 2007 00:17
· Личное сообщение · #6

steepf пишет:
Автор ответь мне на вопрос какая разница гденаходится адрес кода куда мы будем прыгать???


Да разница в том, что на страницу памяти может не стоять этрибут PAGE_EXEC. И наступит боооольшой облом. Правда, этот атрибут ПРАВИЛЬНО обрабатывается только начиная с 64-разрядных процессоров.




Ранг: 990.2 (! ! !), 380thx
Активность: 0.680
Статус: Модератор
Author of DiE

Создано: 02 ноября 2007 00:26
· Личное сообщение · #7

VA_DOS пишет:
Правда, этот атрибут ПРАВИЛЬНО обрабатывается только начиная с 64-разрядных процессоров.


в 2003 x32 по-моему всё правильно обрабатывается

-----
[nice coder and reverser]





Ранг: 126.7 (ветеран)
Активность: 0.140
Статус: Участник
#CCh

Создано: 02 ноября 2007 00:29 · Поправил: Ice-T
· Личное сообщение · #8

гг) поставьте режим "Включить DEP для всех программ и служб..." и исполнгите это:

mov EAX,ESP
sub ESP,04h
push EAX
push 040h
push 1000
push 012E000h
call VirtualProtect
mov dword ptr[ESP],090909090h
call ESP


функо возвращаед 1, но исполнить стек не дает, в обычном же режиме DEP ("для основных программ и служб windows") все работаед норм ))

later:
SLV одепты передале: "SVKP так больше не делоет"

-----
invoke OpenFire




Ранг: 2.5 (гость)
Активность: 0=0
Статус: Участник

Создано: 02 ноября 2007 00:30
· Личное сообщение · #9

32-разрядный проц исполняет код даже в секции без флага EXECUTE (главное, чтобы READ был)
Код на стеке нормально выполняется без VirtualProtect (доступ READ на стек установлен)
64-разрядного проца нету, поэтому ничё сказать не могу =(

Сейчас специально прогу написал, которая выполняет код на стеке и все ОК!



Ранг: 115.1 (ветеран), 3thx
Активность: 0.070
Статус: Участник

Создано: 02 ноября 2007 00:31 · Поправил: __
· Личное сообщение · #10

Ice-T пишет:
call ESP


эта команда на Интеле и АМД работает по разному,
насчет push esp не уверен

format PE GUI 4.0
entry start

include '%fasminc%\win32a.inc'

DEP_IGNORE = 0


section '.code' code readable executable

align 4
start:

mov ecx, size
sub esp, ecx
mov esi, L1
mov edi, esp
@@:
lodsb
stosb
loop @B
IF DEP_IGNORE
mov eax, esp
invoke VirtualProtect, eax, size, PAGE_EXECUTE_READWRITE, OldProtect
END IF
mov eax, [MessageBox]
mov ecx, esp
call ecx
IF DEP_IGNORE
mov eax, esp
invoke VirtualProtect, eax, size, [OldProtect], OldProtect
END IF
add esp, size
invoke ExitProcess, 0
L1:
push 0
push 0
push szStack
push 0
call eax
retn
nop
nop
size = $ - L1


section '.data' data readable writeable

szStack db "Stack",0
OldProtect dd ?


section '.idata' import data readable

library kernel32,'KERNEL32.DLL',
user32,'USER32.DLL'

include '%fasminc%\APIA\KERNEL32.INC'
include '%fasminc%\APIA\USER32.INC'





Ранг: 126.7 (ветеран)
Активность: 0.140
Статус: Участник
#CCh

Создано: 02 ноября 2007 00:40 · Поправил: Ice-T
· Личное сообщение · #11

не суть, результат тот же..... violan when executing

later:
а есле просто запустить, то винда показывает окно, что для защиты от исполнения данных программо закрыто, так что придецо видемо поискать другие пути...

-----
invoke OpenFire




Ранг: 2.5 (гость)
Активность: 0=0
Статус: Участник

Создано: 02 ноября 2007 00:44
· Личное сообщение · #12

Попрубуйте на фасме скомпилить и запустить:


format PE GUI 4.0 at 12340000h
entry start
include "win32ax.inc"
section "MYSECT!" code readable writeable
start:
push ExitProcess
push 0x15FF9090
jmp esp
data import
library kernel32,"kernel32.dll"
include "api\kernel32.inc"
end data


Все OK!

ЗЫ: Настройки DEP я не менял




Ранг: 126.7 (ветеран)
Активность: 0.140
Статус: Участник
#CCh

Создано: 02 ноября 2007 00:47
· Личное сообщение · #13

SL7549 дык DEP'у похуй на твою прогу, если ты не менял настройки..

-----
invoke OpenFire




Ранг: 9.5 (гость)
Активность: 0.010
Статус: Участник

Создано: 02 ноября 2007 00:51
· Личное сообщение · #14

Ice-T пишет:
SL7549 дык DEP'у похуй на твою прогу, если ты не менял настройки..


Зависит от операционки. На 2003 R2 x64, к примеру, DEP включен по дефолу для всех программ.



Ранг: 115.1 (ветеран), 3thx
Активность: 0.070
Статус: Участник

Создано: 02 ноября 2007 00:51
· Личное сообщение · #15

Ice-T пишет:
не суть, результат тот же..... violan when executing


даже если поставить
DEP_IGNORE = 1
и перекомпилить?



Ранг: 2.5 (гость)
Активность: 0=0
Статус: Участник

Создано: 02 ноября 2007 00:53
· Личное сообщение · #16

Щас зашел в настройки DEP и ничего нельзя изменить! Раньше все было OK!
И внизу написано:

Маздай пишет:
Чтобы использовать эти параметры, необходимо
иметь права администратора компьютера и использовать файл
boot.ini


Пользователь Администратор не имеет прав админа?
У меня boot.ini нету?
LOL



Ранг: 9.5 (гость)
Активность: 0.010
Статус: Участник

Создано: 02 ноября 2007 00:55
· Личное сообщение · #17

SL7549 пишет:
64-разрядного проца нету, поэтому ничё сказать не могу =(


А я пробовал - на 64-разрядном вываливается в Access Violation независимо от настроек DEP




Ранг: 126.7 (ветеран)
Активность: 0.140
Статус: Участник
#CCh

Создано: 02 ноября 2007 00:55
· Личное сообщение · #18

__ ->> да, даже есле поставеть DEP_IGNORE = 1 и перкомпелить...

-----
invoke OpenFire




Ранг: 2.5 (гость)
Активность: 0=0
Статус: Участник

Создано: 02 ноября 2007 01:02
· Личное сообщение · #19

Все против 64-битных процов!
32-битные тоже на помойку (чтоб винду не видеть)
Все за 16-битные! (Respect 8086&80286!)

MS-DOS 1.00-6.22 Forever!

Windowz 1.0-Vista в помойку!

ЗЫ А на висте как с настройками DEP?



Ранг: 115.1 (ветеран), 3thx
Активность: 0.070
Статус: Участник

Создано: 02 ноября 2007 01:09
· Личное сообщение · #20

Ice-T пишет:
да, даже есле поставеть DEP_IGNORE = 1 и перкомпелить


даже не верится что ms что-то сменила, к сожалению проверить в данный момент не могу,
когда раньше тестил VirtualProtect помогал



Ранг: 2.5 (гость)
Активность: 0=0
Статус: Участник

Создано: 02 ноября 2007 01:14
· Личное сообщение · #21

Зато мы все узнали новый способ возбуждения DEP =)




Ранг: 126.7 (ветеран)
Активность: 0.140
Статус: Участник
#CCh

Создано: 02 ноября 2007 01:25
· Личное сообщение · #22

Ast, вообщем если прога один раз спалилась, то потом херня с ней какая-то... удалил ее из списка, перезагрузил комп, перкомпилил и стек выполнилсо )

з.ы. правельно, что не верицо ))

-----
invoke OpenFire




Ранг: 309.8 (мудрец), 21thx
Активность: 0.170
Статус: Участник

Создано: 02 ноября 2007 11:45
· Личное сообщение · #23

call ESP непохэкк, на моём старом процессоре (целерон на ядре тиалатин) сначала заносился в стек адрес возврата а потом менялся eip и пипец коду)

-----
Shalom ebanats!




Ранг: 51.7 (постоянный)
Активность: 0.020
Статус: Участник

Создано: 02 ноября 2007 16:43
· Личное сообщение · #24

Спс. ответившим. буду разбираться


 eXeL@B —› Программирование —› Выполнение кода в стеке.
:: Ваш ответ
Жирный  Курсив  Подчеркнутый  Перечеркнутый  {mpf5}  Код  Вставить ссылку 
:s1: :s2: :s3: :s4: :s5: :s6: :s7: :s8: :s9: :s10: :s11: :s12: :s13: :s14: :s15: :s16:


Максимальный размер аттача: 500KB.
Ваш логин: german1505 » Выход » ЛС
   Для печати Для печати