婉若游龙
这题挺简单的,算法也不难。很快就写出了KeyGen,不过有一点需要注意的事,程序似乎没有控制好缓冲区的长度,导致serial处输入32个任意字符后会直接弹出正确的提示信息,会给新手很迷惑的感觉。
分析
HardCoded硬编码很简单,在IDA中跟一下字符串就可以找到,就是“HardCoded”。然后输入name: CTFHUB
.和serial:XXXXXX...
。
对name的处理是每个字符先对0xA
取余,然后与在整个字符串中的位置相异或,再加2,最后再对0xA
取余得到6个字节的checksum。
对serial的处理就是对每个字符0xA
取余,得到对应的checksum。
最后两个checksum比较,相同则成功。
KeyGen
菜鸡花了点时间写了个脚本,有错误请指出。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45
|
""" KCTF-婉若游龙 """ name = "CTFHUB" serial = ""
def serial_proc(serial): checksum = [] for ch in serial: checksum.append(str(ord(ch)%10)) return "".join(checksum)
def re_proc_serial(checksum, offset): serial = "" for i in checksum: serial += chr(int(i) + offset) return serial
if __name__ == "__main__": i = 0 checksum_name = [] offsets = [30, 40, 50, 60, 70, 80, 90, 100, 110] for ch in name: tmp = (i ^ (ord(ch)%10)) + 2 tmp = tmp % 10 checksum_name.append(str(tmp)) i += 1 c = "".join(checksum_name) print "CTFHUB checksum:" + c for offset in offsets: print "KeyGen Serials:" + re_proc_serial(c, offset) '''output CTFHUB checksum:974335 KeyGen Serials:'%"!!# KeyGen Serials:1/,++- KeyGen Serials:;96557 KeyGen Serials:EC@??A KeyGen Serials:OMJIIK KeyGen Serials:YWTSSU KeyGen Serials:ca^]]_ KeyGen Serials:mkhggi KeyGen Serials:wurqqs '''
|