reverse3题解
1.查壳
是一个32位可执行文件,没有壳
2.拖入32位IDA静态分析
找到_main_0函数
按下F5反编译
函数稍有点复杂,可以先看看string窗口,看看有没有什么关键的字符串能帮助解题
找到一个标准的base64编码表,说明这个题应该用到了base64加密
base64加密有关内容
Base64编码和Python解码_光无影的博客-CSDN博客
带着这个获取到的信息继续有针对性地查看反编译的代码
sub_41132F("please enter the flag:"); sub_411375("%20s", &Str); v3 = j_strlen(&Str); v4 = (const char *)sub_4110BE((int)&Str, v3, (int)&v12); strncpy(Dest, v4, 0x28u);
这个输入了flag,获取了长度
sub_4110BE可能就是对输入的Str进行了Base64加密,双击跟进查看
双击跟进sub_411AB0
这一段就是base64加密的特征代码,说明确实是对于这个输入的flag进行了base64加密
使用的应该是我们找到的标准base64编码表
返回主函数继续查看
v4 = (const char *)sub_4110BE((int)&Str, v3, (int)&v12); strncpy(Dest, v4, 0x28u); v9 = j_strlen(Dest); for ( j = 0; j < v9; ++j ) Dest[j] += j; v5 = j_strlen(Dest);
将加密后的字符串赋值给Dest,进行了一个for循环的操作
if ( !strncmp(Dest, Str2, v5) ) sub_41132F("rigth flag!\n"); else sub_41132F("wrong flag!\n");
然后将进行了这个操作后的字符串与Str2进行比较,相等就是正确的字符串,说明Str2中存储的就是加密并且for循环操作后的字符串
查看Str2,并且编写逆向脚本,先for循环减去for循环中加的数值,再对得到的字符串解密
双击跟进Str2,得到Str2
'e3nifIH9b_C@n@dH'
3.编写wp
import base64 tmp="" Str2='e3nifIH9b_C@n@dH' for i in range(0,len(Str2)): tmp+=chr(ord(Str2[i])-i) flag=base64.b64decode(tmp.encode()); print(flag.decode())