XCTF1-reverse 666

666

在这里插入图片描述

下载题目

是一个命名为666的未知文件

小白不懂,找了几篇逆向的教程普及了一下基础知识
用IDA打开,在IDA View-A窗口按F5查看伪代码
在这里插入图片描述
代码操作是对输入调用encode函数加密,然后与enflag比较。
encode加密函数:
在这里插入图片描述
在代码中定位key,长度限制为12h(需要注意12h是十六进制,将其转换成10进制是18,转换时不要带h)。
在这里插入图片描述
enflag的值为:izwhroz"“w"v.K”.Ni,转换为ASCII码

x = "izwhroz\"\"w\"v.K\".Ni"
r = ""
for i in x:
    r = r +"\\"+ str(ord(i))+' '
print(r)

在这里插入图片描述
encode函数中,for循环里每三个一组进行加密,前三行是加密算法,后面是指针赋值。
在这里插入图片描述
key等于输入字符串的长度,要使输入的字符串等于enflag,所以key等于18。
代码中的^是按位异或运算符,数值化成二进制按位异或,即为对应的二进制位相异时数值为1,相同则为0。

编写解密脚本:

enflag=[105,122,119,104,114,111,122,34,34,119,34,118,46,75,34,46,78,105]
flag=''
for i in range(0,17,3):
    flag+=chr((18^enflag[i])-6)
    flag+=chr((18^enflag[i+1])+6)
    flag+=chr(18^enflag[i+2]^6)    
print(flag)

在这里插入图片描述

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值