目录

  1. 1. 前言
  2. 2. 知识点
  3. 3. 题目
  4. 4. 思路
    1. 4.1. 知识补充
      1. 4.1.1. C++命名空间
    2. 4.2. 操作
  5. 5. 总结

LOADING

第一次加载文章图片可能会花费较长时间

要不挂个梯子试试?(x

加载过慢请开启缓存 浏览器默认开启

RE初探索0xA

2023/4/14 Reverse
  |     |   总文章阅读量:

前言

NSS上[NISACTF 2022]sign-ezc++

博主的RE入门系列来到了第十期,这次是NISA2022的题,恰巧明天就是NISA2023校赛的日子,而且本篇博客也会和0xA扯上点关系

缘,妙不可言(

知识点

c++

命名空间

异或

题目

下载题目附件得到exe程序,拖入ida并f5查看main函数

image-20230414200137140

乍一看找不到flag相关的信息,但是发现有两个不一样的命名空间ManHuman

两个都打开看看发现指向同一段地址(?)(目前博主不确定叫什么

image-20230414200654618

打开此地址发现Human::give_flag这个函数

image-20230414200859488

打开此函数可以看到flag相关的异或操作

image-20230414201003642

flag按位与0xA进行异或

思路

知识补充

C++命名空间

解决命名冲突的问题

类似于同名函数在不同的类以防止冲突,逆向时或许可以当类中的函数处理(?

操作

这里flag参数是可以查看内存中的值

image-20230414230044333

两行db后绿色的值就是flag值的每一位(十六进制)

2 dup(59h)说明连续出现两次

于是得到flag的值为0x44,0x59,0x59,0x49,0x5E,0x4C,0x71,0x7E,0x62,0x63,0x79,0x55,0x63,0x79,0x55,0x44,0x43,0x59,0x4B,0x55,0x78,0x6F,0x55,0x79,0x63,0x6D,0x64,0x77,0x14

然后编写python脚本执行异或获取题目的flag

flag=[0x44,0x59,0x59,0x49,0x5E,0x4C,0x71,0x7E,0x62,0x63,0x79,0x55,0x63,0x79,0x55,0x44,0x43,0x59,0x4B,0x55,0x78,0x6F,0x55,0x79,0x63,0x6D,0x64,0x77,0x14]
for i in flag:
    print(chr(i^ord('\n')),end="")	# ord(‘\n’)==0xA
>>>NSSCTF{this_is_NISA_re_sign}

总结

初步了解命名空间相关的逆向方法