//生成shellcode并自动提取: #include <stdio.h> #include <Windows.h> int main(int argc, char * argv[]) { DWORD Start, End, Len; goto GetShellCode; __asm { ShellCodeStart: mov ebx, dword ptr fs : [0x30] mov ecx, dword ptr[ebx + 0xc] mov ecx, dword ptr[ecx + 0x1c] mov ecx, [ecx] mov edx, [ecx + 0x8]; kernelbase.dll mov eax, [edx + 0x3c] mov ecx, [edx + eax + 0x78] add ecx, edx mov ebx, [ecx + 0x20] add ebx, edx xor edi, edi s1 : inc edi mov esi, [ebx + edi * 4] add esi, edx cmp esi, edx je no loop s1 no : xor eax, eax ShellCodeEnd: } GetShellCode: __asm { mov Start, offset ShellCodeStart; mov End, offset ShellCodeEnd; } Len = End - Start; unsigned char *newBuffer = new unsigned char[Len + 1024]; memset(newBuffer, 0, Len + 1024); memcpy(newBuffer, (unsigned char *)Start, Len); FILE *fp = fopen("shellcode.txt", "wb+"); //fwrite(newBuffer, Len, 1, fp); //_fcloseall(); fwrite("unsigned char Buffer[] = {", 22, 1, fp); for (int x = 0; x <Len; x++) { if (x % 16 == 0) fwrite("\r\n", 2, 1, fp); fprintf(fp, "0x%02x,", newBuffer[x]); } fwrite("\n};", 2, 1, fp); _fcloseall(); system("pause"); return 0; }