题目链接 : http://reversing.kr/challenge.php 第二题
下载下来是一个压缩包,解压后有一个exe文件和一个txt文件。打开readme,可以看到下面内容:
***ReversingKr KeygenMe
Find the Name when the Serial is 5B134977135E7D13***
看意思应该就是在程序输入name,程序会计算出一个Serial,正确答案的话应该最后算出来的等于“5B134977135E7D13”。
下面看程序,用IDA打开,F5反汇编,得到下面内容:
主要就是sprintf那一句,将输入的name与一个数进行异或,所以只要将Serial异或一次就可以得到原始的name。
程序如下:
Serial = '5B,13,49,77,13,5E,7D,13'
Serial = [int(i, base=16) for i in Serial.split(',')]
encode = [16,32,48]
for i in range(8):
Serial[i] = encode[i % 3] ^ Serial[i]
name = ''.join([chr(i) for i in Serial])
print(name)
最后输出:K3yg3nm3
测试一下
正确。