BUUCTF–findKey

IDA打开,发现没有直接找到加密函数,通过字符串查找**flag{}**找到函数,发现没有转换成函数,选中区域,通过p键转换成函数。

1

0kkd1a55k222k2a776jbfgd`06cjjb给了str,SS给了v13,sub_401005函数发现是一个异或,那就是str和v13异或,下面一个if判断String1和Str是否相等。回过头去找String1在哪里出现过,发现上面的sub_40101E对String1进行了加密

2

API CryptCreateHash,0x8003u可以知道是MD5

接下来unk_423030给v12,与原来的String1异或

第一个过程,使用0kkd1a55k222k2a776jbfgd`06cjjb和SS异或,得到c8837b23ff8aaa8a2dde915473ce0991,md5解密得到String1=123321

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
# -*- coding:utf-8 -*-

a = "0kk`d1a`55k222k2a776jbfgd`06cjjb"
b = "SS"
s = ''

for i in range(len(a)):
s += chr(ord(a[i]) ^ ord(b[i % 2]))
print (s)

c = [0x57, 0x5E, 0x52, 0x54, 0x49, 0x5F, 0x01, 0x6D, 0x69, 0x46, 0x02, 0x6E, 0x5F, 0x02, 0x6C, 0x57, 0x5B, 0x54, 0x4C,
0x00, 0x00, 0x00, 0x00, 0x00, 0x53, 0x53, 0x00, 0x00, 0x30, 0x6B, 0x6B, 0x60, 0x64, 0x31, 0x61, 0x60, 0x35, 0x35,
0x6B, 0x32, 0x32, 0x32, 0x6B, 0x32, 0x61, 0x37, 0x37, 0x36, 0x6A, 0x62]
d = '123321'
flag = ''
for i in range((len(c))):
flag += chr(c[i]^ord(d[i % len(d)]))
print (flag)