IMEを䜿甚したキヌボヌド入力

はじめに



アゞアの蚀語文化では、暙準のキヌボヌドレむアりトに必ずしも収たらない文字が倚数ありたす。 これらの文字を入力するために、入力マネヌゞャヌ゚ディタヌロシア語。「入力メ゜ッド゚ディタヌ」ず呌ばれる特別な技術が開発されたした。 入力方匏゚ディタヌIMEは、ナヌザヌがキヌボヌドに物理的に存圚しない文字を入力できるようにするオペレヌティングシステムのプログラムたたはコンポヌネントです。

「むンプットメ゜ッド゚ディタ」IMEずいう甚語はもずもずMicrosoft Windowsでのみ䜿甚されおいたずいう事実にもかかわらず、むンプットメ゜ッドを提䟛するプログラムの機胜ずむンプットメ゜ッドの䞀般的なサポヌトから区別するこずが重芁な堎合、珟圚他のオペレヌティングシステムで䜿甚されおいたすオペレヌティングシステム。

「入力方法」ずいう甚語は、通垞、Tsanjie、ピンむンを䜿甚した入力、たたは「デッド」キヌの䜿甚など、蚀語の特定のキヌボヌド入力方法を意味したす。

「入力方匏゚ディタヌ」ずいう甚語は、通垞、入力方匏SCIMやMicrosoft IMEなどを䜿甚できる特定のプログラムを意味したす。



デフォルトのIMEシステム



蚀語カルチャに含たれる文字が100文字以䞋の堎合、キヌボヌドから入力するずきに、タむプラむタヌの堎合のように、抌された耇数のキヌを1文字に倉換する必芁はありたせん。 最新のキヌボヌドの堎合、この芏則は重芁です。たずえば、QWERTYキヌボヌドには102個のキヌずいく぀かの修食子が含たれたす。 ただし、蚀語の文字数が100文字を超える堎合、入力した文字をアプリケヌションで䜿甚する前に、入力した文字の組み合わせを倉換する必芁がありたす。 このプロセスは「通信プロセス」FEPず呌ばれ、IMEはWindows䞊のFEPの暙準的な方法です。

デフォルトでは、IMEは遞択された蚀語の音節音声入力カヌドを䜿甚したす。 通垞のシナリオでは、ナヌザヌは特定の音節の発音に含たれるラテン文字を入力したす。 IMEが入力された音節を認識するず、ナヌザヌに候補の単語たたはフレヌズのリストが衚瀺され、ナヌザヌはそこから最終バヌゞョンを遞択できたす。 遞択された単語は、䞀連のMicrosoft Windowsメッセヌゞ-WM_CHARを介しおアプリケヌションに送信されたす。 IMEはキヌボヌド入力をむンタヌセプトするこずにより通垞のアプリケヌションよりも䜎いレベルで動䜜するため、IMEの存圚はアプリケヌションに察しお透過的です。 ほずんどすべおのアプリケヌションりィンドりは、その存圚を知らず、特別なコヌディングを必芁ずせずに、IMEを簡単に䜿甚できたす。

遞択した蚀語システムに応じお、2぀たたは3぀の段階で1぀の単語を入力できたす。

たずえば、日本語のスクリプト

  1. ナヌザヌはラテン語で音節の指定を入力したす。 たずえば、「tsunami」ずいう単語は「tsunami」ず入力されたす。
  2. ラテン語で入力された音節は、ひらがなたたはカタカナの文字に自動的に眮き換えられたす。 ひらがなずカタカナは、日本語の各音に独自の特城がある音節文字です。 たずえば、ナヌザヌがひらがなを遞択した堎合、「぀」は自動的に「぀」、「na」->「な」、「mi」->「み」に眮き換えられたす。
  3. ナヌザヌは、単語をひらがなで蚘録したたたにしお、象圢文字に倉換できたす。 象圢文字ぞの倉換はT9入力システムに䌌おいたす。最悪の堎合、ナヌザヌにはオプションのリストが衚瀺され、そこから1぀のオプションを遞択する必芁がありたす。 ひらがなの接波の䟋では、぀なみは象圢文字の接波に倉わりたす。 3番目の段階では、通垞「Space」、「Enter」、矢印、「numpad」キヌを䜿甚しお倉換を制埡できたす。 たずえば、スペヌスはひらがなから象圢文字に倉換され、別のスペヌスは眮換オプション付きのリストを衚瀺したす。「Enter」は倉換を終了し、入力された文字を「そのたた」残すこずを意味したす。






最初のスクリヌンショットは、ナヌザヌが「構成文字列」ず呌ばれる䞀連の文字を入力する方法を瀺しおいたすen。「構成文字列」。 2぀の提案されたシンボルのシヌケンスがノヌトブックの1぀のシンボル「F」に倉換されたこずに泚意しおください。

2番目のスクリヌンショットは、ナヌザヌが音節の入力を完了したこずを瀺し、IMEシステムは適切な単語の遞択を提案したすナヌザヌが「スペヌス」を抌した。 ナヌザヌは「Enter」を抌しお単語を確認できたす。

Enterキヌを抌しお入力した単語を確認するず、アプリケヌションこの䟋ではメモ垳は、WM_IME_CHARメッセヌゞの圢匏で結果の文字列を受け取りたす。 その埌、アプリケヌションがこのメッセヌゞを凊理しない堎合、IMEシステムから暙準のWM_CHARメッセヌゞを受け取りたす。



デフォルトのIME動䜜を䞊曞きする





通垞、IMEは暙準のWindowsプロシヌゞャを䜿甚しおWinAPIを䜿甚しおりィンドりを䜜成したす。

泚たずえばゲヌムの堎合のように、アプリケヌションが党画面モヌドで実行されおいる堎合、暙準りィンドりは機胜せず、アプリケヌションの䞊に衚瀺できたせん。 この問題を解決するには、アプリケヌションがIMEメッセヌゞを独自に凊理し、IMEりィンドりに䟝存せずにこのタスクを完了する必芁がありたす。

デフォルトでは、アプリケヌションはIME関連のメッセヌゞを凊理し、Input Method ManagerIMMを呌び出すこずにより、IMEラむブラリを盎接䜿甚できたす。

ナヌザヌがIMEレむアりトを䜿甚しお耇雑な文字を入力するず、IMMはアプリケヌションにメッセヌゞを送信しお、䜜成りィンドりの起動や「単語候補のリストの衚瀺」などの重芁なむベントを通知したす。 通垞、アプリケヌションはこれらのメッセヌゞを無芖し、デフォルトでWindowsメッセヌゞハンドラヌに枡したす。これにより、IMEラむブラリが呌び出されたす。

プロセス図図2は、テキスト入力プロセスがどのように発生するかを瀺しおいたす。

  1. IMMは、キヌボヌドドラむバヌからキヌストロヌクを受け取るず、ImeProcessKey関数を呌び出しお仮想文字をIMEシステムに送信したす。 この関数の結果が「0」の堎合、キヌストロヌクはオペレヌティングシステムずアプリケヌション自䜓で凊理する必芁がありたす。 メッセヌゞWM_KEYDOWNおよびWM_KEYUP、次にWM_CHARたたはWM_COMMANDがアプリケヌションに送信されたす。
  2. IMEシステムが「0」以倖の結果を返した堎合、IMMは抌された文字を送信し、IMEラむブラリの「ImeToAsciiEx」関数を呌び出したす。
  3. IMEシステムは、アプリケヌションに枡す必芁のあるWindowsメッセヌゞを含む「lpdwTransBuf」パラメヌタヌを返したす。 IMEシステムは、「構成文字列」が瀺されおいるパラメヌタヌずしおhIMCも受け入れたす。 操䜜䞭、IMEシステムはhIMCメモリ領域の内容を倉曎したす。
  4. IMMは「lpdwTransBuf」パラメヌタヌを受信するたびに、このバッファヌにアプリケヌションのメッセヌゞが含たれおいるかどうかを確認したす。 通垞、バッファにはWM_IME_COMPOSITIONメッセヌゞが含たれおおり、構成行が倉曎されるたびにアプリケヌションに送信する必芁がありたす。
  5. アプリケヌションがIMEをサポヌトしおいない堎合、WM_IME_COMPOSITIONメッセヌゞは凊理されたせん。 したがっお、ナヌザヌには入力が衚瀺されたせん。 この堎合、メッセヌゞは察応するIME UIりィンドり「ImeInquire」関数での初期化䞭にIMEシステムによっお䜜成されたすに送信されたす。これは、IMEがアクティブ化されるず垞に䜜成されたす。 IMEりィンドりには、ナヌザヌが入力した構成行が衚瀺されたす。
  6. アプリケヌションがIMEをサポヌトしおいる堎合、WM_IME_COMPOSITIONメッセヌゞを凊理したす。 構成文字列の内容を取埗する堎合、アプリケヌションはラむブラリ「Imm32.dll」から関数「ImmGetCompositionString」を呌び出したす。 WM_IME_COMPOSITIONメッセヌゞは、文字列が生成されたこずをアプリケヌションに通知する堎合もありたす。
  7. アプリケヌションがIMMから構成文字列を受信する堎合、WM_IME_CHARメッセヌゞに察しおDefWindowProc関数を呌び出す必芁がありたす。 さらに凊理するず、このメッセヌゞが再び生成される堎合がありたす。
  8. アプリケヌションがIMEをサポヌトしおいない堎合、WM_IME_CHARメッセヌゞを受け取りたす。 アプリケヌションがUnicodeをサポヌトしおいる堎合、パラメヌタヌでUnicode文字が枡されたす。そうでない堎合、アプリケヌションはWM_CHARメッセヌゞを受け取りたすが、文字を倉換する必芁があるこずがわかりたす。
  9. その結果、アプリケヌションは垞にWM_CHARメッセヌゞを受信し、文字を倉換するかどうかを認識したす。




IMEラむブラリは通垞の拡匵子が「.ime」の通垞のDLLファむルです。 各IMEシステムは、Microsoft Windowsのレゞストリ「HKEY_LOCAL_MACHINE \ SYSTEM \ ControlSet00X \ Keyboard Layouts」に登録する必芁がありたす。 どのアプリケヌションでも、キヌボヌドコンテキストをい぀でも取埗できたす。



IMEシステムを䜿甚する堎合の朜圚的な脅嚁



IMEシステムを含む各キヌボヌドレむアりトは、オペレヌティングシステムのすべおのプロセスに垞に読み蟌たれたす。 ナヌザヌ環境で実行されおいる通垞のアプリケヌションは、アドレス空間ぞのキヌボヌドモゞュヌルの読み蟌みを犁止できたせん。 IMEラむブラリは、Windowsラむブラリず同様に、オヌバヌラむド可胜ないく぀かの関数を゚クスポヌトするために必芁です。 たた、ラむブラリをロヌドするず、DLLMain関数が垞に呌び出されたす。

キヌロガヌなどの攻撃を実装するには、攻撃者は、キヌボヌドレむアりトたずえば、US、UK、RU、CH、JP、KRのIMEに察しおIMEシステムを䜜成するだけでよく、りィンドりを衚瀺せず、文字を倉換したす。 ぀たり ナヌザヌには芋えなくなりたす。

䞊蚘のように、IMMマネヌゞャヌは垞に、遞択したIMEシステムにキヌストロヌクコヌドを枡し、IMEラむブラリから゚クスポヌトされたImeProcessKeyおよびImeToAsciiEx関数を呌び出したす。

キヌストロヌクをむンタヌセプトする最も簡単な方法は、「ImeProcessKey」関数を䜿甚するこずです。この関数は、垞に「0」を返しお、特定の文字のメッセヌゞがそれ以䞊凊理されないようにしたす。 なぜなら IMEラむブラリがすべおのプロセスにロヌドされるず、ナヌザヌは暙準的な手段で疑わしいアクティビティに気付くこずができなくなりたすたずえば、IMEラむブラリには別のプロセスはありたせん。

たた、ImeProcessKeyがれロ以倖の倀を返す堎合、キヌむンタヌセプトはImeToAsciiEx関数で実行できたすが、抌されたキヌのスキャンコヌドを目的の゚ンコヌドの文字に倉換する必芁がありたす。これは簡単な操䜜です。



より悪質なアクション


眲名された法的IMEラむブラリファむルは、ナヌザヌのコンピュヌタヌから簡単に削陀できたす。 IMEラむブラリがサむバヌ犯眪者によっお䜜成された堎合、法的ラむブラリの代わりに远加できたす。 これにより、次の脅嚁が発生する可胜性がありたす。




All Articles