Ultima modifica:
Intanto vorrei scusarmi con Exsta.
---------------------------------------------------------------------------------------------------------------------------------------------
Ciao ragazzi , sono Diolegend e oggi vorrei portarvi una guida su un tema molto interessante , di codice c'e ne poco , ma di conoscenze tante.
Inanzitutto vi faccio vedere di cosa si tratta.
Avete presente un programma del sistema chiamato smss.exe , provate ad aprire il task manager e chiuderlo , vedrete che vi crashera l'intero sistema.
Intanto apro il mio programma in un sistema virtualizzato.
Dopodiche' lo chiudo , e cosa succede ? BOOM
Ora postiamo il codice.
Non e' tanto lunghino , inanzitutto dobbiamo avere lo scheletro della funzione, ovvero
typedef long (WINAPI *RtlSetProcessIsCritical)(IN BOOLEAN bNew,OUT BOOLEAN *pbOld,IN BOOLEAN bNeedScb);
Ricavare l'indirizzo della funzione nel modulo ntdll.dll.
E scordavo , per eseguire quella funzione , dobbiamo avere un permesso che e' chiamato SE_DEBUG_NAME, se andiamo sul sito ufficiale msdn , troviamo che c'e scritto questo.
Comunque tranquilli , postero' altre guide per spiegare piu' a fondo questo ntdll.dll e come chiamare una funzione ricavando l'indirizzo di un'altro programma.
Nella funzione SettarePermesso , inanzitutto devo ricavare il valore del permesso(LookupPrivilegeValue)
Inserire 1 nel Privelege count per indicare che c'e da modificare un permesso.
Inserisco il permesso e attivo.
Prendo un Token per avere il permesso di aggiustare il permesso con la funzione AdjustTokenPrivileges.
Niente di che'
La funzione che stiamo ricavando dal modulo ntdll.dll non è documentata , ciò significa che Windows ha un buon motivo di nascondere questa funzione , perché permette di killare windows quando il programma stesso si termina.
Una cosa orribile non trovate?.
Ci vediamo con il prossimo tutorial.
- Diolegend
---------------------------------------------------------------------------------------------------------------------------------------------
Ciao ragazzi , sono Diolegend e oggi vorrei portarvi una guida su un tema molto interessante , di codice c'e ne poco , ma di conoscenze tante.
Inanzitutto vi faccio vedere di cosa si tratta.
Avete presente un programma del sistema chiamato smss.exe , provate ad aprire il task manager e chiuderlo , vedrete che vi crashera l'intero sistema.
Intanto apro il mio programma in un sistema virtualizzato.
Dopodiche' lo chiudo , e cosa succede ? BOOM
Ora postiamo il codice.
C++:
#include <Windows.h>
#include <iostream>
typedef long (WINAPI *RtlSetProcessIsCritical)(IN BOOLEAN bNew,OUT BOOLEAN *pbOld,IN BOOLEAN bNeedScb);
BOOL SettarePermesso()
{
TOKEN_PRIVILEGES d_Privilegi;
LUID d_Luid;
HANDLE d_Token;
LookupPrivilegeValue(NULL,L"SeDebugPrivilege", &d_Luid);
d_Privilegi.PrivilegeCount = 1;
d_Privilegi.Privileges[0].Luid = d_Luid;
d_Privilegi.Privileges[0].Attributes = SE_PRIVILEGE_ENABLED;
OpenProcessToken(GetCurrentProcess(), TOKEN_ADJUST_PRIVILEGES, &d_Token);
AdjustTokenPrivileges(d_Token, 0, &d_Privilegi, sizeof(TOKEN_PRIVILEGES), 0, 0);
return true;
}
int main()
{
SettarePermesso();
RtlSetProcessIsCritical d_Process;
HMODULE d_Ntdll = GetModuleHandle(L"ntdll.dll");
d_Process = (RtlSetProcessIsCritical)GetProcAddress(d_Ntdll, "RtlSetProcessIsCritical");
d_Process(TRUE, NULL, FALSE);
std::cout << "Sistema di difesa : [ATTIVO]" << std::endl;
while (true);
return 0;
}
Non e' tanto lunghino , inanzitutto dobbiamo avere lo scheletro della funzione, ovvero
typedef long (WINAPI *RtlSetProcessIsCritical)(IN BOOLEAN bNew,OUT BOOLEAN *pbOld,IN BOOLEAN bNeedScb);
Ricavare l'indirizzo della funzione nel modulo ntdll.dll.
E scordavo , per eseguire quella funzione , dobbiamo avere un permesso che e' chiamato SE_DEBUG_NAME, se andiamo sul sito ufficiale msdn , troviamo che c'e scritto questo.
Required to debug and adjust the memory of a process owned by another account.
Comunque tranquilli , postero' altre guide per spiegare piu' a fondo questo ntdll.dll e come chiamare una funzione ricavando l'indirizzo di un'altro programma.
Nella funzione SettarePermesso , inanzitutto devo ricavare il valore del permesso(LookupPrivilegeValue)
Inserire 1 nel Privelege count per indicare che c'e da modificare un permesso.
Inserisco il permesso e attivo.
Prendo un Token per avere il permesso di aggiustare il permesso con la funzione AdjustTokenPrivileges.
Niente di che'
La funzione che stiamo ricavando dal modulo ntdll.dll non è documentata , ciò significa che Windows ha un buon motivo di nascondere questa funzione , perché permette di killare windows quando il programma stesso si termina.
Una cosa orribile non trovate?.
Ci vediamo con il prossimo tutorial.
- Diolegend