首页
社区
课程
招聘
[原创]第五题 青梅竹马
2019-3-20 22:32 2414

[原创]第五题 青梅竹马

2019-3-20 22:32
2414

(作者:pIzza)
文本常量被base64加密过.

from base64 import b64decode, b64encode
from string import maketrans
fr = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/'
to = 'ABCyVPGHTJKLMNOFQRSIUEWDYZgbc8sfah1jklmnopqret5v0xX9wi234u67dz+/'
trans = maketrans(fr, to)
def dec(s):
    return b64decode(s.translate(trans))
s = ['bmdeTH8Xb2unTHN5TSVhTQ==', 'bWzXZSB3b3JrTHRvTGRvTQ==', 'sWE9LCBjb3JXZWNwTHN5TQ==', 'c24aZGzlc24n8CB3b3JrTQ==']
print(map(dec,s))

['no, wCong sn!!!!', 'moCe work to do!', 'yes, corCect sn!', "sn doesn't work!"]

 

首先校验输入格式, 输入长度大于等于12, 前两位字符不能都为A, 第六与第十二个字符为V, 所有字符是数字或字母.

 

将输入去掉第六与第十二个字符, 用base64解密, 按小端序转为整数, 计算pow(x, 83, 20364840299624512075310661735), 结果作为下标获取文本常量, 当结果为2时得到正确答案的提示.

from Crypto.Util.number import inverse, long_to_bytes
n = 20364840299624512075310661735
e = 83
factors = [3,5,7,11,13,17,19,23,29,31,37,41,43,47,53,59,61,67,71,73]
phi = reduce(lambda x, y:x*(y-1), factors, 1)
d = inverse(e, phi)
x = pow(2, d, n)

s = long_to_bytes(x)
t = b64encode(s).rstrip('=')
t = t.translate(trans)
t = t[:5] + 'V' + t[5:10] + 'V' + t[10:]
print(t)

flag:PEDIyV9102dVreadyu


[CTF入门培训]顶尖高校博士及硕士团队亲授《30小时教你玩转CTF》,视频+靶场+题目!助力进入CTF世界

收藏
点赞1
打赏
分享
最新回复 (0)
游客
登录 | 注册 方可回帖
返回