バイナリ解析 問題を解く2(書評)
バイナリ解析でネット検索していると、下記の本に出会った。
萌え萌え感満載の本で、まさに私が読みたかった本であった。
変な誤解をされそうなので、もう一度表現しなおすと、
萌え萌え感満載の本で、内容はレジスタの利用方法、処理の追いかけ方、処理を変更する方法が詳細に解説されている、そういった意味で、まさに私が読みたかった本であった。また、細かいところではあるが、ESIやEDIといったレジスタは、なぜ他のレジスタのようにHigh,Lowと区切って使われないのか、という部分など、基礎事項・基礎単語の補足情報も豊富に載っておりとても勉強になった。
実際にこの本の解説に従ってデモソフトを、アセンブラを解読しながら、自分の思うように操る体験をすることができた。もう一度この本を復習し、「本を見ないで」OllyDbgを操れるようにする。
この本で初めて知ったこと:
・WebTrap:特定のソフトがインターネットにアクセスするのを遮断する機能。
・ロジックボム:条件が整うと発動するウィルスや破壊ソフトのこと。
・クラックするのに一番大切な心構えは「一番脆いところに着眼すること」であって、全体を理解しようとすることではない、という事。
・クラックの基本は条件分岐を書き換えること。
・SYSENTERとSYSCALL命令は戻りアドレスを保存しないで制御が移る
・RETNとRTNは同じ
・RET 4:RETするときにESPのアドレスを+4する。
・Shift-JISとUnicodeの見分け方:利用しているAPIの末尾の文字がAだったらANSI(Shift-JIS)、WだったらUnicodeのことらしい。文字列検索をする前に文字コードを適切に設定する際に参照する。
・.textセクション:プログラムコード領域
・.rdata, .dataセクション:文字列置き場
・.rsrc:アイコン等置場
・Ollydbgでハードウェアブレークポイントを利用する時には、DR0~DR7というデバッグ用のレジスタがあり、これを利用するためコード自体が変更されない。
・hooking:インポートセクションの中から任意のWindowsAPIの実行アドレスを特定してそれを書き換えてしまうことで、自分の実行したい処理を介在させること
・DLLInjection,function interception:呼び出し先のモジュールとそっくりのモジュールを作り出して、そのモジュールを使わせてしまうこと。またその結果処理内容を傍受すること。
バイナリ解析 問題を解いてみる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には何も記述しなかった。これが不具合の原因か?