|
|
| Посл.отвђт | Сообщенiе |
|
|
Дата: Сен 29, 2004 17:52:45 При дизасме некоторых функций ntdll.dll можно увидеть код такого типа: mov eax, 101h mov ebx, 7FFE0300h call ebx Это для Nt/ZwTerminateProcess. Если я вставлю это в свою прогу то вырабатывается исключение по адрессу 7FFE0297h на доступ к ячейке 101h. Почему? Всё это в WinXP. В Win2k всё это сделано иначе. |
|
|
Дата: Сен 29, 2004 18:59:20 А перед этим 2х push не должно быть? |
|
|
Дата: Сен 29, 2004 19:15:44 2n0name чтай Свена Шрайбера. Там всё подробно разжёвано. |
|
|
Дата: Сен 29, 2004 19:18:40 Должно, но только если не реализовывать этот код как отдельную процедуру. вот весь мой код: push 0 push FFFFFFFFh mov eax, 101h mov ebx, 7FFE0300h call ebx ZwTerminateProcess(LONG; LONG); |
|
|
Дата: Сен 29, 2004 19:19:49 2PavPS: Свен пишет про Win2K. Там механизм сис вызовов через int 2E реализован. В WinXP по другому. |
|
|
Дата: Сен 29, 2004 20:08:02 n0name Правда. Но есть другой вопрос. Ты абсолютно точно уверен, что в твоей версии XP используются ИМЕННО ЭТИ СМЕЩЕНИЯ? |
|
|
Дата: Сен 29, 2004 21:55:30 2 n0name Всё верно! Пишет. Если не видешь Int 2Eh, то не значит, что это не то! Попробуй ка глянь, что такое там сидит за ф-я по адресу 7FFE0300h?? А? SYSENTER. Всё верно. А теперь набери в SoftIce "ntcall", и увидешь что за ф-я там под номером 101h. Это и будет для все Win2K,XP 2 volodya Ради прикола - совпадения, но у меня тоже адрес 7FFE0300h :))))) |
|
|
Дата: Сен 29, 2004 22:24:07 · Поправил: S_T_A_S_ n0name > но только если не реализовывать этот код как отдельную процедуру. Call тоже ложит DWORD в стек. Не call ebx, а тот которого как раз нет в твоём коде после push'ей. см. ntdll!NtTerminateProcess - ret 8 снимает 3 DWORD'а |
|
|
Дата: Сен 30, 2004 09:39:54 2 volodya это смещение для всех SP под WinXP. 2 PavPS Мож показать код. Такой у меня не работает: .586p .model flat,stdcall .code start: ; push eax ; pseudo ret addr push 0h ; ExitCode push 0FFFFFFFFh ; ProcHndl mov eax, 101h ; 101h = ZwTerminateProcess ; mov edx, 7FFE0300h ; call edx int 02Eh end start 2 S_T_A_S_ Я знаю, что call ложит в стек адресс возврата. Но код не работает ни с дополнительным pushem, ни буз него. |
|
|
Дата: Сен 30, 2004 11:46:19 n0name, сначала вызови... invoke ZwTerminateProcess, -1, 0 ...внимательно пройди под отладчиком и смотри на esp, потом делйа так:
push 0
push 0FFFFFFFFh
push 'Wasm'
mov eax, 0101h
mov edx, 7ffe0300h
call edx
|
|
|
Дата: Сен 30, 2004 13:06:31 2 Four-F: tnx за направление в котором надо было копать. Такой код у меня работает: .386 .model flat, stdcall option casemap :none .code start: push 0 push 0FFFFFFFFh push eax mov eax, 0101h mov edx, 7ffe0300h call DWORD PTR ds:[edx] end start |
|
|
Дата: Сен 30, 2004 16:04:16 IMHO этот код не рабочий - ОС просто прибивает процесс по-тихой из-за access violation при попытке выполнить несуществующий код по адресу 340FD48Bh |
|
|
Дата: Сен 30, 2004 16:26:21 · Поправил: S_T_A_S_ сорри, инет совсем глючный :( |
|
|
Дата: Сен 30, 2004 17:07:16 S_T_A_S_ сорри, инет совсем глючный :( Это не инет, это что-то с форумом, последние несколько дней днем оооочень тормозит :-( |
|
|
Дата: Сен 30, 2004 17:16:43 Неа не прибивает =) Просто в SP2 всё переиначили =( Теперь вместо call edx надо писать call DWORD PTR ds:[edx] Тогда на SP2 работает а на SP1 и просто WinXP - нет. Из этого вопрос: Как сделать и для WinXP и для SP2? Пробовал через int 2Eh и через sysenter, но ничего не фурычит. Через sysenter я ret. address назначаю $+14. Это nop. Но процесс исполняется дальше!!! Хотя должен был завершиться. |
|
Powered by miniBB 1.6 © 2001-2002
Время загрузки страницы (сек.): 0.043 |