首页
社区
课程
招聘
[旧帖] [原创]win7下得到PspCidTable的地址 0.00雪花
发表于: 2012-3-8 19:19 2872

[旧帖] [原创]win7下得到PspCidTable的地址 0.00雪花

2012-3-8 19:19
2872
win7下获取获取PspCidTable的地址,一个隐藏进程的代码在虚拟机中测试时用的Win 2003,源码是:
NTSTATUS
GetPspCidTable( OUT PHANDLE_TABLE* ppPspCidTable ) {
  NTSTATUS    status;
  PUCHAR      cPtr;
  unsigned char * pOpcode;
  ULONG      Length;
  UNICODE_STRING  uniPsLookup;
  ULONG      PsLookupProcessByProcessId;

  status = STATUS_NOT_FOUND;

  RtlInitUnicodeString(&uniPsLookup, L"PsLookupProcessByProcessId"); 
  PsLookupProcessByProcessId = (ULONG)MmGetSystemRoutineAddress(&uniPsLookup); 
  for (cPtr = (PUCHAR)PsLookupProcessByProcessId;
    cPtr < (PUCHAR)PsLookupProcessByProcessId + PAGE_SIZE;
    cPtr += Length)
  {
    Length = SizeOfCode(cPtr, &pOpcode);    //credit to LDasm.c by Ms-Rem
    if (!Length) break;
    if (*(PUSHORT)cPtr == 0x35ff && *(pOpcode + 6) == 0xE8)
    {
      *ppPspCidTable = **(PVOID **)(pOpcode + 2);
      DbgPrint("PspCidTable的地址:0x%.8X",*ppPspCidTable);
      status=STATUS_SUCCESS ;
      return status;
    }
  }
  return status;
}

通过搜索//PsLookupProcessByProcessId函数,获取PspCidTable的地址,能达到他的功能。win7版本号是6和1,没win7的,用windbg双机调试win2003

其中有两排数据:ff35e0628a80 push dword ptr[nt!PspCidTable(808a62e0)]
                        e8f4d70300    call    nt!ExMapHandleToPointer(8098268e)
发现没0x35ff与0xe8就是上面的特征码。
而在win7中用windbg(windbg最好是用微软官网下的调试符号包安装后自代的那个)内核调试查看Win7的数据:

在win7中特征码变了,成了0x3d8b和0xe8。改好后在win7中测试能获得。

才学驱动肯定有很多不懂不会,但要有去将它明白的想法和行动,这样才会有所收获,虽然自己在大学自学两年驱动了,说白了还是菜鸟,看着前辈们写的代码心里崇拜,虽然是很老的了但这些是基础,勿在浮沙筑高台。
在学习以前的代码时有很多数据因版本不一而数据不一,无法成功就会影响自己的兴趣。以前遇到过EPROCESS的偏移问题,其实挺简单的用Windbg查下就行了,但自己动手解决的这个过程就是学到知识的关键

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

收藏
免费 0
支持
分享
最新回复 (1)
雪    币: 61
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
2
顶~不过,话说在win7 获得pspCidTable地址另一种方法在xp上也通用的:
void GetPspCidTable()
{
        _asm
        {
                mov eax,fs:[0x34]
                mov eax,[eax+0x80]
                mov eax,[eax]
                mov g_PspCidTable,eax
        }
}
2013-4-2 11:05
0
游客
登录 | 注册 方可回帖
返回
//