文章目录

  • 腾讯极客挑战赛第一期:解开一道即将尘封十几年的封印 writeup
    • 简要说明
    • 第一题 1+1=?
    • 第二题 (x*18-27)/3-(x+7496)=0, x=?
    • 第三题 `41*x-31*x^2 + 74252906=0` ,(x^2表示x的2次方,下同),x的某个根=?
    • 第四题 (1234567^12345678901234567890)%999999997=?
    • 第五题 求表达式
    • 第六题 `x^5-2*x^4+3*x^3-4*x^2-5*x-6=0`, x(精确到小数点后14位)=?
    • 第七题 请输入8位数字PIN码
    • 第八题 算出reg[0]和reg[1]
    • 总结

腾讯极客挑战赛第一期:解开一道即将尘封十几年的封印 writeup

简要说明

  • 赛题链接:腾讯极客挑战赛第一期:解开一道即将尘封十几年的封印
  • 题目代码如下。
#!/usr/bin/env python3
# -*- coding: utf-8 -*-
from Crypto.Cipher import AES
import base64
import time
import gzip
from hashlib import md5
import sys
import io
sys.stdout = io.TextIOWrapper(sys.stdout.detach(), encoding='utf-8', line_buffering=True)def Decrypt(key:str, text:str) -> str:if len(key) < 32: key += ' ' * (32 - len(key))elif len(key) > 32: key = key[0:32]cipher = AES.new(bytes(key,encoding='utf-8'), AES.MODE_CBC, bytes(AES.block_size))return str(gzip.decompress(bytes.strip(cipher.decrypt(base64.b64decode(text)))), encoding='utf-8')def Pass(id, priv_key):prefix = str(id) + str(int(time.time()))pub_key = prefix + md5(bytes(prefix + priv_key, 'utf8')).hexdigest()print('恭喜通过第%d关,通关公钥:%s' % (id, pub_key))key=input('1+1=')
exec(Decrypt(key,'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'))

第一题 1+1=?

  • 题目提示key=input(‘1+1=’)
  • 很自然地去尝试 key=‘2’,得到答案以及下一关题目。
  • 通过Pass函数获取需要提交的公钥即可。
# 第一题
key="2"
print(Decrypt(key,'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'))# 输出结果(Pass函数产生公钥和Decrypt函数参数太长,不贴出来了,这里这贴下一关的题目,下同)
...
key=input('(x*18-27)/3-(x+7496)=0, x=')
...

第二题 (x*18-27)/3-(x+7496)=0, x=?

  • 题目提示需要计算(x*18-27)/3-(x+7496)=0, 求x的值。
  • 通过简单的数学运算计算出x = 1501,可得到答案。
# 第二题
key="1501"# 输出结果
...
key=input('41*x-31*x^2+74252906=0,(x^2表示x的2次方,下同),x的某个根=')
...

第三题 41*x-31*x^2 + 74252906=0 ,(x^2表示x的2次方,下同),x的某个根=?

  • 这一关是求一元二次方程的一个根,通过求根公式可算出。
# 第三关 解
a = -31
b = 41
c = 74252906
x = (b*(-1) + math.sqrt(b**2 - 4 * a * c) ) / (2 * a)
print(x)
key = '-1547'# 输出结果
key=input('(1234567^12345678901234567890)%999999997=')

第四题 (1234567^12345678901234567890)%999999997=?

  • 这一关直接运算会导致溢出,需要用到大数求余的相关知识,具体的自行百度,这里给出代码。
# 第四题
a = 1234567
b = 12345678901234567890
c = 999999997
ans = 1
while(b):if(b % 2 == 1):ans = (ans * a) % cb = b // 2a = (a * a) % c
print(ans)
key = "42031180"# 输出结果
key=input('1_2_3_4_5_6_7_8_9=-497,每处_填入1个运算符+-*/,且4个运算符必须都用上,使得等式成立(答案保证唯一),表达式为?')

第五题 求表达式

  • 题目:1_2_3_4_5_6_7_8_9=-497,每处_填入1个运算符±*/,且4个运算符必须都用上,使得等式成立(答案保证唯一),表达式为?
  • 这一关直接通过穷举的方式算出符合条件的表达式,得到4个答案,加上需要满足4个运算符都要用上的条件,可得到唯一的答案。
# 第五题 解
expression = ['1', '_', '2', '_', '3', '_', '4', '_', '5', '_', '6', '_', '7', '_', '8', '_', '9']
opertor = "+-*/"
for i1 in range(4):expression[1] = opertor[i1]for i2 in range(4):expression[3] = opertor[i2]for i3 in range(4):expression[5] = opertor[i3]for i4 in range(4):expression[7] = opertor[i4]for i5 in range(4):expression[9] = opertor[i5]for i6 in range(4):expression[11] = opertor[i6]for i7 in range(4):expression[13] = opertor[i7]for i8 in range(4):expression[15] = opertor[i8]if eval(''.join(expression)) == -497:print(''.join(expression))
# 打印结果
1+2-3-4+5+6-7*8*9
1-2+3+4-5+6-7*8*9
1-2*3*4+5*6-7*8*9
1/2*3*4-5+6-7*8*9
# 加上限制条件,得到key
key = "1/2*3*4-5+6-7*8*9"# 输出结果
key=input('x^5-2*x^4+3*x^3-4*x^2-5*x-6=0, x(精确到小数点后14位)=')

第六题 x^5-2*x^4+3*x^3-4*x^2-5*x-6=0, x(精确到小数点后14位)=?

  • 这一关求多次幂的未知数,用到sympy库,具体使用可自行百度官网或其他说明文章。
# 第六关 解
x = symbols('x')
key = solve(Eq(x**5-2*x**4+3*x**3-4*x**2-5*x-6, 0),x)
print([N(solution) for solution in key])key = "2.19488134060852"# 输出结果
def Hash(context):result = md5(bytes(context, 'utf8'))for i in range(0, 10000000):result = md5(result.digest())return result.hexdigest()
key=input('请输入8位数字PIN码:')
print("验证中……")
if Hash(key) == '5f4654140971c47658de19d62ba472b6':exec(Decrypt(key,'...')) # 省略密文
else:print("PIN码错误")

第七题 请输入8位数字PIN码

  • 题目要求输入8位PIN码,并进行Hash之后与字符串比较,如果相同则执行解密操作。
  • 思路:直接穷举8位数进行解密操作,不进行Hash运算。
# 第七题 解
result = 0
for i in range(0, 100000000):key = "0"*(8 - len(str(i))) + str(i)try:Decrypt(key,'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')print("pin码:", key)result = keybreakexcept:if(i % 100000 == 0):print("wrong:",key)key = "79547124"# 输出结果
stack = []
ins_len = [1] * 5 + [2] * 9 + [9, 1]
reg = [0] * 16
code = base64.b64decode('zyLpMs8CL9Oy/3QDdRlURZRGFHQHdRhURZFGIL/lv+MiNi+70AXRBtMD1wfYCNkJ5v3/iV14RWMB0n+/xgk=')
while True:ins, r0 = code[reg[15]] >> 4, code[reg[15]] & 15length = ins_len[ins]if length > 1:arg = code[reg[15] + 1 : reg[15] + length]if length == 2: r1 = arg[0] >> 4; r2 = arg[0] & 15reg[15] += lengthif 0 == ins : breakelif 1 == ins : stack.append(reg[r0])elif 2 == ins : reg[r0] = stack.pop()elif 3 == ins : if not reg[r0] : reg[15] += ins_len[code[reg[15]] >> 4]elif 4 == ins : reg[r0] = 0 if reg[r0] else 1elif 5 == ins : reg[r0] = reg[r1] + reg[r2]elif 6 == ins : reg[r0] = reg[r1] - reg[r2]elif 7 == ins : reg[r0] = reg[r1] * reg[r2]elif 8 == ins : reg[r0] = reg[r1] / reg[r2]elif 9 == ins : reg[r0] = reg[r1] % reg[r2]elif 10 == ins : reg[r0] = 1 if reg[r1] < reg[r2] else 0elif 11 == ins : stack.append(reg[r0]); reg[r0] += int.from_bytes(arg, byteorder='little', signed=True)elif 12 == ins : reg[r0] += int.from_bytes(arg, byteorder='little', signed=True)elif ins in (13, 14) : reg[r0] = int.from_bytes(arg, byteorder='little', signed=True)key = str(reg[0])+str(reg[1])

第八题 算出reg[0]和reg[1]

  • 通过调试方式分析程序功能为运行表达式多次,结果保存在reg[]中。
stack = []    # 模拟栈行为
ins_len = [1] * 5 + [2] * 9 + [9, 1]  # 每个指令的长度
print("ins_len:", ins_len)
reg = [0] * 16  # 模拟寄存器
print("reg", reg)
code = base64.b64decode('zyLpMs8CL9Oy/3QDdRlURZRGFHQHdRhURZFGIL/lv+MiNi+70AXRBtMD1wfYCNkJ5v3/iV14RWMB0n+/xgk=')
print("code:", code)  # 字节格式
hexStr = ""
codeLen = 0
for byte in code:hexStr += str(hex(byte))[2:] + " "codeLen += 1
print(hexStr)    # 十六进制代码格式
print("codeLength:", codeLen)
lengthList = [0]*16
#stack = [61]
#reg = [5, 6, 4, 3, 0, 0, 99999999999999997, 7, 8, 9, 0, 0, 0, 0, 0, 3]
count = 0
while True:# input("step")print("code[%d]" %(reg[15]), hex(code[reg[15]]))ins, r0 = code[reg[15]] >> 4, code[reg[15]] & 15  # 取字节的高4位作为指令值,低4位作为r0参数print("序号:", reg[15], "指令号", ins)length = ins_len[ins]     # 获取指令长度# 测试代码# lengthList[ins] += 1print("length=", length)# print("ins_len   :", ins_len)if length > 1:arg = code[reg[15] + 1 : reg[15] + length]print("arg[%d:%d]:" %(reg[15] + 1, reg[15] + length), arg)if length == 2:r1 = arg[0] >> 4; r2 = arg[0] & 15print("r1=", r1, " r2=", r2)    # 指令长度为2的,去第二个字节的高4位和低4位分别作为r1和r2参数print("reg[%d]=" % (r0), reg[r0])reg[15] += length  # 下一条code的位置print("stack=",stack)print("reg_before:", reg)print("ins, r0:", ins, r0)if 0 == ins : break     # 跳出循环,结束elif 1 == ins :stack.append(reg[r0])   # 加入栈值print("ins1: 加入栈值, stack=", stack)elif 2 == ins :reg[r0] = stack.pop()   # 取出栈值if r0 == 0:              # 计算运行次数count += 1print("ins2: 取出栈值, stack=", stack)elif 3 == ins :print("ins3 若reg[%d]=%d为零,则reg[15]加上一个数" %(r0, reg[r0]))if not reg[r0] :reg[15] += ins_len[code[reg[15]] >> 4]      # 赋值运算print("ins3 reg[15]+= ins_len[code[reg[15]] >> 4] = " , reg[15])print("reg[15]=", reg[15])elif 4 == ins :print("ins4 reg[%d]=" %(r0), reg[r0])reg[r0] = 0 if reg[r0] else 1   # 0 1 互换elif 5 == ins :reg[r0] = reg[r1] + reg[r2]     # 加print("ins5 reg[%d]+reg[%d]=" % (r1, r2), reg[r0])elif 6 == ins :reg[r0] = reg[r1] - reg[r2]     # 减print("ins6 reg[%d]-reg[%d]=" % (r1, r2), reg[r0])elif 7 == ins :reg[r0] = reg[r1] * reg[r2]     # 乘print("ins7 reg[%d]*reg[%d]=" % (r1, r2), reg[r0])elif 8 == ins :reg[r0] = reg[r1] / reg[r2]     # 除print("ins8 reg[%d]/reg[%d]=" % (r1, r2), reg[r0])elif 9 == ins :reg[r0] = reg[r1] % reg[r2]     # 求余print("ins9 reg[%d]%%reg[%d]=" % (r1, r2), reg[r0])elif 10 == ins :reg[r0] = 1 if reg[r1] < reg[r2] else 0    # 比较赋值print("ins10 比较赋值, reg[%d]=" %(r0), reg[r0])elif 11 == ins :stack.append(reg[r0])       #加入栈值temp = int.from_bytes(arg, byteorder='little', signed=True)reg[r0] += tempprint("ins11: 加入栈值,stack:", stack)print("ins11 reg[%d]+%d=" %(r0, temp), reg[r0])elif 12 == ins :temp = int.from_bytes(arg, byteorder='little', signed=True)reg[r0] += tempprint("ins12 reg[%d]+%d=" % (r0, temp), reg[r0])elif ins in (13, 14) :temp = int.from_bytes(arg, byteorder='little', signed=True)reg[r0] = tempprint("ins13-14 reg[%d]=arg=%d" %(r0, temp))print("reg_after:", reg)print("reg[%d]=" % (r0), reg[r0])print("stack=", stack)print("count=", count)print("--------------------")print("reg_after:", reg)
print("stack=", stack)
print("count=", count)
  • 可初步分析出code有以下功能。
# 初始化
def init():print("初始化函数")reg[0] = 5reg[1] = 6reg[3] = 3reg[7] = 7reg[8] = 8reg[9] = 9reg[6] = 99999999999999997reg[2] = 127# 运算reg[0],reg[1]
def operation():reg[4] = reg[0] * reg[3]reg[5] = reg[1] * reg[9]reg[4] = reg[4] + reg[5]reg[4] = reg[4] % reg[6]temp = reg[4]reg[4] = reg[0] * reg[7]reg[5] = reg[1] * reg[8]reg[4] = reg[4] + reg[5]reg[1] = reg[4] % reg[6]reg[0] = temp# 运算次数通过修改reg[2]=127的值进行调试,找到规律,是累加的累加,计算次数的函数如下
def calculateNum(time):num = 1sum = [0]while num <= time:temp = 0for i in range(num):temp += sum[i]sum.append(num + temp)num += 1print("运算次数:", sum[time])return sum[time]
  • 对上述程序运算过程进行优化,得到如下测试代码,用于验证前几次运算的结果是否正确。说明code的运算过程没有问题。
# 运算过程
def operation(x, y):temp = (3*x + 9*y) % 99999999999999997y = (7*x + 8*y) % 99999999999999997x = tempreturn x, y
# 计算运算次数
def calculateNum(time):num = 1sum = [0]while num <= time:temp = 0for i in range(num):temp += sum[i]sum.append(num + temp)num += 1print("运算次数:", sum[time])return sum[time]
# 测试运算结果
def test(time):x = 5y = 6time = calculateNum(time)for i in range(time):x, y = operation(x, y)print("x=%d, y=%d" % (x, y))
test(4)
  • 根据reg[2] = 127,calculateNum(127)计算运算次数为170141183460469231731687303715884105727
  • 可以发现运算的次数非常大,是不可能快速运算完的,需要优化算法。
  • 可通过矩阵点乘的方式算出2^n次运算对应的常数列表,然后根据剩余的运算次数选择相应的常数值进行运算。
  • 代码如下。
MatrixA = np.array([[3, 9], [7, 8]])
MatrixList = []
MatrixList.append(MatrixA)
# 生成常数矩阵列表
def CreateMatrixList(powerNum):MatrixB = np.array([[3, 9], [7, 8]])for i in range(powerNum):MatrixB00 = int(MatrixB[0][0])MatrixB01 = int(MatrixB[0][1])MatrixB10 = int(MatrixB[1][0])MatrixB11 = int(MatrixB[1][1])temp00 = MatrixB00 * MatrixB00 % 99999999999999997 + MatrixB01 * MatrixB10 % 99999999999999997temp01 = MatrixB00 * MatrixB01 % 99999999999999997 + MatrixB01 * MatrixB11 % 99999999999999997temp10 = MatrixB10 * MatrixB00 % 99999999999999997 + MatrixB11 * MatrixB10 % 99999999999999997temp11 = MatrixB10 * MatrixB01 % 99999999999999997 + MatrixB11 * MatrixB11 % 99999999999999997MatrixB = np.array([[temp00, temp01], [temp10, temp11]]) % 99999999999999997# 计划添加 列表,保存之前计算过的值MatrixList.append(MatrixB)# 矩阵运算
def MatrixOperation(x, y, test):a00 = int(test[0][0])a01 = int(test[0][1])a10 = int(test[1][0])a11 = int(test[1][1])temp = (a00*x%99999999999999997 + a01*y%99999999999999997)%99999999999999997y = (a10*x%99999999999999997 + a11*y%99999999999999997)%99999999999999997x = tempreturn x, y# 计算reg[0], reg[1]
def CalculateKey(time):# 运算次数# countContrl = 170141183460469231731687303715884105727count = calculateNum(time)CreateMatrixList(time)x = 5y = 6while count != 0:# 将运算次数求对数powerNum = int(math.log(count, 2))# 根据运算次数求幂num = int(math.pow(2, powerNum))print("powerNum:", powerNum)# 选取对应的幂值,如果运算次数小于求幂的值,说明取对应的矩阵值会溢出if count < num:powerNum -= 1num = int(math.pow(2, int(powerNum)))if count < num:print("致命错误!退出")breakprint("小于操作")elif count > num:print("大于操作")elif count == 0:# 退出print("退出")breakelse:print("等于操作")# 运算过程count -= numx, y = MatrixOperation(x, y, MatrixList[powerNum])print("剩余次数:", count)print("已运算次数:", num)print("幂:", powerNum)print("MatrixList[%d]=" % (powerNum), MatrixList[powerNum])print("x=%d, y=%d" % (x, y))print("---------------------")# break# 计算reg[0], reg[1]
CalculateKey(127)

总结

  • 总结一下之前解题的思路。
  • 熟悉一下writeup文章的编写。

腾讯极客挑战赛第一期:解开一道即将尘封十几年的封印 writeup相关推荐

  1. 腾讯极客挑战赛正式开赛!「鹅罗斯方块」开“玩”啦

    燃爆盛夏,「腾讯极客挑战赛」巅峰对决竞技场现已开启! 极客对决,等你前来! 点击[阅读原文],即刻报名参赛 勇夺offer名额和万元奖品!

  2. 腾讯极客挑战赛邀你“码上种树”

    腾讯 TK 教主的7点职场学习心得分享

  3. 【最强大脑】全球脑王的极客挑战赛之路:1413876分夺冠如何炼成?

    导语 | 在腾讯云+社区联合腾讯码客.腾讯安全平台部全新打造的创新赛事[腾讯极客挑战赛 | 鹅罗斯方块]中,4570名参赛者为我们带来前所未有.异彩纷呈的作品.一场技术竞技,把一群志同道合的开发者聚集 ...

  4. 近期活动盘点:首届Apache Flink 极客挑战赛、2019年社会计算机国际会议

    想知道近期有什么最新活动?大数点为你整理的近期活动信息在此: 7 月 24 日,阿里云峰会上海开发者大会开源大数据专场,阿里巴巴集团副总裁.计算平台事业部总裁贾扬清与英特尔高级首席工程师.大数据分析和 ...

  5. 报名 | 首届!Apache Flink 极客挑战赛强势来袭,重磅奖项等你拿,快来组队报名啦!...

    7 月 24 日,阿里云峰会上海开发者大会开源大数据专场,阿里巴巴集团副总裁.计算平台事业部总裁贾扬清与英特尔高级首席工程师.大数据分析和人工智能创新院院长戴金权共同发布首届 Apache Flink ...

  6. 第三届Apache Flink 极客挑战赛暨AAIG CUP攻略发布!

    简介:阿里云 周云峰(云岩).淘系技术部 黄家明(明小)两位老师共同解读第三届Apache Flink 极客挑战赛暨AAIG CUP赛题内容 本文作者:阿里云 周云峰(云岩).淘系技术部 黄家明(明小 ...

  7. 第三届 Apache Flink 极客挑战赛暨 AAIG CUP 报名开始!

    简介:万众期待的第三届极客挑战赛,报名进行中- 伴随着海量数据的冲击,数据处理分析能力在业务中的价值与日俱增,各行各业对于数据处理时效性的探索也在不断深入,作为主打实时计算的计算引擎 - Apache ...

  8. 26万奖金 | 第一届 E-MapReduce 极客挑战赛 诚邀英才前来挑战!

    日前," 第一届 E-MapReduce 极客挑战赛 "在阿里云天池官网正式开赛.据悉,本次大赛由阿里云.英特尔联合举办,聚焦 SparkSQL 执行效率,探索 TPC-DS 测试 ...

  9. 26万奖金 | 阿里云 E-MapReduce 极客挑战赛邀你来战!

    日前," 第一届 E-MapReduce 极客挑战赛 "在阿里云天池官网正式开赛.据悉,本次大赛由阿里云.英特尔联合举办,聚焦 Spark SQL 执行效率,探索 TPC-DS 测 ...

最新文章

  1. Apache与Nginx实现Web页面动静分离(产生的原因,应用场景)
  2. .net 小问题集合
  3. 第二个一千行总结-数据结构C复习--知识点总结2--五到七章
  4. 无刷新分页 jquery.pagination.js
  5. 浙江省二级计算机vfp,浙江省计算机2级vfp程序调试真题集.doc
  6. java我现在不懂看不懂,看都看不懂,难道我与Java无缘吗
  7. Judge whether the user is in some windows group.
  8. R语言ggplot2包之画折线图
  9. java 将ofd转为pdf(代码简单)
  10. WebService框架——CXF介绍
  11. 阿里开源共享:IDE导入阿里编码规约格式化模板和注释模板
  12. NAT穿透技术简介和实现方案分析
  13. 电路基础之:差模信号与共模信号
  14. 尚雯婕个唱化身宫廷芭比娃娃
  15. mysql数据库误删恢复
  16. C - Matrix Reducing
  17. linux默认头文件,Linux安装合适内核头文件的方法
  18. 苹果Mac 无法读写NTFS格式的U盘或移动硬盘?一次解决
  19. LTSPICE仿真那些事
  20. 【动手学MVG】张正友标定法原理与实现

热门文章

  1. 一键淘宝应用模板,轻松打包店铺网址,一键生成APP
  2. 小说《Walden.tet》单词词频统计
  3. 《智慧校园规划与管理》10个部分
  4. HMI车载开发:汽车与Android的关系:Android Auto
  5. Word控件Spire.Doc 【打印】教程(2):保打印word文档不显示打印处理对话框
  6. TypeError: Cannot read property ‘_wrapper‘ of undefined
  7. 大学生如何白嫖并使用腾讯云mysql云数据库
  8. B站热榜视频,炒股源码来了!
  9. 2021年春秋杯网络安全联赛秋季赛逆向snake.exeWriteup
  10. 【转】一个字节可以用多少位的十六进制表示