吾爱破解 - LCG - LSG |安卓破解|病毒分析|www.52pojie.cn

 找回密码
 注册[Register]

QQ登录

只需一步,快速开始

查看: 9260|回复: 5
收起左侧

[系统底层] x86和x64下ssdt的差异

  [复制链接]
msx2009 发表于 2014-11-29 10:52
X86x64ssdt的差异
首先介绍一下SSDT相关的结构体
PVOID无类型指针,x8632位,x6464
结构体
typedef struct _SYSTEM_SERVICE_TABLE{
        PVOID                  ServiceTableBase;
        PVOID                  ServiceCounterTableBase;
        ULONGLONG          NumberOfServices;
        PVOID                  ParamTableBase;
} SYSTEM_SERVICE_TABLE, *PSYSTEM_SERVICE_TABLE;
看一下对应关系
XP 32位下
图片1.png
WIN7 64位下
图片2.png
红黄蓝绿分别代码结构体中的四个成员。第三项为函数个数
这里用dp命令,以指针大小显示数据
dp KeServiceDescriptorTable
XP
图片3.png
直接是函数的地址
Win7
图片4.png
计算公式如下:
SsdtKeServiceDescriptorTable地址,Index为索引值
FunAddr =ssdt+(ssdt+4 * Index)>>4
以ntdll!NtOpenProcess为例计算验证一下
ntdll!NtOpenProcess 索引值为23h
Uf ntdll!NtOpenProcess 如下:
ntdll!ZwOpenProcess:
00000000`76df1510 4c8bd1          mov     r10,rcx
00000000`76df1513 b823000000      mov     eax,23h
00000000`76df1518 0f05            syscall
00000000`76df151a c3              ret
图片5.png
索引值为23hssdt地址 为fffff800`03ecd800
fffff800`03ecd800 + 4*23h=fffff800`03ECD88C
图片6.png
fffff800`03ECD88C 地址处的值为02d0bd00
右移四位 002d0bd0
加上基址 fffff800`03ecd800+002d0bd0 = fffff800`0419E3D0
看一下u fffff800`0419E3D0
图片7.png
确实是内核函数NtOpenProcess的地址。
总之,x86下的ssdt中的内核函数地址可以直接获得,x64下需要进行计算。

免费评分

参与人数 4威望 +1 热心值 +3 收起 理由
地球~包子 + 1 谢谢@Thanks!
破解小白 + 1 热心回复!
Hmily + 1 感谢发布原创作品,吾爱破解论坛因你更精彩.
284912933 + 1 热心回复!

查看全部评分

发帖前要善用论坛搜索功能,那里可能会有你要找的答案或者已经有人发布过相同内容了,请勿重复发帖。

284912933 发表于 2014-12-2 13:42
我就看看,我什么都不懂~
VirusBoy 发表于 2014-12-2 13:55
hualuorenjia 发表于 2015-2-11 16:42
xiangyan_555 发表于 2015-2-14 11:48
MARK,好好学习一下。
kanxue2018 发表于 2015-2-16 01:37 来自手机
认真学习
您需要登录后才可以回帖 登录 | 注册[Register]

本版积分规则 警告:本版块禁止灌水或回复与主题无关内容,违者重罚!

快速回复 收藏帖子 返回列表 搜索

RSS订阅|小黑屋|处罚记录|联系我们|吾爱破解 - LCG - LSG ( 京ICP备16042023号 | 京公网安备 11010502030087号 )

GMT+8, 2024-3-29 22:10

Powered by Discuz!

Copyright © 2001-2020, Tencent Cloud.

快速回复 返回顶部 返回列表