1、查壳
首先根据题目提示可知,是一道花指令的题目:
拉入die中查询可知是win32位无壳程序
2、ida启动
首先,shift+F12根据字符串找到主函数,F5进行反编译,如图:
根据伪代码可知,先让咱们输入一个36位的flag,然后根据3个条件进行判断,第一个if就是查询长度,第二个和第三个才是主要的:
两个函数都标红了,说明ida没有进行反编译出来,其中含有花指令
点击Tab键,进入汇编语言页面:
发现下面是一堆数据,可以知道此处花指令填充了大量的垃圾数据进行干扰反编译,所以将call指令的E8转换为NOP90即可,首先在call指令出点击U,将其重新识别为无定义,然后再修改E8位90
然后在004605D0处点击P,重新生成函数
下面的那一处也同样修改,修改完成后点击F5重新反编译
反编译完是这样两个函数,根据其代码重新将其逆回去,下面给出代码;
data1=[0x68, 0x6A, 0x60, 0x5E, 0x6F, 0x61, 0x76, 0x74, 0x2B, 0x70,
0x5A, 0x6D, 0x60, 0x68, 0x2B, 0x71, 0x2E, 0x5F]
x=[i+5 for i in data1]
enc1=''
for i in range(len(x)):
enc1+=chr(x[i])
data2=[ 0x39, 0x12, 0x0E, 0x55, 0x39, 0x0C, 0x13, 0x08, 0x0D, 0x39,
0x05, 0x56, 0x02, 0x55, 0x47, 0x47, 0x47, 0x1B]
enc2=''
for i in range(len(data2)):
enc2+=chr(data2[i]^0x66)
flag=''
flag=enc1+enc2
print(flag)
了解到了花指令的去除,这俩天要学习一些常见的加密算法之类的了