Practice of Programming

プログラム とか Linuxとかの話題

パスワード付き一太郎文書を開く with Win32::GuiTest

明けましておめでとうございます。
今年も宜しくお願いします。


昨年末に、 Win32::GuiTest で Windows の GUI アプリをハックしようを見て、一太郎ファイルで、パスワード忘れたのがあったので、やってみようと思い立ちました。パスワードが数字の語呂合わせだったのは覚えてたので、1000あたりからブルートフォースアタック!


一太郎本体は手元にないので、一太郎ビューアをダウンロードします。
http://www.ichitaro.com/try/taro/viewer.html


コードは以下のものを使いました。

#!/usr/bin/perl

use strict;
use warnings;
use utf8;
use Win32::GuiTest qw(:ALL);

UnicodeSemantics(1);

# 一太郎ビューアにファイルを与えて起動
system("start TAROVIEW.EXE password.jaw");
# 起動するまでしばらく待つ
sleep(2);

my $password = 1000;
my $max = 10000000;

while($password < $max) {
  my ($win, @wins) = FindWindowLike(0, '^パスワード$');
  last unless $win;

  # パスワード入力を前面に
  SetForegroundWindow($win);
  SendKeys("$password\n");

  my ($w, @ws) = FindWindowLike(0, '^一太郎ビューア$');
  # 一太郎ビューアを前面に
  SetForegroundWindow($w);
  SendKeys("\n");
  print $password++, "\n";
}

# 終了待ち
<>;

このスクリプトと同じ場所に、パスワードのかかった一太郎のファイルを置いて、
system のところを該当のファイル名に変えて動かせばOK。
これで、無事パスワードを取得できました。めでたし、めでたし。


本当は、帰省中にぶん回しておいて、帰ってきたら取れているという予定だったんですが、
途中でフォーカスが変なところに行って、失敗してました。
最初は、パスワード入力後に、一太郎ビューアを前面にする処理を入れていなかったので、そのせいかと思います。


パスワードは150000付近の数字で、かかった時間は丸一日くらいでしょうか。
2回に分けちゃったので、実際にかかった時間はよくわかりません。
Turion64 x2 Windows XP でやりましたが、描画が遅くなければ、古いPCでも大して変わらんかも。


0から始まったり、英語がまじったりすると、何かやらないといけないんでしょうけど、今回はそういうのは無いとわかってたので、簡単でした。