hack the box 「Responder」で積みかけた話

起こったこと

start-pointのtier1「Responder」の最後でevil-winrmで接続する際に通信が遅すぎでTimeOutしてしまいflagがゲットできなかった。

原因

おそらくはパケットの消失が発生していたのだと思う

解決策

TCPならパケットロスをしても再送するのでVPNの接続方法をUDPからTCPに変えよう。

markdownをpdf変換するスクリプト

経緯

先生:ノートを電子で取っている人は印刷しての持ち込みならええで(^^)

ワイ:markdownで取っているんだが!?印刷どうしよう...




pandocでpdfに変換した

pandocのコマンドなげぇ!いちいち打って実行するのだりぃ!

準備

  1. pandocを入れてpathを通す

    スクリプト

    拡張子 ".bat"で以下のファイルを作成する

@echo off
if not exist ".\output" mkdir output
for %%m in (*.md) do (
  echo @echo off&echo for %%%%f in ^("%%m"^) do ^(
  echo if exist .\output\%%%%~nf.pdf del .\output\%%%%~nf.pdf
  echo pandoc -f gfm+hard_line_breaks %%%%f -o .\output\%%%%~nf.pdf --pdf-engine=xelatex -V documentclass=bxjsarticle -V classoption=pandoc
  echo ^)
  echo pause
) > %%~nm.bat

これを実行するとカレントディレクトリに存在するmarkdownをpdfに変えるスクリプトが作成される(ファイル名は{mdファイルと同じ名前}.bat)

作成されたbatファイルを実行するとoutputディレクトリにpdfが生成される。

注意点

pandocの仕様なのか数式ブロックでalign*を使うとエラるのでかわりにalignedで代用する

タイトルや著者情報を入れたい場合はmarkdownの最初に

---
title: hoge
author: ababababa
---

を記入する

markdownをpdf変換するスクリプト

pandocのコマンドなげぇ!いちいち打って実行するのだりぃ!

準備

  1. pandocを入れてpathを通す

    スクリプト

    拡張子 ".bat"で以下のファイルを作成する

@echo off
if not exist ".\output" mkdir output
for %%m in (*.md) do (
  echo @echo off&echo for %%%%f in ^("%%m"^) do ^(
  echo if exist .\output\%%%%~nf.pdf del .\output\%%%%~nf.pdf
  echo pandoc -f gfm+hard_line_breaks %%%%f -o .\output\%%%%~nf.pdf --pdf-engine=xelatex -V documentclass=bxjsarticle -V classoption=pandoc
  echo ^)
  echo pause
) > %%~nm.bat

これを実行するとカレントディレクトリに存在するmarkdownをpdfに変えるスクリプトが作成される(ファイル名は{mdファイルと同じ名前}.bat)

作成されたbatファイルを実行するとoutputディレクトリにpdfが生成される。

注意点

pandocの仕様なのか数式ブロックでalign*を使うとエラるのでかわりにalignedで代用する タイトルや著者情報を入れたい場合はmarkdownの最初に

---
title: hoge
author: ababababa
---

を記入する

睡眠について語る

睡眠は大事だよ

睡眠とは戦である。その日よく眠れたかどうかによって次の日のパフォーマンスが決まるといっても過言ではない。 睡眠の質が人生の質を決めるのだ。

趣味は寝ること

これは若者によくある「趣味は?」と聞かれたらうっかり「ゲーム」や「アニメ」と答えそうになってしまうも、自分がオタクだと思われたくないときのとっさの逃げ口である(偏見)。

だがこれでは会話のキャッチボールが終了、その結果、口下手などと思われてしまい、挙句の果てに仕事が割り振られず, クビもあり得るのだ!

睡眠の質を上げよう

ここから先は個人的に実践しているものを思いつく限り挙げていく。

睡眠の質を下げるもの

ここら辺はよく聞くだろうけど一応 - カフェイン - ブルーライト - 飲酒 - 寝る前の音楽 寝る2時間くらい前には避けようね。音楽は種類にもよるだろうけど逆に脳が興奮しちゃうので聞くなら自然とかリラックスできる奴に。 飲酒すると眠れるって方もいるだろうけど実は睡眠の質は下がっているので注意。 とは言っても欲望に抗えないのが人間である!ってことで対策しましょう。

スマホ対策

ここからは個人的に使っているものを挙げていきます。 Androidユーザーさんはこちらのアプリがおすすめ。時間を設定するとその間、画面がロックされアプリが起動できなくなります。

play.google.com

物理的にスマホを使えなくすることが一番の対策

Switch対策

見守りスイッチを使いましょう。 パスワードをランダムで設定し、一日の利用可能時間を最小の15分に設定。その後BlackOutでスマホごとロックすれば文鎮化成功! あ、当然パスワードは覚えてしまったら意味がないので、もしそうなったら変更しましょう。 www.nintendo.co.jp

ルーティーンをつくる

電気の色で空間を支配する

寝る2時間前に部屋の電気をオレンジ系の色にする。夕日を感じて身体に休む時だと伝えてあげよう。

スマホ見ないで2時間もなにするん?

読書や。一度読んだことある本とかもう一度読むといい感じに眠くなれるよ。

定期的に運動する

夜遅い時間にやるのはよくないけどいい感じに身体を疲れさせるのも大事。

アロマ系

個人的には柑橘系が好き

飲み物

カフェインの入っていないドリンクを探す。カモミールがいいらしい。 おすすめ

https://www.jp-greentea.co.jp/products/pompadour-chamomilehoney/

データをとる

精度はめちゃめちゃいいけど値段がね...勝手に睡眠を検知してくれるんだけど授業中の睡眠もばれるからおもしろい。

ouraring.com

メンタルを整える

不安に駆られて眠れないとかそういうときはメンタルを整える。医者じゃないから詳しいことは言わないでおく。 あと薬に頼るのも手段の1つ。

運動をしよう

運動していったん頭の中から考えていることをふっとばす。運動はメンタル的にもいいって聞くしスッキリすると思うよ。

とはいっても動けないのが人間! 一番お手軽なのは長風呂とかじゃないかなぁ。もちろんスマホとかは持ち込まず。個人的に風呂が一番余計なものが無くて気持ちの整理がしやすい空間。

最強の暗号!?

はじめに

初心者向けの記事です。

オチが知りたい方・お急ぎの方は「これの欠点」をお読みください。

私自身まだ未熟者故、記事の内容には誤りがあるかもしれません。もし間違いがありましたらコメントしていただけるとありがたいです。あとブログ書くのはじめてなんです。少しでも暗号に興味を持ってくれたらいいなと思い書いてみました。

絶対に解読のできない暗号とは

暗号と聞いて皆さんは何を思い浮かべるでしょうか?

シーザー暗号? RSA暗号?

これらは鍵を知らない第3者によって解読することが可能です。

 

シーザー暗号なら鍵が26通りしかないためブルートフォースアタック(総当たり攻撃)で解読できます。

 

RSA暗号素因数分解さえできれば第3者の手によって解読されてしまいます。

 

現在使われている暗号技術は解読が困難なだけであって、決してできないというわけではないのです。

 

 

One Time Pad(使い捨てパッド)

説明をするうえで必要な知識

知らなければ各自ググってね

  • 論理演算「XOR」(授業でやったよね?)

One Time Pad とは

必要なもの

  • 暗号化するデータ
  • 暗号化するデータと同じビット数の鍵

暗号化の方法

とてもシンプル

  1. 暗号化するデータと鍵でXORをとる

終わり!

復号化の方法

とてもシンプル

  1. 暗号化されたデータと暗号化するときに用いた鍵でXORをとる

終わり!

実際にやってみる

pythonで実装してみたので試したい方がいればどうぞ

(本当は直接コードを貼りたかったけどめんどくさかったというわけではありませんよ)

「suki」を暗号化

ASCIIコードでそれぞれの文字を8bitに変換

s→01110011

u→01110101

k→01101011

i →01101001

 

合体させると

平文(ビット列) : 01110011011101010110101101101001

鍵生成

平文と同じビット数(32ビット)の鍵を用意する

鍵 : 11101000101011110100100010100111

暗号化

平文と鍵でXORをとる

平文  : 01110011011101010110101101101001
鍵   : 11101000101011110100100010100111

XOR

暗号文 : 10011011110110100010001111001110

復号化

暗号文と平文でXORをとる

暗号文 : 10011011110110100010001111001110

鍵   : 11101000101011110100100010100111

XOR

平文  : 01110011011101010110101101101001

ASCII変換

平文 : suki

なぜ解読されない?

先ほどの暗号文を正しい鍵を知らない人が適当な鍵でXORをとったとしよう

暗号文 : 10011011110110100010001111001110

鍵   : 11111001101110110100100010101111

復号化 : 01100010011000010110101101100001

ASCII変換

baka

違う文字列になっちゃった!

 

絶対に解読できない理由は正しい鍵で復号しないと、このようにまったく違う文字列に復号されちゃうからだ。

これの欠点

One Time Padを用いた通信を行う際、誰にも鍵を傍受されることのないように通信相手に鍵をわたさなければならない。

 

仮にそれが出来るなら暗号化する必要がなくなるよね。

 

だって鍵が暗号化するデータと同じビット数なんだから、誰にも傍受されないならそのままデータをわたしても問題ないじゃん。

終わりに

この記事を読んでいただきありがとうございます。少しでも暗号に興味をもってくれたらうれしいです。

from Crypto.Random import get_random_bytes
plain = list(map(ord, input("plain text  : ")))
key = get_random_bytes(len(plain))
print("plain text  : " + "".join(map(lambda x: "{:08b}".format(x), plain)))
print("key         : " + "".join(map(lambda x: "{:08b}".format(x), key)))
print("cipher text : " + "".join(map(lambda x, y: "{:08b}".format(x ^ y), plain, key)))