https://stackoverflow.com/questions/28386878/windbg-break-on-timer-scheduler-interrupt-and-print-eip
Stack Overflow
Windbg: break on timer / scheduler interrupt and print EIP
Is there a way to setup a breakpoint on the interrupt service routine on Windows which is responsible to trigger thread scheduling and print the EIP of the thread which was interrupted?
I tried to...
I tried to...
!object \Driver
dt nt!_DRIVER_OBJECT 89d96030
dd 89d96030+0x38 L1C
каждая запись - вид запросов, которые может обработать драйвер
Системный вызов -> по названию понимаем, что эта функция занимается обработкой некорректных запросов, несовместимых с драйвером
ln 804fd111
В wdm.h чекаем как описаны оффсеты, нужные нам (те, где что-то отличное от nt!SeDetailedAuditingWithToken: 0x0, 0x2, 0xE):
...!object 89d96030
89d96030 Driver Process Helper
...
...
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
Implementing Reverse Engineering.pdf
30.7 MB
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
Сегодня посидев и поресёрчив (я там принимал не очень большое значение), итог такой:
Если библиотека грузит ещё библиотеки, они подгружаются в статическом варианте, это не то динамическое / статическое, что при линковке
Тут это просто свойство загруженного модуля
Так вот, в таком случае 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
Romanian Security Team
Make Your Dynamic Module Unfreeable (Anti-FreeLibrary)
Make Your Dynamic Module Unfreeable (Anti-FreeLibrary) 1 minute read Let’s say your product injects a module into a target process, if the target process knows the existence of your module it can call FreeLibrary function to unload your module (assume that…
Simple example of automatic loading dll's with processes which load user32.dll
dll part of the project:
Set registry key
dll part of the project:
BOOL APIENTRY DllMain( HMODULE hModule,cpp part of the project:
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;
}
#include <iostream>Put the dll into
#include <Windows.h>
int main() {
HMODULE hModule = LoadLibrary(TEXT("TestDLL.dll"));
std::cout << "aaa";
return 0;
}
C:\Windows\System32or
C:\Windows\SysWOW64Use 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 1Some simple ways for autoexec your dll's / exe's (persistence)
https://pentestlab.blog/2020/01/14/persistence-winlogon-helper-dll/
https://pentestlab.blog/2020/01/14/persistence-winlogon-helper-dll/
Penetration Testing Lab
Persistence – Winlogon Helper DLL
Winlogon is a Windows component which handles various activities such as the Logon, Logoff, loading user profile during authentication, shutdown, lock screen etc. This kind of behavior is managed b…
RobustStaticAnalysisofPEMalware.pdf
2 MB
Robust Static Analysis of Portable Executable Malware