Skip to Content Java Solaris コミュニティ パートナー 開発者 マイ・アカウント ご購入について (0120-33-9096) Japan Worldwide

Feed Feed RSS 1.0 Feed RSS 2.0 Feed ATOM 1.0
Solaris超特急・デベロッパだヨ奥さぁーん!(1)「Cのシの字も知らないワタシがソルデベでバイナリハッキング」
Steps

このコンパイル生成物は、さっきしっかり見ておいたSunStudioProjectsの中を探すと、そこのHelloAフォルダのさらにdist/Debug/Sun12-Solaris-x86という結構深い階層にある。「helloa」ファイルだ。

図19:コンパイル生成物helloaが見つかった
図19:コンパイル生成物helloaが見つかった

このhelloaファイル、調べてみるとちゃんとプログラムとしての実行権限もついている。

図20:プログラムとして実行できる
図20:プログラムとして実行できる

そこで、これをSun Studio以外の場所で使ってみよう。別の場所にmyhexというフォルダを作って、そこにhelloaファイルをコピーする。

ソルデベでは、今そこに開いているそのフォルダからターミナルを立ち上げることができる。それをやると、わざわざコマンドでそのフォルダに行く手間が省けるのだ。

図21:「myhex」フォルダを開いたウィンドウの余白を右クリックして「端末の中に開く」
図21:「myhex」フォルダを開いたウィンドウの余白を右クリックして「端末の中に開く」

図22で、左はデスクトップから立ち上げた端末だ。ホームフォルダにいる状態で開くので、myhexフォルダの中に行くのに「cd」コマンドを打ってやらなければならない。そうしてはじめて、「ls」コマンドによりmyhexフォルダにあるファイル名を表示させることができる。

一方右は図21のように、「myhex」フォルダから立ち上げた端末だ。いきなり「ls」コマンドで、中のファイルを表示できる。

図22:左はmyhexフォルダまで行かないと中身が見えないが、右はすぐ見える
図22:左はmyhexフォルダまで行かないと中身が見えないが、右はすぐ見える

今はすぐ下のフォルダに移動すりゃいいんであんまりありがたみがないが、もっとワソ長いパスやふかーいフォルダのファイルを実行したりなんだりという場合はタイヘン助かる。

さてそこで図21のようにして立ち上げた端末から、以下のように実行してみた。

実行例1:この「Cのバイナリハッキング」ネタで唯一示されたコマンド実行例
./helloa
図23:ちゃんと実行された
図23:ちゃんと実行された

ちゃんと「A」と表示された。独立に動作するわけである。

デハ全く同じように、「HelloB」プロジェクトで「hellob.c」というソースファイルに「printf("B\n");」と書いてコンパイルして、その生成物「hellob」を「myhex」フォルダにコピーし、そこからターミナルで実行して「B」と表示されることを確かめるまでする。

これやっとかないと、最初っから間違って「A」と表示されるファイル2つ作ってたらとんだぬか喜びになっちまいやすからね、しっかり確認しておきましょう。

これで、今回のSun Studioの役目は終わりだ。でもまたゼヒ使いたい。

このように準備した「Cのバイナリファイル」をいよいよ、Hexエディタで開く。まずエディタのほうを開いて、前編の図2のような真っ灰色(※12) の画面を出したら、その土手っ腹(※13)にファイルブラウザからhelloaのアイコンをドラッグドロップで食らわせてやればいい。

図25:出たーッ
図25:出たーッ

ほほー見事じゃの、これが余の作りしバイナリファイルの姿か。恐れながら殿、このデータのほとんどはSun Studioが作りしものにございます。そっそんなことは存じておるわ戯れに申してみただけじゃブツブツ。という感じだ。

右手にある欄には、ところどころ英数字が書いてある。これは、ASCⅡ文字として表現できるところは表現してくれている姿のようである。やはり、数値や文字列のデータを修正する目的で出しているのかも知れない。

全体を眺めてみると、コンパイルされたプログラムの中には文字列情報もたくさん入っていることがわかる。

図26:helloa.cファイルの名前だとか場所だとかも情報に入っている
図26:helloa.cファイルの名前だとか場所だとかも情報に入っている

スクロールバーを少しずつ引っ張って見ていくと、こんな部分があった。

図27:「A」という文字がある
図27:「A」という文字がある

「これかな?」

つついてみる。そして左側のバイナリ表示を見たら、「41」が選択されていた。

図28:右側で「A」を選ぶと、左側では「41」が選択される
図28:右側で「A」を選ぶと、左側では「41」が選択される

ではhellobファイルも開いてみよう。Hexエディタのメニューからファイルを選んで開くと、別のウィンドウに表示されるから両者を並べて比べてみることもできる。

やっぱり同じような場所があった。そしてこっちは「B」と書いてあるッ!

図29:Bという字が書いてある周りは図27とタイヘンよく似ているッ!
図29:Bという字が書いてある周りは図27とタイヘンよく似ているッ!

バイナリエディタだってのにASCII文字の方ばっかり見て似てるだ似てないだ言っているが、ちなみに「B」に相当する16進表示は「42」だった。

「これだナ...」

要はヤッてみりゃあいい。「hellob」の表示画面を扱う。Hexエディタのメニューの「編集」から「置換」を選ぶ。

図30:Hexエディタの「編集」メニューで「置換」を
図30:Hexエディタの「編集」メニューで「置換」を

これは「GHex」という名前のGnomeツールだが、この「置換」ウィンドウ、「検索」と共用なので、慣れないうちは使い勝手がよくないっていうかホントにちゃんとできるのか怖い。

でも図29のように、書き換えたい「B」の字がしっかり選択されていることを確かめたら、「検索する文字列」のところに自分で「42」と16進表示のほうを入れる。

これも「GHex」のGUIの問題か、マウスで欄をクリックすると左側では「0」という数値、右側ではそれに対応して「.」記号が挿入されてしまう。でも、自分で入れた数値42を直接クリックすると消える。

図31:「検索する文字列」のところに自分で「42」と入れる。図31中のよけいな数値「0」は、「42」の数字をマウスでクリックすれば消える
図31:「検索する文字列」のところに自分で「42」と入れる。図31中のよけいな数値「0」は、「42」の数字をマウスでクリックすれば消える

一方、「置換する文字列」のほうには「41」と入れる。上・下段のそれぞれの右側に「42」「41」、左側に「B」「A」と、置換前後の対応がキレイに表示されているのを見届けたら、運命の「置換」ボタンを押すッ!

図32:「置換する文字列」のほうには「41」を入れて、「置換」を押すッ!「全て置換」を押さないように注意しようッ!
図32:「置換する文字列」のほうには「41」を入れて、「置換」を押すッ!「全て置換」を押さないように注意しようッ!

瞬間、右側の画面が別の場所に切り替わってギャッと思うが、要するに我々が選択していた場所の置換作業が終わったので次の「B」を探しに行ったのだ。ああびっくりした。スクロールアップして、目的の場所がちゃんと「A」に変換されていることを確かめたら「保存」する。

図33:次に探し出されたB。もちろん、もう手をつけない
図33:次に探し出されたB。もちろん、もう手をつけない

さて、ハクったhellobファイルをもう一度端末から実行だ。

あっらーのに子さん、ヤッちゃいましたねー。「バイナリいじっちゃったよアハハハー、まかり間違えばコアダンプだヨーヤバぃよー」とかフカせますねー。

でも市販の製品とかのバイナリファイルは、「バイナリ編集やリバースエンジニアリングをしちゃいけません、ライセンスのお約束」というものもあるから、自分で作ったファイルで学習するだけにしておきましょう。




   真っ灰色:「まっ」と「はい」の間が非常に発音しにくい。
   土手っ腹:実は初期状態では結構ちっちゃい土手っ腹なので、食らわせてやろうとhelloaのいるファイルブラウザにフォーカスを移したとたん、こっちのほうが他のウィンドウの陰に隠れちゃったりするので作業は落ち着いて。
   バイナリハッキング:新学期で行楽シーズンのせいか、この語を見ていると「バナナ」「イナリ」「ハイキング」のような文字列が目の前にちらついて全然サイバー(古ッ)じゃない。

本記事は、サンのユーザ様自らの体験をお寄せいただいたものであり、サン・マイクロシステムズ社としての公式情報ではありません。

ご意見・ご感想をお聞かせください
この記事は参考になりましたか?
     

コメントがございましたらご記入ください


ページ先頭へ

Sun Fun Times


 

お問い合わせ 会社情報 ニュース 採用情報 プライバシー 利用規定 商標 Copyright  Sun Microsystems, Inc.