SHIROのIchigoJam日記

IchigoJamの電子工作とプログラミングをメインに

パスワードアタック

いわゆる「総当たり攻撃」(ブルートフォースアタック)で、パスワードをクラッキングするシミュレーションプログラムです。

  • 起動するとパスワードを聞いてくるので、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桁ごとに再帰でサブルーチンを呼んでいるので仕方ないのですが。