首页
社区
课程
招聘
[分享]系统API调用 学习 记录
发表于: 2020-9-6 13:23 4675

[分享]系统API调用 学习 记录

2020-9-6 13:23
4675


内核学习记录 快速调用
环境: XP 2-9-9-12 分页模式
API:ReadProcessMemory
1.ReadProcessMemory Kernel32.dll导出函数
先IDA打开Kernel32.dll瞄一眼

2.去NTDLL看看

这个看到了很诡异的
eax = 0BAh 注意
edx = 7FFE0300h
Call [edx]
说明 edx这个是个函数
接下来认识下 _KUSER_SHARED_DATA 在内核和用户态有段数据一直是共享状态
这块内存在内核和用户态是共享的,
内核线性地址:ffdf0000
用户态线性地址:7FFE0000
WinDbug验证一下


看着好像是一样,感兴趣可以拆下地址,就是同一块内存
如此来说
Edx = 7FFE0300
Call 【edx】
大局已定呀

3.

赶紧看看这个结构看它取哪里了

都没得函数名,肯定要重新加载下符号试试


看到了啥 还在Ntdll里边转悠咋还不进内核呢?
留意下 edx下边要用 盘它

4.先查下 sysenter 指令
快速调用


我们知道当权限从3环发生切换到0环,相对应的 3环的 cs ss esp eip 都要发生权限的转换切换为0环权限
但是 sysenter 值拿了cs esp eip
Ss才哪里呢? 细心的朋友肯定发现了

5.
奥利给!
那现在所有新的段选择子都全了
MSR寄存器一下为下标 rdmsr 下标
174 目标环 0 CS 选择器
175 目标环 0 ESP
176 目标环 0 入口 EIP
3环提权到0 快速调用ss = cs + 8
接下来当然是先去 MSR[176] 看看接下来执行什么东东

直接看 MSR[176] = 8053E540 可以从地址看到终于到内核了
赶紧去Windbg u一下看看

这个函数先改了 fs:30
3环fs指向的是TEB 0环指向的是_KPCR
先拆分下选择子:0000 0000 0011 0000
得出描述符为: 8003f030 ffc093df`f0000001
base = ffdff000

还得了解下SSDT结构

Typedef struct _KSYSTEM_SERVICE_TABLE
{
PULONG ServiceTableBase; //这个指向系统服务函数地址表
PULONG ServiceCounterTableBase; //系统这个服务表调用了几次
ULONG NumberOfService; //服务函数的个数
PULONG ParamTableBase; //参数表
}KSYSTEM_SERVICE_TABLE, *PKSYSTEM_SERVICE_TABLE;

SSDT
{
SystemServiceTable 基础服务
SystemServiceTableShadow UI服务
}

回头去内核看看这个函数 KiFastCallEntry 上IDA

使用iret返回的 中间有很多细节还不是很清楚 欢迎指正。
都在看雪白嫖了好久了,希望看雪越来越好。
告辞


[招生]科锐逆向工程师培训(2024年11月15日实地,远程教学同时开班, 第51期)

收藏
免费 3
支持
分享
最新回复 (3)
雪    币: 9872
活跃值: (6706)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
2
楼主查指令用的什么啊,求一份
2020-9-8 02:18
0
雪    币: 83
活跃值: (1087)
能力值: ( LV8,RANK:130 )
在线值:
发帖
回帖
粉丝
3
学习
2020-9-8 16:14
1
雪    币: 183
活跃值: (2427)
能力值: ( LV3,RANK:20 )
在线值:
发帖
回帖
粉丝
4
我的小拇指啊 楼主查指令用的什么啊,求一份
https://www.hgy413.com/hgydocs/IA32/这个网站 在线很方便
2020-9-11 13:52
0
游客
登录 | 注册 方可回帖
返回
//