[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進行整體的操作,就會將溢位移到下一位,不會丟失資料