ようじょのおえかきちょう

ふぇぇ お医者さんにペン持ったらダメっていわれた〜〜

こころの症状

yamasy1549.hateblo.jp

これのつづき。

前回からの進捗として学校のカウンセラーさん / 保健室の先生にお世話になったり、今週はめっちゃ勇気出して心療内科へ行って「過敏症状つよいね〜」って言われたりした。おくすり、大変眠くなって作業が捗らないので、にゃーん。

抑うつ気分

4月半ばから現在まで継続的にこんな感じ。

  • 気分が落ち込む。泣きたくなる、泣く
    • 起床時・帰宅中の電車・家・特に寝る時にひどい
    • 学校にいるときなど、対人モードだと相手に心配かけたくない気持ちが上回って、症状はかなり抑えられる
      • 対人モード : 他人の期待を反映した、強い自分を演じているときの状態。人前では99%くらい対人モードなので、みんなが知ってるのは対人モードのやましー
      • けど体力ゴリゴリ削れるので帰る頃には虫の息してる

不安・焦り

4月半ばから現在まで。

  • はやくしんどいのを治さないと、と思って焦る
    • 同級生は受験勉強をしているのに、時間のある自分は精進できていない
    • 身体の怠さと頭痛と抑うつ気分で何も手に付かない
  • お友達がほしいのにいない、見当たらない
    • 一緒にいろんなところ行ったり美味しいもの食べたり楽しい話(技術系だとうれしい)をしたい
    • 教室にいるとだいたいお友達のいる人間ばっかりなので孤独感が半端なくて長く滞在できない。焦る
  • 相談相手がいない
    • 相談しようと思っていた相手をロストしてしまった。なんでロストしてしまったか理由がわからない、理由知りたい……
      • これはさすがにタイミングが悪すぎて、こっからかなり悪化した感ある
    • お友達がいないので当然相談相手もいない
      • でもひとり相談にのってくれる人がいます、うれしい。あの人はどういう扱いになるのかな

遠くへ行きたい・消えてしまいたい

これも4月半ばから現在まで。

  • 死にたいとは思わないが、存在を小さくしたいと思う
    • 足音さえも呼吸音さえも聞かせたくない、こっちを見ないでほしい
    • 猫背が加速する、それに伴って呼吸が浅くなる、小さい声がさらに小さくなる

興味または喜びの喪失

これは去年の夏前からで、4月半ばからより強まった。

  • 新しい技術を追う気持ちがなくなってきた
    • プログラマとしては、成長が止まると死ぬので、焦りしかない
  • 勉強会などで知らない知識に触れる機会があっても楽しくなくなった
  • 興味を持てるだけの気力がない

yamasy1549.hateblo.jp

意欲の低下・おっくう感

4月半ばから現在まで。

  • 朝起きられない
    • 身体がだるいのもあるが、気持ちも乗らない。対人モードになる力が残っていない
  • 課題やチャットなどの返信が後回しになりがち
    • ギリギリになって焦る、催促が来ると人間関係の破綻を意識するほど申し訳なくなる

その他

夏前からあったが、まだ耐えれていた。特に強まったのは4月半ばから。

  • 視線が怖い
    • LT会など不特定多数からの視線はいける。数人単位での話し合いや1対1の対面が無理
    • ペアディスカッションのある授業の負担がえげつない
      • 声が小さいので何度も聞き返されて、それも申し訳ないのでやりたくない
      • ペアの人がお休みだと3人グループを作らされるのだけど、聞こえないふりをしてチームを組まなかった(結果的にチームの人をシカトしてしまった)。つらいし罪悪感もすごい
  • 強い言葉が怖い
    • 「こうすればいいだけなのに。わかるでしょ?」「○○はクソ、無能」とか。対象が自分でなくても怖くて涙目になっていたりする
    • 対象が自分のときは実際大泣きしてしまったことがある(過去のインターン先では大変迷惑をお掛けしました……)
    • 言った本人に悪気はないこともあるけど、怖いものは怖い

「去年の夏前から」っていうの、よく考えたらト./ビ./タ./テの留学権を蹴った後からなんですよね。そこで一気に力尽きてしまった感がある。今しんどいのと直接関係があるかはわからないけども。

からだの症状

似たような症状が出ていて、回復した人がいたらどうやったのか教えてほしい。

4月ごろから調子がおかしくなって、波はあれどしんどい状態が続いているので、その様子を記録しておこうと思う。 病院で診断を受けたわけでもないし(「頭痛ですねーお薬出しておきます」くらい)生活に支障が出てきたのも数ヶ月前からなので、まだなんともいえない。

時々心配してくれる人がいるのに症状をうまく説明できないのがもどかしいので、今度からはこのURLを貼って説明に代えたい。でも読むのめんどくさそう。

睡眠障害

  • 4月半ばから {漠然とした不安感, 頭痛} で寝付けなくなった
  • 明日もこのしんどさと過ごさないといけない、寂しい、誰かと話をしていないと気が狂いそうだ

食欲の減退

  • 時々、食欲はあるのに喉が絞まって口に入らないことがある
  • 調子のいいときは以前のようにフードファイトできるが、基本的に少食になった

疲労感・倦怠感

以下のことが同時に、突然起こる。頻度は多いときで数時間ごと、少ないときで数日ごと。

  • 肩が重くなる。腕に力が入らず手を上げにくい
  • 体が震える
  • みぞおちを押されて吐きそうになる感覚
  • 喉が絞まって息苦しい、吐きそうになる感覚。ヒステリー球ぽい?
  • 頭痛(症状は色々)
    • 締め付けられるような痛み
    • 脳みその中心だけ 5Gくらいかかっているような重
    • 脳みそが半分になったみたいに、あるいは寒天になったみたいに、ぼーっとして思考が長続きしない
    • ときどき熱っぽい
    • 気圧が下がると↑の5倍増しくらいにひどい

こんなんと毎朝戦ってたんだから布団から出られるわけない、4〜5月に学校を休むことが多かったのはそのせい。


5月末ごろからからだの症状は比較的マシになって(それでも頭痛やヒステリー球は苦しい)、原因はこころのほうにあるのかなぁ……といった感じがしている。ググったら自律神経失調症が引っかかったけど、どうもすぐに治るわけでもなさそうで厳しい。

SECCON BeginnersCTF 2018 Writeup (Crypto - Streaming)

BeginnersCTF

プログラムを書くのが苦手な Beginner なので Excel で解きました。

問題

# encrypt.py

import os
from flag import flag


class Stream:
    A = 37423
    B = 61781
    C = 34607
    def __init__(self, seed):
        self.seed = seed % self.C

    def __iter__(self):
        return self

    def next(self):
        self.seed = (self.A * self.seed + self.B) % self.C
        return self.seed

g = Stream(int(os.urandom(8).encode('hex'), 16))

encrypted = ''
for i in range(0, len(flag), 2):
    a = int(flag[i:i+2].encode('hex'), 16) ^ g.next()
    encrypted += chr(a % 256)
    encrypted += chr(a / 256)

open('encrypted', 'wb').write(encrypted)
# hexdump encrypted

0000000 ce 1e 65 0c 06 5f 94 3a 57 49 1d 17 f5 17 59 3f
0000010 9c 40 9d 4a 19 31 8d 26 3e 51 fd 03 ce 52 56 16
0000020

乱数パート

  • urandom(8)... でめっちゃでかい数字を一番最初の seed にしている
  • X_{n+1} = (AX_n + B) \, \% \, C の形で新しい乱数を生成している

最初の seed はでかすぎて、残念ながら知りようもありません。

次に漸化式を見るとこれは線形なので周期性を持ち(擬似乱数列)、\% C しているので周期は高々 C(34607)と分かります。Excel=MOD((37423*A1+61781), 34607) のようにしてみると実際に確認できます。このことから、一番最初の seed が分からなくても、任意の n に対する X_n が分かれば帰納的に X_{n+1}, \, X_{n + 2}, \, \cdots を知ることができます。

n: X_n
1: 1
2: 29990
3: 3327
4: 17509
...
34604: 6402
34605: 24959
34606: 24901
34607: 1

暗号化パート

  • ストリーム暗号というらしい。速くてやさしそう
  • flag を2文字ずつみて、2桁/文字 の16進数にする。2文字ずつなので4桁の16進数が得られる(以下 hex
  • int(hex, 16) する(以下 int
  • hex と生成した乱数(以下 random)の XOR をとる(以下 a
  • a を元に2文字を生成する(以下 chr1 chr2
  • 16進数で書き込む(以下 encrypted
  • flag の prefix は ctf4b{ だと分かっている

encrypted から逆算して flag に辿り着くことを考えます。以下、flag の最初の2文字 "ct" について例を示します。

encryptedchr1 chr2

16進数を10進数に直してやればいいので chr1 = HEX2DEC("ce") = 206 chr2 = HEX2DEC("1e") = 30 です。

chr1 chr2a

a = chr1 + chr2 * 256 の関係があるので a が復元できます。206 + 30 * 256 = 7886 です。

arandom

a = int ^ random の形になっており、XOR の性質より random = a ^ int です。hex =DEC2HEX(CODE("c")) & DEC2HEX(CODE("t")) = 6374 より int = int(hex, 16) = 25460 なので random = BITXOR(a, int) = 32186 と求められます。

乱数パートで確認した疑似乱数列から 32186 を探して、以降 flag の長さぶんだけ取り出せば g.next() で使用した値が分かります。念の為 flag "ct" の続きである "f4" についても同様に確認してみると、ちゃんと random = 27217 が求まります。

32186
27217
15741
22263
11898
32366
14992
24106
10736
13232
16747
17385
14429
30620
12450
29483
...

既知→ flag

さて、現在分かっている値は以下の通りです(灰色は固定値)。ここからinthexflag の順に求めていきます。

f:id:yamasy1549:20180527121916p:plain

randoma が既知なので、XOR の性質より int = random ^ a=BITXOR(random, a))で求まります。続いて hex = DEX2HEX(int) で16進数に戻します。hex は16進数4桁ですが、flag にするときは2桁ずつ読みます。=CHAR(HEX2DEC(LEFT(hex, 2))) =CHAR(HEX2DEC(RIGHT(hex, 2))) で2桁ずつ2文字を読みます。

f:id:yamasy1549:20180527124912p:plain

できました。線形合同法は値を予測されやすいから乱数としてはあまり良くないよ、ということみたいです。

感想

過去何回か CTF に参加して {1, 2} 問解けたり解けなかったりしていて、今回初めて Writeup というかメモを公開しました。途中参加だったのでこの問題しか解けてないんですが、前に興味持って調べてた乱数の知識がちょっとだけ活用できて楽しかったです。誘ってくれてありがとうね。

これは変なこだわりなんですが、いつか Crypto 問を Excel の表だけで解きたいという気持ちがあって、今回それができたので嬉しいです。Excel 関数の勉強になりました。