zoukankan      html  css  js  c++  java
  • DLL注入技术(输入法注入)

    输入法注入原理

    IME输入法实际就是一个dll文件(后缀为ime),此dll文件需要导出必要的接口供系统加载输入法时调用。我们可以在此ime文件的DllMain函数的入口通过调用LoadLibrary函数来加载需要注入的dll。

    输入法注入实现

    ime文件需要导出必要的接口函数。

    ImeConversionList           //将字符串/字符转换成目标字符串/字符 
    ImeConfigure                //设置ime参数  
    ImeDestroy                  //退出当前使用的IME  
    ImeEscape                   //应用软件访问输入法的接口函数  
    ImeInquire                  //启动并初始化当前ime输入法  
    ImeProcessKey               //ime输入键盘事件管理函数  
    ImeSelect                   //启动当前的ime输入法  
    ImeSetActiveContext         //设置当前的输入处于活动状态  
    ImeSetCompositionString     //由应用程序设置输入法编码  
    ImeToAsciiEx                //将输入的键盘事件转换为汉字编码事件  
    NotifyIME                   //ime事件管理函数  
    ImeRegisterWord             //向输入法字典注册字符串  
    ImeUnregisterWord           //删除被注册的字符串  
    ImeGetRegisterWordStyle  
    ImeEnumRegisterWord  
    

    其中最重要的就是ImeInquire函数,当切换到此ime输入法时此函数就会被调用启动并初始化此ime输入法。
    参数lpIMEInfo用于输入对Ime输入法初始化的内容结构,参数lpszUIClass为输入法的窗口类。lpszUIClass对应的窗口类必须已注册,我们应该在ime的DllMain入口处注册此窗口类。

    BOOL WINAPI ImeInquire(LPIMEINFO lpIMEInfo,LPTSTR lpszUIClass,LPCTSTR lpszOption)
    

    我们通过调用ImmInstallIME来加载输入法,函数的两个参数分别为输入法IME文件的文件名和在控制面板的是输入法选项中显示的输入法名称。

    HKL ImmInstallIME(LPCTSTR lpszIMEFileName, LPCTSTR lpszLayoutText);
    

    当我们调用ImmInstallIME函数后只是将此ime输入法加载了而已,但是当进程没有切换到此输入法前,其DllMain函数都不会被调用输入法未被激活。我们可以通过手动切换,也可以通过向应用程序发送WM_INPUTLANGCHANGEREQUEST消息来切换。

    其次我们可以调用SystemParametersinfo将此IME输入法设为默认输入法,这样新进程创建时就会默认使用并激活此输入法。

    BOOL SystemParametersInfo(UINT uiAction,UINT uiParam,PVOID pvParam,UINT fWinlni)
    

    当uiAction的值为SPI_SETDEFAULTINPUTLANG,其会将pvParam指向的输入法作为默认输入法。
    这样每次有进程创建就会默认将此ime文件加载并调用入口点函数,从而进一步在入口点注入我们的dll。

    参考:https://blog.csdn.net/swanabin/article/details/21473045

  • 相关阅读:
    module.exports 和 exports的区别
    nodejs概述和理解
    sass的继承,混合宏,占位符的用法总结
    项目发布方式
    扩展运算符和解构赋值的理解
    C3----几个常用的加载图标制作
    gulp和yarn打包工具二分钟包会教程(高阶)
    Java接口
    Tomcat8 连接池
    DAMA
  • 原文地址:https://www.cnblogs.com/revercc/p/14683828.html
Copyright © 2011-2022 走看看