首页
社区
课程
招聘
关于输入法注入的疑惑。
发表于: 2011-7-28 03:47 11006

关于输入法注入的疑惑。

2011-7-28 03:47
11006
从网上下载到一份很普遍的也是我仅能找到的输入法注入的源码。
他的输入法安装程序是用VB写的。耐着性子去一点点看了VB的源码,并且用VC6去模拟了一份。
但是在一个地方产生了疑惑。

输入法安装之后,按他的说法是其他程序只要切换到了那个输入法系统就会自动注入输入法ime文件进去。
我不知道这样理解是否错误,但是鉴于我的水平有限,我只能这样解释。
而要注入的目标DLL也是在安装程序下指定的。
因为输入法文件里有一个导出函数IMESetPubString里可以指定要注入的目标DLL的路径文件名。
所以安装程序就调用了这个导出函数。
他的VB源码我看了也就是简单的调用了这个导出函数,就使得之后所有需要输入的进程只要切换到这个输入法就能注入目标DLL。

这样我就很疑惑了,因为明白的注入目标DLL是在这个导出函数里完成的。但是只有安装程序调用了这个导出函数。我想系统不可能自动在注入输入法文件到进程里之后也会去这样调用吧。其他之后打开的进程怎么可能会注入目标DLL呢?

带着这样的疑惑我用VC按它VB的源码模拟了一份。果然,只有我的安装程序调用了导出函数被注入了DLL。其他程序都不行。

我也想过,可以在安装程序在某处设置一个配置文件,输入法文件被系统注入到其他进程就去这个配置文件查看需要注入的DLL的路径,这样是可以实现效果的。
但是我觉得这样不仅隐蔽性太差,而且鉴于对出现疑惑就要解决的精神,这个问题一直在我脑中萦绕。都快钻牛角尖了。呵呵。

嗯,所以,希望有老师们能帮助小弟一把,小弟一直自学编程,一般问题都是靠度娘和谷哥解决,不到万不得已不会开帖询问,这样的确很累,但却乐此不疲,这算小小的自夸一下吧。

鉴于我好学勤奋的精神呢,我想老师们有必要指点小弟一番,然后再夸夸学生。

[培训]内核驱动高级班,冲击BAT一流互联网大厂工作,每周日13:00-18:00直播授课

收藏
免费 0
支持
分享
最新回复 (13)
雪    币: 17
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
2
你模拟的时候有没有注意代码里有一个share段,你在安装程序里调用IMESetPubString把要注入的dll的信息写到share段里,而当程序调用哪个输入法时,会进入dllmain函数,自动读取share段,就会把你的dll安装进程序。
2011-7-28 07:39
0
雪    币: 17
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
3
#pragma data_seg("mysechx")
DWORD CallBackData1=0;
DWORD CallBackData2=0;
DWORD CallBackData3=0;
DWORD OnloadDllWhenExit=0;    // 当输入法退出时是否卸载客户DLL  0-是,1-否
DWORD LoadNextWhenActive=0;    // 当本输入法激活时,是否自动打开下一个输入法 0-否,1-是
char g_IMEDLLString[802]="";
#pragma data_seg()
#pragma   comment(linker,   "/section:mysechx,rws ")  //具体可参考http://topic.csdn.net/t/20050926/21/4295591.html
这个是哪个输入法文件中的句子,
2011-7-28 07:42
0
雪    币: 17
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
4
输入法文件是imedllhost09.cpp
2011-7-28 07:43
0
雪    币: 17
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
5
我就是想要点分,要是没说明白,我继续说哈,我也模仿了一份
2011-7-28 07:49
0
雪    币: 212
活跃值: (25)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
6
学习下!
2011-7-28 10:17
0
雪    币: 204
活跃值: (25)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
7
输入法注入有什么好处啊  能过杀软不
2011-7-28 11:07
0
雪    币: 163
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
8
您的意思我大概懂了,就是说安装程序调用导出函数只是为了初始化地址空间里的内容罢了。
而其他程序并没有调用这个函数,而且直接从地址空间里取出来此数据,对么。
就如同我帖子里说的把数据保存到一个外部文件里是相类似的对吧。


#pragma   comment(linker,   "/section:mysechx,rws ")  
这一句我看了我的源码里没有,也可能是因为他本身源码不规范吧。
对于此句代码我百度了下,查到
-----------------------------------------------------------------
    连结器必须知道有一个「shared」共享数据段。可以直接用DLL原始码指定连结选项,就像这样:
        #pragma comment(linker,"/SECTION:shared,RWS")        字母RWS表示段具有读、写和共享属性。
-----------------------------------------------------------------
想来这句代码应该是必须的吧,虽然我还没有测试。

我以前并没有用过地址空间去共享进程间信息,所以对其不太了解。
所以会有一些小疑问,我搜索了,但是找不到准确的答案。
1.地址空间的生命周期。
2.地址空间命名重复会怎样?
3.不同进程访问了同一个地址空间,某一个进程修改了它,其他进程获取的话也是修改过的吧。
4.如何直接销毁地址空间。
5.对于#pragma comment(linker,"/SECTION:shared,RWS")  这里的RWS属性是系统赋予地址空间的属性,还是编译器中的连接器使用地址空间所赋予代码的属性。

希望我的问题能准确表达我想要的含义。如果不嫌麻烦,希望解答下。 呃,麻烦的话也没关系,我可以就此结贴,毕竟您已经对我的一会给予了很多帮助。

QQ 遥遥其三儿儿儿四二
2011-7-28 16:42
0
雪    币: 17
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
9
你把我问晕了,这么多问题。共同探讨,呵呵
首先,你说“#pragma   comment(linker,   "/section:mysechx,rws ")  
这一句我看了我的源码里没有,也可能是因为他本身源码不规范吧。
”是因为他源码里不是这么写的,他是在一个叫def文件里标记的。我把它改成这样了。
你的问题我自己理解的答案:
1.地址空间的生命周期当然是进程的生命周期了,进程退出,地址空间也就没了。操作系统会给每一个进程维护一个地址空间,但是如果某个dll的数据段被设置成“rws ”,操作系统就会把这个空间映射到一个区域,所有进程共享这个区域
2.应该不会重复,首先模块信息都不一样,和谈地址空间重复?
3.如果是共享数据段,其他进程修改了这个区域,别的进程获取的是修改过的。
4.退出进程。把所有调用哪个模块的进程退出,地址空间就销毁了。如果想清楚共享数据段的信息,输入法dll中还导出了一个函数。
5.是编译器赋予进程的数据段的属性,操作系统会根据这个属性给进程分配相应属性的存储空间。
2011-7-28 18:17
0
雪    币: 17
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
10
你哪来的那么多分啊?我怎么涨的那么慢啊?
2011-7-28 18:19
0
雪    币: 163
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
11
嗯 , 我一直以为你所说的地址空间默认就是可以进程间共享的,非进程独有的。
你说进程退出了,地址空间就没了。那如果此地址空间是共享属性的话,那也就是说只有当所有用到了这个共享地址空间的进程退出了它才销毁。任何共享了了此地址空间的进程都可以读取修改它。因为他同时具有RW属性。
那也就是说输入法安装程序中其实可以不用dll导出函数什么的。直接去修改这个地址空间也可以。对吧?而如果当我输入法安装之后,并没有去把他设置成默认的输入法,也没有向任何窗口发送激活此输入法的消息,也就是说并没有任何其他进程注入了输入法文件。这样的话我直接退出了输入法安装程序的话,这个输入法注入就完全失败了对吧。因为此地址空间已经销毁了。这样理解没错吧。
我测试整的很乱,很烦躁,因为怎么弄似乎初始化的地址空间 其他进程还是获得不到设置的值。可能我代码写的有误吧。
但是我专门写个小程序测试地址空间的属性很好使。呵呵

朋友,可以留下扣扣,有机会再请教你么。

问那么多,我不好意思还不结贴了。
我不知道结贴了别人还能不能回复。  应该可以吧。
我先结了。如果不可以,希望PM我,告诉我你的扣扣好么。

kx啊  我也不知道我为什么那么多。可能是因为我的注册时间比较早,这个东西似乎是泡论坛时间越长越频繁,就会慢慢增长的。  呵呵。
2011-7-28 22:57
0
雪    币: 163
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
12
很奇怪为什么我的kx没有减少,
2011-7-28 23:02
0
雪    币: 17
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
13
我加你了,分受到,
2011-7-29 09:16
0
雪    币: 163
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
14
恩 好的,多谢 ,有机会联系,
2011-7-29 14:17
0
游客
登录 | 注册 方可回帖
返回
//