系统安全工具软件C/C++一线开发 [2021]不用hook在R3实现全局捕获syscall调用 在R3下ETW实现了一套接口允许你拿到一些syscall调用信息 在cmd下,输入如下代码: ```cpp logman start "NT Kernel Logger" -p "Windows Kernel Trace" (syscall) -o sys.etl -ets ``` 一段时间后停止 ```cpp logman stop "NT Kernel Logger" -ets ``` 接着转换成可读的格式: ```cpp tracerpt sys.etl ``` 你就看到对应的syscall了:  **但是,看情况我们目前只能拿得到两个信息: ** 1. syscall的index 2. syscall的处理器id 3. syscall的地址 **我们没办法拿到的信息并且是关键信息的有: ** 1. syscall的进程id 2. syscall的具体名字/内容 **我将会在这篇文章介绍一种非常巧妙的移花接木的方法来获取这些必要信息并且实现r3的dll注入检测 ** ### 线程切换 我们需要第一步推导出syscall的调用者是谁,但是etw并没有给我们更多的详细信息,因此我们需要做一个hack去获取它,那就是通过线程切换事件 线程切换事件ETW也会给我们消息,我们能知道: 1.老线程id 2.新线程id 3.老线程的状态 4.当前处理器id 阅读全文 2021-10-19 huoji 0 条评论
系统安全二进制安全C/C++汇编一线开发 [2021]漫游微软屎山 win32kfull.sys (一) ssdt和shadow ssdt 微软的win32kfull.sys这玩意绝对是,微软整个操作系统上漏洞最多的驱动之一,因为他的代码是从win3.1一路贴屎山贴过来的,在如今windows 20h2最新系统上,你任然可以看到某些莫名其妙的函数  lszzz zzz qqqqzzzqx等奇怪的看起来就像是屎山的代码 过去二十年,微软这玩意一直是漏洞报告的重头戏,各种本地提权、rce层出不穷,其恶劣程度堪比rpc和wmi.因此我准备单独开一系列介绍这个win32kfull.sys(本人也在持续逆向他中) ## ssdt和shadow ssdt 总所周知,x64后大部分常规API进内核的方式是syscall,当有syscall指令后,cpu会把rip指向amd64_lstar这个寄存器里面的地址,操作系统则把这个寄存器改成自己的进内核的函数,微软windows下这个r3和内核交互的函数名字叫做 kisystemcall64 而操作系统的大部分跟R3交互的API 都是一套叫做SSDT的机制控制的,并且如果是涉及到图形的api 则是放在shadow ssdt也就是sssdt,为什么要这样放,因为内核实在是没办法塞下win3.1的垃圾屎山代码.也没办法重构,所以干脆分开 阅读全文 2021-09-04 huoji 0 条评论
系统安全工具软件二进制安全C/C++一线开发 [2021]让InfinityHook再次伟大 make InfinityHook great again ## 前言 在我折腾InfinityHook的时候我发现2004下系统没啥作用,原因是在2004系统上 WMI_LOGGER_CONTEXT->GetCpuClock已经不是rdtsc()函数了而是一个叫做 EtwpGetLoggerTimeStamp的函数  EtwpGetLoggerTimeStamp函数按照WMI_LOGGER_CONTEXT->GetCpuClock的值有如下操作: 大于3抛异常 等于3用rdtsc 等于2用off_140C00A30 等于1用KeQueryPerformanceCounter 等于0用RtlGetSystemTimePrecise 3,1,0都好说,但是这个2的off_140C00A30是什么鬼? 阅读全文 2021-06-23 huoji 5 条评论
工具软件二进制安全C/C++汇编一线开发 [2021]基于hypervisor的HIPS架构 从0到1 四 (SSDT hook) # 前言 还记我们系列的标题吗? HIPS,作为系统监控,我们需要监控所有的syscall调用。这个部分会由hypervisor完成. ssdt hook是一个古老古老的东西了,还记得我以前入门就是很多人把ssdt hook看做是核心机密,现在已经烂大街了.我们的ssdt hook不同于传统的"内联hook",我们准确的说叫做msr hook.回忆一下amd64里面syscall的方式,看看AMD手册的介绍: 在AMD64体系下,为了解决之前int调用方式的不足,从而推出了syscall指令作为进入内核入口的指令,syscall在AMD64体系下调用的方式  可以看到,最终RIP的值会等与MSR_LSTAR相等,而在微软体系里,MSR_LSTAR存放着kisystemcall64的函数地址 因此,我们需要hook这个msr_star 阅读全文 2021-05-25 huoji 1 条评论