首页

文章

如何使用windbg到hook的位置

发布网友 发布时间:2022-03-26 16:06

我来回答

1个回答

热心网友 时间:2022-03-26 17:35

那么我们首先应该做的是怎么样来解除掉它们,替换我们的执行地址,当然在这里,我们必须要知道这个结构:
typedef struct _SERVICE_DESCRIPTOR_TABLE
{
PVOID ServiceTableBase;
PULONG ServiceCounterTableBase;
ULONG NumberOfService;
ULONG ParamTableBase;
}SERVICE_DESCRIPTOR_TABLE,*PSERVICE_DESCRIPTOR_TABLE; // 由于KeServiceDescriptorTable只有一项,这里就简单点了
他就是SSDT 表了,这张表就类似于 PE 文件中的 IAT ,存储着一系列的函数地址,我们都知道,现在的系统都是基于保护模式的,当我们要访问内核的时候,MS 已经为我们定义好了接口,那么当我们调用哪些接口的时候,哪些接口会在这张表中查找需要的服务的地址函数,
我们在这里可以截获我们要过滤的函数请求,达到我们的目的。。。

这个结构有四个域:
反汇编得到:

HookApi!_SERVICE_DESCRIPTOR_TABLE
+0x000 ServiceTableBase : Ptr32 Void
+0x004 ServiceCounterTableBase : Ptr32 Uint4B
+0x008 NumberOfService : Uint4B
+0x00c ParamTableBase : Uint4B

//我们的替代的函数,是一个裸函数,编译器不会像其他的函数一样处理它。。。
__declspec(naked) NTSTATUS MyApiAddress(PHANDLE phandle,
ACCESS_MASK DesireAddress,
POBJECT_ATTRIBUTES pObjectAttributes,
PCLIENT_ID pClientID)
{
KdPrint(("NtPOpenProcess...Call"));
__asm
{
push 0C4h; //这两个域,是通过我们要HOOK 的 API 定位得到的
push 804daaa8h;
jmp [g_JmpServerAddr];
}
}

kd> u 805c2296
nt!NtOpenProcess:
这里是我们要调用的函数的入口点:
两个参数,遵循 C 的调用方式,手工清栈。。。就得到了
805c2296 68c4000000 push 0C4h //
805c229b 68a8aa4d80 push offset nt!ObWatchHandles+0x25c (804daaa8)
805c22a0 e86b6cf7ff call nt!_SEH_prolog (80538f10)

805c22a5 33f6 xor esi,esi
805c22a7 8975d4 mov dword ptr [ebp-2Ch],esi
805c22aa 33c0 xor eax,eax
805c22ac 8d7dd8 lea edi,[ebp-28h]
805c22af ab stos dword ptr es:[edi]
有两种方法获得我们要HOOK 的地址,可以通过函数,推荐PVOID
MmGetSystemRoutineAddress(
IN PUNICODE_STRING SystemRoutineName
);
比较方便,不用涉及其他的操作,返回的是要查的地址。。。。
不然的话,需要查MS 定义的服务描述表,而且个个平台还不一样,难以做到跨平台。。。

上边就完成了我们的导向工作,只要获取到了需要跳转的地址就 OK 了。。。
extern PSERVICE_DESCRIPTOR_TABLE KeServiceDescriptorTable; // KeServiceDescriptorTable为导出函数

操作之前:
我们需要:
// 去掉内存保护
VOID ClearMemoryProtect()
{
__asm
{
cli;
mov eax, cr0;
and eax, not 10000h;
mov cr0, eax;
}
}

// 跳转到NtOpenProcess函数头+10的地方,这样在其前面写的JMP都失效了,完成替换
g_JmpServerAddr = (ULONG)NtOpenProcess + 10;

// 回复内存的保护
VOID RecoverMemoryProtect()
{
__asm
{
cli;
mov eax, cr0;
or eax, not 10000h;
mov cr0, eax;
sti;
}
}

*((ULONG*)uAddress) = (ULONG)MyApiAddress; // HOOK SSDT

去除内存的写保护,操作完成自后,回复之。。。。
贷款记录在征信保留几年? 安徽徽商城有限公司公司简介 安徽省徽商集团新能源股份有限公司基本情况 安徽省徽商集团有限公司经营理念 2019哈尔滨煤气费怎么有税? 快手删除的作品如何恢复 体育理念体育理念 有关体育的格言和理念 什么是体育理念 万里挑一算彩礼还是见面礼 绿萝扦插多少天后发芽 绿萝扦插多久发芽 扦插绿萝多久发芽 炖牛排骨的做法和配料 网络诈骗定罪标准揭秘 “流水不争先”是什么意思? mc中钻石装备怎么做 为什么我的MC里的钻石块是这样的?我想要那种。是不是版本的问题?如果是... 带“偷儿”的诗句 “君不见巴丘古城如培塿”的出处是哪里 带“奈何”的诗句大全(229句) 里翁行()拼音版、注音及读音 带“不虑”的诗句 “鲁肃当年万人守”的出处是哪里 无尘防尘棚 进出口报关流程,越详细越好。谢谢大家指教。 双线桥不是看化合价升多少就标多少的吗?为什么CL2+2KI=2KCL+I2中I失... 出师表高锰酸钾有画面了吗 2021年幼儿园新学期致家长一封信 电脑屏幕一条黑线怎么办? 销售代理商销售代理商的特点 商业代理商业代理的特征 如何看微信有没有开通微众银行 为什么微众没有开户 微众银行怎么开户 微众银行APP开户流程是什么? 唐古拉山海拔唐古拉山海拔是多少 怎么看待取消跳广场舞的人的退休金 如何选购新鲜的蓝田水柿? 恭城水柿柿树作用 创维洗衣机使用教程 创维全自动洗衣机怎么使用 自动开门器 狗羊属相婚姻相配吗 3岁的小孩不会说话怎么办 3岁孩子不会说话,应该挂什么科? 3岁小孩不会说话正常吗 鹿茸炖乌鸡怎么做? 新型冠状肺炎吃什么药可以预防 冰箱上电后一直响 食品生产许可证编号开头为“ G”。 库存过期香精 请教WinDbg使用,std 如何用WinDbg分析MEMORY.DMP文件 如何使用WinDBG跟踪调试ASL/ACPI win7电脑蓝屏怎么用windbg解决 。。。。求救 windbg 怎么调试驱动程序 如何使用windbg在驱动加载时下断 如何用windbg分析64位机上32位程序的dump文件 如何用WinDbg定位内存泄露 关于windbg入门 如何利用 WinDbg 进行双机调试 如何使用windbg调试.exe 如何用WinDBG远程调试程序 如何使用WinDbg调试进程信息 windbg.exe安装后怎么用 WinDbg怎么用? 迅雷FTP站点收藏在哪个文件里? 迅雷5的收藏功能,现在在那里能看到 迅雷影视上收藏的电影在哪儿查看? 迅雷最新版本的个人收藏在那里? 迅雷7的私人收藏去哪了???我以前还有好多收藏的资料软件在里面呢! 如何使用WinDbg分析VC++应用程序的故障转储 如何在windbg调试驱动时下断点需要在源程序修改吗 一加6配置怎么样 一加手机6详细配置一览 电商最火旗舰机PK 一加6/小米MIX2S拍照对比 一加6T和一加6有什么区别? 荣耀10和一加六有什么区别? 如何评价一加6 一加6属于什么水平手机?有什么特色吗? 一加手机怎么样?值得买吗? 一加手机5重吗?手机厚度是多少? 一加手机质量好不好? 一加手机到底怎么样?有用过的朋友能详细说一下不 荣耀v30防水吗 荣耀 30掉水池里面了? 荣耀30进水怎么办? 荣耀30进水了? 荣耀 30进水怎么办 怎么修? 华为荣耀30pro参数详细参数 荣耀 30掉水里,能正常开机,手机卡显示无服务? 频繁恢复出厂设置,对电脑有危害吗
声明声明:本网页内容为用户发布,旨在传播知识,不代表本网认同其观点,若有侵权等问题请及时与本网联系,我们将在第一时间删除处理。E-MAIL:11247931@qq.com