首页
社区
课程
招聘
[求助]HOOK NtCreateProcessEx 怎么输出文件信息
发表于: 2013-12-4 12:36 7621

[求助]HOOK NtCreateProcessEx 怎么输出文件信息

2013-12-4 12:36
7621
小菜在HOOK  NtCreateProcessEx 函数时希望得到  文件名 但不知道怎么写
HOOK NtCreateProcessEx 之后  创建进程  
想要输出 文件的信息   希望大神回答

在下面这个自定义的函数中   输出文件信息
NTSTATUS
MyNtCreateProcessEx(
          __out PHANDLE ProcessHandle,
          __in ACCESS_MASK DesiredAccess,
          __in_opt POBJECT_ATTRIBUTES ObjectAttributes,
          __in HANDLE ParentProcess,
          __in ULONG Flags,
          __in_opt HANDLE SectionHandle,
          __in_opt HANDLE DebugPort,
          __in_opt HANDLE ExceptionPort,
          __in ULONG JobMemberLevel
          )
{
  NTSTATUS status = STATUS_SUCCESS;

  KdPrint(("ENTER mY cREATEprocess \n \r"));

  
  UN_PROTECT();
  RtlCopyMemory((PVOID)OldNtCreateProcessEx,(CONST PVOID)bOldBytes,5);
  RE_PROTECT();

status = OldNtCreateProcessEx(  ProcessHandle,
            DesiredAccess,
            ObjectAttributes,
            ParentProcess,
            Flags,
            SectionHandle,
            DebugPort,
            ExceptionPort,
            JobMemberLevel);
  UN_PROTECT();
  RtlCopyMemory((PVOID)OldNtCreateProcessEx,(CONST PVOID)bNewBytes,5);
  RE_PROTECT();

           return status;

}

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

收藏
免费 0
支持
分享
最新回复 (17)
雪    币: 223
活跃值: (516)
能力值: ( LV13,RANK:520 )
在线值:
发帖
回帖
粉丝
2
lkd> dt _eprocess
ntdll!_EPROCESS
   +0x000 Pcb              : _KPROCESS
   +0x06c ProcessLock      : _EX_PUSH_LOCK
   +0x070 CreateTime       : _LARGE_INTEGER
   +0x078 ExitTime         : _LARGE_INTEGER
   +0x080 RundownProtect   : _EX_RUNDOWN_REF
   +0x084 UniqueProcessId  : Ptr32 Void
   +0x088 ActiveProcessLinks : _LIST_ENTRY
   +0x090 QuotaUsage       : [3] Uint4B
   +0x09c QuotaPeak        : [3] Uint4B
   +0x0a8 CommitCharge     : Uint4B
   +0x0ac PeakVirtualSize  : Uint4B
   +0x0b0 VirtualSize      : Uint4B
   +0x0b4 SessionProcessLinks : _LIST_ENTRY
   +0x0bc DebugPort        : Ptr32 Void
   +0x0c0 ExceptionPort    : Ptr32 Void
   +0x0c4 ObjectTable      : Ptr32 _HANDLE_TABLE
   +0x0c8 Token            : _EX_FAST_REF
   +0x0cc WorkingSetLock   : _FAST_MUTEX
   +0x0ec WorkingSetPage   : Uint4B
   +0x0f0 AddressCreationLock : _FAST_MUTEX
   +0x110 HyperSpaceLock   : Uint4B
   +0x114 ForkInProgress   : Ptr32 _ETHREAD
   +0x118 HardwareTrigger  : Uint4B
   +0x11c VadRoot          : Ptr32 Void
   +0x120 VadHint          : Ptr32 Void
   +0x124 CloneRoot        : Ptr32 Void
   +0x128 NumberOfPrivatePages : Uint4B
   +0x12c NumberOfLockedPages : Uint4B
   +0x130 Win32Process     : Ptr32 Void
   +0x134 Job              : Ptr32 _EJOB
   +0x138 SectionObject    : Ptr32 Void
   +0x13c SectionBaseAddress : Ptr32 Void
   +0x140 QuotaBlock       : Ptr32 _EPROCESS_QUOTA_BLOCK
   +0x144 WorkingSetWatch  : Ptr32 _PAGEFAULT_HISTORY
   +0x148 Win32WindowStation : Ptr32 Void
   +0x14c InheritedFromUniqueProcessId : Ptr32 Void
   +0x150 LdtInformation   : Ptr32 Void
   +0x154 VadFreeHint      : Ptr32 Void
   +0x158 VdmObjects       : Ptr32 Void
   +0x15c DeviceMap        : Ptr32 Void
   +0x160 PhysicalVadList  : _LIST_ENTRY
   +0x168 PageDirectoryPte : _HARDWARE_PTE_X86
   +0x168 Filler           : Uint8B
   +0x170 Session          : Ptr32 Void
   +0x174 ImageFileName    : [16] UChar
   +0x184 JobLinks         : _LIST_ENTRY
   +0x18c LockedPagesList  : Ptr32 Void
   +0x190 ThreadListHead   : _LIST_ENTRY
   +0x198 SecurityPort     : Ptr32 Void
   +0x19c PaeTop           : Ptr32 Void
   +0x1a0 ActiveThreads    : Uint4B
   +0x1a4 GrantedAccess    : Uint4B
   +0x1a8 DefaultHardErrorProcessing : Uint4B
   +0x1ac LastThreadExitStatus : Int4B
   +0x1b0 Peb              : Ptr32 _PEB
   +0x1b4 PrefetchTrace    : _EX_FAST_REF
   +0x1b8 ReadOperationCount : _LARGE_INTEGER
   +0x1c0 WriteOperationCount : _LARGE_INTEGER
   +0x1c8 OtherOperationCount : _LARGE_INTEGER
   +0x1d0 ReadTransferCount : _LARGE_INTEGER
   +0x1d8 WriteTransferCount : _LARGE_INTEGER
   +0x1e0 OtherTransferCount : _LARGE_INTEGER
   +0x1e8 CommitChargeLimit : Uint4B
   +0x1ec CommitChargePeak : Uint4B
   +0x1f0 AweInfo          : Ptr32 Void
   +0x1f4 SeAuditProcessCreationInfo : _SE_AUDIT_PROCESS_CREATION_INFO
   +0x1f8 Vm               : _MMSUPPORT
   +0x238 LastFaultCount   : Uint4B
   +0x23c ModifiedPageCount : Uint4B
   +0x240 NumberOfVads     : Uint4B
   +0x244 JobStatus        : Uint4B
   +0x248 Flags            : Uint4B
   +0x248 CreateReported   : Pos 0, 1 Bit
   +0x248 NoDebugInherit   : Pos 1, 1 Bit
   +0x248 ProcessExiting   : Pos 2, 1 Bit
   +0x248 ProcessDelete    : Pos 3, 1 Bit
   +0x248 Wow64SplitPages  : Pos 4, 1 Bit
   +0x248 VmDeleted        : Pos 5, 1 Bit
   +0x248 OutswapEnabled   : Pos 6, 1 Bit
   +0x248 Outswapped       : Pos 7, 1 Bit
   +0x248 ForkFailed       : Pos 8, 1 Bit
   +0x248 HasPhysicalVad   : Pos 9, 1 Bit
   +0x248 AddressSpaceInitialized : Pos 10, 2 Bits
   +0x248 SetTimerResolution : Pos 12, 1 Bit
   +0x248 BreakOnTermination : Pos 13, 1 Bit
   +0x248 SessionCreationUnderway : Pos 14, 1 Bit
   +0x248 WriteWatch       : Pos 15, 1 Bit
   +0x248 ProcessInSession : Pos 16, 1 Bit
   +0x248 OverrideAddressSpace : Pos 17, 1 Bit
   +0x248 HasAddressSpace  : Pos 18, 1 Bit
   +0x248 LaunchPrefetched : Pos 19, 1 Bit
   +0x248 InjectInpageErrors : Pos 20, 1 Bit
   +0x248 VmTopDown        : Pos 21, 1 Bit
   +0x248 Unused3          : Pos 22, 1 Bit
   +0x248 Unused4          : Pos 23, 1 Bit
   +0x248 VdmAllowed       : Pos 24, 1 Bit
   +0x248 Unused           : Pos 25, 5 Bits
   +0x248 Unused1          : Pos 30, 1 Bit
   +0x248 Unused2          : Pos 31, 1 Bit
   +0x24c ExitStatus       : Int4B
   +0x250 NextPageColor    : Uint2B
   +0x252 SubSystemMinorVersion : UChar
   +0x253 SubSystemMajorVersion : UChar
   +0x252 SubSystemVersion : Uint2B
   +0x254 PriorityClass    : UChar
   +0x255 WorkingSetAcquiredUnsafe : UChar
   +0x258 Cookie           : Uint4B

xp  
+0x174 ImageFileName    : [16] UChar
2013-12-4 13:56
0
雪    币: 110
活跃值: (34)
能力值: (RANK:50 )
在线值:
发帖
回帖
粉丝
3
UCHAR *
PsGetProcessImageFileName(
    __in PEPROCESS Process
    );
注意:该函数已导出,未文档化。
2013-12-4 16:02
0
雪    币: 59
活跃值: (142)
能力值: ( LV3,RANK:20 )
在线值:
发帖
回帖
粉丝
4
八两哥哥  这个不能得到创建的新进程的名字  只能得到 SYSTEM的
我想获得的是  新创建的那个进程的名字
有无办法?
2013-12-4 16:14
0
雪    币: 59
活跃值: (142)
能力值: ( LV3,RANK:20 )
在线值:
发帖
回帖
粉丝
5
不好意思  这个函数需要 新创建进程的 PEPROCESS  
但我不知道怎么获得
2013-12-4 16:16
0
雪    币: 223
活跃值: (516)
能力值: ( LV13,RANK:520 )
在线值:
发帖
回帖
粉丝
6
UCHAR *
PsGetProcessImageFileName(
    __in PEPROCESS Process
    )
{
    return Process->ImageFileName;
}

学习.  
2013-12-4 16:20
0
雪    币: 223
活跃值: (516)
能力值: ( LV13,RANK:520 )
在线值:
发帖
回帖
粉丝
7
psgetcurrentprocess
2013-12-4 16:22
0
雪    币: 160
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
8
在ObjectAttributes里
2013-12-4 16:41
0
雪    币: 59
活跃值: (142)
能力值: ( LV3,RANK:20 )
在线值:
发帖
回帖
粉丝
9
我太菜了   还是没弄出来
        PEPROCESS process = PsGetCurrentProcess();

        KdPrint(("process = %s",(char*)process +0x174));

不管创建的是什么进程
显示都是  explorer.exe
2013-12-4 16:42
0
雪    币: 59
活跃值: (142)
能力值: ( LV3,RANK:20 )
在线值:
发帖
回帖
粉丝
10
小菜 这样做会蓝屏的··
        KdPrint(("process = %wZ\n",ObjectAttributes->ObjectName));
不知道什么原因
2013-12-4 16:54
0
雪    币: 160
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
11
自己做异常处理和有效性判断
你可以看一下ring3的CreateProcess的反汇编,进ring0前把进程路径放到了ObjectAttributes里。
2013-12-4 17:37
0
雪    币: 223
活跃值: (516)
能力值: ( LV13,RANK:520 )
在线值:
发帖
回帖
粉丝
12
方法是很多的.
如果你只是为了获取新创建进程名,
建议你用.pssetcreateprocessnotifyroutinue. 方便些.
不是所有的程序都是会走 ntcreateprocessex 的.
2013-12-4 17:47
0
雪    币: 22
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
13
1. 不是有进程句柄吗
    ObReferenceObjectByHandle (记得ObDereferenceObject - -#)不就拿到 进程对象指针了吗

2. 然后再 PsGetProcessImageFileName

不行试试进程创建回调吧~
2013-12-4 17:56
0
雪    币: 59
活跃值: (142)
能力值: ( LV3,RANK:20 )
在线值:
发帖
回帖
粉丝
14
大神 这个还是要错误   没有得到 peprocess  完全没力气了·············请大神看看
  status = ObReferenceObjectByHandle(*ProcessHandle,FILE_READ_DATA,0,KernelMode,(PVOID*)&peprocess, 0);
2013-12-4 22:12
0
雪    币: 110
活跃值: (34)
能力值: (RANK:50 )
在线值:
发帖
回帖
粉丝
15
ObjectAttributes.ObjectName
2013-12-4 23:14
0
雪    币: 59
活跃值: (142)
能力值: ( LV3,RANK:20 )
在线值:
发帖
回帖
粉丝
16
谢谢 八两哥哥
你的方法最好
2013-12-4 23:29
0
雪    币: 223
活跃值: (516)
能力值: ( LV13,RANK:520 )
在线值:
发帖
回帖
粉丝
17
DbgPrint("Create Process");

       
    tagRet = Real_ZwCreateProcessEx(ProcessHandle, DesiredAccess, ObjectAttributes,
        ParentProcess, Flags, SectionHandle, DebugPort, ExceptionPort, JobMemberLevel);

        DbgPrint("handle value = %x", ProcessHandle);

        tagStatus = ObReferenceObjectByHandle(*ProcessHandle, PROCESS_ALL_ACCESS, NULL, KernelMode, &lpEprocess, NULL);
               
        if(!NT_SUCCESS(tagStatus))
        {
                DbgPrint("ObReferenceObjectByHandle failure~");

                DbgPrint("rc value = %x", tagStatus);
        }
        else
        {
                DbgPrint("ObReferenceObjectByHandle success~~");
                ObDereferenceObject(&lpEprocess);
        }

        lpFileName = PsGetProcessImageFileName(lpEprocess);

        if(lpFileName)
        {
                DbgPrint("PsGetProcessImageFileName success...");
                DbgPrint(lpFileName);
        }
        else
        {
                DbgPrint("PsGetProcessImageFileName failure...");
        }

    return tagRet;
2013-12-4 23:41
0
雪    币: 59
活跃值: (142)
能力值: ( LV3,RANK:20 )
在线值:
发帖
回帖
粉丝
18
赞    八两哥哥  把我钻牛角尖的问题都解决了!
2013-12-5 10:33
0
游客
登录 | 注册 方可回帖
返回
//