XCTF-Reverse:python-trade

测试文件:https://adworld.xctf.org.cn/media/task/attachments/69c8f29912ae4f679d92a6cd36c33196.pyc
在这里插入图片描述
pyc反编译在线:https://tool.lu/pyc/
在这里插入图片描述

#!/usr/bin/env python
# visit http://tool.lu/pyc/ for more information
import base64

def encode(message):
    s = ''
    for i in message:
        x = ord(i) ^ 32  # ord()可用于字符转成ASCII码
        x = x + 16
        s += chr(x) # 转字符
    
    return base64.b64encode(s)  # 返回s通过base64加密之后的值
    # 分析可知返回值一定等于'XlNkVmtUI1MgXWBZXCFeKY+AaXNt' 只要逆着分析就能得到message

correct = 'XlNkVmtUI1MgXWBZXCFeKY+AaXNt'
flag = ''
print 'Input flag:'
flag = raw_input()
if encode(flag) == correct:
    print 'correct'
else:
    print 'wrong'

base64.b64encode()用法 / base64 decode用法
在这里插入图片描述
在这里插入图片描述

编写python脚本:
在这里插入图片描述

# 解题思路:
# 1、correct用base64解密
# 2、然后通过
# 	for i in message:
# 		x=ord(i)^32
# 		x=x+16
# 		s+=char(x)
# 倒推出flag
# 
import base64
correct="XlNkVmtUI1MgXWBZXCFeKY+AaXNt"
mid_flag=base64.b64decode(correct)
print(mid_flag)
flag=''
for i in mid_flag:
	j=i-16
	j=j^32
	flag+=chr(j)
print(flag)
# 异或: (如下关系只有异或满足)
# a^b=c   c^b=a   c^a=b
# 0011
# 0001
# ————
# 0010  # 相异的时候才为1

在这里插入图片描述
nctf{d3c0mpil1n9_PyC}

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值