[NSSCTF][SWPUCTF 2021 新生赛]re2

在这里插入图片描述

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}将其提交,成功了。

  • 14
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值