思路:
64位无壳exe
直接使用ida打开
对变量名进行简单的处理, 提升代码的可读性
对代码进行简单分析
Str2
加密的flag
Str
为用户的输入
通过三个函数对Str
进行三次加密,最终和Str2
进行比较
直接看encode_three
函数
这个函数对字符串进行了偏移,有mod操作就不考虑逆向推了,直接使用暴力破解
再看encode_two
函数
这个函数对字符串进行了位移,每次位移13个字符
再看最后一个函数encode_one
这个函数也是一眼丁真了,base64
查看alphabet
变量,正是base64的码表
写脚本还原flag
exp:
import base64
enc = "EmBmP5Pmn7QcPU4gLYKv5QcMmB3PWHcP5YkPq3=cT6QckkPckoRG"
enc_decode = ""
enc_decoee_2 = ""
for enum in range(len(enc)):
for enum_char in range(32,128):
if enum_char <= 64 or enum_char > 90:
if enum_char<= 96 or enum_char > 122 :
if enum_char <= 47 or enum_char > 57:
if enc[enum] == chr(enum_char):
enc_decode += chr(enum_char)
else:
if enc[enum] == chr((enum_char - 48 + 3) % 10 +48):
enc_decode += chr(enum_char)
else:
if enc[enum] == chr((enum_char - 97 + 3) % 26 + 97):
enc_decode += chr(enum_char)
else:
if enc[enum] == chr((enum_char - 65 + 3) % 26 + 65):
enc_decode += chr(enum_char)
enc_decoee_2 += enc_decode[13:26]
enc_decoee_2 += enc_decode[39:52]
enc_decoee_2 += enc_decode[0:13]
enc_decoee_2 += enc_decode[26:39]
print(base64.b64decode(enc_decoee_2.encode()))
总结:
知识点:
- 暴力破解
flag
GWHT{672cc4778a38e80cb362987341133ea2}