|
|
| Посл.отвђт | Сообщенiе |
|
|
Дата: Июл 29, 2003 05:03:41 Забавное наблюдение. Обсуждали мы с Edmond-ом выравнивания в секциях и слияния секций в PE. Писал я попутно примеры. При запуске в дебагере обнаружились любопытное поведение дебаггеров. По порядку. Посылают три файла little(1.3).exe. В них ничего вредного нет :) Система в которой были тесты NT WS 4.0 SP 6. Использовались дебаггеры OllyDbg 1.09d (step 4) SoftIce 4.01 (NT) Все три файла выполняются системой без каких-то проблем. Теперь про дебагеры. OllyDbg - при загрузке любого из 3х не может сделать останов на точке входа. Просто загрузите их в него и понятно будет о чём речь. теперь Sice. little1.exe - Sice не может его загрузить, сообщает о неизвестной ошибке 1С little2.exe - Sice загружает его, но не может сделать останов на точке входа. little3.exe - этот файл наконец Sice и загрузить смог и остановиться на точке входа. (Olly повторюсь не смог это сделать ни с одним включая little.exe) Все файлы созданы с помощью ml.exe и link.exe никакого ручного вмешательства, просто различные директивы по созданию секций, выравниванию, слиянию. У одного нестандартный стаб, но тоже включённый без ручного вмешательства и сообщений об ошибках. Возможно вам будет любопытно взглянуть _248667248__littles.zip |
|
|
Дата: Июл 29, 2003 14:09:31 А исходники будут? |
|
|
Дата: Июл 29, 2003 14:52:35 · Поправил: masquer Хм, у меня на 2к первый вообще система на грузит, а остальные 2 олии спокойно загружает и останавливается на 410h |
|
|
Дата: Июл 29, 2003 14:57:47 Four-F Так они жжж в аттаче? |
|
|
Дата: Июл 29, 2003 15:13:50 У мя под w2k+sp2 OllyDbg 1.09d (step 1) прекрасно запускает второй и третий и останавливается на оеп. |
|
|
Дата: Июл 29, 2003 15:16:57 [ Edmond: Так они жжж в аттаче? ] Без исходников. Хрен с ними с исходниками - там элементарно, но ключи как это компилировалось где? |
|
|
Дата: Июл 29, 2003 16:45:52 Хмм.. Любопытно. Хорошо что я послал. Значит в 2k Olly может а в NT не может :) Как то с системой связано получается? И первый 2к не грузит а NT 4 грузит. А в Sice никто не пробывал? Исходник такой: szText MACRO Name, Text:VARARG _codesec ends _datasec SEGMENT BYTE 'CODE' Name db Text,0 _datasec ends _codesec SEGMENT BYTE 'CODE' ENDM _codesec SEGMENT BYTE 'CODE' start: szText SomeText,"Text" invoke MessageBox,0,addr SomeText,0,0 szText OtherText,"Other text" invoke MessageBox,0,addr OtherText,0,0 call ExitProcess _codesec ends end start всё делалось ml и link Разница между вторым и первым в стабе, но стаб сделан через /STUB:... линком и ошибок не сообщалось. Секции смёржены через 1ый 3ий \MERGE:.text=_ \MERGE:_datasec=_ \MERGE:_codesec=_ 2ой \MERGE:_datasec=_ \MERGE:_codesec=_ те без указания слияния с .text (хотя в исходнике как видите .code директивы нет но без .text результат больше на блок выравнивания, хотя самой секции .text нет) Ссылки на библиотеки внешние через extern (видно что нет jmptabels) Вот собственно и всё. Если кто-то в 2k в Sice попробует запустить - сообщите пожалуйста. |
|
|
Дата: Июл 29, 2003 18:54:51 w2k+sp2 little1.exe - little1.exe не является приложением Win32. little2.exe - запускается little3.exe - запускается Загрузка в айс v4.2.7 (Driver Studio) через Symbil Loader: little1.exe - Unknown Error: 000000c1 little2.exe - запускается но не трапается little3.exe - запускается и трапается на оеп ЗЫ: nmtrans.dll у мя патченый, методом Kayaker'а. Без патча и little3.exe не трапнется. |
|
|
Дата: Июл 30, 2003 02:10:09 OK, чем гадать здесь на кофейной гуще, почему тот не загрузился, а почему этот, есть чуть другое решение. Я скажу, где споткнулся я, а Four-F мне покажет, как идти дальше. Итак, в коде лоадера 2k есть функция LdrpMapDll, которая и обрабатывает секции. Для загрузки данной конкретной секции функция спускается к LdrpCreateDllSection, которая, в свою очередь, зовет NtCreateSection (бывшая ZwCreateSection). Код NtCreateSection: mov eax, 2Bh ; NtCreateSection lea edx, [esp+arg_0] int 2Eh ; DOS 2+ internal - EXECUTE COMMAND ; DS:SI -> counted CR-terminated command string retn 1Ch т.е. мы ушли в ядро. Four-F, расскажи мне, как подобрать это прерывание из ядра? Где его найти, чтобы посмотреть, что там? |
|
|
Дата: Июл 30, 2003 02:51:55 · Поправил: Four-F В данном случае просто, т.к. NtCreateSection экспортируется и ядром: :exp NtCreateSection ntoskrnl 0008:80584966 NtCreateSection ntdll 001B:77F840B2 NtCreateSection А общий алгоритм таков: :exp KeSer ntoskrnl 0008:8054B280 KeServiceDescriptorTableЭто чтоб не вспоминать как его там... Ну а потом: :u *(*KeServiceDescriptorTable+2b*4)Или макрос вбить можно: :macro sysser = "u *(*KeServiceDescriptorTable+%1*4)"Юзать так: :sysser 2B |
|
|
Дата: Июл 30, 2003 07:11:32 Володя, так я проверить то всё равно не могу - у меня все грузятся нормально. |
|
|
Дата: Июл 30, 2003 07:17:25 В лоадер в 2000 ввели очень много ограничений. Есть пара великолепных статей на эту тему, я и сам с NEOx скоро статью на сайт положу, если Four-F окончательно не запинает :) Что до функции, то да... Прежде всего, Nabbot в своей книге, у меня такое чувство, мягко говоря не дал ей точных параметров. Второе - NtCreateSection всего лишь враппер вокруг MmCreateSection, о которой вообще информации нет :( Да, NtCreateSection принимает параметр SectionSize, но, судя по коду, он ей, в принципе, до фени. Основную работу делает MmCreateSection, которую буду копать завтра. Ща пошел спать. |
|
|
Дата: Июл 30, 2003 13:26:13 Совсем забыл. Есть такая команда ntcall. |
|
|
Дата: Июл 30, 2003 14:06:12 [ volodya: NtCreateSection принимает параметр SectionSize, но, судя по коду, он ей, в принципе, до фени. ] А как же она тогда размер секции узнает? PAGE:004A6A08 mov edi, [ebp+pSectionSize] ; PLARGE_INTEGER PAGE:004A6A0B cmp edi, ebx ; ? == NULL . . . PAGE:004A6C7D mov esi, [edi] ; esi = *pSectionSize . . . PAGE:004A6A24 mov [ebp+var_34], esi ; SectionSize . . . PAGE:004A6A32 lea eax, [ebp+var_34] PAGE:004A6A35 push eax ; SectionSize . . . PAGE:004A6A40 call _MmCreateSection@32 |
|
|
Дата: Июл 30, 2003 17:39:34PAGE:004A6A0B cmp edi, ebx ; ? == NULL А чего ж ты условный переход не впечатал? Ты бы заметил тогда, что, все равно, ветка с MmCreateSection получает управление! :) |
|
Powered by miniBB 1.6 © 2001-2002
Время загрузки страницы (сек.): 0.120 |