- 注册时间
- 2013-5-25
- 最后登录
- 2016-10-20
- 在线时间
- 14 小时
终身VIP会员
- 魔鬼币
- 9980
|
由于前几天脑残.....去研究那个输入法注入。可惜手头上没有这方面的资料,于是乎去了网上查了一下.....结果悲剧的收场了.......可是心里面很是不爽,于是乎用记事本打开超级模块看了一遍........发现很多秘密啊!当我搜索输入法以后调到一个地方,乍看之下没什么,仔细一看......那些英文不就是API函数么- -(淡定)于是乎我就研究了....到最后总结出7个函数可能与输入法注入有关。然后经本人长期的不懈努力终于把真正的函数给研究出来了(一共有四个)。下面我就给大家介绍这4个API函数的用法:
第一个函数:ImmInstallIMEA(为什么要加A??因为编码问题)
此函数你度姐一下就知道,有2个文本型参数,返回值为整数型,库文件名为imm32.dll,第一个参数为输入法的安装目录,第二个参数为输入法的名称。E格式为:
.版本 2
.DLL命令 ImmInstallIME, 整数型, "imm32.dll", "ImmInstallIMEA", , 该函数的两个参数分别为输入法IME文件的文件名和在控制面板的是输入法选项中显示的输入法名称。函数调用后将返回一个被安装输入法的输入法标识符(或称做输入法句柄)。
.参数 lpszIMEFileName, 文本型, , 输入法的安装目录
.参数 lpszLayoutText, 文本型, , 输入法的名称
接下来介绍第二个函数:IMESetPubString
此函数花费了我2个多小时才研究透的,首先我根本不知道此函数的库文件是什么,然后就用超级模块做了一下测试,发现如果不用输入法文件此函数使用时压根儿就会出错,这是恍然大悟,输入法文件不也是一个动态链接库么(个人理解)于是乎我就改了此函数的后缀名为DLL,然后在库文件名那填上此函数的文件名和后缀名,在命令名那写上此函数,可是我不知道此函数到底有多少参数,然后我就一个一个的添加,到最后一共有6个参数的时候才没有报错(以下省略,话说个人经验很宝贵的)然后经本人多次测试和多方指教下终于把此函数的6个参数给弄清楚,第一个参数乃为你要注入的DLL的文件名,第二个参数为当输入法退出的时候是否卸载掉这个DLL,第三个参数为是否自动切换输入法剩下的几个参数涉及到输入法编程所以我不多说了,我全给0处理,就这么一个函数花费我1天半的时间。靠!下面为E格式:
.版本 2
.DLL命令 输入法注入dll, 整数型, "请填写输入法文件的文件名", "IMESetPubString", , 此函数为输入法文件下的库命令名,具体返回值我也说不清楚反正我就按照整数型来处理吧
.参数 dll文件名, 文本型, , 欲注入DLL的文件名(全路径)
.参数 是否卸载, 整数型, , 输入法退出时是否同时卸载注入的DLL 0代表是 1代表否
.参数 是否切换, 整数型, , 当切换到目标输入法时自动切换到下一个输入法 0代表否 1代表是
.参数 参数一, 整数型, , 0
.参数 参数二, 整数型, , 0
.参数 参数三, 整数型, , 0
然后介绍第三个函数:PostMessageA
此函数度姐一下,可以知道此函数一共有4个参数,具体的请到这里查看http://baike.baidu.com/view/1080179.htm由于此函数在网上有许多资源我就不多说了,直接E格式:
.版本 2
.DLL命令 发送消息, 整数型, "user32.dll", "PostMessageA", , 该函数将一个消息放入(寄送)到与指定窗口创建的线程相联系消息队列里,不等待线程处理消息就返回,是异步消息模式。消息队列里的消息通过调用GetMessage和PeekMessage取得。如果函数调用成功,返回非零值:如果函数调用失败,返回值是零。若想获得更多的错误信息,请调用GetLastError函数。
.参数 hWnd, 整数型, , 其窗口程序接收消息的窗口的句柄。
.参数 Msg, 整数型, , 指定被寄送的消息。
.参数 wParam, 整数型, , 指定附加的消息特定的信息。
.参数 lParam, 整数型, , 指定附加的消息特定的信息。
当我把这些函数的说明及用法都看了一遍(第4个参数留在下一贴再说),总结出这么一个信息:
ImmInstallIME函数就相当与超级模块里面的安装输入法,IMESetPubString函数就是输入法注入,然后PostMessage函数就是激活输入法啊啦。于是带着好奇与兴奋的心理去事件了一下.....结果悲剧了,输入法是安装成功了,可是**根本不能呼出DLL。很想砸键盘的冲动,但是改用枕头了- -
到底是那里的原因呢??想来想去我得出3个猜想。第一个就是我把那个PostMessage这个函数的参数给弄错了。第二个就是还有一些未知的函数我没有研究出来,第三个就是**我这几天研究的都只不过是浮云吧了! 首先我立即排除第三种猜想!因为我相信自己!然后我又上网查看了一下PostMessage这个函数的具体参数说明,原来是我把参数给填错了!于是乎我改了下参数再次参数,结果让我很失望!还是没呼出来!我测试了差不多40多次还是这样! 我真**有种想抓狂的感受,想发泄一翻,于是乎我的枕头再次受到我的折磨了- -。。。(其实不用这个函数也可以的,只不过得切换输入法才能完成激活。PostMessage这个函数其实就是给注入窗口发送一个窗口机制,而这个机制就是CTRL和SHIFT的组合键。详细资料请参考http://hi.baidu.com/qjjbdkj/blog ... 38c3de9123d909.html)然后我静下心来想象到底是那里出错了??然后回归到代码上面,首先我用ImmInstallIME函数安装了输入法且安装成功!(已经在文字服务和输入语言区域里得到证实),然后又看了看注入代码段那,结果仔细的查看了一翻也没看出错的地方。最后又看了看激活代码段....都对的啊!到底是那里出错了?啊啊啊!我终于愤怒了!话说心灵的愤怒是非常可怕的。。有种想发泄的冲动,可惜这次我那可爱的琴美酱抱枕没有受到这次的“享受”,而是换成我那悲剧的手机了。。。。
当我发泄完并且静下心来以后我又认真的思考这个问题。。。为什么不能呼出来??我都已经安装成功并且注入了啊!为什么?突然,一个念头在我脑海里闪过,我真的成功的注入了吗?有了这个想法我再次测试了一下,不过这次我并不是看DLL的界面是否呼出,而是当我执行注入操作完成以后手动删除DLL文件(因为如果成功注入的话DLL已经加载到制定的进程里面了不结束这个进程此DLL是无法手动删除的,除非特殊方法,比如360文件粉碎等等),结果让我很是兴奋!看来我并没有成功的注入此DLL啊!到底是哪里没有想到呢?然后我又思考起来..........(当时我有不下10种的猜疑,不过这个猜疑的可能性占60%左右,因为执行注入操作的API是IMESetPubString,而这个API的库文件名就是输入法文件,再看下激活API的参数,第一个是窗口句柄,第四个是输入法句柄)我研究的是输入法注入,那么DLL和输入法就有密切的关系啦,是不是把这2个文件结合起来再次注入就成了??有了这个想法以后我就进行尝试,可惜不知道怎么结合这2个文件啊!! 结合 结合 对了!这个操作和病毒的处理方式不也是一样的么!根据本人以前有一点点的编写病毒的经历我立马想到了E里面的一个命令:复制文件 于是乎我就进行了尝试,在注入代码段前面加入这么一句代码:复制文件(DLL路径,输入法路径)然后运行,当我点击激活按钮时智辅界面成功呼出!啊!当时的那种感觉,你们是无法体会的了!呵呵 |
|