[Zer0pts2020] strcmp facile
étape
- Inspection de routine, programme 64 bits
- Ida 64 bits est ouvert. Un
programme très simple qui compare le tableau a2 avec lazer0pts{********CENSORED********}
même invite correcte!
Ensuite, vous devez savoir quelles opérations a2 a effectuées avant d'entrer dans la fonction principale. Cela devrait être parce que ce n'est pas un fichier exe. Je ne peux pas l'ajuster. Normalement, je dois l'ajuster pour savoir où effectuer les entrées chaîne a2. Opération, j'ai jeté un coup d'œil à la liste des fonctions à côté de moi et j'ai trouvé que la fonction avec le paramètre a2 est
décalée vers la droite de 3 chiffres, ce qui équivaut à diviser la chaîne en 8 groupes, et la valeur correspondante de qword_201060 est soustrait. Getzer0pts{********CENSORED********}
Remarque: La mémoire est stockée en tant que stockage little-endian, nous devons donc inverser l'ordre après avoir converti la chaîne en 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)