Bonjour,
Je ne programme pas du tout en assembleur, j'ai vraiment besoin d'aide , a l'aide de windbg j'ai pu obtenir l'assembleur du programme ci-dessous :
J'ai ensuite mon shellcode :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19 typedef BOOL (FAR PASCAL *BEEP)(DWORD, DWORD); int main(int argc, char* argv[]) { BEEP Beep; HINSTANCE kernel32 = LoadLibrary(L"Kernel32"); if (kernel32 != NULL) { Beep = (BEEP)GetProcAddress(kernel32, "Beep"); if (Beep != NULL) { (*Beep)(2000, 20000); } } FreeLibrary(kernel32);
Le premier problème c'est que j'ai plein de null bytes partout et que je ne sais pas comment les enlever
Code : Sélectionner tout - Visualiser dans une fenêtre à part \x0f\x99\xc1\x33\xc0\x89\x0f\x40\x5f\x5e\xc3\x90\x90\x90\x90\x90\x6a\x2c\x68\x88\x2b\x8f\x77\xe8\x38\xdb\xf8\xff\x8b\x1f\x64\x8b\x3d\x18\x00\x00\x00\x8d\x45\xe0\x50\x6a\x00\xff\x77\x08\x6a\xff\xe8\09\x93\xf8\xff\x85\xc0\x78\x61\x8b\x55\xc8\x81\xc2\x00\x30\x00\x00\x8b\x47\x04\x05\x00\xf0\xff\xff\x89\x45\xe4\x3b\xc6\x76\x08\x8b\xc8\x2b\xce\x3b\xca\x83\x65\xfc\x00\x3b\xc1\x72\x0f\x8b\x00
Ensuite je n'arrive pas exécuté le code d'assembleur dans un bloc __asm{} en c++ :
De multiple warning et erreur :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50 int main(int argc, char* argv[]) { __asm{ setns cl xor eax, eax mov dword ptr[edi], ecx inc eax pop edi pop esi ret nop nop nop nop nop push 2Ch push offset ntdll!LdrResolveDelayLoadsFromDll + 0xfcf (778f2b88) call ntdll!RtlInitializeCriticalSectionAndSpinCount + 0x3e (77880630) mov esi, ecx mov edi, dword ptr fs : [18h] lea eax, [ebp - 20h] push eax push 1Ch lea eax, [ebp - 3Ch] push eax push 0 push dword ptr[edi + 8] push 0FFFFFFFFh call ntdll!ZwQueryVirtualMemory(7787be20) test eax, eax js ntdll!LdrResolveDelayLoadsFromDll + 0xfc3 (778f2b7c) mov edx, dword ptr[ebp - 38h] add edx, 3000h mov eax, dword ptr[edi + 4] add eax, 0FFFFF000h mov dword ptr[ebp - 1Ch], eax cmp eax, esi jbe ntdll!LdrResolveDelayLoadsFromDll + 0xf82 (778f2b3b) mov ecx, eax sub ecx, esi cmp ecx, edx ja ntdll!LdrResolveDelayLoadsFromDll + 0xf84 (778f2b3d) mov ecx, edx and dword ptr[ebp - 4], 0 cmp eax, ecx jb ntdll!LdrResolveDelayLoadsFromDll + 0xf9b (778f2b54) mov eax, dword ptr[eax] } }
Avertissement 10 warning C4405: 'test'*: cet identificateur est un mot réservé
Avertissement 16 warning C4405: 'mov'*: cet identificateur est un mot réservé
etc
Erreur 1 error C2400: erreur de syntaxe d'assembleur inline dans 'second opérande'*; trouvé 'bad token'
Erreur 4 error C2400: erreur de syntaxe d'assembleur inline dans 'opcode'*; trouvé 'bad token'
Erreur 20 error C2041: chiffre 'f' non conforme pour la base '2'
Erreur 2 error C2041: chiffre 'f' non conforme pour la base '10'
Merci pour votre aide.
Partager