【BUUCTF系列】新年快乐 1
本文围绕EXE程序的Flag破解展开,核心流程为:下载解压题目附件后,通过Die工具检测出程序经UPX压缩壳保护,未脱壳程序拖入IDA后函数缺失,印证加壳判断。使用UPX工具执行`upx -d`命令完成脱壳,脱壳后借助IDA定位main函数并F5反编译,分析C语言代码可知,程序通过`strncmp`校验用户输入前13个字符是否为“HappyNewYear!”。同时识别出`scanf`无长度限制的栈
本文仅用于技术研究,禁止用于非法用途。
Author:枷锁
下载附件
解压出题目
发现是个exe的文件,双击运行,发现我们需要输入正确的flag
先将程序拖入die中进行简单的分析
发现程序经过了加壳处理
壳的概述:
核心精简版(无表格)
-
壳是什么?
程序的“包装”:运行时先执行“包装代码(壳)”,解完包才跑真正的程序。 -
两种壳的区别
- 压缩壳:核心是减小程序体积,代表工具是你之前用的UPX,逻辑只有简单解压,脱壳难度低(比如UPX能直接解);
- 加密壳:核心是防程序被破解/逆向,代表工具是VMProtect、ASProtect,逻辑是加密+反调试(更复杂),脱壳难度高(得绕开反调试)。
- 简单脱壳(针对压缩壳)
等壳解完→找到程序真正启动点(OEP)→把内存里的程序存成文件(Dump)→修文件(如补输入表)让它能独立运行。
还有一种判断程序有没有加壳的方式就是,在不脱壳的情况下拖入ida进行分析的结果如图:函数明显有点少
我们可以通过一些工具对其进行脱壳处理
这里我用的是(记得科学上网环境)
https://github.com/upx/upx/releases/tag/v5.0.2

一些介绍


进入命令行输入upx -d 程序路径

即可脱壳成功
将脱壳完成的程序拖入ida,发现函数变多了,也可证明脱壳成功
找到mian函数,F5反汇编成C,我们看看程序的逻辑
将脱壳后的程序拖入 IDA,发现函数数量显著增加,说明脱壳有效。定位到 main 函数后,按 F5 键将汇编代码反编译为 C 语言,核心逻辑如下:
1.程序定义两个字符数组:Str2[14]存储预设正确 Flag,Str1[44]接收用户输入;
2.通过strcpy函数给Str2赋值为 “HappyNewYear!”(共 13 个可见字符 + 1 个字符串结束符,刚好适配数组长度);
3.用scanf读取用户输入,通过strncmp函数对比输入字符串与Str2的前 13 个字符;
4.若前 13 个字符完全匹配,输出 “this is true flag!”,否则输出 “wrong!”;
5.程序存在小漏洞:scanf未限制输入长度,输入过长可能导致栈溢出,但不影响 Flag 验证。
欧克,我们现在进行输入HappyNewYear!
提示是正确的flag,则格式为flag{HappyNewYear!}
总结,考察的知识点
- 加壳/脱壳:壳的概念、压缩壳与加密壳区别、Die查壳、UPX脱壳(
upx -d命令) - 逆向工具:IDA(定位main函数、F5反编译)、Die查壳基础使用
- C语言逆向:
strcpy/strncmp/scanf等函数功能、Flag校验逻辑拆解(前13字符匹配) - 安全漏洞:
scanf无长度限制导致的栈溢出 - Flag格式:
flag{具体内容}规范
宇宙级免责声明
🚨 重要声明:本文仅供合法授权下的安全研究与教育目的!🚨
1.合法授权:本文所述技术仅适用于已获得明确书面授权的目标或自己的靶场内系统。未经授权的渗透测试、漏洞扫描或暴力破解行为均属违法,可能导致法律后果(包括但不限于刑事指控、民事诉讼及巨额赔偿)。
2.道德约束:黑客精神的核心是建设而非破坏。请确保你的行为符合道德规范,仅用于提升系统安全性,而非恶意入侵、数据窃取或服务干扰。
3.风险自担:使用本文所述工具和技术时,你需自行承担所有风险。作者及发布平台不对任何滥用、误用或由此引发的法律问题负责。
4.合规性:确保你的测试符合当地及国际法律法规(如《计算机欺诈与滥用法案》(CFAA)、《通用数据保护条例》(GDPR)等)。必要时,咨询法律顾问。
5.最小影响原则:测试过程中应避免对目标系统造成破坏或服务中断。建议在非生产环境或沙箱环境中进行演练。
6.数据保护:不得访问、存储或泄露任何未授权的用户数据。如意外获取敏感信息,应立即报告相关方并删除。
7.免责范围:作者、平台及关联方明确拒绝承担因读者行为导致的任何直接、间接、附带或惩罚性损害责任。
🔐 安全研究的正确姿势:
✅ 先授权,再测试
✅ 只针对自己拥有或有权测试的系统
✅ 发现漏洞后,及时报告并协助修复
✅ 尊重隐私,不越界
⚠️ 警告:技术无善恶,人心有黑白。请明智选择你的道路。
希望这个教程对你有所帮助!记得负责任地进行安全测试。
更多推荐
所有评论(0)