Antichat снова доступен.
Форум Antichat (Античат) возвращается и снова открыт для пользователей.
Здесь обсуждаются безопасность, программирование, технологии и многое другое.
Сообщество снова собирается вместе.
Новый адрес: forum.antichat.xyz
 |
|
Получение базы kernel32.dll [Asm] |

20.01.2010, 22:34
|
|
Новичок
Регистрация: 16.12.2009
Сообщений: 14
Провел на форуме: 20162
Репутация:
0
|
|
Получение базы kernel32.dll [Asm]
Вот решил провести эксперимент и написал (не без помощи сайтов) прогу (masm32), которая определяет адрес базы kernel32.dll:
Код:
.386
option casemap:none
.model flat, stdcall
;----------------------------include---------------------
includelib \masm32\lib\kernel32.lib
include \masm32\include\kernel32.inc
;--------------------------------------------------------
.data
db 0
.code
start:
mov esi, [esp]
call GetBase; после вызова в eax база kernel32.dll
invoke ExitProcess, 0
;#####################################GetBase###############################
;
; Получение базы kernel32.dll
;
;###########################################################################
GetBase:
push esi;сохраняем все регистры, которые используются
push ecx
pushf;сохраняем регистр флагов
and esi,0FFFF0000H;гранулярность выделения памяти
mov ecx,6;счетчик страниц
_@1: ;проверка очередной страницы
cmp word ptr [esi], "ZM"
jz WeGotBase
_@2:
sub esi, 10000h
loop _@1
WeFailed:
mov eax, 00000000h ;база не найдена
jmp EndGetBase
WeGotBase:
xchg eax, esi
EndGetBase:
popf;восстанавливаем значения флагов
pop ecx
pop esi;восстанавливаем значения регистров
ret
;#########################################################################
;Конец процедуры GetBase
;#########################################################################
end start
В Windows XP SP3 я получил адрес базы 7C800000h в Windows 7 77140000h
|
|
|

20.01.2010, 23:30
|
|
Участник форума
Регистрация: 26.08.2009
Сообщений: 133
Провел на форуме: 193434
Репутация:
79
|
|
cmp word ptr [esi], "ZM"
jz WeGotBase
после этого чекай на PE. А вообще байан редкостный. Тем более для dll не подходит.
|
|
|

21.01.2010, 00:06
|
|
Новичок
Регистрация: 16.12.2009
Сообщений: 14
Провел на форуме: 20162
Репутация:
0
|
|
cmp word ptr [esi], "ZM" - разве это не есть проверка на PE
|
|
|

21.01.2010, 00:38
|
|
Reservists Of Antichat - Level 6
Регистрация: 05.03.2007
Сообщений: 1,985
Провел на форуме: 3288241
Репутация:
3349
|
|
спрашивается а нафига её искать методом поиска?
Если же можно тупо взять из PEB
Вариант с подмененным и неправильным PEB'ом можно расценивать как манию приследывания и последюю стадию шизофрении. Так что лучше юзать через PEB
Под 2k, XP, 2k3 ты получишь адрес kernel32.dll а под w7 - адрес KERNELBASE
KERNELBASE - это считай жалкий аналог kernel32.dll
Но есть хитрость. В них в обоих есть функции GetProcAddress и LoadLibraryExA
через который можно загрузить любую либу (хотябы туже kernel32 для w7)
Для всякого малвара своего юзаю примерно такую схему:
Код:
__declspec(naked) HMODULE GetKernel32(void)
{
__asm
{
push esi
xor eax,eax
mov eax,fs:[0x30]
js find_kernel_9x
mov eax,[eax+0x0c]
mov esi,[eax+0x1c]
lodsd
mov eax,[eax+0x8]
jmp find_kernel_end
find_kernel_9x:
mov eax,[eax+0x34]
lea eax,[eax+0x7c]
mov eax,[eax+0x3c]
find_kernel_end:
pop esi
ret
}
}
KERNELBASE = GetKernel32();
*(void* *)&_LoadLibraryExA = HideGetProcAddress(KERNELBASE, "LoadLibraryExA");
*(void* *)&_GetProcAddress = HideGetProcAddress(KERNELBASE, "GetProcAddress");
if (!_LoadLibraryExA || !_GetProcAddress) return 0;
kernel32_dll = _LoadLibraryExA("kernel32.dll", 0, 0);
итд итп.
HideGetProcAddress - самописная функция поиска адреса функции (когдато выкладывал тут её)
И пашет идеально на всей линейке NT начиная от 2k
Другое дело в ядре искать адрес загрузки ядра, Там это уже нужно осуществлять перебор.
Вот пример
Код:
mov esi, dword ptr ds:[0ffdff038h]; адрес обработчика для IDLE
lodsd
cdq
lodsd
base_loop:
dec eax
cmp dword ptr [eax], 00905a4dh ; сигнатура для файла ядра MZ+P+0x00
jnz base_loop
mov lib, eax
Но этот код очень удобно юзать под ядром. Вернее под ядром его тока и можно заюзать )
|
|
|

21.01.2010, 00:43
|
|
Reservists Of Antichat - Level 6
Регистрация: 05.03.2007
Сообщений: 1,985
Провел на форуме: 3288241
Репутация:
3349
|
|
>>>> cmp word ptr [esi], "ZM" - разве это не есть проверка на PE
это проверка на дос заголовок. В досовских exe файлах и в старом LE нету PE заголовка )
Проверка на PE делается так
1) находится ImageBase и проверяется сигнатура MZ
2) ImageBase + 0x3С - по этому офсету хранится DWORD указывающий смещение (относительно ImageBase) на PE заголовок
3) ImageBase + офсет на PE и по этому адресу проверяется двойное слово
на сигнатуру 'P' 'E' 0x00 0x00
|
|
|

21.01.2010, 07:39
|
|
Участник форума
Регистрация: 26.08.2009
Сообщений: 133
Провел на форуме: 193434
Репутация:
79
|
|
2slesh
жесть, зачем это делать ассемблерной вставкой? али влом структуры описывать и пользоваться макросами для LIST_ENTRY?
|
|
|

21.01.2010, 10:47
|
|
Reservists Of Antichat - Level 6
Регистрация: 05.03.2007
Сообщений: 1,985
Провел на форуме: 3288241
Репутация:
3349
|
|
по старинке юзаю из шелкодов )
Но вообще некоторые операции без асм вставки будут некрасиво выглядеть. Допустим та же mov eax,fs:[0x30], которую придется заменить на соотвествующую апишку
|
|
|

21.01.2010, 12:51
|
|
Участник форума
Регистрация: 26.08.2009
Сообщений: 133
Провел на форуме: 193434
Репутация:
79
|
|
дык понятно, я это тоже вставкой делаю. Но доступ то к полям пеба )))
|
|
|

21.01.2010, 16:40
|
|
Reservists Of Antichat - Level 6
Регистрация: 04.02.2007
Сообщений: 1,152
Провел на форуме: 3008839
Репутация:
1502
|
|
Код:
mov esi,[eax+0x1c]
lodsd
mov eax,[eax+0x8]
зачем тут еsi?)
А ещё сравнил бы на всякий случай имя библиотеки
__________________
Bedankt euch dafür bei euch selbst.
H_2(S^3/((z1, z2)~(exp(2pi*i/p)z1, exp(2pi*q*i/p)z2)))=Z/pZ
|
|
|

21.01.2010, 17:21
|
|
Участник форума
Регистрация: 26.08.2009
Сообщений: 133
Провел на форуме: 193434
Репутация:
79
|
|
2desTiny
как зачем, а указать lodsd откуда грузить значение? Мы ж обращаемся ко второму LDR_MODULE_ENTRY в цепочке.
а проверять не нужно, там постоянно ntdll->kernel32->[user32]->...
Последний раз редактировалось Hiro Protagonist; 21.01.2010 в 17:23..
|
|
|
|
 |
|
|
Здесь присутствуют: 1 (пользователей: 0 , гостей: 1)
|
|
|
|