freecutelei
驱动牛犊
驱动牛犊
  • 注册日期2003-11-12
  • 最后登录2016-01-09
  • 粉丝0
  • 关注0
  • 积分10分
  • 威望1点
  • 贡献值0点
  • 好评度1点
  • 原创分0分
  • 专家分0分
阅读:2446回复:3

VWIN32_GetCurrentProcessHandle以后怎么取得进程id啊?

楼主#
更多 发布于:2005-03-22 17:31
谢谢。

vtoolsd写的vxd

filemon里面用这个以后
 CurProc = VWIN32_GetCurrentProcessHandle();
  
    //
    // Now, map the ring3 PCB
    //
    ring3proc = (PVOID) SelectorMapFlat( Get_Sys_VM_Handle(),
                                         (DWORD) (*(PDWORD) ((char *) CurProc + 0x38)) | 0x7, 0 );

    if( ring3proc == (PVOID) -1 ) {
        strcpy( ProcessName, \"???\");
    } else {

        //
        // copy out the process name (max 8 characters)
        //
        name = ((char *)ring3proc) + 0xF2;
        if( name[0] >= \'A\' && name[0] < \'z\' ) {

            strcpy( ProcessName, name );
            ProcessName[8] = 0;
        } else {

            strcpy( ProcessName, \"???\" );
        }

取得进程名称

进程id怎么取得呢?

最新喜欢:

LeopardLeopar... znsoftznsoft
zhaock
驱动太牛
驱动太牛
  • 注册日期2002-01-26
  • 最后登录2018-06-02
  • 粉丝3
  • 关注2
  • 积分73328分
  • 威望362317点
  • 贡献值1点
  • 好评度226点
  • 原创分0分
  • 专家分0分
  • 社区居民
沙发#
发布于:2005-03-22 19:58
还有人做98呢,可以
看看win95奥秘那本书,Pid = CurProc^ObsfucatorDWORD,ObsfuncatorDWORD,是每次系统重启的时候,计算的,是全局的
只要根据当前的进程,或线程计算出Obsfucator = CurPid ^CurPPDB,就可以了,当时我是ring3程序OurPid= GetCurrentProcessId(),传到驱动,驱动可以获得CurPPDB = VWIN32_GetCurrentProcessHandle(),
这样Obsfucator就可以算出来了,那本书上Matt是通过另一种方法算
出ObsfuncatorDWORD的,但在98上,好像硬编码需要修改,我也
记不太清了

freecutelei
驱动牛犊
驱动牛犊
  • 注册日期2003-11-12
  • 最后登录2016-01-09
  • 粉丝0
  • 关注0
  • 积分10分
  • 威望1点
  • 贡献值0点
  • 好评度1点
  • 原创分0分
  • 专家分0分
板凳#
发布于:2005-03-22 21:16
先谢谢楼上的兄弟
我看了一下

struct _SYSTEM_PROCESSES
{
    ULONG                NextEntryDelta;
    ULONG                ThreadCount;
    ULONG                Reserved[6];
    LARGE_INTEGER        CreateTime;
    LARGE_INTEGER        UserTime;
    LARGE_INTEGER        KernelTime;
    UNICODE_STRING       ProcessName;
    KPRIORITY            BasePriority;
    ULONG                ProcessId;
    ULONG                InheritedFromProcessId;
    ULONG                HandleCount;
    ULONG                Reserved2[2];
    VM_COUNTERS          VmCounters;
    IO_COUNTERS          IoCounters;
    struct _SYSTEM_THREADS Threads[1];
};

filemon取processname是偏移38,那么取processid应该就是偏移48对吧.
可是取出来好像还是和系统的API GetCurrentProcessid差一点点
例如:
driver        api
4294967295    4294658577
 
freecutelei
驱动牛犊
驱动牛犊
  • 注册日期2003-11-12
  • 最后登录2016-01-09
  • 粉丝0
  • 关注0
  • 积分10分
  • 威望1点
  • 贡献值0点
  • 好评度1点
  • 原创分0分
  • 专家分0分
地板#
发布于:2005-03-22 21:32
搞定了

取magic

DWORD hId;

      
hId=GetCurrentThreadId();
_asm{
mov eax,FS:[18h]
mov num,eax
}
num-=8;
num=num^hId;
游客

返回顶部