Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
1 change: 1 addition & 0 deletions .gitignore
Original file line number Diff line number Diff line change
Expand Up @@ -9,3 +9,4 @@ avscript
eicar.com
.gradle/
.idea/
.vscode/
17 changes: 14 additions & 3 deletions peloader/winapi/Crypt.c
Original file line number Diff line number Diff line change
Expand Up @@ -159,6 +159,7 @@ enum {


#include "rootcert.h"
#include "signingcert.h"

static PVOID WINAPI CertFindCertificateInStore(HANDLE hCertStore,
DWORD dwCertEncodingType,
Expand Down Expand Up @@ -187,11 +188,21 @@ static PVOID WINAPI CertFindCertificateInStore(HANDLE hCertStore,
DebugLog("FakeCert: %p", &FakeCert);

FakeCert.dwCertEncodingType = 1;
FakeCert.pbCertEncoded = RootCertificate;
FakeCert.cbCertEncoded = sizeof(RootCertificate);
if(!memcmp(((PCERT_NAME_BLOB) pvFindPara)->pbData, SigningCertificate+211, ((PCERT_NAME_BLOB) pvFindPara)->cbData))
{
FakeCert.pbCertEncoded = SigningCertificate;
FakeCert.cbCertEncoded = sizeof(SigningCertificate);
DebugLog("Microsoft Code Signing PCA 2010");
}
else
{
FakeCert.pbCertEncoded = RootCertificate;
FakeCert.cbCertEncoded = sizeof(RootCertificate);
DebugLog("Microsoft Root Certificate Authority 2010");
}
FakeCert.pCertInfo = &FakeInfo;
FakeCert.pCertInfo->SubjectPublicKeyInfo.Algorithm.pszObjId = "1.2.840.113549.1.1.1";

return &FakeCert;
}

Expand Down
9 changes: 9 additions & 0 deletions peloader/winapi/Files.c
Original file line number Diff line number Diff line change
Expand Up @@ -8,6 +8,7 @@
#include <stdlib.h>
#include <ctype.h>
#include <unistd.h>
#include <wchar.h>

#include "winnt_types.h"
#include "pe_linker.h"
Expand Down Expand Up @@ -259,6 +260,13 @@ static HANDLE WINAPI FindFirstFileW(PWCHAR lpFileName, PVOID lpFindFileData)
return INVALID_HANDLE_VALUE;
}

static DWORD WINAPI GetCurrentDirectoryW(DWORD BufferLength, LPWSTR Buffer)
{
DebugLog("");
Buffer = L"C:\\Windows\\System32";
return wcslen(Buffer);
}

static DWORD WINAPI NtOpenSymbolicLinkObject(PHANDLE LinkHandle, DWORD DesiredAccess, PVOID ObjectAttributes)
{
*LinkHandle = (HANDLE) 'SYMB';
Expand Down Expand Up @@ -362,6 +370,7 @@ DECLARE_CRT_EXPORT("WriteFile", WriteFile);
DECLARE_CRT_EXPORT("DeleteFileW", DeleteFileW);
DECLARE_CRT_EXPORT("GetFileSizeEx", GetFileSizeEx);
DECLARE_CRT_EXPORT("FindFirstFileW", FindFirstFileW);
DECLARE_CRT_EXPORT("GetCurrentDirectoryW", GetCurrentDirectoryW);
DECLARE_CRT_EXPORT("NtOpenSymbolicLinkObject", NtOpenSymbolicLinkObject);
DECLARE_CRT_EXPORT("NtQuerySymbolicLinkObject", NtQuerySymbolicLinkObject);
DECLARE_CRT_EXPORT("NtClose", NtClose);
Expand Down
7 changes: 7 additions & 0 deletions peloader/winapi/LoadLibrary.c
Original file line number Diff line number Diff line change
Expand Up @@ -14,6 +14,12 @@
#include "util.h"
#include "winstrings.h"

static LONG WINAPI GetCurrentPackageId(uint32_t bufferLength, BYTE buffer)
{
DebugLog("");
//return APPMODEL_ERROR_NO_PACKAGE value
return 15700L;
}

static HANDLE WINAPI LoadLibraryExW(PVOID lpFileName, HANDLE hFile, DWORD dwFlags)
{
Expand Down Expand Up @@ -105,6 +111,7 @@ static VOID WINAPI FreeLibrary(PVOID hLibModule)
DebugLog("FreeLibrary(%p)", hLibModule);
}

DECLARE_CRT_EXPORT("GetCurrentPackageId", GetCurrentPackageId);
DECLARE_CRT_EXPORT("FreeLibrary", FreeLibrary);
DECLARE_CRT_EXPORT("LoadLibraryExW", LoadLibraryExW);
DECLARE_CRT_EXPORT("LoadLibraryW", LoadLibraryW);
Expand Down
22 changes: 22 additions & 0 deletions peloader/winapi/Locale.c
Original file line number Diff line number Diff line change
Expand Up @@ -28,6 +28,12 @@ STATIC UINT GetACP(void)
return 65001; // UTF-8
}

STATIC WINAPI BOOL AreFileApisANSI()
{
DebugLog("");
return 0;
}

STATIC WINAPI BOOL IsValidCodePage(UINT CodePage)
{
DebugLog("%u", CodePage);
Expand All @@ -53,6 +59,19 @@ STATIC DWORD LocaleNameToLCID(PVOID lpName, DWORD dwFlags)
return 0;
}

STATIC DWORD GetUserDefaultLCID()
{
//value of LOCALE_USER_DEFAULT
DebugLog("");
return 0x0400;
}

STATIC WINAPI int LCMapStringA(DWORD Locale, DWORD dwMapFlags, PVOID lpSrcStr, int cchSrc, PVOID lpDestStr, int cchDest)
{
DebugLog("%u, %#x, %p, %d, %p, %d", Locale, dwMapFlags, lpSrcStr, cchSrc, lpDestStr, cchDest);
return 1;
}

STATIC WINAPI int LCMapStringW(DWORD Locale, DWORD dwMapFlags, PVOID lpSrcStr, int cchSrc, PVOID lpDestStr, int cchDest)
{
DebugLog("%u, %#x, %p, %d, %p, %d", Locale, dwMapFlags, lpSrcStr, cchSrc, lpDestStr, cchDest);
Expand Down Expand Up @@ -84,9 +103,12 @@ STATIC WINAPI int GetLocaleInfoEx(LPCWSTR lpLocaleName, DWORD LCType, LPWSTR lpL
}

DECLARE_CRT_EXPORT("GetACP", GetACP);
DECLARE_CRT_EXPORT("AreFileApisANSI", AreFileApisANSI);
DECLARE_CRT_EXPORT("IsValidCodePage", IsValidCodePage);
DECLARE_CRT_EXPORT("GetCPInfo", GetCPInfo);
DECLARE_CRT_EXPORT("LocaleNameToLCID", LocaleNameToLCID);
DECLARE_CRT_EXPORT("GetUserDefaultLCID", GetUserDefaultLCID);
DECLARE_CRT_EXPORT("LCMapStringA", LCMapStringA);
DECLARE_CRT_EXPORT("LCMapStringW", LCMapStringW);
DECLARE_CRT_EXPORT("LCMapStringEx", LCMapStringEx);
DECLARE_CRT_EXPORT("GetLocaleInfoEx", GetLocaleInfoEx);
31 changes: 31 additions & 0 deletions peloader/winapi/Process.c
Original file line number Diff line number Diff line change
Expand Up @@ -21,4 +21,35 @@ STATIC NTSTATUS WINAPI NtSetInformationProcess(HANDLE ProcessHandle,
return 0;
}

STATIC BOOL WINAPI OpenProcessToken(HANDLE ProcessHandle,
ACCESS_MASK DesiredAccess,
PHANDLE TokenHandle)
{
DebugLog("%p", ProcessHandle);
return FALSE;
}

STATIC BOOL WINAPI GetExitCodeProcess(HANDLE ProcessHandle,
PDWORD ExitCode)
{
DebugLog("%p", ProcessHandle);
//Status Pending
*ExitCode = 0x103;
return TRUE;
}

STATIC BOOL WINAPI QueryFullProcessImageNameW(HANDLE ProcessHandle,
DWORD Flags,
LPWSTR ExeName,
PDWORD Size)
{
DebugLog("Handle: %p, Size: %d", ProcessHandle, *Size);
ExeName = L"MsMpEng.exe";
*Size = 11;
return TRUE;
}

DECLARE_CRT_EXPORT("NtSetInformationProcess", NtSetInformationProcess);
DECLARE_CRT_EXPORT("OpenProcessToken", OpenProcessToken);
DECLARE_CRT_EXPORT("GetExitCodeProcess", GetExitCodeProcess);
DECLARE_CRT_EXPORT("QueryFullProcessImageNameW", QueryFullProcessImageNameW);
39 changes: 39 additions & 0 deletions peloader/winapi/Strings.c
Original file line number Diff line number Diff line change
Expand Up @@ -115,6 +115,15 @@ STATIC BOOL WINAPI GetStringTypeA(DWORD locale, DWORD dwInfoType, PUSHORT lpSrcS
return FALSE;
}

STATIC BOOL WINAPI GetStringTypeExA(DWORD locale, DWORD dwInfoType, PUSHORT lpSrcStr, int cchSrc, PUSHORT lpCharType)
{
DebugLog("%u, %u, %p, %d, %p", locale, dwInfoType, lpSrcStr, cchSrc, lpCharType);

memset(lpCharType, 1, cchSrc * sizeof(USHORT));

return TRUE;
}


STATIC BOOL WINAPI GetStringTypeW(DWORD dwInfoType, PUSHORT lpSrcStr, int cchSrc, PUSHORT lpCharType)
{
Expand All @@ -125,6 +134,15 @@ STATIC BOOL WINAPI GetStringTypeW(DWORD dwInfoType, PUSHORT lpSrcStr, int cchSrc
return FALSE;
}

STATIC BOOL WINAPI GetStringTypeExW(DWORD locale, DWORD dwInfoType, PUSHORT lpSrcStr, int cchSrc, PUSHORT lpCharType)
{
DebugLog("%u, %p, %d, %p", dwInfoType, lpSrcStr, cchSrc, lpCharType);

memset(lpCharType, 1, cchSrc * sizeof(USHORT));

return TRUE;
}

STATIC VOID WINAPI RtlInitUnicodeString(PUNICODE_STRING DestinationString, PWCHAR SourceString)
{
DestinationString->Length = CountWideChars(SourceString) * 2;
Expand Down Expand Up @@ -216,12 +234,33 @@ STATIC INT WINAPI CompareStringOrdinal(PVOID lpString1,
return CSTR_GREATER_THAN;
}

static BOOL WINAPI ConvertStringSecurityDescriptorToSecurityDescriptorW(PUSHORT StringSecurityDescriptor, DWORD StringSDRevision, PVOID *SecurityDescriptor, PULONG SecurityDescriptorSize)
{
//The SECURITY_DESCRIPTOR struct is not well documented and is a mess to construct.
//Could implement the actual conversion but reading React OS source suggests this would be a massive pain.
//This is just the raw struct data returned from feeding the requested SD string through the same API on a Windows system.
//S:P(TL;;FRFX;;;S-1-19-512-1536)
BYTE psd[52] = {0x01, 0x00, 0x10, 0xa0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x14, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0x00,
0x20, 0x00, 0x01, 0x00, 0x00, 0x00, 0x14, 0x00, 0x18, 0x00, 0xa9,
0x00, 0x12, 0x00, 0x01, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x13,
0x00, 0x02, 0x00, 0x00, 0x00, 0x06, 0x00, 0x00};

SecurityDescriptor = (PVOID)psd;

DebugLog("%p", SecurityDescriptor);
return TRUE;
}

DECLARE_CRT_EXPORT("MultiByteToWideChar", MultiByteToWideChar);
DECLARE_CRT_EXPORT("WideCharToMultiByte", WideCharToMultiByte);
DECLARE_CRT_EXPORT("GetStringTypeA", GetStringTypeA);
DECLARE_CRT_EXPORT("GetStringTypeExA", GetStringTypeExA);
DECLARE_CRT_EXPORT("GetStringTypeW", GetStringTypeW);
DECLARE_CRT_EXPORT("GetStringTypeExW", GetStringTypeExW);
DECLARE_CRT_EXPORT("RtlInitUnicodeString", RtlInitUnicodeString);
DECLARE_CRT_EXPORT("UuidFromStringW", UuidFromStringW);
DECLARE_CRT_EXPORT("UuidCreate", UuidCreate);
DECLARE_CRT_EXPORT("CompareStringOrdinal", CompareStringOrdinal);
DECLARE_CRT_EXPORT("ConvertStringSecurityDescriptorToSecurityDescriptorW", ConvertStringSecurityDescriptorToSecurityDescriptorW);

141 changes: 141 additions & 0 deletions peloader/winapi/signingcert.h
Original file line number Diff line number Diff line change
@@ -0,0 +1,141 @@
//Microsoft Code Signing PCA 2010
static uint8_t SigningCertificate[] = {
0x30, 0x82, 0x06, 0x70, 0x30, 0x82, 0x04, 0x58, 0xa0, 0x03, 0x02, 0x01,
0x02, 0x02, 0x0a, 0x61, 0x0c, 0x52, 0x4c, 0x00, 0x00, 0x00, 0x00, 0x00,
0x03, 0x30, 0x0d, 0x06, 0x09, 0x2a, 0x86, 0x48, 0x86, 0xf7, 0x0d, 0x01,
0x01, 0x0b, 0x05, 0x00, 0x30, 0x81, 0x88, 0x31, 0x0b, 0x30, 0x09, 0x06,
0x03, 0x55, 0x04, 0x06, 0x13, 0x02, 0x55, 0x53, 0x31, 0x13, 0x30, 0x11,
0x06, 0x03, 0x55, 0x04, 0x08, 0x13, 0x0a, 0x57, 0x61, 0x73, 0x68, 0x69,
0x6e, 0x67, 0x74, 0x6f, 0x6e, 0x31, 0x10, 0x30, 0x0e, 0x06, 0x03, 0x55,
0x04, 0x07, 0x13, 0x07, 0x52, 0x65, 0x64, 0x6d, 0x6f, 0x6e, 0x64, 0x31,
0x1e, 0x30, 0x1c, 0x06, 0x03, 0x55, 0x04, 0x0a, 0x13, 0x15, 0x4d, 0x69,
0x63, 0x72, 0x6f, 0x73, 0x6f, 0x66, 0x74, 0x20, 0x43, 0x6f, 0x72, 0x70,
0x6f, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x31, 0x32, 0x30, 0x30, 0x06,
0x03, 0x55, 0x04, 0x03, 0x13, 0x29, 0x4d, 0x69, 0x63, 0x72, 0x6f, 0x73,
0x6f, 0x66, 0x74, 0x20, 0x52, 0x6f, 0x6f, 0x74, 0x20, 0x43, 0x65, 0x72,
0x74, 0x69, 0x66, 0x69, 0x63, 0x61, 0x74, 0x65, 0x20, 0x41, 0x75, 0x74,
0x68, 0x6f, 0x72, 0x69, 0x74, 0x79, 0x20, 0x32, 0x30, 0x31, 0x30, 0x30,
0x1e, 0x17, 0x0d, 0x31, 0x30, 0x30, 0x37, 0x30, 0x36, 0x32, 0x30, 0x34,
0x30, 0x31, 0x37, 0x5a, 0x17, 0x0d, 0x32, 0x35, 0x30, 0x37, 0x30, 0x36,
0x32, 0x30, 0x35, 0x30, 0x31, 0x37, 0x5a, 0x30, 0x7e, 0x31, 0x0b, 0x30,
0x09, 0x06, 0x03, 0x55, 0x04, 0x06, 0x13, 0x02, 0x55, 0x53, 0x31, 0x13,
0x30, 0x11, 0x06, 0x03, 0x55, 0x04, 0x08, 0x13, 0x0a, 0x57, 0x61, 0x73,
0x68, 0x69, 0x6e, 0x67, 0x74, 0x6f, 0x6e, 0x31, 0x10, 0x30, 0x0e, 0x06,
0x03, 0x55, 0x04, 0x07, 0x13, 0x07, 0x52, 0x65, 0x64, 0x6d, 0x6f, 0x6e,
0x64, 0x31, 0x1e, 0x30, 0x1c, 0x06, 0x03, 0x55, 0x04, 0x0a, 0x13, 0x15,
0x4d, 0x69, 0x63, 0x72, 0x6f, 0x73, 0x6f, 0x66, 0x74, 0x20, 0x43, 0x6f,
0x72, 0x70, 0x6f, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x31, 0x28, 0x30,
0x26, 0x06, 0x03, 0x55, 0x04, 0x03, 0x13, 0x1f, 0x4d, 0x69, 0x63, 0x72,
0x6f, 0x73, 0x6f, 0x66, 0x74, 0x20, 0x43, 0x6f, 0x64, 0x65, 0x20, 0x53,
0x69, 0x67, 0x6e, 0x69, 0x6e, 0x67, 0x20, 0x50, 0x43, 0x41, 0x20, 0x32,
0x30, 0x31, 0x30, 0x30, 0x82, 0x01, 0x22, 0x30, 0x0d, 0x06, 0x09, 0x2a,
0x86, 0x48, 0x86, 0xf7, 0x0d, 0x01, 0x01, 0x01, 0x05, 0x00, 0x03, 0x82,
0x01, 0x0f, 0x00, 0x30, 0x82, 0x01, 0x0a, 0x02, 0x82, 0x01, 0x01, 0x00,
0xe9, 0x0e, 0x64, 0x50, 0x79, 0x67, 0xb5, 0xc4, 0xe3, 0xfd, 0x09, 0x00,
0x4c, 0x9e, 0x94, 0xac, 0xf7, 0x56, 0x68, 0xea, 0x44, 0xd8, 0xcf, 0xc5,
0x58, 0x4f, 0xa9, 0xa5, 0x76, 0x7c, 0x6d, 0x45, 0xba, 0xd3, 0x39, 0x92,
0xb4, 0xa4, 0x1e, 0xf9, 0xf9, 0x65, 0x82, 0xe4, 0x17, 0xd2, 0x8f, 0xfd,
0x44, 0x9c, 0x08, 0xe8, 0x65, 0x93, 0xce, 0x2c, 0x55, 0x84, 0xbf, 0x7d,
0x08, 0xe3, 0x2e, 0x2b, 0xa8, 0x41, 0x2b, 0x18, 0xb7, 0xa2, 0x4b, 0x6e,
0x49, 0x4c, 0x6b, 0x15, 0x07, 0xde, 0xd1, 0xd2, 0xc2, 0x89, 0x1e, 0x71,
0x94, 0xcd, 0xb5, 0x7f, 0x4b, 0xb4, 0xaf, 0x08, 0xd8, 0xcc, 0x88, 0xd6,
0x6b, 0x17, 0x94, 0x3a, 0x93, 0xce, 0x26, 0x3f, 0xec, 0xe6, 0xfe, 0x34,
0x98, 0x57, 0xd5, 0x1d, 0x5d, 0x49, 0xf6, 0xb2, 0x2a, 0x2e, 0xd5, 0x85,
0xbb, 0x59, 0x3f, 0xf8, 0x90, 0xb4, 0x2b, 0x83, 0x74, 0xca, 0x2b, 0xb3,
0x3b, 0x46, 0xe3, 0xf0, 0x46, 0x49, 0xc1, 0x17, 0x66, 0x54, 0xc9, 0x1c,
0xbd, 0x1d, 0xc4, 0x55, 0x62, 0x57, 0x72, 0xf8, 0x67, 0xb9, 0x25, 0x20,
0x34, 0xde, 0x5d, 0xa6, 0xa5, 0x95, 0x5e, 0xab, 0x28, 0x80, 0xcd, 0xd5,
0xb2, 0x9e, 0xe5, 0x03, 0xb5, 0x63, 0xd3, 0xb2, 0x14, 0xc8, 0xc1, 0xc8,
0x8a, 0x26, 0x0a, 0x59, 0x7f, 0x07, 0xec, 0xff, 0x0e, 0xed, 0x80, 0x12,
0x35, 0x4c, 0x12, 0xa6, 0xbe, 0x52, 0x5b, 0xf5, 0xa6, 0xda, 0xe0, 0x8b,
0x0b, 0x48, 0x77, 0xd6, 0x85, 0x47, 0xd5, 0x10, 0xb9, 0xc6, 0xe8, 0xaa,
0xee, 0x8b, 0x6a, 0x2d, 0x05, 0x5c, 0x60, 0xc6, 0xb4, 0x2a, 0x5b, 0x9c,
0x23, 0x1c, 0x5f, 0x45, 0xe3, 0x1a, 0x14, 0x1e, 0x6f, 0x37, 0xcb, 0x19,
0x33, 0x80, 0x6a, 0x89, 0x4d, 0xa3, 0x6a, 0x66, 0x63, 0x78, 0x93, 0xd5,
0x30, 0xcf, 0x95, 0x1f, 0x02, 0x03, 0x01, 0x00, 0x01, 0xa3, 0x82, 0x01,
0xe3, 0x30, 0x82, 0x01, 0xdf, 0x30, 0x10, 0x06, 0x09, 0x2b, 0x06, 0x01,
0x04, 0x01, 0x82, 0x37, 0x15, 0x01, 0x04, 0x03, 0x02, 0x01, 0x00, 0x30,
0x1d, 0x06, 0x03, 0x55, 0x1d, 0x0e, 0x04, 0x16, 0x04, 0x14, 0xe6, 0xfc,
0x5f, 0x7b, 0xbb, 0x22, 0x00, 0x58, 0xe4, 0x72, 0x4e, 0xb5, 0xf4, 0x21,
0x74, 0x23, 0x32, 0xe6, 0xef, 0xac, 0x30, 0x19, 0x06, 0x09, 0x2b, 0x06,
0x01, 0x04, 0x01, 0x82, 0x37, 0x14, 0x02, 0x04, 0x0c, 0x1e, 0x0a, 0x00,
0x53, 0x00, 0x75, 0x00, 0x62, 0x00, 0x43, 0x00, 0x41, 0x30, 0x0b, 0x06,
0x03, 0x55, 0x1d, 0x0f, 0x04, 0x04, 0x03, 0x02, 0x01, 0x86, 0x30, 0x0f,
0x06, 0x03, 0x55, 0x1d, 0x13, 0x01, 0x01, 0xff, 0x04, 0x05, 0x30, 0x03,
0x01, 0x01, 0xff, 0x30, 0x1f, 0x06, 0x03, 0x55, 0x1d, 0x23, 0x04, 0x18,
0x30, 0x16, 0x80, 0x14, 0xd5, 0xf6, 0x56, 0xcb, 0x8f, 0xe8, 0xa2, 0x5c,
0x62, 0x68, 0xd1, 0x3d, 0x94, 0x90, 0x5b, 0xd7, 0xce, 0x9a, 0x18, 0xc4,
0x30, 0x56, 0x06, 0x03, 0x55, 0x1d, 0x1f, 0x04, 0x4f, 0x30, 0x4d, 0x30,
0x4b, 0xa0, 0x49, 0xa0, 0x47, 0x86, 0x45, 0x68, 0x74, 0x74, 0x70, 0x3a,
0x2f, 0x2f, 0x63, 0x72, 0x6c, 0x2e, 0x6d, 0x69, 0x63, 0x72, 0x6f, 0x73,
0x6f, 0x66, 0x74, 0x2e, 0x63, 0x6f, 0x6d, 0x2f, 0x70, 0x6b, 0x69, 0x2f,
0x63, 0x72, 0x6c, 0x2f, 0x70, 0x72, 0x6f, 0x64, 0x75, 0x63, 0x74, 0x73,
0x2f, 0x4d, 0x69, 0x63, 0x52, 0x6f, 0x6f, 0x43, 0x65, 0x72, 0x41, 0x75,
0x74, 0x5f, 0x32, 0x30, 0x31, 0x30, 0x2d, 0x30, 0x36, 0x2d, 0x32, 0x33,
0x2e, 0x63, 0x72, 0x6c, 0x30, 0x5a, 0x06, 0x08, 0x2b, 0x06, 0x01, 0x05,
0x05, 0x07, 0x01, 0x01, 0x04, 0x4e, 0x30, 0x4c, 0x30, 0x4a, 0x06, 0x08,
0x2b, 0x06, 0x01, 0x05, 0x05, 0x07, 0x30, 0x02, 0x86, 0x3e, 0x68, 0x74,
0x74, 0x70, 0x3a, 0x2f, 0x2f, 0x77, 0x77, 0x77, 0x2e, 0x6d, 0x69, 0x63,
0x72, 0x6f, 0x73, 0x6f, 0x66, 0x74, 0x2e, 0x63, 0x6f, 0x6d, 0x2f, 0x70,
0x6b, 0x69, 0x2f, 0x63, 0x65, 0x72, 0x74, 0x73, 0x2f, 0x4d, 0x69, 0x63,
0x52, 0x6f, 0x6f, 0x43, 0x65, 0x72, 0x41, 0x75, 0x74, 0x5f, 0x32, 0x30,
0x31, 0x30, 0x2d, 0x30, 0x36, 0x2d, 0x32, 0x33, 0x2e, 0x63, 0x72, 0x74,
0x30, 0x81, 0x9d, 0x06, 0x03, 0x55, 0x1d, 0x20, 0x04, 0x81, 0x95, 0x30,
0x81, 0x92, 0x30, 0x81, 0x8f, 0x06, 0x09, 0x2b, 0x06, 0x01, 0x04, 0x01,
0x82, 0x37, 0x2e, 0x03, 0x30, 0x81, 0x81, 0x30, 0x3d, 0x06, 0x08, 0x2b,
0x06, 0x01, 0x05, 0x05, 0x07, 0x02, 0x01, 0x16, 0x31, 0x68, 0x74, 0x74,
0x70, 0x3a, 0x2f, 0x2f, 0x77, 0x77, 0x77, 0x2e, 0x6d, 0x69, 0x63, 0x72,
0x6f, 0x73, 0x6f, 0x66, 0x74, 0x2e, 0x63, 0x6f, 0x6d, 0x2f, 0x50, 0x4b,
0x49, 0x2f, 0x64, 0x6f, 0x63, 0x73, 0x2f, 0x43, 0x50, 0x53, 0x2f, 0x64,
0x65, 0x66, 0x61, 0x75, 0x6c, 0x74, 0x2e, 0x68, 0x74, 0x6d, 0x30, 0x40,
0x06, 0x08, 0x2b, 0x06, 0x01, 0x05, 0x05, 0x07, 0x02, 0x02, 0x30, 0x34,
0x1e, 0x32, 0x20, 0x1d, 0x00, 0x4c, 0x00, 0x65, 0x00, 0x67, 0x00, 0x61,
0x00, 0x6c, 0x00, 0x5f, 0x00, 0x50, 0x00, 0x6f, 0x00, 0x6c, 0x00, 0x69,
0x00, 0x63, 0x00, 0x79, 0x00, 0x5f, 0x00, 0x53, 0x00, 0x74, 0x00, 0x61,
0x00, 0x74, 0x00, 0x65, 0x00, 0x6d, 0x00, 0x65, 0x00, 0x6e, 0x00, 0x74,
0x00, 0x2e, 0x20, 0x1d, 0x30, 0x0d, 0x06, 0x09, 0x2a, 0x86, 0x48, 0x86,
0xf7, 0x0d, 0x01, 0x01, 0x0b, 0x05, 0x00, 0x03, 0x82, 0x02, 0x01, 0x00,
0x1a, 0x74, 0xef, 0x57, 0x4f, 0x29, 0x7b, 0xc4, 0x16, 0x85, 0x78, 0xb8,
0x50, 0xd3, 0x22, 0xfc, 0x09, 0x9d, 0xac, 0x82, 0x97, 0xf8, 0x34, 0xff,
0x2a, 0x2c, 0x97, 0x95, 0x12, 0xe5, 0xe4, 0xbf, 0xcf, 0xbf, 0x93, 0xc8,
0xe3, 0x34, 0xa9, 0xdb, 0x81, 0xb8, 0xdc, 0x1e, 0x00, 0xbe, 0xd2, 0x35,
0x6f, 0xaf, 0xe5, 0x7f, 0x79, 0x95, 0x77, 0xe5, 0x02, 0xd4, 0xf1, 0xeb,
0xd8, 0xcd, 0x4e, 0x1e, 0x1b, 0x61, 0xa2, 0xc2, 0x5a, 0x23, 0x1a, 0xf0,
0x8c, 0xa8, 0x62, 0x51, 0x45, 0x67, 0x08, 0xe3, 0x3f, 0x3c, 0x1e, 0x93,
0xf8, 0x30, 0x85, 0x17, 0xc8, 0x39, 0x40, 0xa6, 0xd7, 0x0e, 0xb3, 0x21,
0x29, 0xe5, 0xa5, 0xa1, 0x69, 0x8c, 0x22, 0x93, 0xcc, 0x74, 0x98, 0xe7,
0xa1, 0x47, 0x43, 0xf2, 0x53, 0xac, 0xc0, 0x0f, 0x30, 0x69, 0x7f, 0xfe,
0xd2, 0x25, 0x20, 0x6d, 0x6f, 0x61, 0xd3, 0xdf, 0x07, 0xd5, 0xd9, 0x72,
0x00, 0x2c, 0x69, 0x86, 0x76, 0x3d, 0x51, 0xdb, 0xa6, 0x39, 0x48, 0xc9,
0x37, 0x61, 0x6d, 0x07, 0xdd, 0x53, 0x19, 0xcb, 0xa7, 0xd6, 0x61, 0xc2,
0xbf, 0xe2, 0x83, 0xab, 0x0f, 0xe0, 0x6b, 0x9b, 0x95, 0xd6, 0x7d, 0x28,
0x51, 0xb0, 0x89, 0x4a, 0x51, 0xa4, 0x9a, 0x6c, 0xc8, 0xb7, 0x1f, 0x4a,
0x1a, 0x0e, 0x69, 0xa9, 0xd7, 0xdc, 0xc1, 0x7e, 0xd1, 0x49, 0x70, 0xaa,
0xb6, 0xad, 0xbb, 0x72, 0x47, 0x63, 0x17, 0xfa, 0xa6, 0xd6, 0xa2, 0xa6,
0x86, 0xec, 0xa8, 0x10, 0x44, 0x9b, 0x63, 0xb6, 0xb2, 0x69, 0x89, 0x06,
0xc7, 0x46, 0x86, 0x7a, 0x18, 0x3f, 0xe8, 0xc5, 0x1d, 0x21, 0xd5, 0x7b,
0xf9, 0x02, 0x23, 0x2d, 0xc5, 0x41, 0xcb, 0xbf, 0x1d, 0x4c, 0xc8, 0x16,
0xef, 0xb1, 0x9c, 0x7f, 0xfc, 0x22, 0x4b, 0x49, 0x8a, 0x6e, 0x15, 0xe3,
0xa6, 0x7f, 0x76, 0x5b, 0xd1, 0x53, 0x79, 0x91, 0x85, 0x9d, 0xd5, 0xd2,
0xdb, 0x3d, 0x73, 0x35, 0xf3, 0x3c, 0xae, 0x54, 0xb2, 0x52, 0x47, 0x6a,
0xc0, 0xaa, 0x13, 0x95, 0xd2, 0x8e, 0x11, 0xda, 0x99, 0x67, 0x5e, 0x32,
0x8c, 0xfb, 0x37, 0x85, 0xd1, 0xdc, 0x75, 0x85, 0x9c, 0x87, 0xc6, 0x5a,
0x57, 0x85, 0xc2, 0xbf, 0xdd, 0x0d, 0x8f, 0x8c, 0x9b, 0x2d, 0xeb, 0xb4,
0xee, 0xcf, 0x27, 0xd3, 0xb5, 0x5e, 0x69, 0xfa, 0xa4, 0x16, 0x04, 0x01,
0xa7, 0x24, 0x67, 0x73, 0xcf, 0x4d, 0x4f, 0xb6, 0xde, 0x05, 0x56, 0x97,
0x7a, 0xf7, 0xe9, 0x52, 0x4d, 0xf4, 0x77, 0x05, 0x4f, 0x85, 0xc6, 0xd8,
0x0b, 0xf1, 0x8e, 0xed, 0x42, 0x09, 0xd1, 0x0d, 0x76, 0xe3, 0x23, 0x56,
0x78, 0x22, 0x26, 0x36, 0xbe, 0xca, 0xb1, 0x8c, 0x6e, 0xaa, 0x1d, 0xe4,
0x85, 0xda, 0x47, 0x33, 0x62, 0x8f, 0xa4, 0xc9, 0x91, 0x33, 0x5f, 0x71,
0x1e, 0x40, 0xaf, 0x98, 0x65, 0xc9, 0x22, 0xe8, 0x42, 0x21, 0x25, 0x8a,
0x1c, 0x2d, 0x60, 0xd9, 0x37, 0x89, 0x41, 0x89, 0x2a, 0x16, 0x0f, 0xd7,
0x61, 0x3c, 0x94, 0x68, 0x60, 0x52, 0xef, 0xd6, 0x47, 0x99, 0xa0, 0x80,
0x40, 0xee, 0x15, 0x81, 0x77, 0x3e, 0x9c, 0xe0, 0x53, 0x18, 0x1a, 0x50,
0x1d, 0x38, 0x95, 0x9b, 0x1e, 0x66, 0x33, 0x13, 0x27, 0x39, 0x17, 0x78,
0x87, 0x36, 0xce, 0x4e, 0xc3, 0x5f, 0xb2, 0xf5, 0x3d, 0x47, 0x53, 0xb6,
0xe0, 0xe5, 0xdb, 0x0b, 0x61, 0x3d, 0x2a, 0xd7, 0x92, 0x2c, 0xce, 0x37,
0x5a, 0x3e, 0x40, 0x42, 0x31, 0xa4, 0x1f, 0x10, 0x08, 0xc2, 0x56, 0x9c,
0xbf, 0x24, 0x5d, 0x51, 0x02, 0x9d, 0x6a, 0x79, 0xd2, 0x17, 0xd3, 0xda,
0xc1, 0x94, 0x8e, 0x07, 0x7b, 0x25, 0x71, 0x44, 0xab, 0x06, 0x6a, 0xe6,
0xd4, 0xc6, 0xdf, 0x23, 0x9a, 0x96, 0x75, 0xc5
};