博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
(转)得到系统服务号的硬编码
阅读量:5084 次
发布时间:2019-06-13

本文共 1748 字,大约阅读时间需要 5 分钟。

刚刚解决了EPROCESS、ETHREAD的硬编码查询问题,又遭遇了系统服务号的硬编码。

刚找到方法如下。

===

环境:win7+windbg+livekd

===

0: kd> u ZwCreateProcessEx

nt!ZwCreateProcessEx:
8427eff4 b850000000 mov eax,50h  <---------注意啦,这个就是系统服务号的硬编码。
8427eff9 8d542404 lea edx,[esp+4]
8427effd 9c pushfd
8427effe 6a08 push 8
8427f000 e849220000 call nt!KiSystemService (8428124e) <--------
8427f005 c22400 ret 24h
nt!ZwCreateProfile:
8427f008 b851000000 mov eax,51h
8427f00d 8d542404 lea edx,[esp+4]

KeSystemServiceDescriptorTable->ServiceTableBase+服务号 就是该函数在系统服务描述符表中的位置。

KeServiceDescriptorTable:是由内核(Ntoskrnl.exe)导出的一个表,这个表是访问SSDT的关键,具体结构是

typedef struct ServiceDescriptorTable {
PVOID ServiceTableBase;
PVOID ServiceCounterTable(0);
unsigned int NumberOfServices;
PVOID ParamTableBase;
}

 ==ServiceTableBase :SSDT 的基地址。

 == NumberOfServices : ServiceTableBase 描述的服务的数目。
 == ServiceCounterTable :此域用于操作系统的 checked builds,包含着 SSDT 中每个服务被调用次数的计数器。这个计数器由 INT 2Eh 处理程序 (KiSystemService)更新。 
 ==ParamTableBase 包含每个系统服务参数字节数表的基地址(就是系统服务号)。上面的汇编代码就是把参数压栈的过程。

==================================

刚刚看雪上看到,还有这样用的:

#define SYSTEMSERVICE(_function)KeServiceDescriptorTable.ServiceTableBase[*(PULONG)((PUCHAR)_function+1)]

调用OldNtCreateFile=(NTOPENKEY)(SYSTEMSERVICE(ZwOpenKey));
也就是变成了OldNtCreateFile=KeServiceDescriptorTable.ServiceTableBase[*(PULONG)((PUCHAR)ZwOpenKey+1)]

原理如下:

0: kd> u ZwOpenKey

nt!ZwOpenKey:
8427f7ec b8b6000000 mov eax,0B6h

                   |                                          |_ServiceID

                   |_机器码(其中第二字节即ZwOpenKey线性地址加一处就是ServiceID)
8427f7f1 8d542404 lea edx,[esp+4]
8427f7f5 9c pushfd
8427f7f6 6a08 push 8
8427f7f8 e8511a0000 call nt!KiSystemService (8428124e)
8427f7fd c20c00 ret 0Ch
nt!ZwOpenKeyEx:
8427f800 b8b7000000 mov eax,0B7h
8427f805 8d542404 lea edx,[esp+4]

(还不如硬编码呢。。)

转载于:https://www.cnblogs.com/himessage/archive/2013/01/04/2844134.html

你可能感兴趣的文章
【深度学习】caffe 中的一些参数介绍
查看>>
Python-Web框架的本质
查看>>
QML学习笔记之一
查看>>
Window 的引导过程
查看>>
App右上角数字
查看>>
从.NET中委托写法的演变谈开去(上):委托与匿名方法
查看>>
小算法
查看>>
201521123024 《java程序设计》 第12周学习总结
查看>>
新作《ASP.NET MVC 5框架揭秘》正式出版
查看>>
IdentityServer4-用EF配置Client(一)
查看>>
WPF中实现多选ComboBox控件
查看>>
读构建之法第四章第十七章有感
查看>>
Windows Phone开发(4):框架和页 转:http://blog.csdn.net/tcjiaan/article/details/7263146
查看>>
Unity3D研究院之打开Activity与调用JAVA代码传递参数(十八)【转】
查看>>
python asyncio 异步实现mongodb数据转xls文件
查看>>
TestNG入门
查看>>
【ul开发攻略】HTML5/CSS3菜单代码 阴影+发光+圆角
查看>>
IOS-图片操作集合
查看>>
IO—》Properties类&序列化流与反序列化流
查看>>
测试计划
查看>>