【BUUCTF】REVERSE-刷题记录-reverse2
题目信息

解题步骤
使用DIE分析:

使用IDA分析

1 | v8 = __readfsqword(0x28u); // Canary,防栈溢出 |
fork() 的行为回顾
fork()创建一个子进程,复制父进程的内存空间- 子进程返回
0 - 父进程返回子进程 PID
- 之后两个进程独立运行
所以:
1 | if (pid) { /* 父进程 */ } |
flag 字符串到底被谁修改了?
看这段代码:
1 | else |
105→'i'114→'r'49→'1'
所以:子进程把 flag 中的 'i' 和 'r' 都替换成了 '1'
我立刻打开 IDA,查找 flag 的定义。
在 .data 段发现:
flag 是一个位于 .data 段的全局字符串:

代码理解:
1 | int __fastcall main(int argc, const char **argv, const char **envp) |
所以最终的flag是:{hack1ng_fo1_fun}
flag{hack1ng_fo1_fun}
本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明来源 末心的小博客!










