一年一度的 GeekGame 结束了,Binary 分类的题又是一个不会。总分 1143,排名 82 甚至比赛结束前两分钟还喜提排名 -1,摆了.jpg
签到
下载文件,直接丢到 Chrome 浏览器打开,是可以正常复制的。直接粘贴到记事本里面,然后就可以看到 flag 了。
编原译理习题课
玩挺大
要在限时三秒内输出一个挺大的编译产物,Google 搜索 compiler bomb
相关的内容,随便找一个改一改.jpg
比如: const int a[2147483]={195};int main(){};
玩挺长
输出一个很长的报错,可以让引用层数变得很深,然后 g++ 就会一直输出 #include nested too deeply
的报错。
1 |
|
Flag Checker
简单的 Java 逆向题,直接丢到 jadx 里看反编译出的源码。
Flag 1
源码里有一个 rot13 函数,判断部分将输入先 base64 再 rot13,因为 rot13 加解密算法一致,所以直接把函数揪出来编译运行即得 flag
Flag 2
这里用了一个叫做 nashorn 的 ScriptEngine。下面有一个 StringBuilder 用来构建传入的代码,同样也是揪出来运行,得到一串混淆了的 JavaScript 源码。肉眼反混淆一下就能写出解密代码
1 |
|
丢到浏览器里运行即可。
给钱不要
看了提示也只会做第二问,太菜了
在给出的提示中,对于 JavaScript Bookmarklet 进行了一个正则匹配 (?i)javascript:([^;=().\"]*)
,观察发现反斜杠和单引号并不在匹配列表中,这就很巧了,可以用 unicode 编码来构建一个能绕过正则的 payload。xssbot 会返回标题,所以 document.title = document.body.innerHTML;
,unicode 编码后如下:
1 |
|
结尾的 //
是为了注释掉 js 加上来的 .jpg
。
这也能卷
Flag1
进入题目后点击 Premium 然后发现被 debugger 卡掉了,再一看是高度混淆过的 js 搞的鬼,这条路基本上不能走了 会变得不幸。
回到主页,看到 main.js
对 Premium 的判定 localStorage.getItem('i_am_premium_user') === 'true'
是完全在前端进行的,手动 setItem,再进入 Premium 页面,发现多了个 flag。
扫雷 II
Flag 1
Golang 的随机数,种子一致,随机数也一致。题目程序中的随机数是根据当前时间戳设置的,所以写个程序简单爆破一下。
1 |
|
可以得到下一局的布局,然后手动扫一下就好了 (点错了好几次)
总结
这次 GeekGame:
- 科技并带着趣味
- 不觉得这很酷吗
- 作为一名理工男
- 我觉得这太酷了
- 很符合我对未来生活的想象
我太菜了.jpg