Jarvis OJ 【Reverse】FindKey

题目:FLAG就是你输入的key

链接:findkey.31a509f4006ba41368dcf963762388bb

首先用file看下是python2.7的字节码,拖入kali用uncomply2反编译,找到核心代码:

if len(flag) != 17:
    print 'Wrong Key!!'
    sys.exit(1)
flag = flag[::-1]
for i in range(0, len(flag)):
    if ord(flag[i]) + pwda[i] & 255 != lookup[i + pwdb[i]]:
        print 'Wrong Key!!'
        sys.exit(1)

print 'Congratulations!!'

 大意是flag要为17位,且首先经过逆向,然后遍历,如果任意flag[i]对应ascii十进制和pwda[i]&255(即自身)都要等于lookup[i+pwdb[i]]才Right。开始写解码:

str=""
for i in range(0,17):
	tmp=lookup[i+pwdb[i]]-pwda[i]&255
	#print(tmp)
	str+=chr(tmp)
str=str[::-1]
print(str)

 

这里补充:

数值运算高于位运算,这是题目trap。

 

 

 

                                    

 

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值