Drew-Alleman/dmenum

GitHub: Drew-Alleman/dmenum

dmenum 是一个利用 DM token 通过 DMServer 协议枚举并解码企业 Chrome 浏览器策略的跨平台工具与库,将原始策略数据转换为人类可读的配置清单。

Stars: 0 | Forks: 0

# dmenum 一个跨平台的工具/库,用于从 Device Management (DM) token 中枚举企业 Chrome 浏览器策略。它使用 Chromium 真实的 DMServer 协议进行通信,解码返回的 policy blob,并将每条策略与其人类可读的 Chromium 元数据(标题、描述以及每个枚举值的含义)结合在一起。**可以在[这里](https://drewalleman.xyz/red-teaming/2026/07/15/dumping-enterprise-chrome-policies-using-device-management-tokens-from-verbose-logs)找到一篇博客文章,展示了如何从详细的 chrome 日志中提取该 token。** ``` google/chrome/user — 22 policies set (22 enforced, 0 recommended) ---------------------------------------------------------------------- Incognito mode availability IncognitoModeAvailability = 1 → Incognito mode disabled Specifies whether the user may open pages in Incognito mode in Google Chrome… ``` ## Windows 构建说明 **前置条件** - **Visual Studio 2022 或更高版本**,包含 **“使用 C++ 的桌面开发”** 工作负载。这一个工作负载就为你提供了 MSVC 编译器 (`cl.exe`)、内置的 CMake 以及 Ninja —— 你不需要单独安装 CMake。 - **Git**(用于克隆 vcpkg)。 - **vcpkg**(在下方安装)。 ### 下文使用的占位符 请在通篇内容中将这些占位符替换为你自己的路径: | 占位符 | 含义 | 示例 | |-----------------|--------------------------------------|---------| | `` | 你克隆/安装 vcpkg 的位置 | `C:\Users\drew\vcpkg`, `C:\dev\vcpkg`, `D:\tools\vcpkg` | | `` | 此代码库所在的位置 | `C:\Users\drew\dmenum` | vcpkg 可以位于**任何地方**,该项目也可以位于**任何地方** —— 它们不需要彼此靠近。将它们联系在一起的唯一因素是你在步骤 3 中传递给 CMake 的 toolchain 文件路径。 ### 1. 安装依赖项 `dmenum` 需要 **Protobuf**(用于使用 DM 线路协议进行通信)和 **OpenSSL**(以便 cpp-httplib 可以与真实的 DMServer 进行 HTTPS 通信): ``` \vcpkg install protobuf openssl ``` 对于静态构建,请使用: ``` vcpkg install protobuf:x64-windows-static openssl:x64-windows-static ``` ### 3. 配置构建 在项目文件夹中,将 CMake 指向 vcpkg 的 toolchain 文件。**这是将你的构建与你的 vcpkg 连接起来的一行**,这也是自定义安装路径发挥作用的地方: ``` cd cmake -S . -B build -DCMAKE_TOOLCHAIN_FILE=/scripts/buildsystems/vcpkg.cmake -DDMENUM_BUILD_TESTS=OFF ``` 具体来说,如果 vcpkg 位于 `C:\Users\drew\vcpkg` 下: ``` cd C:\Users\drew\dmenum cmake -S . -B build -DCMAKE_TOOLCHAIN_FILE=C:/Users/drew/vcpkg/scripts/buildsystems/vcpkg.cmake -DDMENUM_BUILD_TESTS=OFF ``` 关于 toolchain 路径的说明: - **使用正斜杠**(`C:/Users/...`)或双反斜杠 —— 单个反斜杠可能会被当作转义字符吃掉。 - **不同的盘符**不需要任何特殊处理:`D:/tools/vcpkg/scripts/buildsystems/vcpkg.cmake`。 - 要强制使用特定的 triplet(例如静态构建),请添加 `-DVCPKG_TARGET_TRIPLET=x64-windows`。 - 如果你的检出版本没有 `tests/` 目录,添加 `-DDMENUM_BUILD_TESTS=OFF` 可以避免配置失败。如果你有该目录,则可以去掉它。 成功的配置将以以下内容结束: ``` -- dmenum: TLS ENABLED (OpenSSL found) -- can reach the public https DMServer -- Configuring done -- Generating done ``` 如果你看到黄色的 **`TLS DISABLED`** 警告,请安装 OpenSSL,删除 `build` 文件夹,然后重新配置。 ### 4. 构建 配置仅仅是*写入*项目文件 —— 你仍然需要进行编译。Visual Studio 生成器是多配置的,因此必须使用 `--config`: ``` cmake --build build --config Debug ``` vcpkg 会自动将运行时 DLL(protobuf, abseil, zlib, OpenSSL)复制到 `.exe` 旁边,因此它可以实际运行。生成的二进制文件位于 `build\examples\Debug\enumerate_policies.exe`。 ### 5. 运行 ``` .\build\examples\Debug\enumerate_policies.exe [policy_type] ``` 在不带参数的情况下运行它即可查看用法说明。`policy_type` **必须与你的 token 类型相匹配**: | 你的 token 类型 | 使用此 `policy_type` | |--------------------------------------------------------|------------------------| | 托管配置文件 (`CHROME_MANAGED_GAIA_PROFILE_TOKEN`) | `google/chrome/user` | | CBCM 浏览器设备 (`CHROME_BROWSER_DEVICE_TOKEN`) | `google/chrome/machine-level-user` (默认) | | ChromeOS 用户 | `google/chromeos/user` | 如果不匹配,服务器将返回一个明确的 **HTTP 401** 状态,并指出期望的 token 类型。 ## Linux 构建说明 **安装依赖项**(Debian / Ubuntu): ``` sudo apt install cmake g++ protobuf-compiler libprotobuf-dev libssl-dev ``` 在 macOS 上,等效的命令是 `brew install cmake protobuf openssl`。 使用便捷的 Makefile 进行**构建**: ``` cmake -S . -B build-linux -DDMENUM_BUILD_TESTS=OFF cmake --build build-linux -j ``` …或者直接驱动 CMake: ``` cmake -S . -B build -DDMENUM_BUILD_TESTS=OFF cmake --build build -j ``` cpp-httplib 会通过 CMake 的 `FetchContent` 自动获取;Protobuf 和 OpenSSL 来自你的系统软件包。如果你的检出版本没有 `tests/` 目录,请添加 `-DDMENUM_BUILD_TESTS=OFF`(如果省略它,则会构建并运行测试)。 **运行** —— 对于单配置生成器,没有 `Debug/` 子文件夹: ``` ./build/examples/enumerate_policies [policy_type] ``` ## 示例输出 ``` $ enumerate_policies google/chrome/user google/chrome/user — 22 policies set (22 enforced, 0 recommended) ---------------------------------------------------------------------- Browser sign in settings BrowserSignin = 2 → Force users to sign-in to use the browser This policy controls the sign-in behavior of the browser. It allows you to… Enable deleting browser and download history AllowDeletingBrowserHistory = false → Disable deleting browser and download history Setting the policy to Enabled or leaving it unset means browser history and… Incognito mode availability IncognitoModeAvailability = 1 → Incognito mode disabled Specifies whether the user may open pages in Incognito mode in Google Chrome… Restrict which Google accounts are allowed to be set as browser primary accounts RestrictSigninToPattern = *example.com Contains a regular expression which is used to determine which Google accounts… Set a custom enterprise label for a managed profile EnterpriseCustomLabel = Ev1l C0rp!zZzZzzzZ This policy controls a custom label used to identify managed profiles… … (22 policies total) ``` 每个条目都显示了策略的人类可读标题、其原始名称和配置的值、枚举值的解码含义(在 `→` 之后),以及截断的描述 —— 所有这些都从内置的 Chromium 元数据快照中提取。
标签:Bash脚本, C++, Chromium, 企业策略枚举, 安全测试工具, 数据擦除, 无线安全