[BUUCTF]Reverse——[SWPU2019]ReverseMe

[SWPU2019]ReverseMe

  1. 例行检查,32位程序,c++写的,无壳
    在这里插入图片描述
  2. 本地试运行一下,看看大概的情况
    在这里插入图片描述
  3. 程序里有好多复杂的函数,静态分析有点难度,这边选择动调理一下程序逻辑。汇编动调小白,简单记录一下自己的调试过程。
  4. 找到程序的入口点,在这边下断点,f8单步直到让我们输入
    在这里插入图片描述
  5. 运行到call sub_CF37B0的时候开始让我们输入了,输入结束后将ebp-0x90处的值跟0x20比较,更改ZF标志位,0xCF28C7处的jz会根据这边的情况进行跳转,如果ZF标志位为0,则跳转,否则就会输出Try again,退出程序。ebp-0x90处放的是我们输入的字符串的长度,因此我们输入的字符串的长度必须是32
    在这里插入图片描述
  6. 输入长度为32的字符串继续动调,首先看到了第一个对我们输入的字符串进行操作的地方
    在这里插入图片描述
    我输入的是32个1,进行运算后得到了
    ['0x62', '0x66', '0x61', '0x64', '0x6e', '0x3', '0x1', '0x0', '0x8', '0x6e', '0x72', '0x65', '0x77', '0x62', '0x66', '0x61', '0x64', '0x6e', '0x3', '0x1', '0x0', '0x8', '0x6e', '0x72', '0x65', '0x77', '0x62', '0x66', '0x61', '0x64', '0x6e', '0x3']
  7. 接着往下f8
    在这里插入图片描述
    edx里的值
    在这里插入图片描述
    eax里的值
    在这里插入图片描述
  8. 好奇这个edx里的值哪里来的,往上看汇编代码,0xCF29C7处的call函数直接f8过了,估计是这边产生的。
    在这里插入图片描述
    f7步入,f8看看
    在这里插入图片描述
    ecx里的值是
    在这里插入图片描述
    经过这个步骤之后就得到了用来跟eax里比较的值。
  9. 到这里逻辑理清楚了。首先输入一串长度为32的字符串,然后跟“SWPU_2019_CTF”进行异或操作,得到的结果在跟在这里插入图片描述异或得到在这里插入图片描述
result=[0xB3,0x37,0x0F,0xF8,0xBC,0xBC,0xAE,0x5D,
        0xBA,0x5A,0x4D,0x86,0x44,0x97,0x62,0xD3,
        0x4F,0xBA,0x24,0x16,0x0B,0x9F,0x72,0x1A,
        0x65,0x68,0x6D,0x26,0xBA,0x6B,0xC8,0x67]

str="SWPU_2019_CTF"

a=[0x86,0x0C,0x3E,0xCA,0x98,0xD7,0xAE,0x19,
   0xE2,0x77,0x6B,0xA6,0x6A,0xA1,0x77,0xB0,
   0x69,0x91,0x37,0x05,0x7A,0xF9,0x7B,0x30,
   0x43,0x5A,0x4B,0x10,0x86,0x7D,0xD4,0x28]

b=[0]*32

for i in range(32):
    b[i]=result[i]^a[i]

flag=""
for i in range(32):
    flag+=chr(b[i]^ord(str[i%len(str)]))

print(flag)

flag{Y0uaretheB3st!#@_VirtualCC}

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值