首页
社区
课程
招聘
关于EXE与驱动通信的问题
发表于: 2013-10-16 16:19 6369

关于EXE与驱动通信的问题

2013-10-16 16:19
6369
EXE部分:
#pragma pack(1)//按1字节对齐
typedef struct _JMPCODE
{
        DWORD index;
        char  FunName[30];
}JMPMSG,*PJMPMSG;
#pragma pack()

。。。。。。。。。。。。
void CLoadSYSDlg::OnBnClickedBtJmphook()
{
        // TODO: 在此添加控件通知处理程序代码
        HANDLE hDevice =
                CreateFile("\\\\.\\rongge", //\\??\rongge    同驱动中的符号链接
                GENERIC_READ | GENERIC_WRITE,
                0,                // share mode none
                NULL,        // no security
                OPEN_EXISTING,
                FILE_ATTRIBUTE_NORMAL,
                NULL );                // no template
        if (hDevice == INVALID_HANDLE_VALUE)
        {
                TRACE( "获取驱动句柄失败: %s with Win32 error code: %d\n","MyDriver",  GetLastError() );
                return;
        }
   //add_code
        JMPMSG jmpmsg;
        jmpmsg.index=0x7A;
        sprintf(jmpmsg.FunName,"%s","NtOpenProcess");
        DeviceIoControl(hDevice, jmphook_code , &jmpmsg, sizeof(jmpmsg), &bufret, 4, &dwWrite, NULL);
        CloseHandle(hDevice);
}
。。。。。。。。。。。。。

SYS部分:派遣函数
                        case jmphook_code:
                        {
                                ULONG NtOpenProcess_OldAddr;
                                /*int jmpindex,jmpstr;
                                int * InputBuffer = (int*)pIrp->AssociatedIrp.SystemBuffer;
                                _asm
                                {
                                        mov eax,InputBuffer
                                        mov ebx,[eax]
                                        mov jmpindex,ebx
                                        lea ebx,[eax+4]
                                        mov jmpstr,ebx
                                                 
                                }
                                int* OutputBuffer = (int*)pIrp->AssociatedIrp.SystemBuffer;
                                _asm
                                {
                                        mov eax,1
                                        mov ebx,OutputBuffer
                                        mov [ebx],eax //

                                }
                                KdPrint(("传入数据%d:%s\n",jmpindex,(PCWSTR)jmpstr));//这里显示为"122:NtOpenProcess"
                                NtOpenProcess_CurAddr=GetNt_CurAddr(jmpindex);
                    NtOpenProcess_OldAddr=GetNt_OldAddr((PCWSTR)(jmpstr));*/这里始终为0;
                    NtOpenProcess_CurAddr=GetNt_CurAddr(0x7A);
                    NtOpenProcess_OldAddr=GetNt_OldAddr(L"NtOpenProcess");//这里就是正确的。
                                if((NtOpenProcess_CurAddr != NtOpenProcess_OldAddr) && (0 != NtOpenProcess_OldAddr))
                                {
                                        KdPrint(("此函数被HOOK了,写入跳转\n"));
                                        NtOpenProcess_OldCode=WriteJMP(NtOpenProcess_CurAddr,NtOpenProcess_OldAddr);
                                        NtOpenProcess_Hook=1;
                                }
                                break;
                        }
不知道是不是宽字符和窄字符的问题,该如何赋值?

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

收藏
免费 0
支持
分享
最新回复 (1)
雪    币: 49
活跃值: (19)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
2
为什么驱动接受使用int*?
注释驱动接收部分的代码后 基本就没做什么事情了
2013-10-20 00:33
0
游客
登录 | 注册 方可回帖
返回
//