CTF-REV-ZERO_TO_ONE
GLIMPSE
DAY-7
QUESTION-1 insanity
- 解题思路:
- 拖到 IDA 中,
查看字串,直接得到
- 拖到 IDA 中,
QUESTION-2 open-source
- 解题思路:
- 得到了 .c 的源码,可以直接打开分析,也可以运行得到 .exe 文件后拖进 IDA 里
- 拖进 IDA 中,
查看字串,发现字符串
- 双击,
交叉引用, 查看反编译代码。 - 发现最后输出的
在 里最后 输出:
- 看如何求
的,表达式中 取 均可以满足条件,再把h4cky0u
带入求得。 - 这里我使用 python 写的代码,其他语言均可:
- 运行得到
(不包括 ):
QUESTION-3 Reversing-x64Elf-100
-
解题思路:
-
拖进 IDA,
查看字符串,发现关键字符串Nice!
-
双击,
交叉引用, 查看反编译代码。 -
发现整个程序很简单仅有一个判断,
函数不匹配则密码正确。 -
注意这里
(__int64)
是将输入的 作为一个 传参,本质都是二进制数据。
-
进入函数内发现存储方式也是如此,一个
__int64
可以简单看作char[16]
,
-
那么访问方式
*(char *)(v3[i%3] + 2*(i/3))
可以看作v3[i%3][2*(i/3)]
-
这里的
也就是最后的答案也是如此,相当于存入 中, -
简单输出遍历的字符:
- 然后写出操作代码,得到
:
-
QUESTION-4 re1
-
解题思路:
- 拖进 IDA,
查看字符串,发现关键字符串 - 双击,
交叉引用, 查看反编译代码。
- 发现
为 时输出aFlagGet
,非 时输出aFlag
- 查看字符串内容
aFlagGet
为flag get
,aFlag
下方的数据未识别, 选择 查看下发现
-
与程序输出相同,可以确定是上方
匹配成功时密码正确
-
那么查看
的具体内容,双击发现一串问号,看到xmmword
可以返回了,应该和它有关:
-
返回找到上方的
赋值,找到xmmword
的具体值:
-
这是一串
,但之后进行的是字符串匹配操作,转成字符串查看,直接找个在线网站:
-
感觉有点像,又带括号,仔细看题目名称中提到的
,正是这个字符串反过来的前几个字母,写个翻转:
-
好像缺了一半,再去代码里仔细找找,发现第一句
好像后面还干了些什么:
-
,查看汇编代码,发现中间有一些初始化操作:
-
可以发现,
的初始化分为两个部分,前面的xmmword
已经求得,再看后面的qword
:
-
再次转成字符串,发现也是倒过来的字符串。
-
其实这是因为存储数据时将字符串低位放在存储单元的低位,读出来的时候就倒序了。
-
反过来,再与之前的字符串拼起来,得到
- 拖进 IDA,
DAY-8
QUESTION-5 simple-unpack
- 解题思路:
-
日常先查壳(之前的题目没写出来),拖进
,发现是 加壳:
-
cmd 打开 upx 脱壳,轻松脱掉:
-
拖进 IDA,发现有
函数, :
-
功能看起来很简单,
与名为 的变量比较,点开查看一下,直接得到 :
-
QUESTION-6 logmein
-
解题思路:
-
日常查壳,发现 gcc 编译没壳
-
拖进 IDA,
发现关键字符串Incorrect password!\n
:
-
双击,
交叉引用, 查看反编译代码。
-
发现只是一个子函数,返回去找输入提示
Enter your guess:
,双击 :
-
发现对输入字符串的长度有要求,要大于字符串
的长度, 由最后的if
内的操作得到: -
带入
发现i%7-8
一定是负数,考虑到内存访问本质是指针偏移,查看 之前的变量:
-
所以
(char)v8[i\%7-8]
本质是在访问 内的字符串,将其16进制转字符串:
-
发现刚好
,所以原来的(char)v8[i%7-8]
等同于v7[i%7]
,则可以写出操作脚本复现: -
需要注意的是
的赋值中有\%
这是一个转义字符,所以 的长度为 : -
前面的题目讲到,字符串存储方式是低位地址存低位,读出来的
是倒序的,记得翻转一下:
-
最后得到
:
-
QUESTION-7 game
-
解题思路:
-
日常查壳,拖进IDA,
,找到关键字符串done!!! the flag is
:
-
双击,
交叉引用, 反编译, -
发现里面为
赋了一系列初值:
-
往下看发现将
与 的每个字符一一异或,再异或个常数就得到 : -
但是
长度没有 ,看上方数据的定义顺序,本质是把 拼一起与 操作: -
写出操作脚本复现:
-
最后输出得到
:
-
QUESTION-8 Hello, CTF
- 解题思路:
-
日常查壳,拖进IDA,
,找到关键字符串success!
: -
双击,
交叉引用, 反编译,发现当 相同时输出:
-
是输入的字符串转 后的结果, 则也是某个字符串转 -
在线转一下得到
:
-
QUESTION-9 getit
- 解题思路:
-
日常查壳,拖进IDA,
,找到关键字符串harifCTF{???}
: -
双击直接
发现没有交叉引用,仔细看发现该变量 从上方就开始定义了:
-
所以其实最前面还有一个
即 ,先不急, -
光标点击
所在的行, 查看反编译代码:
-
简单分析,将串
里 存到串 的中间,然后将 输出到一个 的 下的临时文件里, -
联想到
内先前的抬头 ,猜测 即最后的 , -
查看
内的值,然后写出操作脚本复现:
-
最后得到
:
-
如果是在
下运行,可以通过动态调试打上断点,然后直接打开 文档查看
-
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· Manus的开源复刻OpenManus初探
· 三行代码完成国际化适配,妙~啊~
· .NET Core 中如何实现缓存的预热?
· 阿里巴巴 QwQ-32B真的超越了 DeepSeek R-1吗?