Files
hackergame2020-writeups/players/Hykilpikonna
..
2020-11-07 17:39:52 -05:00
2020-11-07 17:39:52 -05:00

小桂的 wwwwwwwriteup (?


先说说小桂的背景w

这是第一次参加 CTF 比赛w!

小桂擅长的是实用编程啦,所以解的大部分都是可以盲目的写代码就能解决的题嗯w
(论一个对数理,密码学,二进制逆向全都不感兴趣的高四留学生怎样拿的 #18 (╯‵□′)╯︵┻━┻
然后就是这里只写了感兴趣的嗯,大家答案都一样的那种就不写啦w

虽然代码写的真的很长也发出来啦,大部分都是用 Kotlin 解的嗯w
(第一次参赛不知道 Python 有那么多方便的 CTF 库就写了好多轮子 /-\


14: 来自未来的 D-Mail

(会有 3020 的考古队看到这个嘛w?🤔

  1. 把 QR 解析成 byte[] 然后写到文件里(和 rawBytes 不一样哦!
  2. 用 tar 解开那个文件w
  3. 用 tar 解开 repo.tar.xz

过程

这道题真的饶了好大一圈哇w
Python 的库试过的: zbar 装不上,qrtools 不能用来解析,pyzbar 很多都是空的 ;-;
然后用了 Java 的 ZXing 啦w
(btw 默认配置会报错找不到 QR 码在图中的哪里(还能在哪里呀 (╯‵□′)╯︵┻━┻
但是配置好之后 rawBytes 加在一起却不能被压缩格式读出来...

当时已经快要放弃了的时候发现 rawBytes 和解析出来的字符串的 HEX 对应不上!
然后才发现 rawBytes 是 QR 码读出来的未处理格式啦w
但是 ZXing 库也不会存没有被 String encode 的解析数据,那怎么办呢w
啊哈哈哈最后直接改了 ZXing 的源码把 byte[] 转换成字符串的地方加进去了

*** com.google.zxing.qrcode.decoder.DecodedBitStreamParser
@@ -232,235 +234,241 @@
    readBytes[i] = (byte) bits.readBits(8);
  }

+ // CTF: Append the parsed bytes
+ CTFQRKt.setParsedBytes(Bytes.concat(CTFQRKt.getParsedBytes(), readBytes));

  String encoding;
  if (currentCharacterSetECI == null) {

15. 狗狗银行 🐶🏦

数学方面的

  1. 信用卡欠 2099 的话每天的利息是 10.49(10),实际利率是 4.99%
  2. 储蓄卡存 167 的话每天的利息是 0.501(1),实际利率是 5.98%
  3. 每张信用卡欠 2099 可以给 12 张储蓄卡付 167,每天 +2 嗯w

程序的步骤

  1. 初始化:添加 20 组上面说的 12 张储蓄卡和一张信用卡的卡组w
  2. 每天用交换卡(是卡1)度过,
  3. 每当储蓄卡里面的余额超过 167 到一定程度就转到交换卡上,
  4. 每当信用卡里面的欠款超过 2099 就用交换卡还一定程度的款w
    (转多少是由天数决定的啦,因为前期太高了的话交换卡可能没钱还款,后期太低了的话转账数就太多了)
    (现在这个是由 10 + date / 10 决定的啦)
  5. 吃就好啦!🐷

如何把狗狗银行当做 Exponential Idle 玩

  1. 下一天开始的时候检测还完信用卡之后每天的净收入是不是大于 10
  2. 如果大于的话,
    先把所有的储蓄卡转到卡1,然后把所有的信用卡欠款还回去,
  3. 然后开始每天吃就行啦w

result

是开了小号上挂的啦(笑)
(出题人一觉醒来亏了 11223642766526360638636283649076025898967827371899028387 亿