VirtualBoxのインストール失敗時の解決方法

解決方法

なにかしらの方法でインストールした後に

$ sudo apt -f install

をし、再度インストールをすると正常にインストール出来る。

それでは

Ubuntuが死んだ。全部Windows updateのせいだ。 開発環境の再構築に際して諸々installをしていったが、virtualboxがうまく入らなかったので次回のために書いておく。

環境

$ cat /etc/lsb-release
DISTRIB_ID=Ubuntu
DISTRIB_RELEASE=16.04
DISTRIB_CODENAME=xenial
DISTRIB_DESCRIPTImON="Ubuntu 16.04.3 LTS"
$ uname -mr
4.10.0-112-generic x86_64
virtualbox ver. 5.2.6

Errorに対してやったこと

  • wgetでダウンロードしてdpkg -i した。 -> インストール失敗。Errorが出てくる。
    この時「sudo /sbin/vboxconfigしろ」みたいに言われたのでやったけどダメ
  • apt install virtualboxする -> 起動失敗。
    やはり「sudo /sbin/vboxconfigしろ」と言われる。
  • わからんのでとりあえずapt update -> 「なんか変だよ。apt -f installした?」と聞かれる
  • apt -f install -> 不足したパッケージがインストールされた。
  • 再度dpkg -i -> インストール成功。起動成功。

むすび

我々は雰囲気でVirtualBoxをインストールしている。

ぶっこわれたうぃんどうずをなおす

これを読んでも何も生まれません。

何故かbootRecordが吹き飛んで起動しないと思っていたメインで使ってるノートパソコンがなぜか復活した。
(原因も結果もわからない。)

windowsは優秀(笑)なので自動修復機能があります。
適当なUSBメモリにインストールディスクのデータを焼いてそこからなんとか復旧させました。
1回では効かないので4,5回やりました。自動修復機能では4,5回繰り返しやってくれないのでそこは手動でやります。自動修復とはなんだ。
優秀なら謎のタイミングで壊れないでくれ頼む。*1

不良セクタが結構増えていたので一応SSDを買いました。そのうち移行させます。

*1:謎のタイミングで壊れるから自動修復機能あるんだろうなぁって思った。

Pyritの実行環境をサクッと構築する

なにこれ

家の無線APのパスフレーズ(WPA2)の強度を測りたかったので,Pyrit入れようとしたらmakeが上手く出来なくて,「う〜〜ん?」ってしたりしなかったりな話.

こういうのやる時の決まり文句だけど,自分のお家のネットワーク機器に対して行っています.

書くこと

  • Pyritのインストール方法
  • GPUの認識(Nvidia

書かないこと

  • 4-way handshake周りの話
  • パケットのキャプチャ方法
  • GPUの認識(Radeon*1

環境

$ cat /etc/lsb-release
DISTRIB_ID=Ubuntu
DISTRIB_RELEASE=16.04
DISTRIB_CODENAME=xenial
DISTRIB_DESCRIPTImON="Ubuntu 16.04.3 LTS"
$ uname -mr
4.10.0-42-generic x86_64

構築

pyritではパケットの収集が出来ないので別途用意する.
makeが上手く通らなかった.
apt で全部出来そうだったのでそっちでやることにした.

$ sudo apt search pyrit

pyrit/xenial,now 0.4.0-5 amd64
  GPGPU-driven WPA/WPA2-PSK key cracker

pyrit-opencl/xenial 0.4.0-1 amd64
  OpenCL extension module for Pyrit

pyrit-openclなるパッケージがあった.
最初は気にしていなかったけど,後で調べた所,Nvidia,AMD Radeonのコアを使って計算速度を向上させるらしい.これも使ってみる.
というかこれを使わないとCPU onlyで計算する羽目になるので,必須.

$ apt install pyrit pyrit-opencl
とりあえず突っ込んだPyritは動作した.CPUでは計算が出来たが,GTX760の認識をしない.

なんでかなぁと弄っていたらcudaのインストールをしていなかった.そりゃ動かないな.
wgetで引っ張ってきた.
$ sudo dpkg -i cuda-repo-ubuntu1604_9.1.85-1_amd64.deb
これで認識してくれる.
環境変数の設定もした気がするけど,覚えてない.

$ pyrit list_cores
Pyrit 0.4.0 (C) 2008-2011 Lukas Lueg http://pyrit.googlecode.com
This code is distributed under the GNU General Public License v3+
The following cores seem available...
#1:  'OpenCL-Device 'GeForce GTX 760''
#2:  'CPU-Core (SSE2)'

認識した.
ベンチマークを走らせる.

$ pyrit benchmark
Pyrit 0.4.0 (C) 2008-2011 Lukas Lueg http://pyrit.googlecode.com
This code is distributed under the GNU General Public License v3+
Running benchmark (38188.5 PMKs/s)... \
Computed 38188.48 PMKs/s total.
#1: 'OpenCL-Device 'GeForce GTX 760'': 40630.6 PMKs/s (RTT 2.8)
#2: 'CPU-Core (SSE2)': 793.8 PMKs/s (RTT 3.0)

PMKs/sというのが一秒間に計算されるパスフレーズの数.
RTTってなんだ?
辞書を用意して解析させる.

実行

$ pyrit -r [.cap] -i [.lst] attack_passthrough
Parsing file '[.cap]' (1/1)...
Parsed 2236 packets (2236 802.11-packets), got 1 AP(s)

Picked AccessPoint 00:00:00:00:00:00 ('[ESSID]') automatically.
Tried 6523830915392 PMKs so far; 43534 PMKs per second.

Password was not found. Retry the attack with '--all-handshakes'.

not foundらしい. ちゃんと動いているのか気になったので,パスフレーズの入ったファイルを読ませてみた所succeededと言われ正しいパスフレーズが出てきた.

まとめとか

  • Pyritのコマンドで strip というのがあって,4-way handshakeが含まれるパケットのみのファイルに再構成してくれた. 不要なパケットを削ぎ落とすのに有効.

  • 上には書いてないけどcrunchを使う際は

$ crunch [min] [max] abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789!@#$%^&*()'"=_`:;?~|+-\/[]{}<> | pyrit -r [.cap] -i - attack_passthrough

と書くと,pipeが効くので総当りが可能(やりたくはない)

おわりに

6000~7000円のグラボで毎秒4万近くのパスフレーズを解析出来るのか...といった感じ.
結構長いフレーズなのでまず破られることはない思うけど,今から4年前のミドルレンジモデルのグラボでこれだから,最近のでやったらもっと結果出るだろうし気を付けていこうな.っていう気持ちになった. 定期的な変更は面倒だし,家族用のAPにもEnterprise認証を使おうかなぁ.

*1:探せば結構あったし、僕がRadeon持っていないので

2段階認証の設定をした

今までやってなかったけど、した。

とりあえず自分の使っているサービスで認証方式に対応してるものは全てやった。Twitterは電話番号1つに対して1つのアカウントにしか与えられなかったので少し困ったが、SMSが使えるSIMカードが一枚あったので、とりあえず全てのアカウントで認証できるようになった。

GoogleChromeが入ってる端末で一斉に認証が切れたのでうわぁ…と思いながら通した。

この時に初めて知ったけど、SMSは受信料を取られないとのこと。

自然なリファクタリング

古いHDDから中学生の頃に書いていた結構な量のコードが発掘された。CやPHPもあったが、殆どがRubyだった。 詳細が分からないのでとりあえず全部PrivateRepositoryに置いてみた。
中には当時書いていたTwitterClientがあって、APIが1.0のままだから現在では動かせないが読めるものだったので読んでみた。微妙な銘々規則や変数名、明らかにコピペされた箇所、起きそうもない例外に対しての冗長、雑な例外処理(これは致命的で笑った)。見ていて結構恥ずかしくなった。
下位のディレクトリに、仕様だと思われるWordファイルが見つかった。今の僕ならどうやるかなぁ、とふと気になたのでちょっと悩むといい感じの設計が見えてきた。
400行近いコードの刷新と、API1.1(というかオレオレAPI)対応が主にやったことだけど意外と時間がかかった。40分くらいで綺麗になって、ちゃんと動くものが仕上がった。同じ機能が148行で提供できた。どうせなら140行で書き上げたかった。*1
改善するのにコードだけでは不十分だというのが分かったので、今後は仕様書ちゃんと書こうと思う。
今回のコード発見では結構面白い気付きがあって、コードや仕様を読んでいて「ここは良くないなぁ」「これは使えるなぁ」っていうのの選択がポンポンできたということ。7年前の僕では出来ていなかったことが、今の僕にはできていて、成長しているのかもしれないなぁと実感した。特に、良くない所を見つけ出す嗅覚(?)と、それに対する改善方法を即座に思い付ける様になっていたことが嬉しかった。
7年間あれば書籍が増えてインプットや知見も増えるし、他人との出会いで触発されたりして、そりゃあ変わるよねってことで。
僕自身も僕や周りの人たちによってリファクタリングされているような、そんな感覚が心地よかった。
数年先の僕ならもっと綺麗で、もっと軽量で、もっといいものを書けたりするんだろうか?と思いながら、現在でも開発の続いている僕の大好きなプログラミング言語で書かれた、僕の大好きなClientのプロジェクトファイルに手を付けることにした。

リファクタリング:Rubyエディション

リファクタリング:Rubyエディション

Rubyベストプラクティス -プロフェッショナルによるコードとテクニック

Rubyベストプラクティス -プロフェッショナルによるコードとテクニック

*1:よく考えたらTwitterは140文字だ。

Redmineの親チケットの期日を変更できない

のが気になったのでとりあえず検索した。

親チケットの特定の項目の値が変更できない — Redmine.JP

結果として子チケットの中で最も期日の遅いものに合わせていることが分かった。(そりゃーそうだよねって感じ)親チケットに期日を直接与えることも設定次第では可能なことが分かったけど、よっぽとな理由がない限りデフォルト設定のままで良さそう。

 

コップ本の話

 

Scalaスケーラブルプログラミング第3版

Scalaスケーラブルプログラミング第3版

 

 Kindle版買ったけど、殆どの本では使える検索機能とか色々使えなかったのでしんどい。大人しく書籍版を買おうか悩んでいる。ただそうなると総額8000円の出費なので痛い。痛みに耐えれる経済力が欲しい。

Scala書けるようになればペイできそうなので買うんだろうけど…。