迷いませんか?

プログラミング、電子工作、ゲーム・・・etc、色々やるけど中途半端なブログです。

あなたの使ってるシェルコードが印字可能になる!

アセンブリを印字可能にするプログラム作った

久しぶりです
部活がもうすぐ最後の大会ということで練習も忙しく、
本もどんどん読んでいたため更新が遅れました

前買った、美しき策謀に続き、バイナリの歩き方も買ったんですが
もう情報が古いのか、逆アセンブルをIDAProで行っても本のとおりにならず
残念な感じですが今読んでます

一応まだ美しき策謀読み終わってません
6章を終わらせたぐらいですが、ソケット再利用?シェルコードとか、理解できませんでした
なので、その1つか2つ前ぐらいの、
印字可能な文字しか受け付けないフィルタがあるプログラムに対するための、
プリンタブルシェルコード、とかいうのがあるのですが、 普通のシェルコードからそれに変換するプログラムを書きました

と言っても、美しき策謀についてる、printable_helperというのを参考にしています
そもそも、印字可能シェルコードというのは、
まず、eaxをxorで0にし、そこから印字可能な数字を引いて、
pushすることでスタック上に機械語コードを組み立てていき、そのコードを実行することでできてます

それを、あるプログラムのバイナリを4バイト分ずつ読み込み、
subすることで作れる文字を探していきそれをコードに直していくようにしてます。 とりあえず、これソースコードです。 gistですので適当にダウンロードできたか忘れましたが、コンパイルして実行してください。
言語はC++11ですので、しっかりコンパイルのときはオプションつけてください
使い方は、印字可能にしたいシェルコード、印字可能シェルコードを保存するパスを引数にし、
もうひとつ、デフォルトは-200ですが、espをどのくらい動かすかをシェルコードの長さに応じて引数にしてください
シェルコードが短ければマイナスにして、ながければ増やしてください

ああ、これ作るのに2週間ぐらいかかりましたわ・・・
プログラムする時間がそれほどなかったのもありますが
ちょっと自分の考えが甘かった感じが〜〜〜〜〜〜
セキュキャンの応募しなきゃ・・・