バイナリ解析 問題を解いてみる1
昨日「CTF binary writeup」の検索ワードでたくさん勉強の資料はヒットすることが分かったので、GoogleのSEOアルゴリズムにあやかって一番上のサイトから攻略していくことに。
1ページ目の検索結果が終わるころには、自分なりに課題が見つけられるようになっていると期待。
本日は、file,strings,IDAPro(free)の使い方と、基礎的なAssembly Languageの記法についてお勉強。
file:対象がどのようなファイルか情報を表示
strings:ファイル内の表示できる文字列を表示
IDAPro‘:強力な逆アセンブラ 分岐させたい方に強制的に飛んだりできる。
Assembly Language:マシン語を人間が読めるようにしたやつ。四則演算と条件分岐の基礎的なものから覚えていく。
本日勉強させていただいたサイトはここ。感謝をこめてリンクぺた。
(残り:2998日)
バイナリ解析 16進数に慣れるための記事
バイナリ解析をしていると、16進数によく出くわす。16進数は2進数に変換しやすいらしいのだが、どうもバイナリアンは暗算でいろいろやってしまうらしい。というわけで脳内変換ができるようにするにはどうすればいいかなと検索してみました。
いい記事があったので、ご紹介。
・暗算で 16 進数を 2 進数に変換する方法 | プログラマーズ雑記帳
・FF(16進数の掛け算)を覚えよう - やねうらお−ノーゲーム・ノーライフ
・へっぽこ講師の備忘録: 16進数の九九(FF?)表を作ってみた
記事をまとめると、「覚えましょうね」ってことらしい。
特に覚えることは、
・16,32,48,64,80,96,112,128(左から10h,20h...)
・A = 10 , B = 11 , C = 12 , D = 13 , E = 14 , F = 15
・補数は、A , B , C , D , E , F についてそれぞれ、6 , 5 , 4 , 3 , 2 , 1
・ほんとに補数大事。
・FF表(16進数の九九)
通り過ぎる車のナンバーを四則演算で10にする遊びをよくやっていますが、今度は16進数に変換する遊びに切り替えようかな。
バイナリ解析 準備
バイナリ解析を行うための準備を書く。参考にするのは、セキュリティコンテストチャレンジブック。本日は解析ツールのインストールのスクリプトを紹介(と言ってもコマンドの羅列にすぎない)
前提として、、、
環境はマルウェアのような挙動を解析対象がした場合にどうなってもいい環境=仮想環境を利用する。Ubuntuの14.04と16.04をそれぞれ32bitと64bitでVMWareにinstall.イメージダウンロードとインストールだけで結構時間がかかるので注意。
解析ツールのインストール(14.04で問題なく動作):
#strace
sudo apt-get install strace
#ltrace
sudo apt-get install ltrace
#radare2(useful tools)
sudo apt-get install git
#ghex(binary editor)
sudo apt-get install ghex
#if you dont have gdb and objdump in your system already. (gdb:debugger, objdump:disassembler)
sudo apt-get install binutils
#dex2jar(Dalbik VM byte code 2 class file)
cd /usr/local/src
sudo http://sourceforge.net/projects/dex2jar/files/dex2jar-2.0.zip
sudo unzip dex2jar-2.0.zip
cd dex2jar-2.0
chmod u+x ./*.sh
export PATH=$PATH:/usr/local/src/dex2jar
#jd-gui(java byte code 2 srccode)
sudo apt-get install libgtk2.0-0:i386
sudo apt-get install libxxf86vm1:i386
sudo apt-get install libsm6:i386
sudo apt-get install lib32stdc++6
sudo wget http://jd.benow.ca/jd-gui/downloads/jd-gui-0.3.5.linux.i686.tar.gz
tar zxvf http://jd.benow.ca/jd-gui/downloads/jd-gui-0.3.5.linux.i686.tar.gz
export PATH:$PATH:/usr/local/src/jd-gui
#その他
#日本語キーボード入力を可能に。
sudo dpkg-reconfigure keyboard-configuration
#史上最高のエディタをインストール
sudo apt-get install vim
ツールがインストールし終わったら早速解析開始!と行きたいところであるが、先ほど紹介した本では解析対象のファイルのダウンロードリンクが特別書かれているわけではない。
もう一冊下記の書籍も購入したが、
今手元にないのと、届いても問題数が少なそうなので、WEB上で解けそうな問題を探す。WriteUPというのが問題に対する解説という業界用語らしいので、WriteUP付きのWEB問題集がまとまっているサイトを探す。
「CTF binary writeup」で検索して36800件ヒットするので、問題には困らなさそう。
問題があってそれを解くためのツールがあって解説がある。これで準備完了。
(残り2999日)
本の選び方と読み方
学習をする上で避けては通れない本という存在について、私の実践していることを記載しました。
1.いい本を買う方法
2.本の速読法
1.いい本を買う方法
2.本の速読法
LPIC攻略法
Spring徹底入門13.2 つまづき
RESTful Webサービスを作成する。
・RESTful Webサービスが起動しない。
MessageクラスとMessagesControllerクラスをcom.examle配下に作成し、DemoApplicationクラスを実行。が、localhostに何も変化なし。HelloWorldのまま。。。これでいいのか?次ページ13.2.2の図を見ると、まだブラウザ上の表示がHelloWorldのままなのでひとまずこれでよしとする。
・HelloControllerがhtmlを自動生成しない
教科書ではHelloControllerなるクラスを新規に作成して、コードを書き、DemoApplicationで呼び出すことでhtmlが自動生成される~と説明しているが、そのようなhtmlが作成された形跡もなく、またlocalhostの表示もなんら変更がない。ずっとDemoApplicationしか動作しておらず、その他のクラスが関連して呼び出されていない様子。
ここら辺でSpringについてWebでお勉強を再開。(教科書は、成功すること前提に書かれているから、落ちこぼれたときに置いてきぼりになりますよね。)
春だから!Javaでの開発にSpring Bootを使おう!
記事によると→Spring BootではXMLは書かず、Javaのコードにアノテーションを書くだけで、全て自動的に行われます。
(やっぱ自動生成!いや、"html"は自動生成ではないぞ・・・)
記事によると→作成されたプロジェクトを右クリックして、「Run As」から「Maven install」を選びます。これで、必要なものがインストールされ、ビルドされます。
(ん?これは気になるぞ。。。Mavenインストールはしてなかったけど効果ありそう)
Mavenプロジェクトで Spring MVC の Hello World を作成する方法: ある SE のつぶやき
他で一つプロジェクトを作って学習し、それからDemoに戻ったほうが解決策を思いつくかもしれないと考えた。上記のサイトで修行することに。
Dependencesの設定のところで、検索窓に入力しても何の音沙汰もない。stackoverflowというところで解決策を発見。
"window→preferences→mavenとすすみ、download~となっているところ全てにチェック。その後Applyを押してOKを押して、STS再起動。"
再起動すると、mavenのindexの更新がかかる。再度入力。何も起こらない。
再度Google先生で検索。するとまたもstackoverflowに該当記事が。
You also need to rebuild your maven repository index in 'maven repository view'.
maven repo viewを探すのが面倒だったので、作成したmaven プロジェクトを削除して新たに作成しなおすことにした。無事indexが動き始める。
(追記:STS画面右上の小さな検索窓にmavenと入れるとmaven repoらしきものがあるのでそれを選択。すると、local,global,project,customのprojectが現れるので、globalを開き、centralの上で右クリックして、full-index-enabledにチェック。updateが始まるので完了するまで待ち、その後再びcentral上で右クリックをしてrebuild indexを選択。)
JDK1.8を使用するようにpom.xmlに以下を追記。
==================================
<build>
<plugins>
<plugin>
<artifactId>maven-compiler-plugin</artifactId>
<configuration>
<source>1.8</source>
<target>1.8</target>
</configuration>
</plugin>
</plugins>
</build>
</project>←これが最後のタグになるようにコピペ!
プロジェクト上で右クリックして、Maven > Update Project(alt+f5)で更新完了。
===================================
コントローラーとビューの作成の手前まで進めた。
これまでの操作でDemoがなぜ動かなかったか、理由を2つほど思いつく。
1dependencesのダウンロードをしていなかった?
2以下の依存関係を追記します、となっていたが、dependencesタブに書き込むだけでpom.xmlには何も記述しなかった。これが不具合の原因か?
達人プログラマー 気づき
新装版達人プログラマーを購入。
新装版 達人プログラマー 職人から名匠への道 | Andrew Hunt, David Thomas, 村上雅章 |本 | 通販 | Amazon
目次をざっと読んで、1周目の読み方は
・「具体的なコード手法」(以降"1")
・「プロジェクトの進め方」(以降"2")
・「プログラマーの生き方」(以降"3")
に関連する情報のみを素早く拾い読む、としました。
2周目はそれらの情報が書いてあったページをじっくり読もうと考えました。
3周目は全てに目を通そうと考えました。
実践(1周目)で得た気づき:
1章
3 いい加減な言い訳よりも対策を用意する
1 割れた窓を放置しない
1 常に大きな視点でものを見る
3 知識ポートフォリオに投資する(分散投資かつハイリスクローリスク)
2章
1 Dont Repeat Yourself -一度作成したらそれを簡単に再利用可能にする
1 直行性(片方を変更しても他方に影響を与えない)の高いコーディングをする
「恥ずかしがりなコード」「グローバルデータへの非アクセス」「類似性のリファクタリング」
2 可逆性を担保しながら進める
2 曳光弾(機能間の連絡がとれた最低限のフレームワークを素早く作成してフィードバックをもらうこと)←→プロトタイプ(曳光弾とは違い使い捨て)
2 動的なもののプロトタイプにはポストイット
2 正確に見積もる(問題把握、問題再定義、問題分解、解決策具体化、検証)
3章
3 一つのエディタを熟知する
3 常にソースコード管理を使用する
3 自分自身も含めて信用しない
4章
特になし。
5章
1 モジュール間の結合度合いを最小に
1 どのようにではなく何をに重点を置いて考える
1 特殊な物事はコンパイル済みコードの外側に置く ex.Beans
1 モデルとビューを分離させる(評価されるものと評価するものを分ける
6章
1 早めにこまめにリファクタリングする
1 テスト設計を行う
to be continued...