MSVCRT:ROP - CN 修改ROP检测标志

本文深入解析了一个复杂的函数内部结构,通过一系列特定的指令序列展示了函数的工作原理。通过对不同指令的组合使用,揭示了函数如何实现其功能,并重点介绍了关键指令的作用。



 function getddd()
	{
	var kkkkk = unescape("\u0433\u77bf");
	kkkkk +=unescape("\u5ed5\u77be"); //xchg eax,esp retn
	
	kkkkk += unescape("\uf519\u77be")////pop ecx,retn
	kkkkk += unescape("\u9ef8\u1009")////10099EF8 check flag 1
	kkkkk += unescape("\uc047\u77be")//77BEC047 //MOV DWORD PTR DS:[ECX],EAX  MOV EAX,ESI  POP EDI  POP ESI POP EBP RETN


	kkkkk += unescape("\u9f92\u77c0")//retn
	kkkkk += unescape("\u9f92\u77c0")//retn
	kkkkk += unescape("\u9f92\u77c0")//retn
	kkkkk += unescape("\u9f92\u77c0")//retn
	
	kkkkk += unescape("\uf519\u77be")////pop ecx,retn
	kkkkk += unescape("\u9ed0\u1009")////10099Ed0 check flag 2
	kkkkk += unescape("\u1d16\u77bf")//pop eax,retn
	kkkkk += unescape("\u1d16\u77be")//fill
	kkkkk += unescape("\uc047\u77be")//77BEC047 //MOV DWORD PTR DS:[ECX],EAX  MOV EAX,ESI  POP EDI  POP ESI POP EBP RETN

	kkkkk += unescape("\u9f92\u77c0")//retn
	kkkkk += unescape("\u9f92\u77c0")//retn
	kkkkk += unescape("\u9f92\u77c0")//retn
	kkkkk += unescape("\u9f92\u77c0")//retn
	kkkkk += unescape("\u9f92\u77c0")//retn
	kkkkk += unescape("\u9f92\u77c0")//retn
	kkkkk += unescape("\u9f92\u77c0")//retn
	kkkkk += unescape("\u9f92\u77c0")//retn
	kkkkk += unescape("\u9f92\u77c0")//retn
	kkkkk += unescape("\u9f92\u77c0")//retn
	kkkkk += unescape("\u9f92\u77c0")//retn
	kkkkk += unescape("\u9f92\u77c0")//retn
	kkkkk += unescape("\ubdf4\u77be")//pop ebp retn
	kkkkk += unescape("\ubdf4\u77be")//pop ebp retn
	kkkkk += unescape("\u3436\u77c2")//pop ebx retn
	kkkkk += unescape("\u9f92\u77c0")//retn
	kkkkk += unescape("\ucbf9\u77c1")//pop edx retn
	kkkkk += unescape("\u9f92\u77c0")
	kkkkk += unescape("\ub1ad\u77c0")
	kkkkk += unescape("\ubdf4\u77be")
	kkkkk += unescape("\u7ae8\u77c1")
	kkkkk += unescape("\u9f92\u77c0")
	kkkkk += unescape("\u80c1\u77c0")
	kkkkk += unescape("\u9f92\u77c0")
	kkkkk += unescape("\u67f0\u77c2")
	kkkkk += unescape("\u9f92\u77c0")
	kkkkk += unescape("\u9f92\u77c0")
	kkkkk += unescape("\u9f92\u77c0")
	kkkkk += unescape("\u9f92\u77c0")
	kkkkk += unescape("\u9f92\u77c0")
	kkkkk += unescape("\u9f92\u77c0")
	kkkkk += unescape("\u9f92\u77c0")
	kkkkk += unescape("\u9f92\u77c0")
	kkkkk += unescape("\u9f92\u77c0")
	kkkkk += unescape("\u9f92\u77c0")
	kkkkk += unescape("\u9f92\u77c0")
	kkkkk += unescape("\u9f92\u77c0")
	kkkkk += unescape("\u9f92\u77c0")
	kkkkk += unescape("\u9f92\u77c0")
	kkkkk += unescape("\u9f92\u77c0")
	kkkkk += unescape("\u9f92\u77c0")
	kkkkk += unescape("\u9f92\u77c0")
	kkkkk += unescape("\ubdf4\u77be")
	kkkkk += unescape("\ubdf4\u77be")
	kkkkk += unescape("\u3436\u77c2")
	kkkkk += unescape("\u406e\u883f")
	kkkkk += unescape("\u771c\u77c2")
	kkkkk += unescape("\u9f07\u77c2")
	kkkkk += unescape("\u5f07\u77c0")
	kkkkk += unescape("\u5f07\u77c0")
	kkkkk += unescape("\uded4\u77c1")
	kkkkk += unescape("\ucf92\u77c0")
	kkkkk += unescape("\u0c77\u77c2")
	kkkkk += unescape("\ub1ad\u77c0")
	kkkkk += unescape("\u05ac\u77c3")//oldprotect
	kkkkk += unescape("\u7ae8\u77c1")
	kkkkk += unescape("\u9f92\u77c0")
	kkkkk += unescape("\u80c1\u77c0")
	kkkkk += unescape("\uaacc\u77bf")
	kkkkk += unescape("\uded4\u77c1")
	kkkkk += unescape("\u1131\u77be")
	kkkkk += unescape("\u67f0\u77c2")
	kkkkk += unescape("\u1025\u77c2");
			
	kkkkk += unescape("\u9090\u9090");	
	
	kkkkk += unescape("\u9090\u9090");	
	return kkkkk;
}


<think>我们正在讨论的是如何为Windows系统下载和配置GCC 15.1.0与MinGW-w64 13.0.0的UCRT版本。用户引用的内容中提到了从winlibs.com下载预编译的工具链,并且用户已经明确下载了一个特定的版本:winlibs-x86_64-posix-seh-gcc-15.1.0-mingw-w64ucrt-13.0.0-r2.zip。因此,我们将以此为基础进行说明。 ### 步骤1:下载预编译的MinGW-w64工具链(UCRT版本) 根据引用[1]和[3],我们推荐从[winlibs.com](https://winlibs.com/)下载预编译的工具链。具体到用户的需求: - **GCC版本**:15.1.0 - **MinGW-w64版本**:13.0.0(UCRT运行时) - **架构**:x86_64(64位) - **线程模型**:posix - **异常处理**:seh - **压缩格式**:Zip archive(用户已经下载了zip格式) 因此,我们推荐的下载文件名为: `winlibs-x86_64-posix-seh-gcc-15.1.0-mingw-w64ucrt-13.0.0-r2.zip` 你可以直接在[winlibs.com](https://winlibs.com/)的独立构建部分找到这个文件并下载。 ### 步骤2:解压文件 将下载的zip文件解压到一个合适的目录。注意: - 路径中不要包含空格和中文(避免潜在问题) - 推荐解压到根目录,例如:`C:\mingw64` ### 步骤3:设置环境变量 将MinGW-w64的`bin`目录添加到系统环境变量`PATH`中。具体步骤: 1. 打开系统设置(Win+I),搜索“环境变量”并打开。 2. 在“系统变量”中找到`Path`变量,点击“编辑”。 3. 点击“新建”,然后添加你的MinGW-w64的`bin`目录路径,例如:`C:\mingw64\bin`。 4. 点击“确定”保存所有更改。 ### 步骤4:验证安装 打开一个新的命令提示符(cmd)或PowerShell,输入以下命令验证: ```bash gcc --version g++ --version gdb --version ``` 如果正确显示版本信息(GCC 15.1.0,GDB等),则说明安装成功[^2][^3]。 ### 注意事项 - 如果你之前安装过其他版本的MinGW,请确保环境变量中只包含当前版本的路径,避免冲突。 - 如果遇到问题,请检查环境变量设置是否正确,并重新启动命令行窗口或计算机使设置生效。 ### 在VSCode中使用 在VSCode中配置C/C++环境时,需要确保在`tasks.json`和`launch.json`中正确指向这个工具链。在`c_cpp_properties.json`中,编译器路径应设置为: ```json "compilerPath": "C:/mingw64/bin/g++.exe" ``` (根据你的实际路径调整) 这样,VSCode的C/C++扩展就能正确使用这个工具链进行编译和调试。 ### 相关问题 1. 如何在VSCode中配置使用这个特定版本的MinGW-w64工具链? 2. 如何解决在配置过程中出现的“g++.exe: not found”错误? 3. 如何在同一台机器上管理多个版本的MinGW-w64工具链?</think>根据您的需求,以下是针对 Windows 系统推荐下载的 GCC 15.1.0 与 MinGW-w64 13.0.0 UCRT 版本,以及详细配置指南: --- ### 🔧 推荐下载版本 | 组件 | 版本 | 架构 | 运行时库 | 下载格式 | 推荐文件名称 | |--------------|------------|--------|----------|------------|--------------| | **GCC** | 15.1.0 | x86_64 | UCRT | Zip | `winlibs-x86_64-posix-seh-gcc-15.1.0-mingw-w64ucrt-13.0.0-r2.zip` | | **MinGW-w64**| 13.0.0 | x86_64 | UCRT | 7-Zip/Zip | 同上(捆绑包) | > 📌 **说明**:该捆绑包已包含完整的 UCRT 运行时支持,兼容 Windows 10/11 的现代 C 库标准,支持 C++23 标准[^1][^3]。 --- ### 📥 下载与安装步骤 1. **获取工具链** - 前往 [winlibs.com](https://winlibs.com/) 下载推荐文件 - 选择 **UCRT** 版本(非 MSVCRT) 2. **解压安装** ```powershell # 推荐解压路径(避免空格和中文) C:\mingw64 ``` > 使用 7-Zip 或系统自带解压工具,确保保留目录结构[^1] 3. **配置环境变量** - 系统属性 → 高级 → 环境变量 → 编辑 `Path` - 添加新条目:`C:\mingw64\bin` - 验证安装: ```bash gcc --version # 应显示 gcc 15.1.0 g++ --version # 应显示 g++ 15.1.0 ``` --- ### ⚙ VSCode 配置指南 1. **必需扩展** - [C/C++](https://marketplace.visualstudio.com/items?itemName=ms-vscode.cpptools) (Microsoft) - [C/C++ Extension Pack](https://marketplace.visualstudio.com/items?itemName=ms-vscode.cpptools-extension-pack) (包含 CMake 支持) 2. **编译器路径配置** (`c_cpp_properties.json`) ```json { "configurations": [ { "name": "Win64", "includePath": ["${workspaceFolder}/**"], "compilerPath": "C:/mingw64/bin/g++.exe", "cStandard": "c17", "cppStandard": "c++23", "intelliSenseMode": "windows-gcc-x64" } ], "version": 4 } ``` 3. **构建任务配置** (`tasks.json`) ```json { "version": "2.0.0", "tasks": [ { "label": "Build with UCRT", "type": "shell", "command": "g++", "args": [ "-fdiagnostics-color=always", "-g", "${file}", "-o", "${fileDirname}/${fileBasenameNoExtension}.exe" ], "group": "build" } ] } ``` --- ### 🔍 验证 UCRT 运行时 创建测试文件 `ucrt_test.cpp`: ```cpp #include <stdio.h> #include <uchar.h> // C11 宽字符支持 int main() { char16_t s[] = u"UCRT 测试"; // C++23 字符串字面量 printf("GCC 版本: %d.%d.%d\n", __GNUC__, __GNUC_MINOR__, __GNUC_PATCHLEVEL__); return 0; } ``` 使用快捷键 `Ctrl+Shift+B` 编译,应输出: ``` GCC 版本: 15.1.0 ``` --- ### ⚠ 注意事项 1. **路径冲突** 若曾安装其他 MinGW 版本,需彻底删除旧版环境变量 2. **防病毒软件** 首次运行时可能需允许 `gcc.exe` 和 `gdb.exe` 通过防火墙 3. **UCRT 优势** - 支持 Windows 10/11 的通用 C 运行时 - 更好的 Unicode 支持(UTF-8 代码页) - 兼容最新 C++23 标准特性[^3] --- ### ❓相关问题 1. 如何验证 MinGW-w64 是否使用了 UCRT 运行时? 2. 在 VSCode 中如何切换不同版本的 MinGW 工具链? 3. 使用 UCRT 版本编译的程序能否在旧版 Windows 运行? 4. 如何配置 CMake 优先选用 UCRT 工具链?
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值