Problem: [zzz26]ida的使用
将附件用ida打开,F5反汇编就能看到flag1

根据提示shift+F12发现第二段


进入flag3函数

没有内容,按下tab键

看到一堆没有出现在伪C代码的复制

空格键,这样更方便


打开栈指针和字节机器码

在数据按下shift+E
修改数据类型为byte

对比一下,前两位是操作码,后面的才是数据
所以只需要后面的,再仔细观察,提取出来的数据是0x72,0x54的顺序而不是0x30,0x74,是因为这是小端序储存的

用die查看能够知道

选中需要的数据shift+e就能一次性提取出来

提取出关键的数据用CyberChef转为字符
flag4函数里面

有一个print_nothing函数,在旁边的函数栏看到有print_flag4函数,我们希望能将print_nothing换成print_flag4

汇编页面看到是在这里调用的print_nothing函数(call是调用指令)

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







好评
那void __cdecl print_flag4()这个函数在这里是干嘛的
厉害
运行后立马就弹出了,怎么解决