首页
社区
课程
招聘
内核下获取地址的问题
发表于: 2018-9-26 14:31 2526

内核下获取地址的问题

2018-9-26 14:31
2526

win7 32下

 

NTSTATUS AnitNtOpenProcess()
{

    unsigned long pushaddr;
    BYTE * NtWriteVirtualMemoryByte
    BYTE *p;
LONG * NtWriteVirtualMemorydangqian = (LONG*)GetNtSSDT_Adrr(0x18F); 
   //0x18  NtWriteVirtualMemory序号

DbgPrint("NtWriteVirtualMemory地址:%0x", NtWriteVirtualMemorydangqian);

      NtWriteVirtualMemoryByte= (BYTE *)GetNtSSDT_Adrr(0x18F);

       p = NtWriteVirtualMemoryByte;

    while (1)
{
    if ( (*(p + 5) == 0xE8) && (*p == 0x68))
    {
        //定位成功后取地址    
        push= *(PULONG)(p + 1) + (ULONG)(p + 5);
        break;
    }
    //推动指针    
    p++;
}
DbgPrint("Push地址:%0x", pushaddr);
return 1;

}
附上 汇编汇编代码

 

840a4d31 6a18 push 18h
840a4d33 68886ee983 push offset nt! ?? ::FNODOBFM::`string'+0x3f08 (83e96e88)
840a4d38 e8b3a7e1ff call nt!_SEH_prolog4 (83ebf4f0)
840a4d3d 648b3d24010000 mov edi,dword ptr fs:[124h]

 

取出 第2行的 83e96e88 一直取出的不对 但是取 call nt!_SEH_prolog4 (83ebf4f0) 或者JMP XXX可以取出来 这是为什么呢?怎么办


[注意]传递专业知识、拓宽行业人脉——看雪讲师团队等你加入!

收藏
免费 0
支持
分享
最新回复 (3)
雪    币: 405
活跃值: (2230)
能力值: ( LV4,RANK:50 )
在线值:
发帖
回帖
粉丝
2
if ( (*(p + 5) == 0xE8) && (*p == 0x68))
    {
        //定位成功后取地址   
        push= *(PULONG)(p + 1) ;
        break;
    }
2018-9-26 14:57
0
雪    币: 200
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
3
wowocock if ( (*(p + 5) == 0xE8) && (*p == 0x68)) { //定位成功后取地址 push= *(PULO ...
谢谢 , Call有偏移 push 没偏移 ,所以不用计算
2018-9-26 15:10
0
雪    币: 20
活跃值: (60)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
4
加多了
最后于 2018-10-5 13:43 被最爱季节编辑 ,原因:
2018-10-4 17:39
0
游客
登录 | 注册 方可回帖
返回
//