
IDA打开
int __cdecl main(int argc, const char **argv, const char **envp)
{
Human *v3; // rbx
Human *v4; // rbx
char v6[23]; // [rsp+20h] [rbp-20h] BYREF
char v7; // [rsp+37h] [rbp-9h] BYREF
Human *v8; // [rsp+38h] [rbp-8h]
_main(argc, argv, envp);
std::allocator<char>::allocator(&v7);
std::string::string(v6, "NISACTF", &v7);
v3 = (Human *)operator new(0x18ui64);
Man::Man(v3, v6, 4i64);
v8 = v3;
std::string::~string((std::string *)v6);
std::allocator<char>::~allocator(&v7);
(*(void (__fastcall **)(Human *))(*(_QWORD *)v8 + 8i64))(v8);
v4 = v8;
if ( v8 )
{
Human::~Human(v8);
operator delete(v4);
}
return 0;
}
这个代码一看很懵逼
我们也找不到成功标志
但是看下面由个if(v8)
if很关键(想想你们以前做的)
直接根据if的操作
来到human

文章详细分析了一段C++代码,通过IDA工具观察内存操作,发现隐藏的flag。涉及类Human的析构函数和give_flag函数在内存中查找和处理flag的过程。
最低0.47元/天 解锁文章
574

被折叠的 条评论
为什么被折叠?



