Re: Copying a kernel routine



That's a good idea. Thanks a lot.
I can create a dummy function like
_asm
{
nop;
nop;
nop;
....
}
and copy the kernel routine into this address.
I'll try it. Thanks again.

"Vetzak" wrote:

Bad idea. Stay off the CR0 register or any other processor state. The
OS manages this state.

I would try this method: Extend the size of the .text segment in your
driver .sys file. The .text segment is marked as executable by the OS.
Once loaded into memory, you can use the extra, unused bytes and fill
them up with your own subroutine(s).

You may want to write such routines in assembler. Relocations: you can
extract them from the .obj file, or write assembler code that does not
depend on fixed addresses.


On Dec 29, 11:41 pm, Hummingbird
<Hummingb...@xxxxxxxxxxxxxxxxxxxxxxxxx> wrote:
Hi, Thanks for respond.

Well, i am writing a anti-malware software actually. As you know, they use
hooks and modify the Windows kernel to hide and protect themself.

You are right, Relocation is a problem. I can use something like
LdrRelocateImageWithBias (I mean write another one myself since it's not
exported), but that's means I have to copy the whole ntoskrnl.exe to the pool.

About the execute bit, I guess we can set it manually since we are in Ring
0, just like the CR0 register. I don't know if i am right. But maybe that's
not recommanded by Microsoft.

"Don Burn" wrote:
Bad idea in general, first if this is a modern processor it won't work since
the paged area will not have the execute bit. Second, the code is linked
to a location, how are you going to determine the reloc's (this is where a
full disassembler comes in handy). Third how do you know if the code does
not depend on external factors that you cannot control.

Why do you think you need this? What function do you think you will be able
to diddle at the binary level?

--
Don Burn (MVP, Windows DDK)
Windows 2k/XP/2k3 Filesystem and Driver Consulting
Website:http://www.windrvr.com
Blog:http://msmvps.com/blogs/WinDrvr
Remove StopSpam to reply

"Hummingbird" <Hummingb...@xxxxxxxxxxxxxxxxxxxxxxxxx> wrote in message
news:BCB81727-C855-4B33-9F06-FB7C62377923@xxxxxxxxxxxxxxxx
Hi everyone.

I wants to make some changes to a kernel routine and use it by myself
(which
means other drivers in the system can not use this new routine and those
chages will not affect other drivers)
What i am thinking is i can allocate a non-paged pool, and copy the whole
routine to this pool, modify it and call it by the pointer to the pool.

I don't know if i am right. And here is another problem: how can i know
the
size of the whole routine? Do i need a small disassembler in my driver or
something?

Many Thanks.


.



Relevant Pages

  • Re: Copying a kernel routine
    ... and copy the kernel routine into this address. ... Windows 2k/XP/2k3 Filesystem and Driver Consulting ... What i am thinking is i can allocate a non-paged pool, ...
    (microsoft.public.development.device.drivers)
  • Re: Copying a kernel routine
    ... Stay off the CR0 register or any other processor state. ... but that's means I have to copy the whole ntoskrnl.exe to the pool. ... Windows 2k/XP/2k3 Filesystem and Driver Consulting ... routine to this pool, modify it and call it by the pointer to the pool. ...
    (microsoft.public.development.device.drivers)
  • Re: Copying a kernel routine
    ... and copy the kernel routine into this address. ... Windows 2k/XP/2k3 Filesystem and Driver Consulting ... What i am thinking is i can allocate a non-paged pool, ...
    (microsoft.public.development.device.drivers)
  • Re: Copying a kernel routine
    ... Don Burn (MVP, Windows DDK) ... Windows 2k/XP/2k3 Filesystem and Driver Consulting ... I wants to make some changes to a kernel routine and use it by myself ... What i am thinking is i can allocate a non-paged pool, ...
    (microsoft.public.development.device.drivers)
  • Re: Copying a kernel routine
    ... Don Burn (MVP, Windows DDK) ... Windows 2k/XP/2k3 Filesystem and Driver Consulting ... I wants to make some changes to a kernel routine and use it by myself ... What i am thinking is i can allocate a non-paged pool, ...
    (microsoft.public.development.device.drivers)