поиск адреса функции в ядре kernel32
Наконец то я написал этот модуль. Использовал Литературу -Путеводитель по написанию вирусов под Win32.chm и учебник Зубкова. сначала о стеке... все переменные у меня выглядит в качестве ebp -смещение переменной ,esp я отодвинул на сотню байт тем самым создав себе хранилище данных. Чем примечателен этот код 1 для хранения и работы с переменными используются единственный сегмент который всегда доступен для чтения и записи -сегмент стека. 2 если посидеть над этим кодом и немного перелопатить то его свободно можно использовать в инжекте процессов , подмене dll и заражении PE заголовка exe файла функции Search_kernel32 -находит начала kernel ввод eax=равен адресу возврата из нашей программы вывод - eax= начала kernel copy_str_code_to_stack -переписывает функции из сегмента кода в сегмент стека(мой каприз) ввод ebp , delta смещение, смещение области для записи в стеке, указатель на строку, размер строки Get_api_table -запишет в стек три интересных поля Get_API_func ищет функцию ввод указатель на строку(если это не стековая строка ,то надо чуть поколдавать с указателем на строку) : примерно вот так , размер строки
[ASM] и ещё если собрались исполнятся в чужом адресном пространстве то не забудьте что функции вызываются вот так
|
Всего комментариев 5
Комментарии
-
рано или поздно ,но надеюсь в этом месяце я переделаю код и подключу его к функции написанной на с++ в результате получится что с помощью ассемблера я получу из от ядра основные функции для подключения динамических библиотек.
Запись от Van111 размещена 21.05.2012 в 19:49 -
1) Код база зависимый! Например, при получении смещения на имя функции. Ты пишешь offset str_name_function. Это же адрес, а при внедрении адреса будут другие! И здесь тоже самое: offset delta.
2) Ты берешь с верхушки стека указатель в кернел, выравниваешь его и сканируешь в сторону младших адресов. Т.е. код зависит от балансировки стека, что не есть хорошо. Лучше используй PEB. Я уже выкладывал свой код, который вызывает MessageBox, не используя не одной API. Который был протестирован на 32 разрядных Windows 2000, 2003, XP, VISTA и на 64 разрядной Windows 7. И везде удачно работал.Запись от _lucius_ размещена 25.05.2012 в 09:18 -
1 ну я тут писал пример вызова функции в чужом адресном пространстве
mov eax,offset func
add eax,[ebp-delta_offset]
call eax
2 спасибо _lucius_Запись от Van111 размещена 25.05.2012 в 12:11 -
Цитата:1 ну я тут писал пример вызова функции в чужом адресном пространстве
mov eax,offset func
add eax,[ebp-delta_offset]
call eax
Assembler 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22
; получаем дельта смещение call $+5 pop eax ; макропеременные, содержат расстояние от дельта смещения до указателей на стороки pFName1 = FName1-$+1 pFName2 = FName2-$+1 pDName = DName-$+1 pMess = Mess-$+1 ; помещаем в регистры указатели на строки ["дельта смещение" + "расстояние от дельта смещения до указателей на стороки"] lea edx,[eax + pFName1] lea ecx,[eax + pFName2] lea esi,[eax + pDName] lea edi,[eax + pMess] ; .... CODE .... FName1 db 'LoadLibraryExA',0 FName2 db 'MessageBoxA',0 DName db 'user32.dll',0 Mess db 'Hello world!',0
Запись от _lucius_ размещена 25.05.2012 в 14:45 -
спасибо большое
Запись от Van111 размещена 25.05.2012 в 18:25