writUp没有写完,浅尝辄止,懂了一点点,感觉也写不下去了
01 Base64解码
看到这样一串大小写字母跟数字混杂在一起的乱码,首先想到的肯定是Base64解码
1-1 比赛时解码
在比赛时,解码出来是一堆更乱的字符串,不过英文显示是正确的
到这一步,跟搜索出来的APL语言更是毫无联系,于是这个题目就死在了这一步
1-2 正确的情况
后来在找到一个在线解码的网站,终于是跟某WriteUp显示的编码是一样的了,也跟APL语言中奇奇怪怪的符号联系起来了。
小白推测,之前解码出来仍是乱码的原因是APL语言的符号是非标准编码,然后大部分解码都是转成utf-8,所以会出现乱码。
02 APL
- 函数定义用txt{···}txt来界定
- 代码从右往左执行
- 函数的参数可以有一个或两个
- 形参⍵表示右边的实参
- 形参⍺表示左边的实参
函数可以表示为txt {···} txt
2-1 代码结构
1 | {⍵(~⍵)/('No_Please_continue')('Yes,This_is_flag')} |
2-2 各个函数含义
{⍵(~⍵)/(‘No_Please_continue’)(‘Yes,This_is_flag’)}
查阅文档,’~’的含义是’非’
参数跟在{}后(根据之前的{} txt定义)
根据运行情况我们可以知道,之后的一大串代码的运算结果需要是’0’
(···){···}’YourFlagIsWhat?’
⍺ : (∊(41(41)0+140)(⎕UCS(‘xxx’))146)
⍵ : ‘YourFlagIsWhat?’
这段代码较长,我们逐一来看
1 | (∊(41(41)0+140)(⎕UCS('µě»ÕĀ$#Ğ$èáËĞĞĝ`âÞĠ#"!Ġ"KE(©$#Ğ$Q<k'))146) |
- ∊:文档的解释是enlist
- ∊(41(41)0+140)串成一个链表即{181,181,140}
- ⎕UCS():Unicode Convert(就是将那一堆乱七八糟的东西转化成Unicode)
运行结果:
1 | (∊(41(41)0+140)(⎕UCS('µě»ÕĀ$#Ğ$èáËĞĞĝ`âÞĠ#"!Ġ"KE(©$#Ğ$Q<k'))146) |