carwin
驱动牛犊
驱动牛犊
  • 注册日期2007-05-27
  • 最后登录2010-03-15
  • 粉丝0
  • 关注0
  • 积分304分
  • 威望71点
  • 贡献值0点
  • 好评度30点
  • 原创分0分
  • 专家分0分
阅读:2693回复:10

驱动中怎样分配可执行内存?

楼主#
更多 发布于:2007-06-02 16:19
我hook ntfs的dispatch的时候,发现可以在winobj中看到我的驱动hook了哪个dispatch。我想如果在内核中分配一块可执行的内存,把我的代码复制过去再hook,winobj应该是不知道是哪个驱动hook的了。
   但是ExAllocatePool***这些函数,我看来ddk,貌似都没有分配可执行内存的参数呢?
恳请哪位知道的大哥指点一下。。。
carwin
驱动牛犊
驱动牛犊
  • 注册日期2007-05-27
  • 最后登录2010-03-15
  • 粉丝0
  • 关注0
  • 积分304分
  • 威望71点
  • 贡献值0点
  • 好评度30点
  • 原创分0分
  • 专家分0分
沙发#
发布于:2007-06-03 14:07
自己顶一下了。
会还是不会的牛人都顶一顶噻。。。
xikug
驱动小牛
驱动小牛
  • 注册日期2001-09-25
  • 最后登录2013-09-27
  • 粉丝1
  • 关注0
  • 积分1001分
  • 威望169点
  • 贡献值0点
  • 好评度168点
  • 原创分1分
  • 专家分0分
板凳#
发布于:2007-06-03 16:58
内核中就用ExAllocatePoolxx分配就可以了
http://www.debugman.com
WQXNETQIQI
驱动大牛
驱动大牛
  • 注册日期2006-06-12
  • 最后登录2010-10-26
  • 粉丝0
  • 关注0
  • 积分13分
  • 威望1076点
  • 贡献值0点
  • 好评度895点
  • 原创分1分
  • 专家分0分
地板#
发布于:2007-06-03 17:51
直接分配一块NonPagePool复制了代码就可以跑啦!
驱动开发者 呵呵
wowocock
VIP专家组
VIP专家组
  • 注册日期2002-04-08
  • 最后登录2016-01-09
  • 粉丝16
  • 关注2
  • 积分601分
  • 威望1651点
  • 贡献值1点
  • 好评度1227点
  • 原创分1分
  • 专家分0分
地下室#
发布于:2007-06-04 12:16
直接复制不可以,需要改变内存属性.自己改页表里的NX属性吧,哈哈.
花开了,然后又会凋零,星星是璀璨的,可那光芒也会消失。在这样 一瞬间,人降生了,笑者,哭着,战斗,伤害,喜悦,悲伤憎恶,爱。一切都只是刹那间的邂逅,而最后都要归入死亡的永眠
WQXNETQIQI
驱动大牛
驱动大牛
  • 注册日期2006-06-12
  • 最后登录2010-10-26
  • 粉丝0
  • 关注0
  • 积分13分
  • 威望1076点
  • 贡献值0点
  • 好评度895点
  • 原创分1分
  • 专家分0分
5楼#
发布于:2007-06-04 13:20
内存属性应该是不用改的
例如某流氓的代码:
.text:00011150
.text:00011150                             sub_11150       proc near               ; CODE XREF: .text:loc_112C9p
.text:00011150
.text:00011150                             Handle          = dword ptr -4
.text:00011150
.text:00011150 000 51                                      push    ecx
.text:00011151 004 68 00 1D 01 00                          push    offset Timer    ; Timer
.text:00011156 008 FF 15 E4 02 01 00                       call    ds:KeInitializeTimer
.text:0001115C 004 68 44 64 6B 20                          push    206B6444h       ; Tag
.text:00011161 008 6A 20                                   push    20h             ; NumberOfBytes
.text:00011163 00C 6A 00                                   push    0               ; PoolType
.text:00011165 010 FF 15 E0 02 01 00                       call    ds:ExAllocatePoolWithTag
.text:0001116B 004 85 C0                                   test    eax, eax
.text:0001116D 004 75 04                                   jnz     short loc_11173
.text:0001116D
.text:0001116F 004 32 C0                                   xor     al, al
.text:00011171 004 59                                      pop     ecx
.text:00011172 000 C3                                      retn
.text:00011172
.text:00011173                             ; ---------------------------------------------------------------------------
.text:00011173
.text:00011173                             loc_11173:                              ; CODE XREF: sub_11150+1Dj
.text:00011173 004 33 C9                                   xor     ecx, ecx
.text:00011175 004 56                                      push    esi
.text:00011176 008 57                                      push    edi
.text:00011177 00C 8B D0                                   mov     edx, eax
.text:00011179 00C 89 0A                                   mov     [edx], ecx
.text:0001117B 00C 89 4A 04                                mov     [edx+4], ecx
.text:0001117E 00C 89 4A 08                                mov     [edx+8], ecx
.text:00011181 00C 68 00 05 01 00                          push    offset sub_10500 ; StartContext
.text:00011186 010 89 4A 0C                                mov     [edx+0Ch], ecx
.text:00011189 010 50                                      push    eax             ; StartRoutine
.text:0001118A 014 89 4A 10                                mov     [edx+10h], ecx
.text:0001118D 014 6A 00                                   push    0               ; ClientId
.text:0001118F 018 89 4A 14                                mov     [edx+14h], ecx
.text:00011192 018 6A 00                                   push    0               ; ProcessHandle
.text:00011194 01C 89 4A 18                                mov     [edx+18h], ecx
.text:00011197 01C 6A 00                                   push    0               ; ObjectAttributes
.text:00011199 020 8B F8                                   mov     edi, eax
.text:0001119B 020 89 4A 1C                                mov     [edx+1Ch], ecx
.text:0001119E 020 6A 00                                   push    0               ; DesiredAccess
.text:000111A0 024 8D 44 24 20                             lea     eax, [esp+24h+Handle]
.text:000111A4 024 B9 08 00 00 00                          mov     ecx, 8
.text:000111A9 024 BE 30 11 01 00                          mov     esi, offset loc_11130
.text:000111AE 024 50                                      push    eax             ; ThreadHandle
.text:000111AF 028 F3 A5                                   rep movsd
.text:000111B1 028 FF 15 D0 02 01 00                       call    ds:PsCreateSystemThread
.text:000111B7 00C 8B 4C 24 08                             mov     ecx, [esp+0Ch+Handle]
.text:000111BB 00C 51                                      push    ecx             ; Handle
.text:000111BC 010 FF 15 8C 02 01 00                       call    ds:ZwClose
.text:000111C2 00C 5F                                      pop     edi
.text:000111C3 008 B0 01                                   mov     al, 1
.text:000111C5 008 5E                                      pop     esi
.text:000111C6 004 59                                      pop     ecx
.text:000111C7 000 C3                                      retn
.text:000111C7
.text:000111C7                             sub_11150       endp
.text:000111C7
驱动开发者 呵呵
baigan
驱动牛犊
驱动牛犊
  • 注册日期2006-07-04
  • 最后登录2011-10-21
  • 粉丝0
  • 关注0
  • 积分140分
  • 威望17点
  • 贡献值0点
  • 好评度16点
  • 原创分0分
  • 专家分0分
6楼#
发布于:2007-06-04 13:29
直接应该可以,至少我的机器行
carwin
驱动牛犊
驱动牛犊
  • 注册日期2007-05-27
  • 最后登录2010-03-15
  • 粉丝0
  • 关注0
  • 积分304分
  • 威望71点
  • 贡献值0点
  • 好评度30点
  • 原创分0分
  • 专家分0分
7楼#
发布于:2007-06-05 08:05
直接可以?我试试哈。
那天看到一篇文章说内核也有DEP,如下。我还以为不能执行呢。
我先实验一下了来哈。
/*
• 内核模式 DEP
对于用户模式和内核模式,DEP 的工作原理相同。在内核模式下,不能分别为每个驱动程序启用或禁用内存区域 DEP。默认情况下,在 32 位 Windows 版本上,DEP 仅适用于堆栈。在 64 位 Windows 版本上,DEP 适用于堆栈、页面缓冲池和会话池。内核模式下的访问冲突将导致出现 Bugcheck 0x000000FC: ATTEMPTED_EXECUTE_OF_NONEXECUTE_MEMORY。
兼容性问题
*/
zzzevazzz
驱动小牛
驱动小牛
  • 注册日期2002-12-27
  • 最后登录2020-06-29
  • 粉丝0
  • 关注0
  • 积分1008分
  • 威望242点
  • 贡献值0点
  • 好评度170点
  • 原创分0分
  • 专家分0分
  • 社区居民
8楼#
发布于:2007-06-05 10:44
记得有资料说过,Vista上PagedPool是不可执行的,NonPagedPool可以执行。
[b][url]http://hi.baidu.com/zzzevazzz[/url][/b]
killvxk
论坛版主
论坛版主
  • 注册日期2005-10-03
  • 最后登录2014-04-14
  • 粉丝3
  • 关注1
  • 积分1082分
  • 威望2003点
  • 贡献值0点
  • 好评度1693点
  • 原创分2分
  • 专家分0分
9楼#
发布于:2007-06-05 11:03
NonPagedPool...这上面的代码有要求吧~不小心就蓝屏了~
好几次都是IRQL问题~
没有战争就没有进步 X3工作组 为您提供最好的军火
carwin
驱动牛犊
驱动牛犊
  • 注册日期2007-05-27
  • 最后登录2010-03-15
  • 粉丝0
  • 关注0
  • 积分304分
  • 威望71点
  • 贡献值0点
  • 好评度30点
  • 原创分0分
  • 专家分0分
10楼#
发布于:2007-06-06 09:10
恩,实验了一下。果然能执行。
谢谢各位指点哈。    
不过killvxk说的IRQL应该是个问题。
游客

返回顶部