Издательский дом ООО "Гейм Лэнд"СПЕЦВЫПУСК ЖУРНАЛА ХАКЕР #45, АВГУСТ 2004 г.

Живучий код

Крис Касперски aka мыщъх

Спецвыпуск Xakep, номер #045, стр. 045-064-5


Определение базового адреса KERNEL32.DLL через SEH, возвращаемом в регистре EAX

00000000: 6764A10000 mov eax,fs:[00000] ; текущ. EXCEPTION_REGISTRATION

00000005: 40 inc eax ; если eax был 1, станет 0

00000006: 48 dec eax ; откат на прежний указатель

00000007: 8BF0 mov esi,eax ; esi на EXCEPTION_REGISTRATION

00000009: 8B00 mov eax,[eax] ; EXCEPTION_REGISTRATION.prev

0000000B: 40 inc eax ; если eax был 1, станет 0

0000000C: 75F8 jne 000000006 ; если не нуль, разматываем дальше

0000000E: AD lodsd ; пропускаем prev

0000000F: AD lodsd ; извлекаем handler

00000010: 6633C0 xor ax,ax ; выравниваем на 64 Кб

00000013: EB05 jmps 00000001A ; прыгаем в тело цикла

00000015: 2D00000100 sub eax,000010000 ; спускаемся на 64 Кб вниз

0000001A: 6681384D5A cmp w,[eax],05A4D ; это "MZ"?

0000001F: 75F4 jne 000000015 ; если не "MZ", продолжаем мотать

00000021: 8B583C mov ebx,[eax+3Ch] ; извлекаем указатель на PE

00000024: 813C1850450000 cmp [eax+ebx],4550h; это "PE"?

0000002B: 75E8 jne 000000015 ; если не "PE", продолжаем мотать

Native API, или Портрет в стиле ню

Высшим пилотажем хакерства считается использование сырого API («native API») операционной системы. Но, на мой взгляд, это лишние извращения. Мало того, что native API-функции полностью недокументированы и подвержены постоянным изменениям, так они еще и непригодны к непосредственному употреблению (поэтому и называются "сырыми"). Это полуфабрикаты, реализующие низкоуровневые примитивы (primitive), своеобразные строительные кирпичики, требующие большого объема сцепляющего кода, конкретные примеры реализации которого можно найти в NTDLL.DLL и KERNEL32.DLL.

В Windows NT доступ к native API-функциям осуществляется через прерывание INT 2Eh. В регистр EAX заносится номер прерывания, а в EDX – адрес параметрического блока с аргументами. В Windows XP для этой же цели используется машинная команда sysenter, но все свойства прерывания INT 2Eh полностью сохранены, во всяком случае пока.

Подробное изложение техники вызова функций native API на русском языке, в частности, можно найти здесь: http://www.wasm.ru/docs/3/gloomy.zip.

Заключение

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

Не воспринимай данную статью как догму! Это уже отработанный материал. Устреми свой взгляд в мутную пелену будущего. Что ты видишь там? Какие идеи мелькают в твоей голове? Чего ты ждешь? Ведь если ты не додумаешься, то кто тогда? Так дерзай же!

Системные вызовы UNIX

UNIX-подобные системы валят с ног своим разнообразием, до чрезвычайности осложняя разработку переносимых shell-кодов.

Используется, по меньшей мере, шесть способов организации интерфейса с ядром: дальний вызов по селектору семь смещение ноль (HP-UX/PA-RISC, Solaris/x86, xBSD/x86), syscall (IRIX/MIPS), ta 8 (Solaris/SPARC), svca (AIX/POWER/PowerPC), INT 25h (BeOS/x86) и INT 80h (xBSD/x86, Linix/x86), причем порядок передачи параметров и номера системных вызов у всех разные. Некоторые системы перечислены дважды – это означает, что они используют гибридный механизм системных вызовов.

Назад на стр. 045-064-4  Содержание  Вперед на стр. 045-064-6