[Zer0pts2020]easy strcmp

结城希亚發表於2024-11-05

[Zer0pts2020]easy strcmp

die查殼

image-20241104195901674

找到加密函式

image-20241104200556844

如何找到加密函式的

image-20241105182327952

找到init函式,跟進funcs_889

image-20241105182342226、跟進

image-20241105182412059

使用x交叉引用qword_201090

image-20241105183024506

即可找到主加密函式

那這個加密函式是如何連上main函式的呢?

main

image-20241104211112677

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

相關文章