news 2026/9/12 22:10:29

nssctf_fakebase

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
nssctf_fakebase


下载是个python文件,打开
先解析代码:
for i in flag:
tmp += str(bin(ord(i)))[2:].zfill(8)
每个字符转ascll码的8位二进制后,去除前缀0b,然后左侧补0至8位

b1 = int(tmp,2)
把temp的字符串当成二进制解析后再转化为整数

int(tmp, 2)是 Python 的内置整数转换函数,第二个参数2表示进制基数,意思是:把第一个参数tmp这个字符串,当成二进制格式的数字来解析,最终转换为十进制的整数。

int(字符串, 基数)是固定用法,基数可以是 2~36 之间的任意整数,用来指定输入字符串的进制:

  • int('101', 2)→ 把'101'当二进制解析,结果是十进制的5
  • int('A', 16)→ 把'A'当十六进制解析,结果是十进制的10

while b1//31 != 0:
s += s_box[b1%31]
b1 = b1//31

当这个整数>31时,对31求余作为下表,从s_box中取对应字符,再对31整除,相当于转化为31进制

很明显是要写个逆向代码
写解密脚本

importlibnum s_box='qwertyuiopasdfghjkzxcvb123456#$'s='u#k4ggia61egegzjuqz12jhfspfkay'forkinrange(5):b1=kforiins[::-1]:b1=b1*31+s_box.index(i)print(libnum.n2s(int(b1)))

这是对应上一道自定义 Base31 加密题的解密脚本,作用是反向还原加密前的明文 flag。
它的核心逻辑是:补回加密时丢失的最高位数字,再通过反向进制转换,把密文字符串还原成大整数,最终转回可读的明文字符串。


二、逐部分逐行解析

1. 导入与基础定义
import libnum s_box = 'qwertyuiopasdfghjkzxcvb123456#$' s = 'u#k4ggia61egegzjuqz12jhfspfkay'
  • libnum:CTF 逆向常用的数值处理库,这里用到的n2s函数可以直接把十进制大整数转换成对应的字节字符串,等价于 “整数转二进制→按 8 位切分→转 ASCII 字符” 的完整流程。
  • s_box:和加密代码完全一致的字符映射表,31 个字符对应 31 进制的 0~30。
  • s:已知的密文字符串,也就是加密后输出的结果。
2. 外层循环:爆破丢失的最高位
for k in range(5): b1 = k
  • 这是解密的关键:加密时循环条件为b1//31 != 0,当商小于 31 时循环终止,31 进制的最高位数字没有被存入密文,直接丢失了。
  • k就是我们补回来的最高位数字。range(5)表示先尝试 0~4 这 5 个小数值(CTF flag 开头格式固定,最高位通常很小),逐个验证哪个能还原出可读的明文。
  • b1 = k:把假设的最高位数字作为初始值,后续逐步拼接低位数字。
3. 内层循环:反向还原大整数
for i in s[::-1]: b1 = b1*31 + s_box.index(i)

这是进制转换的反向计算,和加密的「除基取余」完全对称:

  1. s[::-1]:密文倒序
    加密时先得到的余数是 31 进制的最低位,后得到的是高位,因此密文字符串是低位在前、高位在后
    解密时要从最高位开始计算,所以先把密文倒序,处理顺序就变成了从高位到低位。
  2. s_box.index(i):字符转数字
    查找当前密文字符在s_box中的下标,得到该位对应的 31 进制数字值(0~30)。
  3. b1 = b1*31 + 当前位数字
    这是进制拼接的标准公式,和十进制的123 = ((1)*10 + 2)*10 + 3逻辑完全一致:
    • 每处理一位,就把当前数值左移一位(乘基数 31)
    • 再加上当前位的数字
    • 循环结束后,就得到了完整的十进制大整数b1
4. 整数转字符串输出
print(libnum.n2s(int(b1)))
  • libnum.n2s:number to string,把大整数按大端字节序,每 8 位转成一个字节,最终拼接成完整的明文字符串。
  • 每一轮 k 对应输出一个结果,其中只有 1 个是可读、符合 CTF flag 格式的,即为正确答案。

得到flag:NSSCTF{WHAt_BASe31}

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/9/2 9:28:54

记忆与检索

摘要:大语言模型(LLM)天然具有“无状态(Stateless)”的特性,每一次交互在底层都是一次独立的数学概率推理。为了让 AI 从简单的“单轮问答机器”演进为能够长期伴随、自主决策的“智能体(Agent&…

作者头像 李华
网站建设 2026/9/1 22:38:42

梯度下降法实战:从原理到代码实现Logistics模型参数拟合

1. 项目概述:从“猜”到“算”的拟合思维跃迁 在数学建模和数据分析的实际工作中,我们常常遇到一个核心问题:手里有一堆观测数据,它们背后似乎遵循着某种规律,我们如何找到最能描述这个规律的数学方程?这个…

作者头像 李华
网站建设 2026/9/2 11:49:35

用Codex自动生成Git规范提交信息:从diff到Conventional Commits

刚接触 Git 时,最难写的往往不是命令,而是提交时那一行英文。很多人改完代码,想半天写不出一句像样的 commit message,最后随手敲一个 update 或修改。Codex 的出现让这个问题有了一个很直接的解法:把未提交的 git dif…

作者头像 李华
网站建设 2026/9/2 13:29:42

Input Leap:让一套键盘鼠标同时操作多台电脑的实操教程

Input Leap:让一套键盘鼠标同时操作多台电脑的实操教程 【免费下载链接】input-leap Open-source KVM software 项目地址: https://gitcode.com/gh_mirrors/in/input-leap Input Leap 是一款开源的 KVM(键盘、视频、鼠标共享)软件。它…

作者头像 李华