用die 查壳和版本 64位 无壳
拖进ida64位看一下
shift+F12查下字符串
看到了一点flag 但不确定是否为全部的flag(因为左边的括号没有,但是根据句意猜测此处flag应该是全的)
双击点进去上面的“this is the right flag” ctrl+x交叉引用进入引用它的代码段 F5查看伪代码 如图
老规矩,从下往上看(思路和具体操作我已经在第一篇文章里面讲的比较详细了)
s2为输入的函数,如果输入的s2和flag相等,则输出“this is the right flag” 继续往上看
pid=fork()涉及到操作系统中子父进程的内容(以前做的时候我也没弄懂这段,最近在学操作系统再回来看竟然看懂了org 有人需要讲的话留言我会开单章讲一下)
红色框框内就是一个替换函数,从0到flag的长度-1(就是flag的长度的for循环次数) flag里面ASCII 值为105和114的字符会被替换成值为49的字符 选中105、114、49按R键查看ASCII码值对应的字符
即为hacking_for_fun里面的“i”和“r”被替换成了“1”
所以flag{hack1ng_fo1_fun}
其实替换类的题目动态调试做会更简单一些,有需求的话评论留言出动态调试做法
笔者在22-23年做过的题放在了该仓库,持续更新,需要自取GitHub - SlientRainyDay/Rain_CTF: CTF — 学习笔记&比赛题目&WP