1.查壳
64位的exe文件,无壳
2.IDA64 打开
F5查看伪代码
分析逻辑后查看伪代码,发现这里是一种凯撒加密
96,98,64,66分别对应 ` ,b,@和B,而2和24相加为26正好是26个英文字母,到这里就可以猜想到是移位加密了,但是在这道题里还存在一点小bug,结果有重合
我写的第一个脚本得到的flag在IDA中进行测试
enc = "ylqq]aycqyp{"
flag = ""
for i in enc:
if (ord(i) <= 96 or ord(i) > 98) and (ord(i) <= 64 or ord(i) > 66):
flag+=chr(ord(i)+2)
else:
flag+=chr(ord(i)-24)
print(flag)
>>>
{nss_I{es{r}
将flag放进IDA动调,输入flag之后发现里面有一位不正确
分析发现是a
这一位,因为a对应的ASCII值是97,正好介于96和98之间,a是结果中的值,现在逆运算回去的话,a应该是由c-2得到的,修改后重新调试
这下应该是拿到flag了,提交发现错误,可是这里输出就是真的flag。仔细看了看flag的格式,确实不太像真的flag的格式。
由于这道题里会有结果重合的情况,那我们之间所有情况都列出来,上脚本
str2= "ylqq]aycqyp{"
str2=list(str2)
for i in range(0,len(str2)):
if (ord(str2[i])<=120 or ord(str2[i])>122) and (ord(str2[i])<=88 or ord(str2[i])>90):
str2[i]=chr(ord(str2[i])+2)
else:
str2[i]=chr(ord(str2[i])-24)
flag=''
for i in range(0,len(str2)):
flag+=str2[i]
print(flag)
>>>
anss_caesar}
enc = "ylqq]aycqyp{"
flag = ""
for i in enc:
if (ord(i) <= 94 or ord(i) > 96) and (ord(i) <= 62 or ord(i) > 64):
flag+=chr(ord(i)+2)
else:
flag+=chr(ord(i)-24)
print(flag)
>>>
{nss_c{es{r}
从这些结果中组合出一个最像flag的flag。
{nss_caesar}
将其提交,成功了。