[Zer0pts2020]easy strcmp
步骤
- 例行检查,64位程序
- 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)