HackerzLab.博多vol10に参加してきた
2回目の参加してきました.全然解けませんでしたww.これじゃいかんなあって思いなが復習しなきゃなーって思いつつ,レポート書いてました.レポート書き終わったんでささっとまとめて行きますね.
シーザ暗号解析
何文字ずらすかわかんなかったんで「どうしようかなープログラム書こうかなでも時間ないし」ってことで後回しにしました.んで解説でご紹介していただいたツールをここに置いときますね.perlとかで書いてみたいですね.有るものを違う言語で自分の手で作るのもだいぶ訓練になりそう
jad コマンド
javaの逆コンパイルのコマンドですね.ソースコードがそのままでてきてびっくりしました.ここまでの精度でもとにもどるのかーって思いました.
javap
僕はこっちのコマンドで解析しました.こっちのほうが「逆コンパイルだー」って感じがして僕は好きですw
逆コンパイル・デコンパイル
皆さん意味は同じと取るんでしょうけど言葉の意味合いとして何か違和感を感じたので少し調べてみました.ここで言葉の意味を幾つか
-
-
できあがっているプログラムからソースコード(プログラムの元ネタ)を取り出すこと
んー期待していたとおりにの文言で出てこないですね.今僕の中で詰まっているのは
バイナリからソースコードを生成 することと バイナリからソースコードを取り出す ことは必ずしも同義ではないのではないだろうかと思うんですよ.実際にjavaでやってみました.
public class HelloWorld { public static void main (String[] args) { System.out.println("Hello World !!"); } }
import java.io.PrintStream; public class HelloWorld { public HelloWorld() { } public static void main(String args[]) { System.out.println("Hello World !!"); } }
参考までにC言語は半分もどればいいとかいう話が…..(出処怪しい)
では本題にもどりましょう.上の2つの結果を見ていきましょう.最初のは有名所でHello Worldですね.んで逆コンパイルしたものが下になるんですけど,まあそりゃあそうなるだろって感じですし僕も,「へーこの精度で戻るんだ」って感想です.だからこそ100%すべて戻るみたいないい方をしていないかなと,自分自身で再確認しつつ「元のソースコードを見るためには逆コンパイルしたらいいよ」ではなく「元のコードと同じ動作をするコードの見本が見れるよ」くらいが正しい日本語ではないでしょうか.いやわかっている人はいいんですけど,それを知らない,わからない人に対してさも全く同じようなコードが生成されるような言い方はご法度ではないでしょうか(少し教育的な話にもなるんでしょうけど).今回違和感を覚えたので少しやってみました(文句はいくらでも受け付けます,)
SQLインジェクション
はい有名所ですね.しかし実際に調べたこともなかったのでこれを期にいろいろ調べてみた.はいそもそも定義いってみよう
-
SQLインジェクション(英: SQL Injection)とは、アプリケーションのセキュリティ上の不備を意図的に利用し、アプリケーションが想定しないSQL文を実行させることにより、データベースシステムを不正に操作する攻撃方法のこと。また、その攻撃を可能とする脆弱性のことである。
だそうです.またこれが調べたら出てくる出て来る.これ自分で調べても理解はしていただけそうですね.まあSQL文を悪意のある人の思うように動くように書き換えるんですね.基本的にユーザーの入力したデータをSQL文に組み込むと思うのでそこをうまく活用したのかって感じです.例えば
SELECT * FROM hoge WHERE id= $ID AND password = $PASS
こんなSQL文があったとしましょう(適当な文ですいません).ここで IDにコメントの “–"を入れると,
SELECT * FROM hoge WHERE id="admin" -- AND password =fuga
ってなるわけですから後ろの方全部無視なんですよね 参考
これは管理者としては阻止しなきゃいけない案件ですねー(NOSQLについても書こうと思ったけどやめた)