霍雅
追求源于热爱,极致源于梦想!
打开分析main函数
除了patch_me(v4)其他没意义
进入patch_me(v4)
patch_me(v4)传入了一个int a1
这个值是main还是scanf输入进来的
判断是否为奇数,奇数退出,偶数运行get_flag(),无参,进入看看
![2025-03-12T09:57:07.png]
简单分析代码,如注释所示
其中只有case1 4 5是有意义的
先看case1
f1可以看到是flag的前缀
f2还未初始化
所以肯定不是先进case1
往下分析case4
初始化了f2,但是是乱码,而case5是对这个乱码进行操作
所以我们要实现的顺序是case 4 5 1
下断点动调
输入2到我们断点的位置
寻找到case4的地址
改变栈针的值RSI
下断点运行
断在了break处
找case5的地址
改栈针
下断点运行
回到for循环
这里不知道为什么没断下来,不过不影响结果
找case1的地址
改栈针
其实这里改不改都无所谓了,寄存器已经保存f2的值了
改到case1,直接运行,不用下断点
查看flag的值
shift+e提取
GXY{do_not_hate_me}