求助 API拦截在WindowXP功能正常, WIN7下没有效果

lygf666 2012-03-22 04:55:24
自己实现的全局钩子,在DllMain中,修改每个进程的导入表,修改OpenProcess的地址指向我自定义的函数。xp下功能一切正常,任务管理器关闭不了。但是在win7这个程序就不行了,任务管理器可以关闭。

实现细节:

我只修改了exe模块的导入表,是不是win7下的任务管理器从通过别的模块里面函数间接调用OpenProcess呢?比较懒,只实现了exe模块的导入表的修改。


求助几个工具: 可以查看exe文件的导入模块,和导入函数;
可以查看已经运行的文件导入了什么模块,看看win7下的进程有没有链接我的lib。

还有1个问题: 我在xp下在控制台中使用鼠标右键的debug, 调用VC2008实例,可以调试taskmgr.exe,我自己的dll的断点可以相应; 但在win7下,利用debug, 断点无法响应。(别人的机器,我自己的机器还没装win7)。求高手解释。
...全文
421 52 打赏 收藏 转发到动态 举报
写回复
用AI写文章
52 条回复
切换为时间正序
请发表友善的回复…
发表回复
Lactoferrin 2012-03-27
  • 打赏
  • 举报
回复
你想在用户模式还是在内核模式
Lactoferrin 2012-03-27
  • 打赏
  • 举报
回复
或者利用rundll32
Lactoferrin 2012-03-27
  • 打赏
  • 举报
回复
是不是appinit_dlls
fly4free 2012-03-27
  • 打赏
  • 举报
回复
那不是“建议”,那是“需要”
lygf666 2012-03-27
  • 打赏
  • 举报
回复
[Quote=引用 41 楼 lactoferrin 的回复:]
它是全局的还是针对个别进程
[/Quote]
应该是全局钩子产生的,我自己随便编写个exe一运行就发现加载了他的dll, 32位程序会加载个32dll, 64位程序会加载64dll (它目录有2个dll, 一个名字最后32,一个名字最后64)。
问题时任务管理器找,这个软件所有的进程都是有*32。 怎么编写32位的程序,能让64位程序加载我自己64的dll, msdn上貌似暗示说也可以。it is required that a 32-bit application call SetWindowsHookEx to inject a 32-bit DLL into 32-bit processes
只是建议32位只设置32位目标进程的钩子, 应该32位程序也可以让64位程序钩上钩子,只是钩子肯定是64位那是一定的。 问题32位程序不能加载64位dll吧, 怎么来实现这个功能呢。
lygf666 2012-03-27
  • 打赏
  • 举报
回复
写个类似于家长控制的软件。
我手头有个国外的软件。
发现一个情况, 那个国外的软件全是32位程序,但是在x64环境下会让64位的程序加载他目录下的64dll, 32位加在32的dll。
我只能通过编写64位程序,才能通过全局钩子让64位程序加载我编写的64dll。
怎么样编写32位程序,能让64位程序加载我另外的64位dll。
Lactoferrin 2012-03-27
  • 打赏
  • 举报
回复
它是全局的还是针对个别进程
lygf666 2012-03-27
  • 打赏
  • 举报
回复
[Quote=引用 39 楼 lactoferrin 的回复:]
用户模式要造成全局影响需要做的事比内核模式更多

你的老板具体要你干什么
[/Quote]

写个那种家长控制软件样的东西。
还有个问题,
怎样让一个32位的程序给64位的程序加载64位的dll。
我手头有个国外的软件,运行后全是32位的进程。它会让64位的程序加载他目录的一个64dll, 让32位程序加载一个32dll。 我只能写64位的程序 让别的64位程序加载我的64位dll, 同样32位对应32位目标程序和dll。 我想学他,只通过32位程序就让64位的程序加载我写的64位dll。
Lactoferrin 2012-03-27
  • 打赏
  • 举报
回复
用户模式要造成全局影响需要做的事比内核模式更多

你的老板具体要你干什么
lygf666 2012-03-27
  • 打赏
  • 举报
回复
[Quote=引用 37 楼 lactoferrin 的回复:]
你想在用户模式还是在内核模式
[/Quote]

效果有什么区别吗, 一般用户吧。 内核我不懂, 是在不行内核也行。 只有能有资料让我学习。。。
不大懂什么内核与用户的区别。 内核编程是叫ddk编程吗?
主要是我没做过,要学习。 现在的阶段叫预研
lygf666 2012-03-27
  • 打赏
  • 举报
回复
[Quote=引用 51 楼 lactoferrin 的回复:]
让你的64位dll导出一个函数,用rundll32去运行
http://download.csdn.net/detail/lactoferrin/4051871
[/Quote]

好的,我去看看。
Lactoferrin 2012-03-27
  • 打赏
  • 举报
回复
让你的64位dll导出一个函数,用rundll32去运行
http://download.csdn.net/detail/lactoferrin/4051871
lygf666 2012-03-27
  • 打赏
  • 举报
回复
[Quote=引用 48 楼 lactoferrin 的回复:]
native的rundll32可以用来运行64位dll
[/Quote]


可以再详细点不,大概怎么实现我的需求。
lygf666 2012-03-27
  • 打赏
  • 举报
回复
注册表还是没有他的dll信息,CurrentVersion\windows\
还是不清楚他怎么实现的。
只有3个32位的进程, 但是64位程序一启动会加载他编写的dll
Lactoferrin 2012-03-27
  • 打赏
  • 举报
回复
native的rundll32可以用来运行64位dll
lygf666 2012-03-27
  • 打赏
  • 举报
回复
不知道,对。我可以用注册表的方式来加载dll,查查看本机的注册表设置。 rundl32不懂。。
lygf666 2012-03-26
  • 打赏
  • 举报
回复
[Quote=引用 19 楼 unsccaptain 的回复:
IATHook有很大局限的,通过导入表可以直接找到函数地址,隐式调用函数不需要经过IAT
[/Quote]
隐式调用是指GetProcAddress
只要不是通过别的dll里面导出函数(该调出函数在自身dll中通过链接相关dll再调用api)就行。
再说调入表也可以在把exe加入的dll的导入表再修改,还可以修改exe的 loadlibrary 的地址。只不过流程更加复杂一点,核心编程上都有介绍。GetProcAddress的地址也可以修改。 不怕他隐式调用。
lygf666 2012-03-26
  • 打赏
  • 举报
回复
找到问题的原因了。
SetWindowsHookEx can be used to inject a DLL into another process. A 32-bit DLL cannot be injected into a 64-bit process, and a 64-bit DLL cannot be injected into a 32-bit process. If an application requires the use of hooks in other processes, it is required that a 32-bit application call SetWindowsHookEx to inject a 32-bit DLL into 32-bit processes, and a 64-bit application call SetWindowsHookEx to inject a 64-bit DLL into 64-bit processes. The 32-bit and 64-bit DLLs must have different names.

线上msdn里面的Remark里面,我的是32位的程序,但是运行环境是x64.没人说到点子上呀,全局钩子在win7上还是有用的。把我的工程编译成x64后运行。立马explorer。exe taskmsg。exe 挂掉,说明还是有效果的。接下来就是修改代码里面的指针和数据类型了。
lygf666 2012-03-26
  • 打赏
  • 举报
回复
[Quote=引用 35 楼 lactoferrin 的回复:]
把两个值给我看看
[/Quote]

算了,这几天被搞得焦头烂额的。现在还不适合搞这么深,反正问题也解决了。接下来老板叫我调研怎么控制程序的网络访问,通过底层api实现对网络链接的访问屏蔽等等。 有没有有经验的人能介绍介绍到哪里去学习这些相关的知识与编程。 最好有相关的书籍就好了(比较喜欢看书,比较容易入门)。有没有类似于windows核心编程那样的书 ,但是内容是主要讲windows网络编程的。 这钩子的用法基本上都从windows核心编程上学来的
fly4free 2012-03-26
  • 打赏
  • 举报
回复
你的注入进程有权限吗?
不会是系统服务吧?
加载更多回复(31)

15,472

社区成员

发帖
与我相关
我的任务
社区描述
VC/MFC 进程/线程/DLL
社区管理员
  • 进程/线程/DLL社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧