· Начало · Статистика · WASM.RU · Noir.Ru ·

 WASM Phorum (Оффлайн - 24.11.2003) —› WASM.VIROLOGY —› Поиск базового адреса kernel32

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


Дата: Ноя 15, 2003 17:22:48

Стандартный способ решения - найти адрес внутри модуля, и потом искать сигнатуру MZ.... Однако в PEB содержится
указатель на структуру PEB_LDR_DATA. Помимо разной интересной инфы, там есть поле InLoadOrderModuleList - указатель на список загруженных модулей. Каждый модуль описывается структурой LDR_DATA_TABLE_ENTRY - полный путь,
имя, и базовый адрес :) Первый элемент списка - сам EXE, второй - ntdll, дальше kernel32 и все остальное. Это вещи известные. Вопрос - не пробовал ли кто-нибудь использовать базовый адрес из этих структур?

Важное примечание - я ковырял вин2003. Вполне возможно, что в 2000-м все совсем по-другому, и данный способ не подходит (или подходит?)

PS Знаю, знаю - извращение все это :)))


Дата: Ноя 15, 2003 18:25:53

Подходит. Можно использовать и оттуда. Только очень легко поменять ImageBase, что в LDR_DATA_TABLE_ENTRY на что-нибудь дикое и ты помрешь. Прога будет загружена и, возможно, даже работать будет успешно, но LordPE на ней умрет - сам прогони. Но зачем извращаться так... есть ведь GetModuleHandle...


Дата: Ноя 15, 2003 19:00:04 · Поправил: Grenader

volodya
Не очень понятно:
Только очень легко поменять ImageBase, что в LDR_DATA_TABLE_ENTRY на что-нибудь дикое и ты помрешь.
после запуска проги поменять? зачем?
Но зачем извращаться так... есть ведь GetModuleHandle
Я про "вирусоподобный" код :) Как ему, бедненькому, без таблицы импортов-то? А моим способом экономиться куча байт (23 байта безо всякой оптимизации)


Дата: Ноя 15, 2003 21:33:49

Проснулись! Это довольно старая фишка, а не "изврат". Многие "нормальные" вирмэйкеры получают адрес кернела именно таким образом. Под XP он работает отлично, под другими не проверял. Но, кто-то говорил, что работает везде (даже под Win9x).


Дата: Ноя 15, 2003 23:26:52

marlyn

Ой, знаток ты наш великий, как же без тебя мы не догадались-то? Я, родной, очень негативно отношусь к репликам типа "проснулись" и т.п. Прима-балерина ты наша.

Grenader
после запуска проги поменять? зачем?

В целях антиотладки. Может быть использовано как антидампный прием - шикарно работает против LordPE.


Дата: Ноя 16, 2003 02:02:31 · Поправил: marlyn

volodya
дык, а же по доброму.
Способ уже давно активно и успешно используется, о чем я просто и сообщил.


Дата: Ноя 16, 2003 07:37:18 · Поправил: Grenader

marlyn
Уважаемый, элементарную вежливость никто не отменял.

volodya
Усе, я понял, про что ты. Антиотладка - это следующая тема для меня, а пока про поиск 'MZ' я действительно могу забыть. Написать, что ли, статью свою, типа этой: http://www.wasm.ru/article.php?article=searchapi :)))


Дата: Ноя 16, 2003 12:42:11

Какие там 23 байта - 17 не хотел
mov     ebx, fs:[30h]   ; EAX=PEB base
mov     ebx, [ebx+0Ch]  ; EAX=PEB_LDR_DATA
mov     ebx, [ebx+1Ch]  ; InitOrderModuleList 1st entry
mov     ebx, [ebx]      ; next entry
mov     ebx, [ebx+8]    ; K32 imagebase

Причём если этот код идёт вначале программы, то первую строчку можно смело выбросить, так как при старте ebx указывает на PEB.

Да забыл сказать чтобы меня не обвиняли в плагиате этот код написал Ratter


Дата: Ноя 16, 2003 12:44:47

Фу только глянул в комментариях вместо еах должно быть ebx


Дата: Ноя 16, 2003 12:46:57

sl0n
Я же написал - без оптимизации :) Самым "дубовым" способом. Ну а в моем коде это выглядит так:
        mov     eax, [fs:TEB.ProcessEnvironmentBlock]
        virtual at eax
                .Peb    PEB
        end virtual
        mov     eax, [.Peb.Ldr]
        virtual at eax
                .PebLdrData     PEB_LDR_DATA
        end virtual
        mov     eax, [.PebLdrData.InLoadOrderModuleList]
        virtual at eax
                .LdrDataTableEntry      LDR_DATA_TABLE_ENTRY
        end virtual
        mov     eax, [.LdrDataTableEntry.InLoadOrderLinks.Flink]
        mov     eax, [.LdrDataTableEntry.DllBase]


Сам специально считал - 17 байт, хотел даже на форум написать - но забил.


Дата: Ноя 16, 2003 18:19:31

Grenader

Статьи приветствуются ВСЕГДА!


Дата: Ноя 17, 2003 14:33:57

volodya
Вот здесь уже заходил разговор насчет seh'а в dll.
Я так и не понял, что ты имел ввиду говоря "...Вы оба неправы"?
Поясни плиз...


Дата: Ноя 17, 2003 14:51:58 · Поправил: Grenader

это ошибочное сообщене, не обращайте внимания...


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