[Zer0pts2020] easy strcmp
Schritt
- Routineinspektion, 64-Bit-Programm
- 64-Bit-IDA ist offen. Ein
sehr einfaches Programm, das das a2-Array mitzer0pts{********CENSORED********}
derselben Eingabeaufforderung richtig vergleicht!
Dann müssen Sie wissen, welche Operationen a2 durchlaufen hat, bevor Sie die Hauptfunktion aufrufen. Dies sollte daran liegen, dass es sich nicht um eine exe-Datei handelt. Ich kann sie nicht anpassen. Normalerweise muss ich sie anpassen, um herauszufinden, wo der eingehende Vorgang ausgeführt werden soll string a2. Operation Ich habe mir die Funktionsliste neben mir angesehen und festgestellt, dass die Funktion mit dem Parameter a2
um 3 Stellen nach rechts verschoben ist, was einer Aufteilung des Strings in 8 Gruppen und dem entsprechenden Wert entspricht von qword_201060 wird subtrahiert. Getzer0pts{********CENSORED********}
Hinweis: Der Speicher wird als Little-Endian-Speicher gespeichert, daher müssen wir die Reihenfolge nach der Konvertierung der Zeichenfolge in ASCII umkehren
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)