[BUUCTF]REVERSE——[Zer0pts2020]easy strcmp

[Zer0pts2020]easy strcmp

附件

步骤

  1. 例行检查,64位程序
    在这里插入图片描述
  2. 64位ida打开
    在这里插入图片描述
    很简单的一个程序,将a2数组与zer0pts{********CENSORED********}进行比较,相同提示correct!
    然后就是要知道a2在进入main函数前经过了什么操作,应该是因为它不是exe文件吧,我没法动调,正常情况下是去动调找找看哪里对传入的字符串a2进行了操作,我在旁边函数列表里随便看看,找到了带有a2参数的函数
    在这里插入图片描述
    右移3位相当于除8,也就是把字符串分为8个一组,对应和qword_201060的值做减法,可以得到zer0pts{********CENSORED********}
    在这里插入图片描述
    注意:内存中存储为小端存储,所以我们需要在将字符串转换成ascii后需要逆序一下
enc = "********CENSORED********"
m = [0x410A4335494A0942, 0x0B0EF2F50BE619F0, 0x4F0A3A064A35282B]
 
import binascii
 
flag =b""  #由于是字节操作,需要在前面加上b
for i in range(3):
    p = enc[i*8:(i+1)*8]     #将enc字符串8位一组分开
    print(p)
    a = binascii.b2a_hex(p.encode('ascii')[::-1])   #将分开后的字符串转每一位转换成ascii,然后逆序
    print(a)
    b = binascii.a2b_hex(hex(int(a,16) + m[i])[2:])[::-1]   #(enc[i]的ascii+m[i])的结果是16进制,[2::]是舍弃开头的0x,然后[::-1]逆序
    print(b)
    print('\n')

    flag += b  #拼凑每组还原后的结果
    
print (flag)

在这里插入图片描述

猜你喜欢

转载自blog.csdn.net/mcmuyanga/article/details/113567716
今日推荐