文章总结: 作者通过青少年CTF平台练习四道逆向题:C++源码直接改后缀运行、IDA反编译XOR数组回推flag、exe内联字符串与寄存器dump、简单字符替换验证,均用IDA静态分析或调试器dump内存获得flagqsnctf{hell0_w0rld},展示典型逆向流程与工具使用技巧。 综合评分: 82 文章分类: CTF,逆向分析,二进制安全,WEB安全
记一些CTF题目练习(一)
原创
火龙果儿 火龙果儿
0x00001
2026年1月20日 19:16 广东
青少年CTF练习平台
练习平台:https://www.qsnctf.com/
1、听说你学了C语言
下载附件发现是cpp文件
这一看就是C++的格式啊,调整为C格式直接执行即可
2、2024御网杯线下半决赛题目encrypt1
下载附件没有后缀
拖ida进入main函数,发现声明了一些数组
F5查看伪C代码
看上面就是定义了一些变量、数组之类的,继续往下看,大概就是对传入的数组进行条件判断符合条件就返回你获得flag之类的:
我们需要反向把v12推算出来,将v13~v44反着循环一次
需要将if语句的判断条件改一下,原本是v9和v12的结果与v13~v44做比较,那么v12=V9 ^ v13~v44
举个xor计算例子:
异或(XOR,全称 Exclusive OR)是一种位运算,在 C/C++ 中用 ^ 表示。它的规则是:如果两个位相同(都是 0 或都是 1),结果是 0。如果两个位不同(一个 0,一个 1),结果是 1。
可得到以下代码:public class flag { public String flag(){ int[] v13 = { 77, 127, 112, 70, 74, 33, 44, 23, 73, 34, 45, 72, 19, 39, 112, 70, 19, 115, 36, 70, 17, 36, 116, 17, 69, 127, 120, 23, 30, 113, 46, 18 }; int v9 = 122; char[] flag = new char[32]; for (int i =0;i <=31;i++){ for (int j=0;j <=i;j++){ v9 ^= flag[j]; } int v12 = v9 ^ v13[i]; flag[i] = (char) (v12); } return new String(flag); }}
3、我将要给你一个flag
下载是一个exe文件,先执行看看是个啥
弹出4句话后自己关闭了
直接使用ida打开,搜索字符串”I’ll give you the FLAG soon”
F5反编译,定义了一系列变量,并赋了一些看似随机的数值。最后,程序尝试以字符串(%s)的形式打印 v4 及其后续内存中的数据。
将v4到v11转换为字节序列,然后尝试解码为 ASCII 或 UTF-8 字符串,看看有没有flag
发现被骗了
那么改为v12~v18试试,好吧是flag
使用X64dbg也可以
搜索字符串
进入该地址,也可发现这里有大量mov指令将16进制值加载到寄存器中
在0000000000401627下断点
几次f9后停在断点,我们dump该地址
#
发现了flag
4、simple_re
下载同样是一个exe文件拖入ida F5大法现原型
对qsnctf{hello_world}进行循环,检查字符是否是’o’(ASCII 111)如果是 ‘o’,替换为 ‘0’(ASCII 48)。
最后对比Str和Str1
flag就是qsnctf{hell0_w0rld}
#
免责声明:
本文所载程序、技术方法仅面向合法合规的安全研究与教学场景,旨在提升网络安全防护能力,具有明确的技术研究属性。
任何单位或个人未经授权,将本文内容用于攻击、破坏等非法用途的,由此引发的全部法律责任、民事赔偿及连带责任,均由行为人独立承担,本站不承担任何连带责任。
本站内容均为技术交流与知识分享目的发布,若存在版权侵权或其他异议,请通过邮件联系处理,具体联系方式可点击页面上方的联系我。
本文转载自:0x00001 火龙果儿 火龙果儿《记一些CTF题目练习(一)》
版权声明
本站仅做备份收录,仅供研究与教学参考之用。
读者将信息用于其他用途的,全部法律及连带责任由读者自行承担,本站不承担任何责任。









评论