逆向学习——个人题解笔记

[NISACTF 2022]sign-ezc++ | NSSCTF——命名空间



1.前言

这里是[NISACTF 2022]sign-ezc++ | NSSCTF的题解。这是一道c++题。

2.解题思路

首先在把文件拖到IDA里面。F5反编译,发现不少奇奇怪怪的命名空间,依次查找

int __cdecl main(int argc, const char **argv, const char **envp)
{
  Man *v3; // rbx
  Human *v4; // rbx
  std::string name; // [rsp+20h] [rbp-20h] BYREF
  char v7; // [rsp+37h] [rbp-9h] BYREF
  Human *m; // [rsp+38h] [rbp-8h]

  _main();
  std::allocator<char>::allocator(&v7);
  std::string::string(&name, "NISACTF", &v7);
  v3 = (Man *)operator new(0x18ui64);
  Man::Man(v3, (std::string)&name, 4);
  m = v3;
  std::string::~string(&name);
  std::allocator<char>::~allocator(&v7);
  (*((void (__fastcall **)(Human *))m->_vptr_Human + 1))(m);
  v4 = m;
  if ( m )
  {
    Human::~Human(m);
    operator delete(v4);
  }
  return 0;
}

在Functions name中点击Ctrl+F查找Human发现give_flag

在这里插入图片描述
可以看出flag经历了异或,直接追踪flag获取其值(异或后的值)。
在这里插入图片描述
有了值之后就变成了很简单的异或题,写一个脚本得到真正的flag
exp:

s = '44h, 59h, 59h, 49h, 5Eh, 4Ch, 71h, 7Eh, 62h, 63h, 79h, 55h, 63h, 79h, 55h, 44h, 43h, 59h, 4Bh, 55h, 78h, 6Fh, 55h, 79h, 63h, 6Dh, 64h, 77'
value = s.split('h, ')
value = [int(i,16) for i in value]
for i in value:
    print(chr(i^0xA),end = '')

flag:NSSCTF{this_is_NISA_re_sign}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值