Сейчас на форуме: UniSoft, laslo, bartolomeo (+5 невидимых) |
eXeL@B —› Программирование —› Windows7 Поиск базы kernel32.dll |
Посл.ответ | Сообщение |
|
Создано: 18 июля 2009 10:42 · Поправил: Sunzer · Личное сообщение · #1 Поставил себе вчера на виртуалку семерку, и столкнулся с проблемой. Этот код получает базу kernel32.dll через PEB. Code:
В Windows7 получается база kernelbase.dll. Далее мой код парсит таблицу экспорта,находит адрес GetProcAddress. После того как найдет, передает имя "LoadLibraryA" и базу которая нашлась через PEB. Далее возратился ноль. В этом и проблема, я не долго думая взял саму либу kernelbase.dll В экспорте не оказалось "LoadLibraryA", за то есть LoadLibraryExA и LoadLibraryExW для юникода соответственно. Под Windows 2000, Windows 2003 Server, Windows XP SP3, Windows Vista, код по поиску двух апи работает нормально. Теперь решения 1) Как то найти базу kernel32.dll - Скан памяти в лоб - Как то еще хитро - Через SEH или что-то 2) Заюзать через LoadLibraryExA - Там какие то другие параметры, не юзал раньше но думаю тоже подойдет. Желательно как-то без особых извращений найти базу кернеля. PS Нашел по поиску по форуму похожий вопрос, но ответа там нет точного. Там просили саму kernelbase.dll c8ff_18.07.2009_CRACKLAB.rU.tgz - KernelBase.dll |
|
Создано: 18 июля 2009 11:08 · Личное сообщение · #2 |
|
Создано: 18 июля 2009 11:09 · Личное сообщение · #3 |
|
Создано: 18 июля 2009 11:13 · Поправил: Coderess · Личное сообщение · #4 |
|
Создано: 18 июля 2009 11:32 · Личное сообщение · #5 |
|
Создано: 18 июля 2009 12:14 · Личное сообщение · #6 |
|
Создано: 18 июля 2009 12:57 · Личное сообщение · #7 |
|
Создано: 18 июля 2009 15:13 · Личное сообщение · #8 |
|
Создано: 18 июля 2009 16:11 · Личное сообщение · #9 |
|
Создано: 18 июля 2009 17:09 · Личное сообщение · #10 |
|
Создано: 18 июля 2009 17:22 · Поправил: DaRKSiDE · Личное сообщение · #11 |
|
Создано: 18 июля 2009 20:08 · Личное сообщение · #12 |
|
Создано: 19 июля 2009 00:54 · Личное сообщение · #13 For shellcode, a common method to resolve the addresses of library functions needed, is to get the base address of the kernel32.dll image in memory and retrieve the addresses of GetProcAddress and LoadLibraryA by parsing the kernel32 images Export Address Table (EAT). These two functions can then be used to resolve the remaining functions needed by the shellcode. To retrieve the kernel32.dll base address most shellcodes use the Process Environment Block (PEB) structure to retrieve a list of modules currently loaded in the processes address space. The InInitializationOrder module list pointed to by the PEB's Ldr structure holds a linked list of modules. Typically the second entry in this list has always been that of kernel32.dll. The code used to retrieve the kernel32 base address based on this method is shown below: Code:
This method has worked for all versions of Windows from Windows 2000 up to and including Windows Vista. The introduction of Windows 7 (rc1) has broken this method of retrieving the kernel32 base address due to the new MinWin kernel structure employed by Windows 7. A new module kernelbase.dll is loaded before kernel32.dll and as such appears in the second entry of the InInitializationOrder module list. To retrieve the kernel32.dll base address in a generic manner on all versions of Windows from Windows 2000 up to and including Windows 7 (rc1) a slightly modified approach can be used. Instead of parsing the PEB's InInitializationOrder module list, the InMemoryOrder module list can be parsed instead. The third entry in this list will always be that of kernel32.dll (The first being that of the main module and the second being that of ntdll.dll). The code used to retrieve the kernel32 base address based on this method is shown below: Code:
Update: Their appears to be some cases on Windows 2000 whereby the above method will not yield the correct result. A more robust method, albeit a more lengthy one, can be seen below. We search the InMemoryOrder module list for the kernel32 module using a hash of the module name for comparison. We also normalise the module name to uppercase as some systems store module names in uppercase and some in lowercase. Code:
// when we get here EBX is the kernel32 base (or change to suit). his code has been verified on the following systems: Windows 2000 SP4 Windows XP SP2 Windows XP SP3 Windows 2003 SP2 Windows Vista SP1 Windows 2008 SP1 Windows 7 RC1 The following WinDbg session shows how we can manually verify the above methods on a Windows 7 RC1 system: Code:
bbb0_18.07.2009_CRACKLAB.rU.tgz - GetKernel32Base.zip ----- RE In Progress [!] Coding Hazard [!] Stay Clear of this Cube |
|
Создано: 08 ноября 2011 16:35 · Поправил: bowrouco · Личное сообщение · #14 mak Code:
|
eXeL@B —› Программирование —› Windows7 Поиск базы kernel32.dll |