查看字符串,看到俩行字符串比较特殊,找一个跟进去
跟进了主函数,看代码吧
这边有俩次输入密码,先看第一次
atoi函数是数字转换为字符串
stract 将 @DBApp 追加道 字符串后面
下面还有一个
sub_40100A 函数
看到这边他是一个加密标志,hash加密,后面的0x8004是标识符,相当去用什么方法去加密,这边是sha1加密
看别人都是爆破写的
脚本
import hashlib
s = ‘6E32D0943418C2C33385BC35A1470250DD8923A9’.lower()
for i in range(100000,1000000):
a = str(i)+’@DBApp’
m = hashlib.sha1()
m.update(a.encode(‘utf-8’))
sha1 = m.hexdigest()
if sha1 == s:
print(i)
break
注意s中字符一定要小写,因为hashlib解密后是小写
得出来第一块密码是123321@DBApp
第二块也是一样,md5加密
下面还有一个sub_40100F函数,
大概就是, 把AAA文件复制到lpBuffer中
然后调用sub_401005 函数,
对lpString 和 lpBuffer 进行异或操作,输入的是6个字符,所以是6个字节,
也就是和文件中前6个进行异或
ResourceHacker 这个软件可以看AAA文件
完整脚本
import hashlib
passwd1 = "6e32d0943418c2c33385bc35a1470250dd8923a9"
passwd2 = "27019e688a4e62a649fd99cadaafdb4e"
suffix = "@DBApp"
aaa = [0x5, 0x7d, 0x41, 0x15, 0x26, 0x1] #AAA资源的前6个字节
rtf_header = [0x7b, 0x5c, 0x72, 0x74, 0x66, 0x31] # RTF文件头前6给字节
pass1 = ""
pass2 = ""
for i in range(100000,1000000):
instr = str(i) + suffix
res = hashlib.sha1(instr.encode('utf-8')).hexdigest()
if res == passwd1:
pass1 = str(i)
print("passwd1 = ", pass1)
break
for i in range(6):
res = aaa[i] ^ rtf_header[i]
pass2 += chr(res)
print("passwd2 = ", pass2)
flag{N0_M0re_Free_Bugs}