网鼎杯--apl(crypto)

下载题目后发现为一apl文件,简单百度后发现APL文件扩展名可能是指由一个叫猴子的音频无损音频压缩创建的曲目信息文件。尝试打开后无果。
编辑器打开发现有+号等,base64解码得到一段代码如下图
在这里插入图片描述
从没见过的东西。一时感到彷徨,再次百度大量查找相关资料。
APL是A Programming Language或Array Processing Language的缩写。肯尼斯·艾佛森1962年设计这个语言时他正在哈佛大学工作。为此他1979年获得图灵奖。在过去数十年的使用历史中,APL从它的原始版本开始不断改变和发展,今天的版本与1963年发表时的版本已经非常不一样了。但它始终是一种解释执行的计算机语言。现代的APL版本都支持其初试版本不支持的结构和模式编程。APL至今依然使用一种非标准化的字母表,这一点一直是他人对它的批评点。
又找到一个在线的apl编辑文档,可以边实验边理解。apl在线编程
apl是一个从右向左执行的语言。
APL的函数使用{}包裹,函数可以有一或两个参数,右边的参数用变量⍵表示,左边用变量⍺表示。
我们先对得到的代码进行处理,让其易读。
在这里插入图片描述
由于apl是从右往左执行的,故此推测输入flag返回yes,this is your flag. 我们需要从上面逆推。
先看最上面的函数:
在这里插入图片描述
一番尝试发现需要变量为0时输出This is flag
再进行一番测试后搞懂了几个函数,符号的作用:
在这里插入图片描述
⎕ucs()是将字符串转换为asc2码。
在这里插入图片描述
a ⍴ b 是将b扩充到a长度。
在这里插入图片描述
(1+(|¯8)⍴1)计算结果为22222222。
实验可以知道这里是将ascii转成二进制。
在这里插入图片描述
一个独立的表达式,其值固定。
在这里插入图片描述
观察后发现将其扩充为20行16列的矩阵。
⌽ ⊖分别表示将矩阵的行、列倒序。
10⊖将矩阵的列向上位移10。
7*2表示7的2次方,
⍴’FlsWhat’计算字符的长度。
a⌊b计算a,b最小值,⌊a对a取整。
⍳a返回一个1-a的数组。
+/a表示对a求和.
在这里插入图片描述
接着再转回asc2码得到结果。
接下来我们看这个函数:
在这里插入图片描述
a←(8⍴2)⊤⍵表示赋值给a
≠指异或
8↑a是保留前8位
因此,这个子函数就是f(x)=x^shift(x), shift函数为x右移一位,在前面补1。
在这里插入图片描述
⍺就是函数左边的参数,即密文。与我们加密的结果异或并求和后,如果结果是0,则答案正确。

2⊥(8 40)⍴⌽⊖10⊖(20 16)⍴(8⍴2)⊤(106 202 104 193 192 206 201 100 192 194 204 194 75 200 206 106 193 75 192 201 201 194 75 206 196 98 206 75 196 192 201 108 198 204 100 193 46 40 35 38)

70 76 65 71 56 98 51 54 99 57 48 50 45 55 100 50 55 45 52 57 57 48 45 56 101 55 49 45 52 51 52 48 98 57 55 48 56 97 53 101

将以上ascii转成字符串即为flagFLAG8b36c902-7d27-4990-8e71-4340b9708a5e

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值