Auto Hotkey

Auto Hotkey とは 常駐化することでホットキー割り当てなどが行える windows 用のフリーソフト
wiki に詳しい説明があるが WaniCTF'21 で取り上げられたテキスト(スクリプト?)の読み方をメモしておく。

::the::
Send, +wani
return

::password::
Send, +c+t+f
return

::for::
Send, {home}{right 3}{del}1{end}{left 2}{del}7
return

::today::
FormatTime , x,, yyyyMMdd
SendInput, {home}{right 4}_%x%
return

::is::
Send, _{end}{!}{!}{left}
return

:*?:ni::
Send, ^a^c{Esc}{home}password{:} {end}
return

上記が問題で使用されたテキスト。「the password for today is nani」と入力すると zip のパスワードになるらしい。

::the::
Send, +wani
return

”the”+「SPACE」と入力すると ”the”+「SPACE」が削除されて代わりに ”Wani” と入力される。

『::the::』は "the" に続いて終了を意味する文字(ここでは SPACE )を入力すると処理が実行されるという意味。
『Send,』に続く文字が入力されて『return』で処理が終了する。
『+』は「SHIFT」を意味する。

::password::
Send, +c+t+f
return 

これも同様に ”passowrd”+「SPACE」と入力すると ”CTF” に置き換わる。

::for::
Send, {home}{right 3}{del}1{end}{left 2}{del}7
return 

”for”+「SPACE」と入力すると「HOME」キー、「右」キーを3回、「DEL」キー、”1”、「END」キー、「左」キーを2回、「DEL」キー、”7” の順番に入力される。
今入力した文字だけでなく、既に入力された文字に対しても編集をかけられるのが面白い。

::today::
FormatTime , x,, yyyyMMdd
SendInput, {home}{right 4}_%x%
return 

”today”+「SPACE」と入力するとシステム日付が変数 x に格納され、「HOME」キー、「右」キー4回、”_” 、変数 x の値の順番で入力される。
『Send』と『SendInput』は同じ意味らしい。

::is::
Send, _{end}{!}{!}{left}
return

" is"+「SPACE」と入力すると ”_ ”、「END」キー、”!” 、”!” 、「左」キーの順番で入力される。『{!}』 は『+1』でも代替えできるのでは?と思ったけど、外国語キーボードなど配列の違いがあるので CTF で『+1』は使えないのか。

:*?:ni::
Send, ^a^c{Esc}{home}password{:} {end}
return

”ni” と入力すると「CTRL」+「a」(全選択)、「CTRL」+「c」(コピー)、「ESC」キー、「HOME」キー、”password” 、”:” 、「END」キーの順番で入力される。
『:*?:』は「SPACE」などの終了文字を入力しなくても処理を実行するという意味。
便利そうだが意図しないところで変換が行われる危険もありそう。

 

プログラミングする際など色々使い道はありそうなツールだと思った。