首页
社区
课程
招聘
BUUCTF-reverse1解题思路
2024-4-2 11:27 4171

BUUCTF-reverse1解题思路

2024-4-2 11:27
4171

前言

1
本次CTF题目属于入门题型,之所以写这边文章的原因是由于网上的解题思路思路都是使用IDA伪代码进行解答的,因此本文本着学习动态调试的目的去解题。

IDA解法

使用IDA打开reverse_1.exe
IDA打开之后,无明显特征。shift+F12查看字符串,发现flag提示
图片描述
跳转过去之后,按X查看交叉引用
图片描述
通过流程图,发现用于判断是否正确获取flag的语句为汇编指令test,eax,eax,然后通过jz指令跳转到flag
图片描述
直接F5查看伪代码
图片描述
可以看到this is the right flag字符,说明直接满足if条件即可得到正确的flag
strncmp(&Str1, Str2, v3)用于比较str1与str2字符串,相等时返回0。
!strncmp()即需要满足str1=str2
双击,查看str2字符串
图片描述
在比较之前存在for循环,该循环的作用是将str2字符串中的字母o改成数字0
图片描述
因此得出flag为{hell0_w0rld}

X64Dbg解法

调试reverse_1.exe,搜索字符串
图片描述
点击跳转到input th flag处。
图片描述
此处for循环,用于遍历字符串hello_world
图片描述
当eax等于字母o时,替换字母o为数字0
图片描述
00007FF7DE461970处下断点
图片描述

1
2
lea rdx,qword ptr ds:[7FF7DE46C000]
lea rcx,qword ptr ss:[rbp+28]

第一条指令是将输入的字符赋值给rdx
第二条指令是将替换过的字符串hell0_w0rld赋值给rcx
图片描述
通过strncmp()函数比较两个字符串,相等时返回0
图片描述
再通过test指令以及je指令来进行条件判断

1
2
3
4
test指令作用如下:
mov eax, 10    ; 将10赋值给eax寄存器
test eax, eax  ; 执行test指令,检查eax的值是否为零,设置ZF=1
je zero        ; 当标志寄存器中的零标志位(ZF)为1时执行跳转

图片描述
获取到flag为{hell0_w0lrd}


[培训]内核驱动高级班,冲击BAT一流互联网大厂工 作,每周日13:00-18:00直播授课

收藏
点赞1
打赏
分享
最新回复 (2)
雪    币: 19918
活跃值: (29483)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
秋狝 2024-4-5 21:35
2
1
感谢分享
雪    币: 2159
活跃值: (471)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
呆萌的小白 2024-4-30 16:07
3
0
我最后用GPT解决的
游客
登录 | 注册 方可回帖
返回