いわゆる「総当たり攻撃」(ブルートフォースアタック)で、パスワードをクラッキングするシミュレーションプログラムです。
- 起動するとパスワードを聞いてくるので、10文字以内のパスワードを入力してEnterキーを押します。
- パスワードへのアタックが始まります。数字・アルファベット・記号(文字コード33〜127まで)を総当たりで試します。
- パスワードを突き止めると、所要時間(分)を表示して終了します。
よく情報モラルの授業で「パスワードはできるだけ長く複雑なものにしましょう」と説明されます。
実際にアタックする様子を見て、子ども達に危機感を感じて欲しいと思って、このプログラムを作りました。
ちなみにパスワードが「AB」の2文字だと、IchigoJam webで5分、ThinkPad上のIchigoJam appでは数秒で破られます。
あとはIchigoJam appで試すと、「ABC」の3文字は2分、「ABCD」の4文字は230分(4時間弱)で破られました。
画面の文字表示をやめるなど、プログラムを改良すればもっと速くなるはず。
みんな、簡単なパスワードはダメだぞ!
プログラムリスト
10 '*Password Attack 20 CLV:CLS 30 ?"Password(<10chr.)=" 40 '@INLOOP 50 K=INKEY():IF !K CONT 60 IF K<>10 ?CHR$(K);:GOTO 40 70 L=1 80 '@READLOOP 90 [90+L]=PEEK(#91F+L) 100 IF [90+L] L=L+1:GOTO 80 110 LC 0,5:?"Attacking..." 120 L=0:CLT 130 '@ATTACKLOOP 140 L=L+1:M=0 150 GSB 190 160 IF E GOTO 130 170 ?:?"FIND!! Time=";T;"min." 180 BEEP10,30:END 190 '@ATTACKSUB 200 M=M+1 210 FOR [M]=33 TO 127 220 [50+M]=[M] 230 IF M<L GSB 190:M=M-1 240 E=0:LC 0,6 250 FOR D=1 TO L 260 ?CHR$([50+D]); 270 IF [90+D]<>[50+D] E=1 280 NEXT 290 IF [91+L] E=1 300 IF TICK()>3600 T=T+1:CLT 310 IF !E [M]=127:NEXT:RTN 320 NEXT 330 RTN
プログラムリスト(数字限定)
10 '*Password Attack 20 CLV:CLS 30 ?"Password(<10chr.)=" 40 '@INLOOP 50 K=INKEY():IF !K CONT 60 IF K<>10 ?CHR$(K);:GOTO 40 70 L=1 80 '@READLOOP 90 [90+L]=PEEK(#91F+L) 100 IF [90+L] L=L+1:GOTO 80 110 LC 0,5:?"Attacking..." 120 L=0:CLT 130 '@ATTACKLOOP 140 L=L+1:M=0 150 GSB 190 160 IF E GOTO 130 170 ?:?"FIND!! Time=";T;"min." 180 BEEP10,30:END 190 '@ATTACKSUB 200 M=M+1 210 FOR [M]=48 TO 57 220 [50+M]=[M] 230 IF M<L GSB 190:M=M-1 240 E=0:LC 0,6 250 FOR D=1 TO L 260 ?CHR$([50+D]); 270 IF [90+D]<>[50+D] E=1 280 NEXT 290 IF [91+L] E=1 300 IF TICK()>3600 T=T+1:CLT 310 IF !E [M]=57:NEXT:RTN 320 NEXT 330 RTN
アタック範囲を数字(0〜9)に限定すると、4桁の「9999」は数秒で、5桁の「99999」でも1分以内に破られてしまいます。短時間で済むので、子ども向け教材には数字限定でもいいかもしれません。
なお、6桁の「999999」を試すと、スタックが足りなくなってエラーになってしまいます。1桁ごとに再帰でサブルーチンを呼んでいるので仕方ないのですが。