wlmx009
驱动牛犊
驱动牛犊
  • 注册日期2006-10-26
  • 最后登录2007-06-01
  • 粉丝0
  • 关注0
  • 积分170分
  • 威望18点
  • 贡献值0点
  • 好评度17点
  • 原创分0分
  • 专家分0分
阅读:2734回复:5

如何调用NtReadVirtualMemory

楼主#
更多 发布于:2007-06-01 10:52
牛人们看看,我想读内核地址 0x80674008 总是失败,返回字节数是0
NTSTATUS callfun()

{

 
 

tempAddress = (ULONG)KeServiceDescriptorTable->ServiceTableBase + 186 * 4;//0x7A为
myNtReadVirtualMemoryJmpAddress= *(ULONG*)tempAddress+7;
DbgPrint("myNtReadVirtualMemoryJmpAddress:0x%08X",myNtReadVirtualMemoryJmpAddress);


   return STATUS_SUCCESS;

}

__declspec(naked) NTSTATUS __stdcall  myNtReadVirtualMemory (IN HANDLE ProcessHandle, IN PVOID BaseAddress, OUT PVOID Buffer, IN ULONG NumberOfBytesToRead, OUT PULONG NumberOfBytesRead OPTIONAL)
{

    __asm{

push    1Ch
push    0x804da4b8

jmp [myNtReadVirtualMemoryJmpAddress]

         }
}

我先调用callfun()
又这样调用myNtReadVirtualMemory
 case READmem:
                              
InputBuffer =OutputBuffer = pIrp->AssociatedIrp.SystemBuffer;
                               idint=atoi((char*)InputBuffer);
                              
 DbgPrint("传入的句柄: yuankey = %d\n", idint);
                                
passmem[0]='\0';
myNtReadVirtualMemory ((HANDLE)idint, (PVOID)(0x80674008), passmem, 16, &memnum);
DbgPrint("反回字符数: %d\n", memnum);
DbgPrint("内存字符: %s\n", passmem);
 DbgPrint("Starting \"Hello World\"\n");  

break;
参数是这样订意的

PVOID InputBuffer, OutputBuffer;
ULONG memnum=0;
int idint;
char passmem[16];




在ring3中这样调用的
char InBuff[5];
int n;
n=2736;  // 我在ring3取的句柄id
InBuff[4]='\0';
//传递启动的I/O控制代码
if (!(DeviceIoControl(hDevice,READmem,&InBuff,sizeof(InBuff),NULL,0,&RetBytes,NULL)))


高手看看,谢谢
WQXNETQIQI
驱动大牛
驱动大牛
  • 注册日期2006-06-12
  • 最后登录2010-10-26
  • 粉丝0
  • 关注0
  • 积分13分
  • 威望1076点
  • 贡献值0点
  • 好评度895点
  • 原创分1分
  • 专家分0分
沙发#
发布于:2007-06-01 11:04
直接读不就好了
RtlCopyMemory
驱动开发者 呵呵
wlmx009
驱动牛犊
驱动牛犊
  • 注册日期2006-10-26
  • 最后登录2007-06-01
  • 粉丝0
  • 关注0
  • 积分170分
  • 威望18点
  • 贡献值0点
  • 好评度17点
  • 原创分0分
  • 专家分0分
板凳#
发布于:2007-06-01 14:18
用RtlCopyMemory试了一下,搞不明白,RtlCopyMemory没有进程id,读的是谁的内存呢?读是能读,结果很怪,读出来的是IRP_MJ_DEVICE_C,郁闷
WQXNETQIQI
驱动大牛
驱动大牛
  • 注册日期2006-06-12
  • 最后登录2010-10-26
  • 粉丝0
  • 关注0
  • 积分13分
  • 威望1076点
  • 贡献值0点
  • 好评度895点
  • 原创分1分
  • 专家分0分
地板#
发布于:2007-06-01 14:40
内核地址不分进程的。。。
驱动开发者 呵呵
wlmx009
驱动牛犊
驱动牛犊
  • 注册日期2006-10-26
  • 最后登录2007-06-01
  • 粉丝0
  • 关注0
  • 积分170分
  • 威望18点
  • 贡献值0点
  • 好评度17点
  • 原创分0分
  • 专家分0分
地下室#
发布于:2007-06-01 14:58
恩,可是我读出来的都是IRP_MJ_DEVICE_C,怎么样回事呢
wlmx009
驱动牛犊
驱动牛犊
  • 注册日期2006-10-26
  • 最后登录2007-06-01
  • 粉丝0
  • 关注0
  • 积分170分
  • 威望18点
  • 贡献值0点
  • 好评度17点
  • 原创分0分
  • 专家分0分
5楼#
发布于:2007-06-01 15:42
真是怪了,我读别的地址可以读,读这个地址就返回这样的字符
游客

返回顶部