[{"data":1,"prerenderedAt":-1},["ShallowReactive",2],{"skill:01M71FXE81QSSY73RK2FFAAEM5":3,"skill-same:01M71FXE81QSSY73RK2FFAAEM5":55},{"skillNo":4,"name":5,"nameZh":6,"description":7,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":16,"categories":17,"keywords":18,"publishedAt":23,"linkOnly":24,"markdownContent":25,"markdownBody":26,"frontMatter":27,"refName":28,"commitSha":29,"skillDirectory":30,"forksCount":14,"repositoryHtmlUrl":31,"repositoryHomepageUrl":6,"ownerHtmlUrl":32,"ownerBlogUrl":6,"ownerDescription":33,"updatedAt":34,"install":35,"resources":48},"01M71FXE81QSSY73RK2FFAAEM5","offensive-windows-boundaries",null,"-","DCx7C5\u002Fai-marketplace","DCx7C5","https:\u002F\u002Favatars.githubusercontent.com\u002Fu\u002F42419559?v=4","01M71C01G2AZV3NTNGWAWSHJPP","DC","01M71C01GQW6G50S2BYMS7PP3E",0,"MIT","https:\u002F\u002Fgithub.com\u002FDCx7C5\u002Fai-marketplace\u002Fblob\u002Fmain\u002Fskills\u002Foffensive-windows-boundaries\u002FSKILL.md",[],[19,20,21,22],"windows","offensive","offensive windows boundaries","cybersecurity","2026-11-10 10:12:30",false,"---\nname: offensive-windows-boundaries\ndescription: \"-\"\ndomain: cybersecurity\n---\n-\ncl src\\hardlink_task_lpe.c \u002FFe:bin\\hardlink_task_lpe.exe \u002FO2 advapi32.lib\n.\\bin\\hardlink_task_lpe.exe\n# defender blocks it, but it shows how it might have been worked\n```\n\n## Appendix B: Win32 App Isolation\n\nA new lightweight sandbox for traditional Win32 desktop applications. Unlike AppContainer (which requires UWP packaging), Win32 App Isolation allows any `.exe` to run in a restricted sandbox with capability-based access control.\n\n### Detecting Win32 App Isolation\n\n```c\n\u002F\u002F win32_app_isolation_detect.c - Detect isolated Win32 applications\n\u002F\u002F Compile: cl src\\win32_app_isolation_detect.c \u002FFe:bin\\win32_app_isolation_detect.exe advapi32.lib\n\n#include \u003Cwindows.h>\n#include \u003Csddl.h>\n#include \u003Cstdio.h>\n#include \u003Ctlhelp32.h>\n#include \u003Cstring.h>\n\n\u002F*\nWin32 App Isolation Detection:\n══════════════════════════════\n\nIsolated Win32 apps run with special token properties:\n1. AppContainer-like SID (unique per app)\n2. Security attributes marking them as \"isolatedWin32\"\n3. Reduced integrity level\n4. Virtualized file system and registry views\n\nDetection approach:\n- Check for AppContainer SID on the process token\n- Look for \"isolatedWin32\" security attributes\n- Check if the process has a virtualized registry root\n- Examine the token's capabilities list\n*\u002F\n\n\u002F\u002F Custom structure definitions for security attributes\ntypedef struct _MY_UNICODE_STRING {\n    USHORT Length;\n    USHORT MaximumLength;\n    PWSTR Buffer;\n} MY_UNICODE_STRING, *PMY_UNICODE_STRING;\n\ntypedef struct _MY_TOKEN_SECURITY_ATTRIBUTE_FQBN_VALUE {\n    ULONG64 Version;\n    MY_UNICODE_STRING Name;\n} MY_TOKEN_SECURITY_ATTRIBUTE_FQBN_VALUE, *PMY_TOKEN_SECURITY_ATTRIBUTE_FQBN_VALUE;\n\ntypedef struct _MY_TOKEN_SECURITY_ATTRIBUTE_OCTET_STRING_VALUE {\n    PVOID pValue;\n    ULONG ValueLength;\n} MY_TOKEN_SECURITY_ATTRIBUTE_OCTET_STRING_VALUE, *PMY_TOKEN_SECURITY_ATTRIBUTE_OCTET_STRING_VALUE;\n\ntypedef struct _MY_TOKEN_SECURITY_ATTRIBUTE_V1 {\n    MY_UNICODE_STRING Name;\n    USHORT ValueType;\n    USHORT Reserved;\n    ULONG Flags;\n    ULONG ValueCount;\n    union {\n        PLONG64 pInt64;\n        PULONG64 pUint64;\n        PMY_UNICODE_STRING pString;\n        PMY_TOKEN_SECURITY_ATTRIBUTE_FQBN_VALUE pFqbn;\n        PMY_TOKEN_SECURITY_ATTRIBUTE_OCTET_STRING_VALUE pOctetString;\n    } Values;\n} MY_TOKEN_SECURITY_ATTRIBUTE_V1, *PMY_TOKEN_SECURITY_ATTRIBUTE_V1;\n\ntypedef struct _MY_TOKEN_SECURITY_ATTRIBUTES_INFORMATION {\n    USHORT Version;\n    USHORT Reserved;\n    ULONG AttributeCount;\n    union {\n        PMY_TOKEN_SECURITY_ATTRIBUTE_V1 pAttributeV1;\n    } Attribute;\n} MY_TOKEN_SECURITY_ATTRIBUTES_INFORMATION, *PMY_TOKEN_SECURITY_ATTRIBUTES_INFORMATION;\n\n#define MY_TOKEN_SECURITY_ATTRIBUTE_TYPE_INVALID 0x00\n#define MY_TOKEN_SECURITY_ATTRIBUTE_TYPE_INT64 0x01\n#define MY_TOKEN_SECURITY_ATTRIBUTE_TYPE_UINT64 0x02\n#define MY_TOKEN_SECURITY_ATTRIBUTE_TYPE_STRING 0x03\n#define MY_TOKEN_SECURITY_ATTRIBUTE_TYPE_FQBN 0x04\n#define MY_TOKEN_SECURITY_ATTRIBUTE_TYPE_SID 0x05\n#define MY_TOKEN_SECURITY_ATTRIBUTE_TYPE_BOOLEAN 0x06\n#define MY_TOKEN_SECURITY_ATTRIBUTE_TYPE_OCTET_STRING 0x10\n\n\u002F\u002F Function pointer for GetProcessMitigationPolicy\ntypedef BOOL (WINAPI *PFN_GetProcessMitigationPolicy)(\n    HANDLE hProcess,\n    int MitigationPolicy,\n    PVOID lpBuffer,\n    SIZE_T dwLength\n);\n\nBOOL CheckWin32kLockdown(HANDLE hProcess) {\n    HMODULE hKernel32 = GetModuleHandleA(\"kernel32.dll\");\n    if (!hKernel32) return FALSE;\n\n    PFN_GetProcessMitigationPolicy pfnGetProcessMitigationPolicy =\n        (PFN_GetProcessMitigationPolicy)GetProcAddress(hKernel32, \"GetProcessMitigationPolicy\");\n\n    if (!pfnGetProcessMitigationPolicy) return FALSE;\n\n    PROCESS_MITIGATION_SYSTEM_CALL_DISABLE_POLICY policy = {0};\n    if (pfnGetProcessMitigationPolicy(hProcess, ProcessSystemCallDisablePolicy,\n                                      &policy, sizeof(policy))) {\n        return policy.DisallowWin32kSystemCalls;\n    }\n\n    return FALSE;\n}\n\nBOOL GetTokenCapabilitiesDetailed(HANDLE hProcess, DWORD *pCapCount, PWSTR **ppCapNames) {\n    HANDLE hToken;\n    if (!OpenProcessToken(hProcess, TOKEN_QUERY, &hToken)) {\n        return FALSE;\n    }\n\n    DWORD dwSize = 0;\n    GetTokenInformation(hToken, TokenCapabilities, NULL, 0, &dwSize);\n\n    if (dwSize == 0) {\n        CloseHandle(hToken);\n        return FALSE;\n    }\n\n    PTOKEN_GROUPS pCapabilities = (PTOKEN_GROUPS)malloc(dwSize);\n    if (!pCapabilities) {\n        CloseHandle(hToken);\n        return FALSE;\n    }\n\n    BOOL result = FALSE;\n    if (GetTokenInformation(hToken, TokenCapabilities, pCapabilities, dwSize, &dwSize)) {\n        *pCapCount = pCapabilities->GroupCount;\n\n        if (ppCapNames && pCapabilities->GroupCount > 0) {\n            *ppCapNames = (PWSTR*)malloc(sizeof(PWSTR) * pCapabilities->GroupCount);\n            if (*ppCapNames) {\n                for (DWORD i = 0; i \u003C pCapabilities->GroupCount; i++) {\n                    ConvertSidToStringSidW(pCapabilities->Groups[i].Sid, &(*ppCapNames)[i]);\n                }\n            }\n        }\n        result = TRUE;\n    }\n\n    free(pCapabilities);\n    CloseHandle(hToken);\n    return result;\n}\n\nBOOL GetProcessIntegrityLevel(HANDLE hProcess, DWORD *pIntegrityLevel) {\n    HANDLE hToken;\n    if (!OpenProcessToken(hProcess, TOKEN_QUERY, &hToken)) {\n        return FALSE;\n    }\n\n    DWORD dwSize = 0;\n    GetTokenInformation(hToken, TokenIntegrityLevel, NULL, 0, &dwSize);\n\n    PTOKEN_MANDATORY_LABEL pTIL = (PTOKEN_MANDATORY_LABEL)malloc(dwSize);\n    if (!pTIL) {\n        CloseHandle(hToken);\n        return FALSE;\n    }\n\n    BOOL result = FALSE;\n    if (GetTokenInformation(hToken, TokenIntegrityLevel, pTIL, dwSize, &dwSize)) {\n        *pIntegrityLevel = *GetSidSubAuthority(pTIL->Label.Sid,\n            (DWORD)(UCHAR)(*GetSidSubAuthorityCount(pTIL->Label.Sid) - 1));\n        result = TRUE;\n    }\n\n    free(pTIL);\n    CloseHandle(hToken);\n    return result;\n}\n\nBOOL GetAppContainerSid(HANDLE hProcess, PWSTR *ppSidString) {\n    HANDLE hToken;\n    if (!OpenProcessToken(hProcess, TOKEN_QUERY, &hToken)) {\n        return FALSE;\n    }\n\n    DWORD dwSize = 0;\n    GetTokenInformation(hToken, TokenAppContainerSid, NULL, 0, &dwSize);\n\n    if (dwSize == 0) {\n        CloseHandle(hToken);\n        return FALSE;\n    }\n\n    PTOKEN_APPCONTAINER_INFORMATION pAppContainer = (PTOKEN_APPCONTAINER_INFORMATION)malloc(dwSize);\n    if (!pAppContainer) {\n        CloseHandle(hToken);\n        return FALSE;\n    }\n\n    BOOL result = FALSE;\n    if (GetTokenInformation(hToken, TokenAppContainerSid, pAppContainer, dwSize, &dwSize)) {\n        if (pAppContainer->TokenAppContainer) {\n            ConvertSidToStringSidW(pAppContainer->TokenAppContainer, ppSidString);\n            result = TRUE;\n        }\n    }\n\n    free(pAppContainer);\n    CloseHandle(hToken);\n    return result;\n}\n\nBOOL GetTokenCapabilities(HANDLE hProcess, DWORD *pCapCount) {\n    HANDLE hToken;\n    if (!OpenProcessToken(hProcess, TOKEN_QUERY, &hToken)) {\n        return FALSE;\n    }\n\n    DWORD dwSize = 0;\n    GetTokenInformation(hToken, TokenCapabilities, NULL, 0, &dwSize);\n\n    if (dwSize == 0) {\n        CloseHandle(hToken);\n        return FALSE;\n    }\n\n    PTOKEN_GROUPS pCapabilities = (PTOKEN_GROUPS)malloc(dwSize);\n    if (!pCapabilities) {\n        CloseHandle(hToken);\n        return FALSE;\n    }\n\n    BOOL result = FALSE;\n    if (GetTokenInformation(hToken, TokenCapabilities, pCapabilities, dwSize, &dwSize)) {\n        *pCapCount = pCapabilities->GroupCount;\n        result = TRUE;\n    }\n\n    free(pCapabilities);\n    CloseHandle(hToken);\n    return result;\n}\n\nBOOL IsProcessIsolatedWin32(HANDLE hProcess, BOOL verbose) {\n    HANDLE hToken;\n    if (!OpenProcessToken(hProcess, TOKEN_QUERY, &hToken)) {\n        return FALSE;\n    }\n\n    \u002F\u002F Check 1: Is this an AppContainer token?\n    DWORD isAppContainer = 0;\n    DWORD size = sizeof(isAppContainer);\n    if (!GetTokenInformation(hToken, TokenIsAppContainer, &isAppContainer, size, &size)) {\n        CloseHandle(hToken);\n        return FALSE;\n    }\n\n    if (!isAppContainer) {\n        CloseHandle(hToken);\n        return FALSE;\n    }\n\n    if (verbose) {\n        printf(\"  [+] AppContainer: YES\\n\");\n\n        \u002F\u002F Get integrity level\n        DWORD integrityLevel = 0;\n        if (GetProcessIntegrityLevel(hProcess, &integrityLevel)) {\n            printf(\"  [+] Integrity Level: 0x%X \", integrityLevel);\n            if (integrityLevel \u003C SECURITY_MANDATORY_LOW_RID) {\n                printf(\"(Untrusted)\\n\");\n            } else if (integrityLevel \u003C SECURITY_MANDATORY_MEDIUM_RID) {\n                printf(\"(Low)\\n\");\n            } else if (integrityLevel \u003C SECURITY_MANDATORY_HIGH_RID) {\n                printf(\"(Medium)\\n\");\n            } else {\n                printf(\"(High\u002FSystem)\\n\");\n            }\n        }\n\n        \u002F\u002F Get AppContainer SID\n        PWSTR sidString = NULL;\n        if (GetAppContainerSid(hProcess, &sidString)) {\n            printf(\"  [+] AppContainer SID: %S\\n\", sidString);\n            LocalFree(sidString);\n        }\n\n        \u002F\u002F Get capabilities count\n        DWORD capCount = 0;\n        if (GetTokenCapabilities(hProcess, &capCount)) {\n            printf(\"  [+] Capabilities: %d\\n\", capCount);\n        }\n    }\n\n    \u002F\u002F Check 2: Query security attributes for \"isolatedWin32\" markers\n    DWORD attrSize = 0;\n    GetTokenInformation(hToken, (TOKEN_INFORMATION_CLASS)73, NULL, 0, &attrSize); \u002F\u002F TokenSecurityAttributes = 73\n\n    BOOL hasIsolationAttrs = FALSE;\n    if (attrSize > 0) {\n        PVOID attrBuf = malloc(attrSize);\n        if (attrBuf && GetTokenInformation(hToken, (TOKEN_INFORMATION_CLASS)73,\n                                attrBuf, attrSize, &attrSize)) {\n            PMY_TOKEN_SECURITY_ATTRIBUTES_INFORMATION pAttrs =\n                (PMY_TOKEN_SECURITY_ATTRIBUTES_INFORMATION)attrBuf;\n\n            if (verbose && pAttrs->AttributeCount > 0) {\n                printf(\"  [+] Security Attributes:\\n\");\n            }\n\n            for (DWORD i = 0; i \u003C pAttrs->AttributeCount; i++) {\n                PMY_TOKEN_SECURITY_ATTRIBUTE_V1 attr = &pAttrs->Attribute.pAttributeV1[i];\n\n                if (attr->Name.Buffer) {\n                    if (verbose) {\n                        printf(\"      - %S\\n\", attr->Name.Buffer);\n                    }\n\n                    \u002F\u002F Check for Win32 App Isolation markers\n                    if (wcsstr(attr->Name.Buffer, L\"WIN:\u002F\u002FSYSAPPID\") ||\n                        wcsstr(attr->Name.Buffer, L\"WIN:\u002F\u002FPKG\") ||\n                        wcsstr(attr->Name.Buffer, L\"WIN:\u002F\u002FNOALLAPPPKG\")) {\n                        hasIsolationAttrs = TRUE;\n                    }\n                }\n            }\n        }\n        if (attrBuf) free(attrBuf);\n    }\n\n    CloseHandle(hToken);\n    return isAppContainer && hasIsolationAttrs;\n}\n\nBOOL GetPackageFamilyName(HANDLE hProcess, PWSTR *ppPackageName) {\n    typedef LONG (WINAPI *PFN_GetPackageFamilyName)(HANDLE, UINT32*, PWSTR);\n\n    HMODULE hKernel32 = GetModuleHandleA(\"kernel32.dll\");\n    if (!hKernel32) return FALSE;\n\n    PFN_GetPackageFamilyName pfnGetPackageFamilyName =\n        (PFN_GetPackageFamilyName)GetProcAddress(hKernel32, \"GetPackageFamilyName\");\n\n    if (!pfnGetPackageFamilyName) return FALSE;\n\n    UINT32 length = 0;\n    LONG result = pfnGetPackageFamilyName(hProcess, &length, NULL);\n\n    if (result != ERROR_INSUFFICIENT_BUFFER || length == 0) {\n        return FALSE;\n    }\n\n    *ppPackageName = (PWSTR)malloc(length * sizeof(WCHAR));\n    if (!*ppPackageName) return FALSE;\n\n    result = pfnGetPackageFamilyName(hProcess, &length, *ppPackageName);\n    if (result != ERROR_SUCCESS) {\n        free(*ppPackageName);\n        *ppPackageName = NULL;\n        return FALSE;\n    }\n\n    return TRUE;\n}\n\ntypedef struct _ISOLATION_INFO {\n    BOOL isAppContainer;\n    BOOL hasIsolationAttrs;\n    BOOL hasWin32kLockdown;\n    BOOL hasPackageIdentity;\n    DWORD integrityLevel;\n    DWORD capabilityCount;\n    PWSTR appContainerSid;\n    PWSTR packageFamilyName;\n    PWSTR *capabilityNames;\n    WCHAR **securityAttributes;\n    DWORD securityAttributeCount;\n} ISOLATION_INFO, *PISOLATION_INFO;\n\nvoid FreeIsolationInfo(PISOLATION_INFO pInfo) {\n    if (!pInfo) return;\n\n    if (pInfo->appContainerSid) {\n        LocalFree(pInfo->appContainerSid);\n    }\n\n    if (pInfo->packageFamilyName) {\n        free(pInfo->packageFamilyName);\n    }\n\n    if (pInfo->capabilityNames) {\n        for (DWORD i = 0; i \u003C pInfo->capabilityCount; i++) {\n            if (pInfo->capabilityNames[i]) {\n                LocalFree(pInfo->capabilityNames[i]);\n            }\n        }\n        free(pInfo->capabilityNames);\n    }\n\n    if (pInfo->securityAttributes) {\n        for (DWORD i = 0; i \u003C pInfo->securityAttributeCount; i++) {\n            if (pInfo->securityAttributes[i]) {\n                free(pInfo->securityAttributes[i]);\n            }\n        }\n        free(pInfo->securityAttributes);\n    }\n}\n\nBOOL AnalyzeProcessIsolation(HANDLE hProcess, PISOLATION_INFO pInfo) {\n    ZeroMemory(pInfo, sizeof(ISOLATION_INFO));\n\n    HANDLE hToken;\n    if (!OpenProcessToken(hProcess, TOKEN_QUERY, &hToken)) {\n        return FALSE;\n    }\n\n    \u002F\u002F Check 1: Is this an AppContainer token?\n    DWORD isAppContainer = 0;\n    DWORD size = sizeof(isAppContainer);\n    if (GetTokenInformation(hToken, TokenIsAppContainer, &isAppContainer, size, &size)) {\n        pInfo->isAppContainer = isAppContainer;\n    }\n\n    if (!pInfo->isAppContainer) {\n        CloseHandle(hToken);\n        return FALSE;\n    }\n\n    \u002F\u002F Check 2: Get integrity level\n    GetProcessIntegrityLevel(hProcess, &pInfo->integrityLevel);\n\n    \u002F\u002F Check 3: Get AppContainer SID\n    GetAppContainerSid(hProcess, &pInfo->appContainerSid);\n\n    \u002F\u002F Check 4: Get capabilities\n    GetTokenCapabilitiesDetailed(hProcess, &pInfo->capabilityCount, &pInfo->capabilityNames);\n\n    \u002F\u002F Check 5: Check Win32k lockdown\n    pInfo->hasWin32kLockdown = CheckWin32kLockdown(hProcess);\n\n    \u002F\u002F Check 6: Get package family name\n    pInfo->hasPackageIdentity = GetPackageFamilyName(hProcess, &pInfo->packageFamilyName);\n\n    \u002F\u002F Check 7: Query security attributes for \"isolatedWin32\" markers\n    DWORD attrSize = 0;\n    GetTokenInformation(hToken, (TOKEN_INFORMATION_CLASS)73, NULL, 0, &attrSize);\n\n    if (attrSize > 0) {\n        PVOID attrBuf = malloc(attrSize);\n        if (attrBuf && GetTokenInformation(hToken, (TOKEN_INFORMATION_CLASS)73, attrBuf, attrSize, &attrSize)) {\n            PMY_TOKEN_SECURITY_ATTRIBUTES_INFORMATION pAttrs = (PMY_TOKEN_SECURITY_ATTRIBUTES_INFORMATION)attrBuf;\n\n            if (pAttrs->AttributeCount > 0) {\n                pInfo->securityAttributes = (WCHAR**)malloc(sizeof(WCHAR*) * pAttrs->AttributeCount);\n                pInfo->securityAttributeCount = pAttrs->AttributeCount;\n\n                for (DWORD i = 0; i \u003C pAttrs->AttributeCount; i++) {\n                    PMY_TOKEN_SECURITY_ATTRIBUTE_V1 attr = &pAttrs->Attribute.pAttributeV1[i];\n\n                    if (attr->Name.Buffer && attr->Name.Length > 0) {\n                        size_t bufLen = attr->Name.Length + sizeof(WCHAR);\n                        pInfo->securityAttributes[i] = (WCHAR*)malloc(bufLen);\n                        if (pInfo->securityAttributes[i]) {\n                            wcsncpy_s(pInfo->securityAttributes[i], bufLen \u002F sizeof(WCHAR),\n                                     attr->Name.Buffer, attr->Name.Length \u002F sizeof(WCHAR));\n                        }\n\n                        \u002F\u002F Check for Win32 App Isolation markers\n                        if (wcsstr(attr->Name.Buffer, L\"WIN:\u002F\u002FSYSAPPID\") ||\n                            wcsstr(attr->Name.Buffer, L\"WIN:\u002F\u002FPKG\") ||\n                            wcsstr(attr->Name.Buffer, L\"WIN:\u002F\u002FNOALLAPPPKG\")) {\n                            pInfo->hasIsolationAttrs = TRUE;\n                        }\n                    } else {\n                        pInfo->securityAttributes[i] = NULL;\n                    }\n                }\n            }\n        }\n        if (attrBuf) free(attrBuf);\n    }\n\n    CloseHandle(hToken);\n    return TRUE;\n}\n\nvoid PrintIsolationInfo(const char *processName, DWORD pid, PISOLATION_INFO pInfo) {\n    printf(\"\\n|================================================================|\\n\");\n    printf(\"| Process: %-50s |\\n\", processName);\n    printf(\"| PID: %-56d |\\n\", pid);\n    printf(\"|=================================================================|\\n\");\n\n    printf(\"| AppContainer:        %-37s |\\n\", pInfo->isAppContainer ? \"YES\" : \"NO\");\n    printf(\"| Isolation Attributes: %-36s |\\n\", pInfo->hasIsolationAttrs ? \"YES\" : \"NO\");\n    printf(\"| Win32k Lockdown:     %-37s |\\n\", pInfo->hasWin32kLockdown ? \"YES\" : \"NO\");\n    printf(\"| Package Identity:    %-37s |\\n\", pInfo->hasPackageIdentity ? \"YES\" : \"NO\");\n\n    printf(\"| Integrity Level:     0x%04X \", pInfo->integrityLevel);\n    if (pInfo->integrityLevel \u003C SECURITY_MANDATORY_LOW_RID) {\n        printf(\"%-28s |\\n\", \"(Untrusted)\");\n    } else if (pInfo->integrityLevel \u003C SECURITY_MANDATORY_MEDIUM_RID) {\n        printf(\"%-28s |\\n\", \"(Low)\");\n    } else if (pInfo->integrityLevel \u003C SECURITY_MANDATORY_HIGH_RID) {\n        printf(\"%-28s |\\n\", \"(Medium)\");\n    } else {\n        printf(\"%-28s |\\n\", \"(High\u002FSystem)\");\n    }\n\n    printf(\"| Capabilities:        %-37d |\\n\", pInfo->capabilityCount);\n\n    if (pInfo->appContainerSid) {\n        printf(\"|===============================================================|\\n\");\n        printf(\"| AppContainer SID:                                             |\\n\");\n        wprintf(L\"|   %s\", pInfo->appContainerSid);\n        int sidLen = wcslen(pInfo->appContainerSid);\n        for (int i = sidLen + 4; i \u003C 63; i++) printf(\" \");\n        printf(\"|\\n\");\n    }\n\n    if (pInfo->packageFamilyName) {\n        printf(\"|===============================================================|\\n\");\n        printf(\"| Package Family Name:                                          |\\n\");\n        wprintf(L\"|   %s\", pInfo->packageFamilyName);\n        int pkgLen = wcslen(pInfo->packageFamilyName);\n        for (int i = pkgLen + 4; i \u003C 63; i++) printf(\" \");\n        printf(\"|\\n\");\n    }\n\n    if (pInfo->capabilityCount > 0 && pInfo->capabilityNames) {\n        printf(\"|===============================================================|\\n\");\n        printf(\"| Capabilities (first 5):                                       |\\n\");\n        for (DWORD i = 0; i \u003C pInfo->capabilityCount && i \u003C 5; i++) {\n            if (pInfo->capabilityNames[i]) {\n                wprintf(L\"|   %d. %s\", i+1, pInfo->capabilityNames[i]);\n                int capLen = wcslen(pInfo->capabilityNames[i]);\n                for (int j = capLen + 6; j \u003C 63; j++) printf(\" \");\n                printf(\"|\\n\");\n            }\n        }\n        if (pInfo->capabilityCount > 5) {\n            printf(\"|   ... and %d more                                            \",\n                   pInfo->capabilityCount - 5);\n            int numLen = (pInfo->capabilityCount - 5 >= 10) ? 2 : 1;\n            for (int i = numLen + 14; i \u003C 59; i++) printf(\" \");\n            printf(\"|\\n\");\n        }\n    }\n\n    if (pInfo->securityAttributeCount > 0 && pInfo->securityAttributes) {\n        printf(\"|===============================================================|\\n\");\n        printf(\"| Security Attributes (first 8):                                |\\n\");\n        for (DWORD i = 0; i \u003C pInfo->securityAttributeCount && i \u003C 8; i++) {\n            if (pInfo->securityAttributes[i]) {\n                wprintf(L\"|   • %s\", pInfo->securityAttributes[i]);\n                int attrLen = wcslen(pInfo->securityAttributes[i]);\n                for (int j = attrLen + 5; j \u003C 63; j++) printf(\" \");\n                printf(\"|\\n\");\n            }\n        }\n        if (pInfo->securityAttributeCount > 8) {\n            printf(\"|   ... and %d more                                            \",\n                   pInfo->securityAttributeCount - 8);\n            int numLen = (pInfo->securityAttributeCount - 8 >= 10) ? 2 : 1;\n            for (int i = numLen + 14; i \u003C 59; i++) printf(\" \");\n            printf(\"|\\n\");\n        }\n    }\n\n    printf(\"|===============================================================|\\n\");\n\n    \u002F\u002F Determine isolation level\n    if (pInfo->hasIsolationAttrs && pInfo->hasWin32kLockdown) {\n        printf(\"\\n>>> STRONG ISOLATION: Win32 App Isolation with Win32k Lockdown \u003C\u003C\u003C\\n\");\n    } else if (pInfo->hasIsolationAttrs) {\n        printf(\"\\n>>> MODERATE ISOLATION: Win32 App Isolation \u003C\u003C\u003C\\n\");\n    } else if (pInfo->isAppContainer) {\n        printf(\"\\n>>> BASIC ISOLATION: AppContainer (UWP\u002FMSIX) \u003C\u003C\u003C\\n\");\n    }\n}\n\nvoid ScanForIsolatedAppsEnhanced(BOOL showAll) {\n    printf(\"===============================================================\\n\");\n    printf(\"  Win32 App Isolation - Comprehensive Process Scan\\n\");\n    printf(\"===============================================================\\n\");\n\n    HANDLE hSnapshot = CreateToolhelp32Snapshot(TH32CS_SNAPPROCESS, 0);\n    if (hSnapshot == INVALID_HANDLE_VALUE) {\n        printf(\"[-] Failed to create process snapshot (Error: %d)\\n\", GetLastError());\n        return;\n    }\n\n    PROCESSENTRY32 pe = { sizeof(pe) };\n    int isolated_count = 0;\n    int appcontainer_count = 0;\n    int strong_isolation_count = 0;\n\n    if (Process32First(hSnapshot, &pe)) {\n        do {\n            HANDLE hProc = OpenProcess(PROCESS_QUERY_INFORMATION, FALSE, pe.th32ProcessID);\n            if (!hProc) continue;\n\n            ISOLATION_INFO info;\n            if (AnalyzeProcessIsolation(hProc, &info)) {\n                appcontainer_count++;\n\n                if (info.hasIsolationAttrs) {\n                    isolated_count++;\n                    if (info.hasWin32kLockdown) {\n                        strong_isolation_count++;\n                    }\n                    PrintIsolationInfo(pe.szExeFile, pe.th32ProcessID, &info);\n                } else if (showAll) {\n                    \u002F\u002F Show all AppContainer processes even if not isolated\n                    PrintIsolationInfo(pe.szExeFile, pe.th32ProcessID, &info);\n                }\n\n                FreeIsolationInfo(&info);\n            }\n\n            CloseHandle(hProc);\n        } while (Process32Next(hSnapshot, &pe));\n    }\n\n    CloseHandle(hSnapshot);\n\n    printf(\"\\n==============================================================\\n\");\n    printf(\"  Scan Summary\\n\");\n    printf(\"==============================================================\\n\");\n    printf(\"  Total AppContainer processes:     %d\\n\", appcontainer_count);\n    printf(\"  Isolated Win32 processes:         %d\\n\", isolated_count);\n    printf(\"  Strong isolation (Win32k locked): %d\\n\", strong_isolation_count);\n    printf(\"==============================================================\\n\");\n\n    if (isolated_count == 0 && appcontainer_count > 0) {\n        printf(\"\\n[i] Note: Found %d AppContainer processes but none with Win32 App\\n\", appcontainer_count);\n        printf(\"    Isolation markers. This is expected on Windows \u003C 11 24H2 or if\\n\");\n        printf(\"    no isolated Win32 apps are currently running.\\n\");\n        printf(\"\\n[i] Run with '-v' flag to see details of all AppContainer processes.\\n\");\n    }\n}\n\nvoid ScanForIsolatedApps() {\n    printf(\"=== Win32 App Isolation - Process Scan ===\\n\\n\");\n\n    HANDLE hSnapshot = CreateToolhelp32Snapshot(TH32CS_SNAPPROCESS, 0);\n    if (hSnapshot == INVALID_HANDLE_VALUE) {\n        printf(\"[-] Failed to create process snapshot\\n\");\n        return;\n    }\n\n    PROCESSENTRY32 pe = { sizeof(pe) };\n    int isolated_count = 0;\n    int appcontainer_count = 0;\n\n    if (Process32First(hSnapshot, &pe)) {\n        do {\n            HANDLE hProc = OpenProcess(PROCESS_QUERY_INFORMATION, FALSE, pe.th32ProcessID);\n            if (!hProc) continue;\n\n            HANDLE hToken;\n            if (OpenProcessToken(hProc, TOKEN_QUERY, &hToken)) {\n                DWORD isAppContainer = 0;\n                DWORD size = sizeof(isAppContainer);\n\n                if (GetTokenInformation(hToken, TokenIsAppContainer, &isAppContainer, size, &size)) {\n                    if (isAppContainer) {\n                        appcontainer_count++;\n                        printf(\"\\n[APPCONTAINER] %s (PID %d)\\n\", pe.szExeFile, pe.th32ProcessID);\n\n                        if (IsProcessIsolatedWin32(hProc, TRUE)) {\n                            printf(\"  >>> ISOLATED WIN32 APP \u003C\u003C\u003C\\n\");\n                            isolated_count++;\n                        }\n                    }\n                }\n                CloseHandle(hToken);\n            }\n\n            CloseHandle(hProc);\n        } while (Process32Next(hSnapshot, &pe));\n    }\n\n    CloseHandle(hSnapshot);\n\n    printf(\"\\n[*] Found %d AppContainer processes\\n\", appcontainer_count);\n    printf(\"[*] Found %d isolated Win32 processes\\n\", isolated_count);\n}\n\nint main(int argc, char *argv[]) {\n    BOOL verbose = FALSE;\n\n    \u002F\u002F Parse command line arguments\n    for (int i = 1; i \u003C argc; i++) {\n        if (strcmp(argv[i], \"-v\") == 0 || strcmp(argv[i], \"--verbose\") == 0) {\n            verbose = TRUE;\n        } else if (strcmp(argv[i], \"-h\") == 0 || strcmp(argv[i], \"--help\") == 0) {\n            printf(\"Usage: %s [OPTIONS]\\n\\n\", argv[0]);\n            printf(\"Options:\\n\");\n            printf(\"  -v, --verbose    Show all AppContainer processes (not just isolated)\\n\");\n            printf(\"  -h, --help       Show this help message\\n\\n\");\n            printf(\"Description:\\n\");\n            printf(\"  Scans for Win32 App Isolation processes on Windows 11 24H2+.\\n\");\n            printf(\"  By default, only shows processes with isolation markers.\\n\");\n            printf(\"  Use -v to see all AppContainer processes.\\n\\n\");\n            return 0;\n        }\n    }\n\n    printf(\"\\n\");\n    printf(\"|===============================================================|\\n\");\n    printf(\"|                                                               |\\n\");\n    printf(\"|         Win32 App Isolation Detection & Analysis              |\\n\");\n    printf(\"|                                                               |\\n\");\n    printf(\"|===============================================================|\\n\");\n    printf(\"\\n\");\n\n    ScanForIsolatedAppsEnhanced(verbose);\n    return 0;\n}\n```\n\n## Week 7 Summary\n\nConnection to Week 8 (Mitigation Bypass):\\*\\*\nWeek 8 dives deeper into specific bypass techniques:\n\n- ASLR info leak methods\n- DEP bypass via ROP\n- CFG\u002FCET evasion\n- Stack cookie bypass\n\n**Connection to Week 10 (EDR Evasion):**\nWeek 10 covers operational evasion:\n\n- Usermode hook bypass\n- ETW blinding\n- Kernel callback manipulation\n- Complete EDR bypass chains\n","-\ncl src\\hardlink_task_lpe.c \u002FFe:bin\\hardlink_task_lpe.exe \u002FO2 advapi32.lib\n.\\bin\\hardlink_task_lpe.exe\n# defender blocks it, but it shows how it might have been worked\n```\n\n## Appendix B: Win32 App Isolation\n\nA new lightweight sandbox for traditional Win32 desktop applications. Unlike AppContainer (which requires UWP packaging), Win32 App Isolation allows any `.exe` to run in a restricted sandbox with capability-based access control.\n\n### Detecting Win32 App Isolation\n\n```c\n\u002F\u002F win32_app_isolation_detect.c - Detect isolated Win32 applications\n\u002F\u002F Compile: cl src\\win32_app_isolation_detect.c \u002FFe:bin\\win32_app_isolation_detect.exe advapi32.lib\n\n#include \u003Cwindows.h>\n#include \u003Csddl.h>\n#include \u003Cstdio.h>\n#include \u003Ctlhelp32.h>\n#include \u003Cstring.h>\n\n\u002F*\nWin32 App Isolation Detection:\n══════════════════════════════\n\nIsolated Win32 apps run with special token properties:\n1. AppContainer-like SID (unique per app)\n2. Security attributes marking them as \"isolatedWin32\"\n3. Reduced integrity level\n4. Virtualized file system and registry views\n\nDetection approach:\n- Check for AppContainer SID on the process token\n- Look for \"isolatedWin32\" security attributes\n- Check if the process has a virtualized registry root\n- Examine the token's capabilities list\n*\u002F\n\n\u002F\u002F Custom structure definitions for security attributes\ntypedef struct _MY_UNICODE_STRING {\n    USHORT Length;\n    USHORT MaximumLength;\n    PWSTR Buffer;\n} MY_UNICODE_STRING, *PMY_UNICODE_STRING;\n\ntypedef struct _MY_TOKEN_SECURITY_ATTRIBUTE_FQBN_VALUE {\n    ULONG64 Version;\n    MY_UNICODE_STRING Name;\n} MY_TOKEN_SECURITY_ATTRIBUTE_FQBN_VALUE, *PMY_TOKEN_SECURITY_ATTRIBUTE_FQBN_VALUE;\n\ntypedef struct _MY_TOKEN_SECURITY_ATTRIBUTE_OCTET_STRING_VALUE {\n    PVOID pValue;\n    ULONG ValueLength;\n} MY_TOKEN_SECURITY_ATTRIBUTE_OCTET_STRING_VALUE, *PMY_TOKEN_SECURITY_ATTRIBUTE_OCTET_STRING_VALUE;\n\ntypedef struct _MY_TOKEN_SECURITY_ATTRIBUTE_V1 {\n    MY_UNICODE_STRING Name;\n    USHORT ValueType;\n    USHORT Reserved;\n    ULONG Flags;\n    ULONG ValueCount;\n    union {\n        PLONG64 pInt64;\n        PULONG64 pUint64;\n        PMY_UNICODE_STRING pString;\n        PMY_TOKEN_SECURITY_ATTRIBUTE_FQBN_VALUE pFqbn;\n        PMY_TOKEN_SECURITY_ATTRIBUTE_OCTET_STRING_VALUE pOctetString;\n    } Values;\n} MY_TOKEN_SECURITY_ATTRIBUTE_V1, *PMY_TOKEN_SECURITY_ATTRIBUTE_V1;\n\ntypedef struct _MY_TOKEN_SECURITY_ATTRIBUTES_INFORMATION {\n    USHORT Version;\n    USHORT Reserved;\n    ULONG AttributeCount;\n    union {\n        PMY_TOKEN_SECURITY_ATTRIBUTE_V1 pAttributeV1;\n    } Attribute;\n} MY_TOKEN_SECURITY_ATTRIBUTES_INFORMATION, *PMY_TOKEN_SECURITY_ATTRIBUTES_INFORMATION;\n\n#define MY_TOKEN_SECURITY_ATTRIBUTE_TYPE_INVALID 0x00\n#define MY_TOKEN_SECURITY_ATTRIBUTE_TYPE_INT64 0x01\n#define MY_TOKEN_SECURITY_ATTRIBUTE_TYPE_UINT64 0x02\n#define MY_TOKEN_SECURITY_ATTRIBUTE_TYPE_STRING 0x03\n#define MY_TOKEN_SECURITY_ATTRIBUTE_TYPE_FQBN 0x04\n#define MY_TOKEN_SECURITY_ATTRIBUTE_TYPE_SID 0x05\n#define MY_TOKEN_SECURITY_ATTRIBUTE_TYPE_BOOLEAN 0x06\n#define MY_TOKEN_SECURITY_ATTRIBUTE_TYPE_OCTET_STRING 0x10\n\n\u002F\u002F Function pointer for GetProcessMitigationPolicy\ntypedef BOOL (WINAPI *PFN_GetProcessMitigationPolicy)(\n    HANDLE hProcess,\n    int MitigationPolicy,\n    PVOID lpBuffer,\n    SIZE_T dwLength\n);\n\nBOOL CheckWin32kLockdown(HANDLE hProcess) {\n    HMODULE hKernel32 = GetModuleHandleA(\"kernel32.dll\");\n    if (!hKernel32) return FALSE;\n\n    PFN_GetProcessMitigationPolicy pfnGetProcessMitigationPolicy =\n        (PFN_GetProcessMitigationPolicy)GetProcAddress(hKernel32, \"GetProcessMitigationPolicy\");\n\n    if (!pfnGetProcessMitigationPolicy) return FALSE;\n\n    PROCESS_MITIGATION_SYSTEM_CALL_DISABLE_POLICY policy = {0};\n    if (pfnGetProcessMitigationPolicy(hProcess, ProcessSystemCallDisablePolicy,\n                                      &policy, sizeof(policy))) {\n        return policy.DisallowWin32kSystemCalls;\n    }\n\n    return FALSE;\n}\n\nBOOL GetTokenCapabilitiesDetailed(HANDLE hProcess, DWORD *pCapCount, PWSTR **ppCapNames) {\n    HANDLE hToken;\n    if (!OpenProcessToken(hProcess, TOKEN_QUERY, &hToken)) {\n        return FALSE;\n    }\n\n    DWORD dwSize = 0;\n    GetTokenInformation(hToken, TokenCapabilities, NULL, 0, &dwSize);\n\n    if (dwSize == 0) {\n        CloseHandle(hToken);\n        return FALSE;\n    }\n\n    PTOKEN_GROUPS pCapabilities = (PTOKEN_GROUPS)malloc(dwSize);\n    if (!pCapabilities) {\n        CloseHandle(hToken);\n        return FALSE;\n    }\n\n    BOOL result = FALSE;\n    if (GetTokenInformation(hToken, TokenCapabilities, pCapabilities, dwSize, &dwSize)) {\n        *pCapCount = pCapabilities->GroupCount;\n\n        if (ppCapNames && pCapabilities->GroupCount > 0) {\n            *ppCapNames = (PWSTR*)malloc(sizeof(PWSTR) * pCapabilities->GroupCount);\n            if (*ppCapNames) {\n                for (DWORD i = 0; i \u003C pCapabilities->GroupCount; i++) {\n                    ConvertSidToStringSidW(pCapabilities->Groups[i].Sid, &(*ppCapNames)[i]);\n                }\n            }\n        }\n        result = TRUE;\n    }\n\n    free(pCapabilities);\n    CloseHandle(hToken);\n    return result;\n}\n\nBOOL GetProcessIntegrityLevel(HANDLE hProcess, DWORD *pIntegrityLevel) {\n    HANDLE hToken;\n    if (!OpenProcessToken(hProcess, TOKEN_QUERY, &hToken)) {\n        return FALSE;\n    }\n\n    DWORD dwSize = 0;\n    GetTokenInformation(hToken, TokenIntegrityLevel, NULL, 0, &dwSize);\n\n    PTOKEN_MANDATORY_LABEL pTIL = (PTOKEN_MANDATORY_LABEL)malloc(dwSize);\n    if (!pTIL) {\n        CloseHandle(hToken);\n        return FALSE;\n    }\n\n    BOOL result = FALSE;\n    if (GetTokenInformation(hToken, TokenIntegrityLevel, pTIL, dwSize, &dwSize)) {\n        *pIntegrityLevel = *GetSidSubAuthority(pTIL->Label.Sid,\n            (DWORD)(UCHAR)(*GetSidSubAuthorityCount(pTIL->Label.Sid) - 1));\n        result = TRUE;\n    }\n\n    free(pTIL);\n    CloseHandle(hToken);\n    return result;\n}\n\nBOOL GetAppContainerSid(HANDLE hProcess, PWSTR *ppSidString) {\n    HANDLE hToken;\n    if (!OpenProcessToken(hProcess, TOKEN_QUERY, &hToken)) {\n        return FALSE;\n    }\n\n    DWORD dwSize = 0;\n    GetTokenInformation(hToken, TokenAppContainerSid, NULL, 0, &dwSize);\n\n    if (dwSize == 0) {\n        CloseHandle(hToken);\n        return FALSE;\n    }\n\n    PTOKEN_APPCONTAINER_INFORMATION pAppContainer = (PTOKEN_APPCONTAINER_INFORMATION)malloc(dwSize);\n    if (!pAppContainer) {\n        CloseHandle(hToken);\n        return FALSE;\n    }\n\n    BOOL result = FALSE;\n    if (GetTokenInformation(hToken, TokenAppContainerSid, pAppContainer, dwSize, &dwSize)) {\n        if (pAppContainer->TokenAppContainer) {\n            ConvertSidToStringSidW(pAppContainer->TokenAppContainer, ppSidString);\n            result = TRUE;\n        }\n    }\n\n    free(pAppContainer);\n    CloseHandle(hToken);\n    return result;\n}\n\nBOOL GetTokenCapabilities(HANDLE hProcess, DWORD *pCapCount) {\n    HANDLE hToken;\n    if (!OpenProcessToken(hProcess, TOKEN_QUERY, &hToken)) {\n        return FALSE;\n    }\n\n    DWORD dwSize = 0;\n    GetTokenInformation(hToken, TokenCapabilities, NULL, 0, &dwSize);\n\n    if (dwSize == 0) {\n        CloseHandle(hToken);\n        return FALSE;\n    }\n\n    PTOKEN_GROUPS pCapabilities = (PTOKEN_GROUPS)malloc(dwSize);\n    if (!pCapabilities) {\n        CloseHandle(hToken);\n        return FALSE;\n    }\n\n    BOOL result = FALSE;\n    if (GetTokenInformation(hToken, TokenCapabilities, pCapabilities, dwSize, &dwSize)) {\n        *pCapCount = pCapabilities->GroupCount;\n        result = TRUE;\n    }\n\n    free(pCapabilities);\n    CloseHandle(hToken);\n    return result;\n}\n\nBOOL IsProcessIsolatedWin32(HANDLE hProcess, BOOL verbose) {\n    HANDLE hToken;\n    if (!OpenProcessToken(hProcess, TOKEN_QUERY, &hToken)) {\n        return FALSE;\n    }\n\n    \u002F\u002F Check 1: Is this an AppContainer token?\n    DWORD isAppContainer = 0;\n    DWORD size = sizeof(isAppContainer);\n    if (!GetTokenInformation(hToken, TokenIsAppContainer, &isAppContainer, size, &size)) {\n        CloseHandle(hToken);\n        return FALSE;\n    }\n\n    if (!isAppContainer) {\n        CloseHandle(hToken);\n        return FALSE;\n    }\n\n    if (verbose) {\n        printf(\"  [+] AppContainer: YES\\n\");\n\n        \u002F\u002F Get integrity level\n        DWORD integrityLevel = 0;\n        if (GetProcessIntegrityLevel(hProcess, &integrityLevel)) {\n            printf(\"  [+] Integrity Level: 0x%X \", integrityLevel);\n            if (integrityLevel \u003C SECURITY_MANDATORY_LOW_RID) {\n                printf(\"(Untrusted)\\n\");\n            } else if (integrityLevel \u003C SECURITY_MANDATORY_MEDIUM_RID) {\n                printf(\"(Low)\\n\");\n            } else if (integrityLevel \u003C SECURITY_MANDATORY_HIGH_RID) {\n                printf(\"(Medium)\\n\");\n            } else {\n                printf(\"(High\u002FSystem)\\n\");\n            }\n        }\n\n        \u002F\u002F Get AppContainer SID\n        PWSTR sidString = NULL;\n        if (GetAppContainerSid(hProcess, &sidString)) {\n            printf(\"  [+] AppContainer SID: %S\\n\", sidString);\n            LocalFree(sidString);\n        }\n\n        \u002F\u002F Get capabilities count\n        DWORD capCount = 0;\n        if (GetTokenCapabilities(hProcess, &capCount)) {\n            printf(\"  [+] Capabilities: %d\\n\", capCount);\n        }\n    }\n\n    \u002F\u002F Check 2: Query security attributes for \"isolatedWin32\" markers\n    DWORD attrSize = 0;\n    GetTokenInformation(hToken, (TOKEN_INFORMATION_CLASS)73, NULL, 0, &attrSize); \u002F\u002F TokenSecurityAttributes = 73\n\n    BOOL hasIsolationAttrs = FALSE;\n    if (attrSize > 0) {\n        PVOID attrBuf = malloc(attrSize);\n        if (attrBuf && GetTokenInformation(hToken, (TOKEN_INFORMATION_CLASS)73,\n                                attrBuf, attrSize, &attrSize)) {\n            PMY_TOKEN_SECURITY_ATTRIBUTES_INFORMATION pAttrs =\n                (PMY_TOKEN_SECURITY_ATTRIBUTES_INFORMATION)attrBuf;\n\n            if (verbose && pAttrs->AttributeCount > 0) {\n                printf(\"  [+] Security Attributes:\\n\");\n            }\n\n            for (DWORD i = 0; i \u003C pAttrs->AttributeCount; i++) {\n                PMY_TOKEN_SECURITY_ATTRIBUTE_V1 attr = &pAttrs->Attribute.pAttributeV1[i];\n\n                if (attr->Name.Buffer) {\n                    if (verbose) {\n                        printf(\"      - %S\\n\", attr->Name.Buffer);\n                    }\n\n                    \u002F\u002F Check for Win32 App Isolation markers\n                    if (wcsstr(attr->Name.Buffer, L\"WIN:\u002F\u002FSYSAPPID\") ||\n                        wcsstr(attr->Name.Buffer, L\"WIN:\u002F\u002FPKG\") ||\n                        wcsstr(attr->Name.Buffer, L\"WIN:\u002F\u002FNOALLAPPPKG\")) {\n                        hasIsolationAttrs = TRUE;\n                    }\n                }\n            }\n        }\n        if (attrBuf) free(attrBuf);\n    }\n\n    CloseHandle(hToken);\n    return isAppContainer && hasIsolationAttrs;\n}\n\nBOOL GetPackageFamilyName(HANDLE hProcess, PWSTR *ppPackageName) {\n    typedef LONG (WINAPI *PFN_GetPackageFamilyName)(HANDLE, UINT32*, PWSTR);\n\n    HMODULE hKernel32 = GetModuleHandleA(\"kernel32.dll\");\n    if (!hKernel32) return FALSE;\n\n    PFN_GetPackageFamilyName pfnGetPackageFamilyName =\n        (PFN_GetPackageFamilyName)GetProcAddress(hKernel32, \"GetPackageFamilyName\");\n\n    if (!pfnGetPackageFamilyName) return FALSE;\n\n    UINT32 length = 0;\n    LONG result = pfnGetPackageFamilyName(hProcess, &length, NULL);\n\n    if (result != ERROR_INSUFFICIENT_BUFFER || length == 0) {\n        return FALSE;\n    }\n\n    *ppPackageName = (PWSTR)malloc(length * sizeof(WCHAR));\n    if (!*ppPackageName) return FALSE;\n\n    result = pfnGetPackageFamilyName(hProcess, &length, *ppPackageName);\n    if (result != ERROR_SUCCESS) {\n        free(*ppPackageName);\n        *ppPackageName = NULL;\n        return FALSE;\n    }\n\n    return TRUE;\n}\n\ntypedef struct _ISOLATION_INFO {\n    BOOL isAppContainer;\n    BOOL hasIsolationAttrs;\n    BOOL hasWin32kLockdown;\n    BOOL hasPackageIdentity;\n    DWORD integrityLevel;\n    DWORD capabilityCount;\n    PWSTR appContainerSid;\n    PWSTR packageFamilyName;\n    PWSTR *capabilityNames;\n    WCHAR **securityAttributes;\n    DWORD securityAttributeCount;\n} ISOLATION_INFO, *PISOLATION_INFO;\n\nvoid FreeIsolationInfo(PISOLATION_INFO pInfo) {\n    if (!pInfo) return;\n\n    if (pInfo->appContainerSid) {\n        LocalFree(pInfo->appContainerSid);\n    }\n\n    if (pInfo->packageFamilyName) {\n        free(pInfo->packageFamilyName);\n    }\n\n    if (pInfo->capabilityNames) {\n        for (DWORD i = 0; i \u003C pInfo->capabilityCount; i++) {\n            if (pInfo->capabilityNames[i]) {\n                LocalFree(pInfo->capabilityNames[i]);\n            }\n        }\n        free(pInfo->capabilityNames);\n    }\n\n    if (pInfo->securityAttributes) {\n        for (DWORD i = 0; i \u003C pInfo->securityAttributeCount; i++) {\n            if (pInfo->securityAttributes[i]) {\n                free(pInfo->securityAttributes[i]);\n            }\n        }\n        free(pInfo->securityAttributes);\n    }\n}\n\nBOOL AnalyzeProcessIsolation(HANDLE hProcess, PISOLATION_INFO pInfo) {\n    ZeroMemory(pInfo, sizeof(ISOLATION_INFO));\n\n    HANDLE hToken;\n    if (!OpenProcessToken(hProcess, TOKEN_QUERY, &hToken)) {\n        return FALSE;\n    }\n\n    \u002F\u002F Check 1: Is this an AppContainer token?\n    DWORD isAppContainer = 0;\n    DWORD size = sizeof(isAppContainer);\n    if (GetTokenInformation(hToken, TokenIsAppContainer, &isAppContainer, size, &size)) {\n        pInfo->isAppContainer = isAppContainer;\n    }\n\n    if (!pInfo->isAppContainer) {\n        CloseHandle(hToken);\n        return FALSE;\n    }\n\n    \u002F\u002F Check 2: Get integrity level\n    GetProcessIntegrityLevel(hProcess, &pInfo->integrityLevel);\n\n    \u002F\u002F Check 3: Get AppContainer SID\n    GetAppContainerSid(hProcess, &pInfo->appContainerSid);\n\n    \u002F\u002F Check 4: Get capabilities\n    GetTokenCapabilitiesDetailed(hProcess, &pInfo->capabilityCount, &pInfo->capabilityNames);\n\n    \u002F\u002F Check 5: Check Win32k lockdown\n    pInfo->hasWin32kLockdown = CheckWin32kLockdown(hProcess);\n\n    \u002F\u002F Check 6: Get package family name\n    pInfo->hasPackageIdentity = GetPackageFamilyName(hProcess, &pInfo->packageFamilyName);\n\n    \u002F\u002F Check 7: Query security attributes for \"isolatedWin32\" markers\n    DWORD attrSize = 0;\n    GetTokenInformation(hToken, (TOKEN_INFORMATION_CLASS)73, NULL, 0, &attrSize);\n\n    if (attrSize > 0) {\n        PVOID attrBuf = malloc(attrSize);\n        if (attrBuf && GetTokenInformation(hToken, (TOKEN_INFORMATION_CLASS)73, attrBuf, attrSize, &attrSize)) {\n            PMY_TOKEN_SECURITY_ATTRIBUTES_INFORMATION pAttrs = (PMY_TOKEN_SECURITY_ATTRIBUTES_INFORMATION)attrBuf;\n\n            if (pAttrs->AttributeCount > 0) {\n                pInfo->securityAttributes = (WCHAR**)malloc(sizeof(WCHAR*) * pAttrs->AttributeCount);\n                pInfo->securityAttributeCount = pAttrs->AttributeCount;\n\n                for (DWORD i = 0; i \u003C pAttrs->AttributeCount; i++) {\n                    PMY_TOKEN_SECURITY_ATTRIBUTE_V1 attr = &pAttrs->Attribute.pAttributeV1[i];\n\n                    if (attr->Name.Buffer && attr->Name.Length > 0) {\n                        size_t bufLen = attr->Name.Length + sizeof(WCHAR);\n                        pInfo->securityAttributes[i] = (WCHAR*)malloc(bufLen);\n                        if (pInfo->securityAttributes[i]) {\n                            wcsncpy_s(pInfo->securityAttributes[i], bufLen \u002F sizeof(WCHAR),\n                                     attr->Name.Buffer, attr->Name.Length \u002F sizeof(WCHAR));\n                        }\n\n                        \u002F\u002F Check for Win32 App Isolation markers\n                        if (wcsstr(attr->Name.Buffer, L\"WIN:\u002F\u002FSYSAPPID\") ||\n                            wcsstr(attr->Name.Buffer, L\"WIN:\u002F\u002FPKG\") ||\n                            wcsstr(attr->Name.Buffer, L\"WIN:\u002F\u002FNOALLAPPPKG\")) {\n                            pInfo->hasIsolationAttrs = TRUE;\n                        }\n                    } else {\n                        pInfo->securityAttributes[i] = NULL;\n                    }\n                }\n            }\n        }\n        if (attrBuf) free(attrBuf);\n    }\n\n    CloseHandle(hToken);\n    return TRUE;\n}\n\nvoid PrintIsolationInfo(const char *processName, DWORD pid, PISOLATION_INFO pInfo) {\n    printf(\"\\n|================================================================|\\n\");\n    printf(\"| Process: %-50s |\\n\", processName);\n    printf(\"| PID: %-56d |\\n\", pid);\n    printf(\"|=================================================================|\\n\");\n\n    printf(\"| AppContainer:        %-37s |\\n\", pInfo->isAppContainer ? \"YES\" : \"NO\");\n    printf(\"| Isolation Attributes: %-36s |\\n\", pInfo->hasIsolationAttrs ? \"YES\" : \"NO\");\n    printf(\"| Win32k Lockdown:     %-37s |\\n\", pInfo->hasWin32kLockdown ? \"YES\" : \"NO\");\n    printf(\"| Package Identity:    %-37s |\\n\", pInfo->hasPackageIdentity ? \"YES\" : \"NO\");\n\n    printf(\"| Integrity Level:     0x%04X \", pInfo->integrityLevel);\n    if (pInfo->integrityLevel \u003C SECURITY_MANDATORY_LOW_RID) {\n        printf(\"%-28s |\\n\", \"(Untrusted)\");\n    } else if (pInfo->integrityLevel \u003C SECURITY_MANDATORY_MEDIUM_RID) {\n        printf(\"%-28s |\\n\", \"(Low)\");\n    } else if (pInfo->integrityLevel \u003C SECURITY_MANDATORY_HIGH_RID) {\n        printf(\"%-28s |\\n\", \"(Medium)\");\n    } else {\n        printf(\"%-28s |\\n\", \"(High\u002FSystem)\");\n    }\n\n    printf(\"| Capabilities:        %-37d |\\n\", pInfo->capabilityCount);\n\n    if (pInfo->appContainerSid) {\n        printf(\"|===============================================================|\\n\");\n        printf(\"| AppContainer SID:                                             |\\n\");\n        wprintf(L\"|   %s\", pInfo->appContainerSid);\n        int sidLen = wcslen(pInfo->appContainerSid);\n        for (int i = sidLen + 4; i \u003C 63; i++) printf(\" \");\n        printf(\"|\\n\");\n    }\n\n    if (pInfo->packageFamilyName) {\n        printf(\"|===============================================================|\\n\");\n        printf(\"| Package Family Name:                                          |\\n\");\n        wprintf(L\"|   %s\", pInfo->packageFamilyName);\n        int pkgLen = wcslen(pInfo->packageFamilyName);\n        for (int i = pkgLen + 4; i \u003C 63; i++) printf(\" \");\n        printf(\"|\\n\");\n    }\n\n    if (pInfo->capabilityCount > 0 && pInfo->capabilityNames) {\n        printf(\"|===============================================================|\\n\");\n        printf(\"| Capabilities (first 5):                                       |\\n\");\n        for (DWORD i = 0; i \u003C pInfo->capabilityCount && i \u003C 5; i++) {\n            if (pInfo->capabilityNames[i]) {\n                wprintf(L\"|   %d. %s\", i+1, pInfo->capabilityNames[i]);\n                int capLen = wcslen(pInfo->capabilityNames[i]);\n                for (int j = capLen + 6; j \u003C 63; j++) printf(\" \");\n                printf(\"|\\n\");\n            }\n        }\n        if (pInfo->capabilityCount > 5) {\n            printf(\"|   ... and %d more                                            \",\n                   pInfo->capabilityCount - 5);\n            int numLen = (pInfo->capabilityCount - 5 >= 10) ? 2 : 1;\n            for (int i = numLen + 14; i \u003C 59; i++) printf(\" \");\n            printf(\"|\\n\");\n        }\n    }\n\n    if (pInfo->securityAttributeCount > 0 && pInfo->securityAttributes) {\n        printf(\"|===============================================================|\\n\");\n        printf(\"| Security Attributes (first 8):                                |\\n\");\n        for (DWORD i = 0; i \u003C pInfo->securityAttributeCount && i \u003C 8; i++) {\n            if (pInfo->securityAttributes[i]) {\n                wprintf(L\"|   • %s\", pInfo->securityAttributes[i]);\n                int attrLen = wcslen(pInfo->securityAttributes[i]);\n                for (int j = attrLen + 5; j \u003C 63; j++) printf(\" \");\n                printf(\"|\\n\");\n            }\n        }\n        if (pInfo->securityAttributeCount > 8) {\n            printf(\"|   ... and %d more                                            \",\n                   pInfo->securityAttributeCount - 8);\n            int numLen = (pInfo->securityAttributeCount - 8 >= 10) ? 2 : 1;\n            for (int i = numLen + 14; i \u003C 59; i++) printf(\" \");\n            printf(\"|\\n\");\n        }\n    }\n\n    printf(\"|===============================================================|\\n\");\n\n    \u002F\u002F Determine isolation level\n    if (pInfo->hasIsolationAttrs && pInfo->hasWin32kLockdown) {\n        printf(\"\\n>>> STRONG ISOLATION: Win32 App Isolation with Win32k Lockdown \u003C\u003C\u003C\\n\");\n    } else if (pInfo->hasIsolationAttrs) {\n        printf(\"\\n>>> MODERATE ISOLATION: Win32 App Isolation \u003C\u003C\u003C\\n\");\n    } else if (pInfo->isAppContainer) {\n        printf(\"\\n>>> BASIC ISOLATION: AppContainer (UWP\u002FMSIX) \u003C\u003C\u003C\\n\");\n    }\n}\n\nvoid ScanForIsolatedAppsEnhanced(BOOL showAll) {\n    printf(\"===============================================================\\n\");\n    printf(\"  Win32 App Isolation - Comprehensive Process Scan\\n\");\n    printf(\"===============================================================\\n\");\n\n    HANDLE hSnapshot = CreateToolhelp32Snapshot(TH32CS_SNAPPROCESS, 0);\n    if (hSnapshot == INVALID_HANDLE_VALUE) {\n        printf(\"[-] Failed to create process snapshot (Error: %d)\\n\", GetLastError());\n        return;\n    }\n\n    PROCESSENTRY32 pe = { sizeof(pe) };\n    int isolated_count = 0;\n    int appcontainer_count = 0;\n    int strong_isolation_count = 0;\n\n    if (Process32First(hSnapshot, &pe)) {\n        do {\n            HANDLE hProc = OpenProcess(PROCESS_QUERY_INFORMATION, FALSE, pe.th32ProcessID);\n            if (!hProc) continue;\n\n            ISOLATION_INFO info;\n            if (AnalyzeProcessIsolation(hProc, &info)) {\n                appcontainer_count++;\n\n                if (info.hasIsolationAttrs) {\n                    isolated_count++;\n                    if (info.hasWin32kLockdown) {\n                        strong_isolation_count++;\n                    }\n                    PrintIsolationInfo(pe.szExeFile, pe.th32ProcessID, &info);\n                } else if (showAll) {\n                    \u002F\u002F Show all AppContainer processes even if not isolated\n                    PrintIsolationInfo(pe.szExeFile, pe.th32ProcessID, &info);\n                }\n\n                FreeIsolationInfo(&info);\n            }\n\n            CloseHandle(hProc);\n        } while (Process32Next(hSnapshot, &pe));\n    }\n\n    CloseHandle(hSnapshot);\n\n    printf(\"\\n==============================================================\\n\");\n    printf(\"  Scan Summary\\n\");\n    printf(\"==============================================================\\n\");\n    printf(\"  Total AppContainer processes:     %d\\n\", appcontainer_count);\n    printf(\"  Isolated Win32 processes:         %d\\n\", isolated_count);\n    printf(\"  Strong isolation (Win32k locked): %d\\n\", strong_isolation_count);\n    printf(\"==============================================================\\n\");\n\n    if (isolated_count == 0 && appcontainer_count > 0) {\n        printf(\"\\n[i] Note: Found %d AppContainer processes but none with Win32 App\\n\", appcontainer_count);\n        printf(\"    Isolation markers. This is expected on Windows \u003C 11 24H2 or if\\n\");\n        printf(\"    no isolated Win32 apps are currently running.\\n\");\n        printf(\"\\n[i] Run with '-v' flag to see details of all AppContainer processes.\\n\");\n    }\n}\n\nvoid ScanForIsolatedApps() {\n    printf(\"=== Win32 App Isolation - Process Scan ===\\n\\n\");\n\n    HANDLE hSnapshot = CreateToolhelp32Snapshot(TH32CS_SNAPPROCESS, 0);\n    if (hSnapshot == INVALID_HANDLE_VALUE) {\n        printf(\"[-] Failed to create process snapshot\\n\");\n        return;\n    }\n\n    PROCESSENTRY32 pe = { sizeof(pe) };\n    int isolated_count = 0;\n    int appcontainer_count = 0;\n\n    if (Process32First(hSnapshot, &pe)) {\n        do {\n            HANDLE hProc = OpenProcess(PROCESS_QUERY_INFORMATION, FALSE, pe.th32ProcessID);\n            if (!hProc) continue;\n\n            HANDLE hToken;\n            if (OpenProcessToken(hProc, TOKEN_QUERY, &hToken)) {\n                DWORD isAppContainer = 0;\n                DWORD size = sizeof(isAppContainer);\n\n                if (GetTokenInformation(hToken, TokenIsAppContainer, &isAppContainer, size, &size)) {\n                    if (isAppContainer) {\n                        appcontainer_count++;\n                        printf(\"\\n[APPCONTAINER] %s (PID %d)\\n\", pe.szExeFile, pe.th32ProcessID);\n\n                        if (IsProcessIsolatedWin32(hProc, TRUE)) {\n                            printf(\"  >>> ISOLATED WIN32 APP \u003C\u003C\u003C\\n\");\n                            isolated_count++;\n                        }\n                    }\n                }\n                CloseHandle(hToken);\n            }\n\n            CloseHandle(hProc);\n        } while (Process32Next(hSnapshot, &pe));\n    }\n\n    CloseHandle(hSnapshot);\n\n    printf(\"\\n[*] Found %d AppContainer processes\\n\", appcontainer_count);\n    printf(\"[*] Found %d isolated Win32 processes\\n\", isolated_count);\n}\n\nint main(int argc, char *argv[]) {\n    BOOL verbose = FALSE;\n\n    \u002F\u002F Parse command line arguments\n    for (int i = 1; i \u003C argc; i++) {\n        if (strcmp(argv[i], \"-v\") == 0 || strcmp(argv[i], \"--verbose\") == 0) {\n            verbose = TRUE;\n        } else if (strcmp(argv[i], \"-h\") == 0 || strcmp(argv[i], \"--help\") == 0) {\n            printf(\"Usage: %s [OPTIONS]\\n\\n\", argv[0]);\n            printf(\"Options:\\n\");\n            printf(\"  -v, --verbose    Show all AppContainer processes (not just isolated)\\n\");\n            printf(\"  -h, --help       Show this help message\\n\\n\");\n            printf(\"Description:\\n\");\n            printf(\"  Scans for Win32 App Isolation processes on Windows 11 24H2+.\\n\");\n            printf(\"  By default, only shows processes with isolation markers.\\n\");\n            printf(\"  Use -v to see all AppContainer processes.\\n\\n\");\n            return 0;\n        }\n    }\n\n    printf(\"\\n\");\n    printf(\"|===============================================================|\\n\");\n    printf(\"|                                                               |\\n\");\n    printf(\"|         Win32 App Isolation Detection & Analysis              |\\n\");\n    printf(\"|                                                               |\\n\");\n    printf(\"|===============================================================|\\n\");\n    printf(\"\\n\");\n\n    ScanForIsolatedAppsEnhanced(verbose);\n    return 0;\n}\n```\n\n## Week 7 Summary\n\nConnection to Week 8 (Mitigation Bypass):\\*\\*\nWeek 8 dives deeper into specific bypass techniques:\n\n- ASLR info leak methods\n- DEP bypass via ROP\n- CFG\u002FCET evasion\n- Stack cookie bypass\n\n**Connection to Week 10 (EDR Evasion):**\nWeek 10 covers operational evasion:\n\n- Usermode hook bypass\n- ETW blinding\n- Kernel callback manipulation\n- Complete EDR bypass chains\n",{"name":5,"domain":22,"description":7},"main","a91f1293287ffa9f4f1b8f486cd6e835a1568c84","skills\u002Foffensive-windows-boundaries","https:\u002F\u002Fgithub.com\u002FDCx7C5\u002Fai-marketplace","https:\u002F\u002Fgithub.com\u002FDCx7C5","#Python","2026-09-01 11:21:00",{"source":8,"skillName":5,"commands":36,"prompt":46,"zipAvailable":47},[37,40,43],{"tool":38,"command":39},"npx","npx skills add DCx7C5\u002Fai-marketplace --skill offensive-windows-boundaries",{"tool":41,"command":42},"bunx","bunx skills add DCx7C5\u002Fai-marketplace --skill offensive-windows-boundaries",{"tool":44,"command":45},"pnpm","pnpm dlx skills add DCx7C5\u002Fai-marketplace --skill offensive-windows-boundaries","安装技能，技能地址：https:\u002F\u002Fgithub.com\u002FDCx7C5\u002Fai-marketplace\u002Fblob\u002Fmain\u002Fskills\u002Foffensive-windows-boundaries\u002FSKILL.md",true,[49],{"path":50,"resourceType":51,"resourceTypeDesc":52,"sizeBytes":53,"sourceHtmlUrl":54},"index.json","REFERENCE","参考文档",484,"https:\u002F\u002Fgithub.com\u002FDCx7C5\u002Fai-marketplace\u002Fblob\u002Fmain\u002Fskills\u002Foffensive-windows-boundaries\u002Findex.json",[56,81,104,126,147,163],{"skillNo":57,"name":58,"nameZh":6,"description":59,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":60,"categories":61,"keywords":62,"publishedAt":23},"01M71HAPZ01KQ30RKTB0FFSQ05","services-wmi-persistence-detect","Detect WMI event subscription persistence by enumerating ActiveScriptEventConsumer, CommandLineEventConsumer, and permanent subscriptions in the WMI repository.","https:\u002F\u002Fgithub.com\u002FDCx7C5\u002Fai-marketplace\u002Fblob\u002Fmain\u002Fskills\u002Fwindows\u002Fservices\u002Fwmi\u002Fpersistence\u002Fdetect\u002FSKILL.md",[],[63,64,65,66,67,68,69,70,71,72,73,74,75,76,77,78,79,22,80],"services","detect","services wmi persistence detect","wmi","persistence","de","cm","process","activescript","event","subscriptions","commandline-consumer","repository","subscription","event-subscription","t1546.003","forensics","process-forensics",{"skillNo":82,"name":83,"nameZh":6,"description":84,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":85,"categories":86,"keywords":87,"publishedAt":23},"01M71HAK6JTTTS229T17WJMMCG","services-wmi-exec-exploit","Perform lateral movement across Windows networks using WMI-based remote execution techniques including Impacket wmiexec.py, CrackMapExec, and native WMI commands for stealthy post-exploitation during red team engagements.","https:\u002F\u002Fgithub.com\u002FDCx7C5\u002Fai-marketplace\u002Fblob\u002Fmain\u002Fskills\u002Fwindows\u002Fservices\u002Fwmi\u002Fexec\u002Fexploit\u002FSKILL.md",[],[88,63,89,66,90,91,92,22,93,94,95,96,97,98,68,99,100,101,102,103],"exploit","services wmi exec exploit","exec","remote","traffic","Bash","analysis","team","across","crackmapexec","native","command","lateral movement","read","lateral-movement","Impacket",{"skillNo":105,"name":106,"nameZh":6,"description":107,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":108,"categories":109,"keywords":110,"publishedAt":23},"01M71HAG6MHKNQV8KDZKMT4886","registry-artifact-extract","Extract and analyze Windows Registry hives to uncover user activity, installed software, autostart entries, and evidence of system compromise.","https:\u002F\u002Fgithub.com\u002FDCx7C5\u002Fai-marketplace\u002Fblob\u002Fmain\u002Fskills\u002Fwindows\u002Fregistry\u002Fartifact\u002Fextract\u002FSKILL.md",[],[111,112,113,114,115,116,22,93,117,94,118,119,68,101,120,121,122,123,124,125],"artifact","registry","registry artifact extract","extract","evidence-collection","artifact-analysis","collection","analyze","uncover","software","activity","digital-forensics","windows-registry","regripper","sonnet",{"skillNo":127,"name":128,"nameZh":6,"description":129,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":130,"categories":131,"keywords":132,"publishedAt":23},"01M71HACR4A8XTWTTSXK4124AA","processes-token-impersonate-detect","Detect Windows token impersonation and privilege abuse including SeImpersonatePrivilege exploitation via Potato attacks and token stealing techniques.","https:\u002F\u002Fgithub.com\u002FDCx7C5\u002Fai-marketplace\u002Fblob\u002Fmain\u002Fskills\u002Fwindows\u002Fprocesses\u002Ftoken\u002Fimpersonate\u002Fdetect\u002FSKILL.md",[],[64,133,134,135,136,19,137,69,138,22,80,139,140,141,142,143,144,145,146,68],"processes token impersonate detect","token","processes","attacks","escalation","techniques","privilege-escalation","seimpersonate","token-impersonation","printspoofer","exploitation","potato","impersonation","via",{"skillNo":148,"name":149,"nameZh":6,"description":150,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":151,"categories":152,"keywords":153,"publishedAt":23},"01M71HAABSB4Z6QFSXEG00R4RK","processes-thread-injection-detect","Detect Windows thread injection techniques including CreateRemoteThread, QueueUserAPC, NtCreateThreadEx, and thread hijacking via process memory analysis.","https:\u002F\u002Fgithub.com\u002FDCx7C5\u002Fai-marketplace\u002Fblob\u002Fmain\u002Fskills\u002Fwindows\u002Fprocesses\u002Fthread\u002Finjection\u002Fdetect\u002FSKILL.md",[],[154,155,64,156,135,19,157,69,158,138,22,80,94,159,160,161,162,146,68,70],"thread","processes thread injection detect","injection","memory","process-injection","api","apc-injection","thread-injection","nt-api",{"skillNo":164,"name":165,"nameZh":6,"description":166,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":167,"categories":168,"keywords":169,"publishedAt":23},"01M71HA7H311V5G14WMX58HQSS","processes-hollow-technique-detect","Detect process hollowing (RunPE) by identifying processes with mismatched image paths between PEB and VAD tree, or unmapped PE headers in memory.","https:\u002F\u002Fgithub.com\u002FDCx7C5\u002Fai-marketplace\u002Fblob\u002Fmain\u002Fskills\u002Fwindows\u002Fprocesses\u002Fhollow\u002Ftechnique\u002Fdetect\u002FSKILL.md",[],[170,64,135,171,157,69,172,173,22,80,174,175,176,177,178,179,68,70,180,181],"processes hollow technique detect","tree","memory-forensics","process-hollow","peb","runpe","image","pe-header","in memory","with","mismatched","headers"]