0%

[P7061]官方解题思路

2025-07-29 20:00By
zzz26
REVERSE

Problem: [zzz26]ida的使用

将附件用ida打开,F5反汇编就能看到flag1
NSSIMAGE
根据提示shift+F12发现第二段
NSSIMAGE
NSSIMAGE
进入flag3函数
NSSIMAGE
没有内容,按下tab键
NSSIMAGE
看到一堆没有出现在伪C代码的复制
NSSIMAGE
空格键,这样更方便
NSSIMAGE
NSSIMAGE
打开栈指针和字节机器码
NSSIMAGE
在数据按下shift+E
修改数据类型为byte
NSSIMAGE
对比一下,前两位是操作码,后面的才是数据
所以只需要后面的,再仔细观察,提取出来的数据是0x72,0x54的顺序而不是0x30,0x74,是因为这是小端序储存的
NSSIMAGE
用die查看能够知道
NSSIMAGE
选中需要的数据shift+e就能一次性提取出来
NSSIMAGE
提取出关键的数据用CyberChef转为字符
flag4函数里面
NSSIMAGE
有一个print_nothing函数,在旁边的函数栏看到有print_flag4函数,我们希望能将print_nothing换成print_flag4
NSSIMAGE
汇编页面看到是在这里调用的print_nothing函数(call是调用指令)
NSSIMAGE
复制print_flag4经过修饰的函数名
这里附带一下ai的解释:

_Z11print_flag4v 是经过 C++ 名称修饰(Name Mangling) 后的函数名

名称修饰(Name Mangling)的作用
C++ 编译器(如 GCC、MSVC)会对函数名进行修饰,以支持:
函数重载(区分同名但参数不同的函数)。
命名空间和类作用域(避免符号冲突)。
类型安全链接(确保调用正确的函数版本)。
NSSIMAGE
在调用函数上面右键,选择assemble
NSSIMAGE
替换函数
NSSIMAGE
回车键应用修改
NSSIMAGE
再次右键选择apply patches to
NSSIMAGE
修改程序(这里需要将所有打开的exe全部关掉)
这时再打开exe就能看到输出的flag4了
NSSIMAGE

还没有人赞赏,快来当第一个赞赏的人吧!
  
© 著作权归作者所有

加载中...

加载失败
广告
×
评论区
添加新评论

好评

那void __cdecl print_flag4()这个函数在这里是干嘛的

void __cdecl print_flag4()前面有;,说明这个是注释,是源码里面的函数名,但是在ida里面调用的话要用经过修饰的函数名,也就是_Z11print_flag4v

厉害

运行后立马就弹出了,怎么解决

按理说不会的,或者你可以试试用cmd运行