Windows Ring3层注入——输入法注入(六)
输入法介绍
输入法是一类特殊的程序,主要功能在程序中是进行文字的输入,一般有外挂式(早期的“万能五笔”)和输入法接口式两种实现方式。
外挂式比较简单,它的形式通常是一个EXE文件,通过模拟一些Windows输入消息向当前处于活动状态的编辑窗口输入文字,一个显著的特点是输入法只要启动,就可以在所有进程中使用,缺点是实现不容易,兼容性不好,通常一个Windows版本需要对应一个输入法版本。此外,此类输入法为了截获用户输入内容,通常会挂接键盘钩子,这容易造成系统不稳定或者效率不高。
所以,大部分输入法还是采用IME输入法接口来实现的。
输入法注入原理
- 输入法注入是指自制输入法加载到目标进程的时候,附带加载需要注入的DLL的一种注入方式。
输入法注入的相关知识
- 输入法就是个DLL,只不过是一个特殊的DLL,必须具有标准输入法程序所规定的那些接口。
- 输入法在系统目录中是以**.ime为扩展名的文件。当应用程序中激活某个输入法时,输入法管理器(imm32.dll)就会在该应用程序的进程中加载对应的.ime文件与加载普通的DLL文件没有本质区别**,所以就可以认为输入法就是注入应用程序的一个DLL文件。
- 输入法注入以后可以切换到其他输入法,不影响已经注入的DLL。
输入法注入步骤
输入法注入的实现,一般需要三个程序协同完成:
- 自制的输入法模块,即以**“ime”**结尾的文件;
- 是需要注入的DLL模块;
- 是控制IME文件安装的exe模块。
输入法注入的函数原型及代码示例
- ImeDllLoader.ime