Reverse Dungeon
4.39K subscribers
733 photos
59 videos
987 files
2.28K links
Reverser's notes
The Mentor
1989
Download Telegram
!object \Driver

...
89d96030 Driver Process Helper
...

!object 89d96030

...
Object: 89d96030 Type: (8a006900) Driver
...


dt nt!_DRIVER_OBJECT 89d96030

...
+0x038 MajorFunction : [28] 0xf7a67606 long +0
...



dd 89d96030+0x38 L1C

каждая запись - вид запросов, которые может обработать драйвер
...
89d96068 f7a67606 804fd111 f7a67606 804fd111
89d96078 804fd111 804fd111 804fd111 804fd111
89d96088 804fd111 804fd111 804fd111 804fd111
89d96098 804fd111 804fd111 f7a67666 804fd111
89d960a8 804fd111 804fd111 804fd111 804fd111
89d960b8 804fd111 804fd111 804fd111 804fd111
89d960c8 804fd111 804fd111 804fd111 804fd111
...



Системный вызов -> по названию понимаем, что эта функция занимается обработкой некорректных запросов, несовместимых с драйвером
ln 804fd111
...
(804fd111) nt!IopInvalidDeviceRequest | (804fd16c) nt!SeDetailedAuditingWithToken
...



В wdm.h чекаем как описаны оффсеты, нужные нам (те, где что-то отличное от nt!SeDetailedAuditingWithToken: 0x0, 0x2, 0xE):

...
// Define the major function codes for IRPs.
#define IRP_MJ_CREATE 0x00
#define IRP_MJ_CLOSE 0x02
#define IRP_MJ_DEVICE_CONTROL 0x0e
...
Forwarded from infosecurity
Reverse Dungeon
#include <Windows.h> typedef int(WINAPI* ShellAboutProc)(HWND, LPCSTR, LPCSTR, HICON); typedef int(WINAPI* MessageBoxProc)(HWND, LPCSTR, LPCSTR, UINT); int main() { HMODULE hModule1 = LoadLibrary(TEXT("Shell32.dll")); HMODULE hModule2 = LoadLibrary(…
Возвращаясь к этой штуке

Сегодня посидев и поресёрчив (я там принимал не очень большое значение), итог такой:

Если библиотека грузит ещё библиотеки, они подгружаются в статическом варианте, это не то динамическое / статическое, что при линковке
Тут это просто свойство загруженного модуля
Так вот, в таком случае FreeLibrary не будет работать на выгрузку, даже если вы выгрузите все депенденси всех либ

Соответственно, возвращаясь к опыту
Если мы подгрузили динамически дллку, но ещё одна дллка подгрузила её же в своих зависимостях, загрузчик поставит ей флаг статики (перетрёт флаг динамики) и выгрузить её будет нельзя (не смотря на то, что вроде как мы её динамически руками загружали)

По этому поводу есть единственная статейка чела, которая так и называется "FreeLibrary will not unload your dll" и 2-3 коммента на форуме

https://rstforums.com/forum/topic/110743-make-your-dynamic-module-unfreeable-anti-freelibrary/

https://chat.stackoverflow.com/transcript/138448/2017/3/19/11-12
Forwarded from Zer0Day Lab
Please open Telegram to view this post
VIEW IN TELEGRAM
Forwarded from Zer0Day Lab
Please open Telegram to view this post
VIEW IN TELEGRAM
Forwarded from Zer0Day Lab
Please open Telegram to view this post
VIEW IN TELEGRAM
Forwarded from Zer0Day Lab
Please open Telegram to view this post
VIEW IN TELEGRAM
Forwarded from Zer0Day Lab
Please open Telegram to view this post
VIEW IN TELEGRAM
Simple example of automatic loading dll's with processes which load user32.dll

dll part of the project:
BOOL APIENTRY DllMain( HMODULE hModule,
DWORD ul_reason_for_call,
LPVOID lpReserved
)
{
switch (ul_reason_for_call)
{
case DLL_PROCESS_ATTACH:
MessageBoxA(NULL, (LPCSTR)"hello", (LPCSTR)"world", MB_OK);
case DLL_THREAD_ATTACH:
case DLL_THREAD_DETACH:
case DLL_PROCESS_DETACH:
break;
}
return TRUE;
}

cpp part of the project:
#include <iostream>
#include <Windows.h>

int main() {
HMODULE hModule = LoadLibrary(TEXT("TestDLL.dll"));

std::cout << "aaa";
return 0;
}

Put the dll into
C:\Windows\System32
or
C:\Windows\SysWOW64

Use the dll name in Registry

[HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Windows\AppInit_DLLs]
Registry key if OS is 32-bit

[HKEY_LOCAL_MACHINE\SOFTWARE\Wow6432Node\Microsoft\Windows NT\CurrentVersion\Windows\AppInit_DLLs]
Registry key if OS is 64-bit.

Set registry key LoadAppInit_DLLs to 1
Forwarded from Nullzur
RobustStaticAnalysisofPEMalware.pdf
2 MB
Robust Static Analysis of Portable Executable Malware