下载附件
先查壳
发现没加壳
再拖进 IDA 分析
按shift+F12查找字符串,可以看到如下 Base64 加密的痕迹,可判断基本是一个反解 flag 的题目
找到主函数按F5查看伪代码,如下:
可以发现这样的一个关键函数,也就是会将 Destination 与 Str2 进行比较,如果正确为right
分析可知:将输入的串Str1先进行base64加密 再与串Str2比较 若相等 则输出"right flag"
由此,我们只需将Str2也就是"e3nifIH9b_C@n@dH"进行解密即可
将str2和Dest相比较,而Dest为取V4的前长度0x28u的字符
V4的值来自sub_4110BE
Sub_4110BE取自sub_411AB0
Dest由v4而来,v4会通过base64加密,然后对Dest做了第2次的加密,v11为Dest的长度
而 Destination 是通过对输入的内容进行一连串变化之后得到的,str2是给出的
首先输入的东西通过 sub_4110BE 这个函数进行加密,得到初步的结果,跟进看看这个函数
点开加密函数:
关键语句就在这里 我们可以看到是算输入的字符按三个一组能分为几组 然后将这个数字乘上4
我们很容易想到是base64加密 因为和base64加密的过程太像了
看一下它的变换数组:
完整函数:
关键部分:
aAbcdefghijklmn 即:
可见输入内容先经过 sub_4110BE 这个函数进行 base64 加密,然后各位加上下标本身,再与 str2 比较
而str2的值为 “e3nifIH9b_C@n@dH”
编写解密脚本
import base64
str = "e3nifIH9b_C@n@dH"
f = ''
flag = ''
for i in range(len(str)):
f += chr(ord(str[i])-i)
flag = base64.b64decode(f)
print(flag)
得到flag