クラックの練習(1)

解析魔法少女 美咲ちゃん マジカル・オープン!の4章でやっていることを再現しようと、自分でテスト用プログラムを作成した。パスワードを入力する欄があり、そこに文字列を入力するとダイアログが表示されるという簡単なプログラムだ。パスワードが正しいときと間違っているときで、表示されるダイアログが異なる。これをOllyDbgを使ってクラックしたい。

テスト用プログラムpassword_checker.exeは、wxPythonで作成した。Pythonのソースは最後に示す。このプログラムをpy2exeでWindows XP用の実行ファイルに変換した。

password_checker.exeを実行すると、次の画面が開く。

適当なパスワードを入れてボタンを押すと、間違っているパスワードのときには、次のダイアログが表示される。

このプログラムpassword_checker.exeは、4章の例題で取り上げられているcrackme01.exeと同じようなものだ。なのですぐにクラックできるかと思ったが、なかなか難しい。本のようにはいかない。
Windows XPで、一時停止後にも関わらずステップ実行できちゃうのですが。ステップ実行できてもなにがなんだかわからない。

(↑ここで止まらない。ステップ実行がどこまでも可能)

まだまだいろいろと時間がかかりそうだ。

以下、password_checker.pyを示す。

# -------------------------------------------------------------------
import wx
import os

class MyApp(wx.PySimpleApp):
    def OnInit(self):
        width, height = 250, 300
        self.Frm = wx.Frame(None, -1, "wxPython", size=wx.Size(width, height))
        VSizer = wx.BoxSizer(wx.VERTICAL)
        
        self.TxtCtl1 = wx.TextCtrl(self.Frm, -1, "", size=(235,-1),
                                   style=wx.TE_RIGHT)
        self.Btn = wx.Button(self.Frm, -1, "check")
        self.Btn.Bind(wx.EVT_BUTTON, self.Decision)        
        VSizer.Add(self.TxtCtl1, 0, wx.ALL, 2)        
        VSizer.Add(self.Btn, 0, wx.ALL, 2)
        self.Frm.SetSizer(VSizer)
        self.Frm.Show()
        return True
        
    def Decision(self, event):
        input_moji = self.TxtCtl1.GetValue()
        if input_moji == "abcdefg":
            Dlg = wx.MessageDialog(self.Frm, "Correct Password",
                                   style=wx.ICON_INFORMATION)
            print "aa"
        else:
            Dlg = wx.MessageDialog(self.Frm, "Wrong Password",
                                   style=wx.ICON_INFORMATION)
            print "bb"
        Dlg.ShowModal()
        
app = MyApp()
app.MainLoop()