Bonjour à tous,
Dans le cadre scolaire, je dois effetuer une analyse de malware. Dans mon cas, c'est un exe qui crée un .sys et l'installe en tant que service windows "machin". L'exe représente l'interface avec le service.
Un moment donné dans l'exe décompilé j'ai le code suivant
Le code est le suivant:
Selon la doc j'ai (source:http://msdn2.microsoft.com/en-us/lib...a363858.aspx):
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9 mov [esp+0AB8h+var_AA0], 0 mov [esp+0AB8h+var_AA4], 0 mov [esp+0AB8h+var_AA8], 3 mov [esp+0AB8h+var_AAC], 0 mov [esp+0AB8h+var_AB0], 0 mov [esp+0AB8h+var_AB4], 0C0000000h lea eax, [ebp+var_248] ; offset d'une chaine "\\.\Global\machin" mov [esp+0AB8h+var_AB8], eax call CreateFileA
Si j'ai bien compris, la fonction ouvre le volume physique GLOBAL et la partoche "machin" non? Mais si oui, pourquoi avoir un argument ShareMode à 0 alors que la doc précise:HANDLE WINAPI CreateFile(
__in LPCTSTR lpFileName,
__in DWORD dwDesiredAccess,
__in DWORD dwShareMode,
__in_opt LPSECURITY_ATTRIBUTES lpSecurityAttributes,
__in DWORD dwCreationDisposition,
__in DWORD dwFlagsAndAttributes,
__in_opt HANDLE hTemplateFile
);
(à moins que ça soit la valeur définie, j'ia pas pu vérifier).When opening a volume or floppy disk, the dwShareMode parameter must have the FILE_SHARE_WRITE flag.
Par la suite, la communication s'effectue via la fonction DeviceIoControl:
D'après ce que j'ai lu, l'interface communique comem ça avec le service. Mais ça reste encore un peu flou je ne vois pas comment ça fonctionne, et comment mon service peut récupérer ce code et le parametres qui lui sont passés?
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10 BOOL WINAPI DeviceIoControl( __in HANDLE hDevice // = 050(window) selon ollydbg, le handle obtenu par la fonction createfile ci-dessus __in DWORD dwIoControlCode // un code à envoyer, ici 0x0022FFE0 __in_opt LPVOID lpInBuffer // le parametre d'entrée __in DWORD nInBufferSize, __out_opt LPVOID lpOutBuffer, __in DWORD nOutBufferSize, __out_opt LPDWORD lpBytesReturned, __inout_opt LPOVERLAPPED lpOverlapped, );
En decompilant le .sys et en regardant les primitives utilisées, j'ai unet des déclarations de chaines
Code : Sélectionner tout - Visualiser dans une fenêtre à part call ds:IoCreateDevicequi semblerait être spécifique à un driver.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3 unicode 0, <\Device\machin>,0 unicode 0, <\DosDevices\machin>,0
Donc au final, comment ça fonctionne?
Pourquoi la fonction createfile demande un handle sur \\.\GLOBAL\machin?
Qu'est ce que le volume GLOBAL? Est-ce qu'il a été créé et géré par le service installé (donc driver) ou Windows le gère à la base?
Comment repérer la partie dans le driver qui se charge de récupérer les infos transmises par l'exe?
Beaucop (trop) de questions, mais j'espère que vous pourrez m'éclairer un peu dessus.
Cordialement
Partager