吾爱破解 - 52pojie.cn

 找回密码
 注册[Register]

QQ登录

只需一步,快速开始

查看: 4837|回复: 38
收起左侧

[CTF] 2025新春题目DaNianChuErNoadopted Write-UP (保姆级分析教程)

[复制链接]
ahov 发表于 2025-1-30 19:13
原帖地址:https://www.52pojie.cn/thread-2002969-1-1.html

首先将程序拖入x32dbg中,运行到答案输入提示,如下图所示:
Snipaste_2025-01-30_17-09-43.png


右击-搜索-当前区域-字符串,随后可以发现“恭喜你,回答正确”字符串,如下图所示:
Snipaste_2025-01-30_17-11-27.png


点击进入,可以发现上下文中存在多个比较指令,我们将其统统下上断点,如下图所示
Snipaste_2025-01-30_17-13-56.png


尽管可以看到有两个字符"H"和"a"极有可能是flag的一部分,但是我们确保科学性和严谨性,仍然输入"abcdefg"作为提交答案尝试。

答案提交后,运行到cmp ebp,48时可以看到,程序将我们输入的答案中的第1个字符"a"存储进了EBP中,并与"H"进行了比较(见左下),证明了我们的猜想——flag的第一个字符为"H",如下图所示:
Snipaste_2025-01-30_17-15-51.png


为了使答案检验过程继续运行,我们需要将EBP中的数据修改为"H",如下图所示:
Snipaste_2025-01-30_17-18-54.png


继续执行程序,可以看到程序将我们输入的答案中的第2个字符"b"与"a"进行了比较(见左下),如下图所示:
Snipaste_2025-01-30_17-20-05.png


同样的方式,我们将地址ESP+18修改为"a"然后继续运行,如下图所示:
Snipaste_2025-01-30_17-21-06.png


在程序运行到cmp edi,ebx时,我们可以看到:此时edi = "c" (我们输入的答案的第3位); ebx = "d" (我们输入的答案的第4位),如下图所示:
Snipaste_2025-01-30_17-22-15.png


程序此时正准备比较edi和ebx,说明edi和ebx应当是相等的,即flag的第3位和第4位应当相等。

结合前面的"Ha",我们可以猜测flag的前4位为"Happ"。
我们不妨将edi和ebx均改为"p",如下图所示:
Snipaste_2025-01-30_17-31-41.png

Snipaste_2025-01-30_17-32-32.png


继续运行后,发现程序进行了异或运算后将edx与值FFFFF1E3进行比较,只有当edx的值等于FFFFF1E3时才继续执行后续操作,如下图所示:
Snipaste_2025-01-30_17-46-19.png


该逻辑不影响flag的获取,为了使答案检验过程继续运行,我们将edx的值修改为FFFFF1E3后继续运行程序,如下图所示:
Snipaste_2025-01-30_17-47-09.png


程序继续执行后,我们可以关注到,下一个比较指令为cmp a1,c1,目的是判断a1与c1是否相等,在此之前我们需要先确定a1和c1是什么东西以及a1与c1和flag之间的关系。
在比较指令上面,我们可以看到两行至关重要的指令:
mov a1,byte ptr ds:[esi+1]
mov b1,byte ptr ds:[esi+4]

在调试器中我们可以看到,esi+01:"bcdefg" (把我们输入的答案的第1位移除了),然后程序取了"bcdefg"的第1位"b" (也就是我们输入的答案的第2位) 作为a1,然后对a1进行异或计算,如下图所示:
Snipaste_2025-01-30_17-55-02.png


同理,esi+04:"efg" (把我们输入的答案的前4位移除了),然后程序取了"efg"的第1位"e" (也就是我们输入的答案的第5位) 作为c1,如下图所示:
Snipaste_2025-01-30_17-55-37.png



我们当前可以猜测flag前五位为"Happy",不妨重新启动程序并调试,输入"Happyfg"作为提交答案尝试。经过尝试后发现,当提交答案前5位为"Happy"时(理论上只需要提交的答案第2位为"a"且第5位为"y"时就可以,未具体测试),a1就会与c1相等(见左下),如下图所示:
Snipaste_2025-01-30_17-58-25.png


继续运行程序,在mov dword ptr ss:[esp+10],eax指令处或fild dword ptr ss:[esp+18]指令处断下来之后,直接查看eax就可以看到"2025",如下图所示:
Snipaste_2025-01-30_17-59-37.png


将上述信息整合后确定flag为"Happy2025",提交后确认flag答案正确,如下图所示:
Snipaste_2025-01-30_18-01-34.png

免费评分

参与人数 9威望 +1 吾爱币 +29 热心值 +8 收起 理由
Hmily + 1 + 20 + 1 感谢发布原创作品,吾爱破解论坛因你更精彩!
junjia215 + 1 + 1 用心讨论,共获提升!
17315044449 + 1 + 1 我很赞同!
hubohang + 1 我很赞同!
zl73521 + 1 + 1 已经处理,感谢您对吾爱破解论坛的支持!
theStyx + 2 + 1 用心讨论,共获提升!
lq20060413 + 1 + 1 我很赞同!
BrutusScipio + 1 + 1 我很赞同!
zhminxp + 1 + 1 谢谢@Thanks!

查看全部评分

发帖前要善用论坛搜索功能,那里可能会有你要找的答案或者已经有人发布过相同内容了,请勿重复发帖。

 楼主| ahov 发表于 2025-2-1 09:11
本帖最后由 ahov 于 2025-2-1 09:18 编辑
black911 发表于 2025-2-1 00:57
第二题 我现在都没做出来   只学会了把输入错误的提示换成的成功的字段............纯小白 od都用得不熟练

那还不赶紧学习学习,用本文思路断即可,提前点一下你输进去的答案有几个字符,注意观察比较的内容和寄存器。我这招不用管跳转,也不用nop任何东西。再多的我就不能说了,加油吧
three 发表于 2025-1-31 23:35
flag{} 最基本格式 没有,估计是被刷下来,原因之一,目前windows 初级题 只考察 汇编的 基础的跳转,和观察寄存器数据,不考虑具体算法的。  
wojaiyh 发表于 2025-1-30 20:39
18331077020 发表于 2025-1-31 01:40
6666666666啊
kotlyne 发表于 2025-1-31 10:20
感谢,学习了,现在好奇源代码怎么写的
leixiaoyi 发表于 2025-1-31 10:31
又学到了。666666
BrutusScipio 发表于 2025-1-31 11:24
kotlyne 发表于 2025-1-31 10:20
感谢,学习了,现在好奇源代码怎么写的

看起来是逐字符操作位运算和逻辑运算
mufeng001 发表于 2025-1-31 14:07
谢谢,windows初级题直接也会了
ykwtfvb 发表于 2025-1-31 14:21
能出个视频吗
ALoserP 发表于 2025-1-31 18:25
新年快乐 膜拜大佬
萌大奶 发表于 2025-1-31 20:09

新年快乐 膜拜大佬
您需要登录后才可以回帖 登录 | 注册[Register]

本版积分规则

返回列表

RSS订阅|小黑屋|处罚记录|联系我们|吾爱破解 - LCG - LSG ( 京ICP备16042023号 | 京公网安备 11010502030087号 )

GMT+8, 2025-4-21 14:53

Powered by Discuz!

Copyright © 2001-2020, Tencent Cloud.

快速回复 返回顶部 返回列表