[Zer0pts2020]easy strcmp
[Zer0pts2020]easy strcmp
die查壳
找到加密函数
如何找到加密函数的
找到init函数,跟进funcs_889
、跟进
使用x交叉引用qword_201090
即可找到主加密函数
那这个加密函数是如何连上main函数的呢?
main
main函数这里运用了strcmp,但我们却找不到strcmp到底对比了什么
但根据我们刚刚的分析,即可知道 qword_201090是连上strcmp的地址的,然后通过加密函数返回加密值,也就是上面图sub_6EA返回的a1
这下逻辑明了了
主要是使用main函数中的加密字符串与qword_201060进行相加,注意这里是八个字节 直接相加
编写解密函数
from binascii import *
enc = [0x410A4335494A0942, 0x0B0EF2F50BE619F0, 0x4F0A3A064A35282B]
key = '********CENSORED********'
flag = b''
for i in range(len(enc)):
tmp1 = b2a_hex(key[8*i:(8*i)+8][::-1].encode())
tmp2 = a2b_hex((hex(int(tmp1,16) + enc[i])[2:]))[::-1]
flag += tmp2
print(flag)
注意这里是对qword直接进行操作,因此如果把qword拆分成byte然后进行运算就会出现变量溢出(溢出0xff)的情况,如果是对qword进行整体的操作,就会将溢出移到下一位,不会丢失数据