428 字
2 min
RE 入门
2026-06-04

REVERSE_0#

用ida打开附件,F5查看伪代码

image-20260604200527242

很简单的逻辑,flag也告诉你了

REVERSE_1#

用ida打开附件,F5查看伪代码

image-20260604203537409

看来主函数内部别有洞天,点开main_0

image-20260604203719669

前面的未初始化栈内存填充循环不用管,看第二个循环以及后面的内容

经过分析,不难发现,这是在先把Str2内的小写o都换成数字0,再把我们输入的字符串Str1和字符串Str2的前v5个字符(也就是Str2的长度)进行比较,如果相同,则就是我们要找的flag

那么点击Str2查看数据

image-20260604204705203

把它进行替换,也就是{hell0_w0rld},就是我们要找的flag了

REVERSE_2#

用ida打开附件,F5查看伪代码

image-20260604215549861

前面的是栈保护,不用管

后面调用了fork()函数,程序至此被分为了父子进程,两者此处定义的 pid(并不等价于进程本身 PID)的值由 fork() 函数返回且不同,父进程里是子进程的进程号,通常是一个正数;而子进程里则等于0

所以父进程会进入 if 分支(pid > 0),执行waitpid(pid, &stat_loc, 0)函数等待子进程结束后再继续;而子进程进入 else 分支(pid = 0),根据ASCII码值来看,会把 flag 字符串的 i 和 r 都换成数字 1。后面依旧是跟输入的字符串比较。

此时再点击flag查看数据

image-20260604221145333

父进程没有进行替换,则是原样的{hacking_for_fun};子进程替换后就变成了{hack1ng_fo1_fun}

而这题明显是在考察子进程对flag的修改,故预期解为后者

REVERSE_3#

RE 入门
https://blog.leeshang.top/posts/re/qingcen-re_introduction/
作者
leeshang
发布于
2026-06-04
License
CC BY-NC-SA 4.0