使用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}
调试reverse_1.exe,搜索字符串

点击跳转到input th flag处。

此处for循环,用于遍历字符串hello_world

当eax等于字母o时,替换字母o为数字0

00007FF7DE461970处下断点

第一条指令是将输入的字符赋值给rdx
第二条指令是将替换过的字符串hell0_w0rld赋值给rcx

通过strncmp()函数比较两个字符串,相等时返回0

再通过test指令以及je指令来进行条件判断

获取到flag为{hell0_w0lrd}
本次CTF题目属于入门题型,之所以写这边文章的原因是由于网上的解题思路思路都是使用IDA伪代码进行解答的,因此本文本着学习动态调试的目的去解题。
本次CTF题目属于入门题型,之所以写这边文章的原因是由于网上的解题思路思路都是使用IDA伪代码进行解答的,因此本文本着学习动态调试的目的去解题。
lea rdx,qword ptr ds:[
7FF7DE46C000
]
lea rcx,qword ptr ss:[rbp
+
28
]
lea rdx,qword ptr ds:[
7FF7DE46C000
]
lea rcx,qword ptr ss:[rbp
+
28
]
[培训]内核驱动高级班,冲击BAT一流互联网大厂工作,每周日13:00-18:00直播授课