记一些CTF题目练习(一)

admin 2026-01-21 01:02:30 网络安全文章 来源:ZONE.CI 全球网 0 阅读模式

文章总结: 作者通过青少年CTF平台练习四道逆向题:C++源码直接改后缀运行、IDA反编译XOR数组回推flag、exe内联字符串与寄存器dump、简单字符替换验证,均用IDA静态分析或调试器dump内存获得flagqsnctf{hell0_w0rld},展示典型逆向流程与工具使用技巧。 综合评分: 82 文章分类: CTF,逆向分析,二进制安全,WEB安全


cover_image

记一些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&nbsp;class&nbsp;flag&nbsp;{&nbsp; &nbsp;&nbsp;public&nbsp;String&nbsp;flag(){&nbsp; &nbsp; &nbsp; &nbsp;&nbsp;int[] v13 = {&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;&nbsp;77,&nbsp;127,&nbsp;112,&nbsp;70,&nbsp;74,&nbsp;33,&nbsp;44,&nbsp;23,&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;&nbsp;73,&nbsp;34,&nbsp;45,&nbsp;72,&nbsp;19,&nbsp;39,&nbsp;112,&nbsp;70,&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;&nbsp;19,&nbsp;115,&nbsp;36,&nbsp;70,&nbsp;17,&nbsp;36,&nbsp;116,&nbsp;17,&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;&nbsp;69,&nbsp;127,&nbsp;120,&nbsp;23,&nbsp;30,&nbsp;113,&nbsp;46,&nbsp;18&nbsp; &nbsp; &nbsp; &nbsp; };&nbsp; &nbsp; &nbsp; &nbsp;&nbsp;int&nbsp;v9 =&nbsp;122;&nbsp; &nbsp; &nbsp; &nbsp;&nbsp;char[] flag =&nbsp;new&nbsp;char[32];&nbsp; &nbsp; &nbsp; &nbsp;&nbsp;for&nbsp;(int&nbsp;i =0;i <=31;i++){&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;&nbsp;for&nbsp;(int&nbsp;j=0;j <=i;j++){&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; v9 ^= flag[j];&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; }&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;&nbsp;int&nbsp;v12 = v9 ^ v13[i];&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; flag[i] = (char) (v12);&nbsp; &nbsp; &nbsp; &nbsp; }&nbsp; &nbsp; &nbsp; &nbsp;&nbsp;return&nbsp;new&nbsp;String(flag);&nbsp; &nbsp; }}

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题目练习(一)》

评论:0   参与:  0