クラッキングバイブルのCD内にあるcackme 0x01の シリアルナンバーのチェックをクラックしてみる。 OllyDBGで開けば、「隠す気が無いのか」という程に シリアルナンバーが簡単に見つかる。 本の通りにするのは面白くないし、起動するたびに 正規のシリアルナンバーを入力しなければならないのは面倒。 そこで、シリアルチェックをクラックして回避してみる。 注意:一応クラック対象のファイルをコピーしておくこと。 取り敢えず実行してみる シリアルナンバーが分からないのだから、当然弾かれる。 OllyDBGで開く F9キーを押して取り敢えず1回実行してみる 入力画面が出てくる。 ここでAPI関数を調べる。 ウィンドウにテキストという事は get~text系のAPIである事は容易に推測できる。 そこで、Googleで "get text windows" で調べる。 すると、GetWindowText 関数が出てくる。 Ctrl+nを押し、GetWindowTextと入力 ウィンドウのタイトルに入力した文字が大文字で表示される。 下の画像では GETW と書いてるところ。 GetWindowsTextAを選択し、右クリックで "全ての参照にブレークポイントをセット"を選択する。 crackme 0x01にシリアルナンバーを適当に入力し、登録を押す。 すると、GetWindowTextA で処理が止まる。 解析者を妨害する為のダミーのシリアルナンバーに違いない。 ・・・・ F8を押して進めてみる。 弾かれる。 ここで重要なのは、 ユーザーが入力したシリアルナンバーと 正規のシリアルナンバーの比較が 今までの処理のどこかにある という事。 つまり、比較を行いその結果に応じて どこに処理を飛ばす(ジャンプする)べきか を決める処理がある。 という事は 0x004011DE の TEST EAX,EAX と 0x004011E0 の JNZ SHORT CrackMe0.004011F8 が怪しい。 もし、比較もジャンプせずにこのまま処理を進めちゃえば シリアルナンバーのチェック回避できそう。 という事で、先ほどの2つをNOP(0x90)で書き換えてみる。 該当箇所を右クリックして、バイナリI の 全てをNOPに をクリック。 するとNOP(0x90)に書き換えられる そして、"シリアルナンバーが違います"のウィンドウの"OK" をクリック。 するとまた入力を求められるので、これまた適当に入力。 "登録"をクリック。 ブレークポイントを解除していない場合は止まるが、 気にせずにF9を2回押し、処理を進めてみる。 すると、"登録ありがとうございます"と表示され、 クラックに成功した事が分かる。 先ほどNOP(0x90)に変更した処理を選択し、 右クリックで、実行ファイルへコピーの全ての変更箇所をクリック。 その後、NOP(0x90)を選択し、右クリックのファイル保存をクリック。 OllyDBGを終了させ、クラックしたCrackMe0x01.exeを起動してみる。 何か入力して登録のボタンを押しても "登録ありがとうございます。"と表示されるようになった。 これで、シリアルナンバーのチェックを回避する事に成功した。 クラック完了。 補足 今回は処理の順番的にNOPで書き換えるだけで大丈夫だった。 あくまでも偶然なので「他のソフトウェアでもうまくいくのか?」と 聞かれるとうまくいかないと思われる。 |
この記事に
- >
- コンピュータとインターネット
- >
- コンピュータ
- >
- ソフトウェア