![](https://img-blog.csdnimg.cn/20201014180756928.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
逆向
Mikasys
这个作者很懒,什么都没留下…
展开
-
驱动开发 借壳通信
Ring3#include <stdio.h>#include <windows.h>#define LINK_NAME L"\\\\.\\ndis"//控制码起始地址#define IRP_IOCTRL_BASE 0x8000//控制码宏定义#define IRP_IOCTRL_CODE(i) CTL_CODE(FILE_DEVICE_UNKNOWN,IRP_IOCTRL_BASE + i,METHOD_BUFFERED,FILE_ALL_ACCESS)//控原创 2021-10-20 13:44:19 · 252 阅读 · 0 评论 -
驱动开发1
64位新增PG 如果修改SSDT GDT ntosk,直接蓝,而且检查是随机的。DES 强制签名内存操作#include <ntifs.h>//wdm.h//ntifs.hVOID DriverUnload(PDRIVER_OBJECT pDriver){ UNREFERENCED_PARAMETER(pDriver); DbgPrint("卸载成功!\n");}NTSTATUS DriverEntry(PDRIVER_OBJECT pDriver,原创 2021-10-20 13:43:30 · 215 阅读 · 0 评论 -
用户句柄表的遍历
私有句柄表_HANDLE_TABLE_ENTRY的Object直接指向_OBJECT_HEADER不用减#include <ntifs.h>//一个页最大容纳的_HANDLE_TABLE_ENTRY#define MAX_ENTRY_COUNT (0x1000/sizeof(HANDLE_TABLE_ENTRY)) //未公开未文档化typedef PVOID(NTAPI *OBGETOBJECTTYPE)(IN PVOID pObject);EXTERN_C NTKERNE原创 2021-10-20 13:42:27 · 576 阅读 · 0 评论 -
EPROCESS 遍历进程 隐藏 保护
0: kd> dt _KPROCESSnt!_KPROCESS +0x000 Header : _DISPATCHER_HEADER //dt _KEVENT +0x018 ProfileListHead : _LIST_ENTRY //任务管理器上的性能 +0x028 DirectoryTableBase : Uint8B //cr3 +0x030 ThreadListHead : _LIST_ENTRY //当前进程所有线程原创 2021-10-20 13:40:47 · 838 阅读 · 0 评论 -
驱动的遍历和隐藏
DRIVER_OBJECT0: kd> dt _DRIVER_OBJECTnt!_DRIVER_OBJECT +0x000 Type : Int2B +0x002 Size : Int2B +0x008 DeviceObject : Ptr64 _DEVICE_OBJECT +0x010 Flags : Uint4B +0x018 DriverStart : Ptr64 Void原创 2021-10-20 13:39:57 · 299 阅读 · 0 评论 -
x64 Global HANDLE 全局句柄表
全局句柄表0: kd> dq PspCidTablefffff800`04070408 fffff8a0`00004880 00000000`00000000fffff800`04070418 ffffffff`80000020 00000000`00000101fffff800`04070428 ffffffff`80000298 ffffffff`80000024fffff800`04070438 00000000`00000000 00000000`00000113fffff原创 2021-10-20 13:34:50 · 826 阅读 · 0 评论 -
Ring3下蓝屏的代码demo
0x00 前言蓝屏死机(英语:Blue Screen of Death,缩写:BSoD)指的是微软Windows操作系统在无法从一个系统错误中恢复过来时所显示的屏幕图像。如下图所示经典的XP蓝屏早在XP时代,大家应该经常能够看见蓝屏。处在Win10时代,Win11即将面世的今天,由于PG、各种验证机制的保护,以及MS各种漏洞补丁的修补,虽然不像之前那样漏洞百出,仍人宰割,但是还是存在着各种各样的问题,从我们今天讲的内容就可见一斑。0x01 Ring3蓝屏的方式简单的可以分成2类,实际上全是一类,原创 2021-10-20 13:30:48 · 479 阅读 · 0 评论 -
C++ 底层分析 7.malloc free new delete
1.malloc和free底层调用malloc->_nh_malloc_dbg->_heap_alloc_dbg->_heap_alloc_base->HeapAllocfree->_free_dbg->_free_base->HeapFree原创 2021-04-27 21:46:01 · 130 阅读 · 0 评论 -
C++ 底层分析 6.模板、引用、友元、运算符重载
1.模板#include <iostream>using namespace std;template<class T>void Swap(T &a,T &b){ a = a + b; b = a - b; a = a - b;}int main() { double a = 1.5456456456,b = 2.5456546546; printf("%lf %lf\n",a,b); Swap(a,b); printf("%lf %原创 2021-04-27 21:45:27 · 251 阅读 · 0 评论 -
C++ 底层分析 5.动态绑定、多态
1.多继承无函数覆盖struct Base1 { public: virtual void Fn_1() { printf("Base1:Fn_1...\n"); } virtual void Fn_2() { printf("Base1:Fn_2...\n"); } }; struc原创 2021-04-27 21:44:45 · 156 阅读 · 0 评论 -
C++ 底层分析 4.虚函数表
kd> u IopCreateFile l200nt!IopCreateFile:80576c2c 6a3c push 3Ch80576c2e 6898a14d80 push offset nt!GUID_DOCK_INTERFACE+0x54 (804da198)80576c33 e8485ffcff call nt!_SEH_prolog (8053cb80)80576c38 64a124010000 mov ea原创 2021-04-27 21:44:20 · 120 阅读 · 0 评论 -
C++ 堆栈小问题
下面两个程序最终i的值不一样,但是反汇编居然一样,太诡异了#include <iostream>using namespace std;int main() { int i = 10; &i; if(i == 10) { int i = 3; //最终i=10 //i = 3 //最终i = 3 } return 0;vs2010使得上述代码的反汇编完全一样,让人琢磨不透,最终还是用vc6发现了端倪结论:以这原创 2021-04-27 21:43:44 · 101 阅读 · 0 评论 -
C++ 底层分析 2.构造-析构,继承
析构函数(初始)可以没有,有了必须按照规则用作用:初始化对象用的,创造对象的时候调用特点:3个重载:函数名字一样 参数个数或者类型不一样析构函数(清理)原创 2021-04-27 21:42:30 · 257 阅读 · 0 评论 -
C++ 底层分析 1.this 指针
1.结构体参数传递:相当于复制一份,浪费空间struct Base{ int x; int y; int z;};void function(Base b){}int main(int argc, char* argv[]){ Base base; function(base); return 0;}2.结构体指针参数传递:只传结构体首地址,节省空间struct Base{ int x; int y;};int Max(Base* pb){ if (pb-&g原创 2021-04-27 21:42:05 · 225 阅读 · 0 评论 -
4.Inline Hook模板
#include "stdafx.h"#include "DebugTool.h"DWORD g_dwHookAddr; //Hook开始的地方DWORD g_dwRetAddr; //Hook结束的地方DWORD g_dwLength; //Hook字节数PBYTE g_pCodePatch; //存储Hook原来的硬编码DWORD g_dwHookFlag; //HOOK状态, 1 Hook成功, 0 HOOK 失败typedef struct _REGISTER{ DWORD转载 2020-11-14 11:42:13 · 202 阅读 · 0 评论 -
3.KPCR,等待链表,调度链表
一、内容回顾内容回顾进程在内核中对应结构体:EPROCESS线程在内核中对应结构体:ETHREADCPU在内核中也有一个对应的结构体:KPCR二、KPCR结构kd> dt _KPCRnt!_KPCR +0x000 NtTib : _NT_TIB +0x01c SelfPcr : Ptr32 _KPCR +0x020 Prcb : Ptr32 _KPRCB +0x024 Irql原创 2020-11-11 10:44:37 · 265 阅读 · 0 评论 -
番外:win32k.sys什么情况下会挂上PTE
一、前因在HOOK SSDT Shadow的时候老师说,必须要调用一个界面函数使自己成为GUI进程(线程),才会给这个进程挂上PTE,我对此表示怀疑,于是有了以下探讨二、探究1、首先来看一下system进程查询所有进程kd> !process 0 0**** NT ACTIVE PROCESS DUMP ****PROCESS 867b5830 SessionId: none Cid: 0004 Peb: 00000000 ParentCid: 0000 DirBas原创 2020-11-08 17:53:52 · 285 阅读 · 0 评论 -
2. ETHREAD和线程断链
一、ETHREAD结构体ntdll!_ETHREAD +0x000 Tcb : _KTHREAD +0x1c0 CreateTime : _LARGE_INTEGER +0x1c0 NestedFaultCount : Pos 0, 2 Bits +0x1c0 ApcNeeded : Pos 2, 1 Bit +0x1c8 ExitTime : _LARGE_INTEGER +0x1c8 LpcRepl原创 2020-11-07 14:36:17 · 1130 阅读 · 0 评论 -
进程线程 1.EPROCESS和进程隐藏
一、EPROCESS结构体EPROCESS结构kd> dt _EPROCESSntdll!_EPROCESS +0x000 Pcb : _KPROCESS +0x06c ProcessLock : _EX_PUSH_LOCK +0x070 CreateTime : _LARGE_INTEGER +0x078 ExitTime : _LARGE_INTEGER +0x080 RundownProtect原创 2020-11-05 22:36:33 · 1382 阅读 · 0 评论 -
8.FindWindow(SSDT Shadow HOOK)
待更。。原创 2020-11-05 21:23:50 · 896 阅读 · 0 评论 -
7.HOOK NtTerminateProcess驱动保护进程
1、项目说明将系统服务表中某个函数改成自己的函数,使任务管理器右键无法关闭自己,只有点击自己的关闭按钮才可以正常关闭。2、获取目标进程的进程名kd> dt _Eprocessntdll!_EPROCESS +0x000 Pcb : _KPROCESS +0x06c ProcessLock : _EX_PUSH_LOCK +0x070 CreateTime : _LARGE_INTEGER +0x078 ExitTime原创 2020-11-04 23:33:33 · 1482 阅读 · 3 评论 -
6.SSDT HOOK NtOpenProcess进程保护
代码如下#include <Ntifs.h>//存储原来的函数地址ULONG uOldNtOpenProcess;//调用号ULONG FuctionID = 0x7A;//要保护进程的PIDULONG PID = 1020;typedef NTSTATUS (*NTOPENPROCESS)( PHANDLE ProcessHandle, ACCESS_MASK DesiredAccess, POBJECT_ATTRIBUTES ObjectAttributes,原创 2020-11-04 21:46:20 · 749 阅读 · 0 评论 -
5.SSDT再增加一个NtReadVirtualMemory函数
代码如下,如果看不懂请看上一篇文章Ring0#include <ntifs.h>#include <ntstatus.h>typedef struct _KSYSTEM_SERVICE_TABLE{ PULONG ServiceTableBase; //函数地址表基地址 PULONG ServiceCounterTableBase; //被访问了多少次 ULONG NumberOfService; //表中服务函数的总数 PUCHAR ParamTable原创 2020-11-04 20:08:08 · 462 阅读 · 1 评论 -
4.逆向分析CloseHandle进Ring0完整过程
一、 内容回顾在上一节课中,我们讲到进0环后,3环的各种寄存器都会保留到_Trap_Frame结构体中,这节课我们来讲解:如何根据系统服务号(eax中存储)找到要执行的内核函数?2种调用方式是如何返回到3环的?二、SystemServiceTable 系统服务表typedef struct _SERVICE_DESCRIPTOR_TABLE { PULONG ServiceTableBase;//SSDT的起始地址 PULONG ServiceCounterTableBase;//被访问了原创 2020-11-04 17:15:43 · 331 阅读 · 0 评论 -
3.逆向分析KiSystemService(填充 _KTRAP_FRAME 部分)
一、回顾想要分析透彻,必须得了解之前的那些结构体(_KUSER_SHARED_DATA、_Trap_Frame、_KPCR、 _KTHREAD)没看的同学先看一下之前的文章逆向分析ReadProcessMemory---->KiFastCallEntry二、分析KiSystemService由于上一篇分析KiFastCallEntry文章的难度更大,分析_KiSystemService的难度小一些,所以前面步骤省略,直接开始分析KiSystemService.text:00466481 _KiSy原创 2020-11-04 11:09:32 · 431 阅读 · 0 评论 -
2.逆向分析KiFastCallEntry(填充 _KTRAP_FRAME 部分)
每个线程KTRAP_FRAME 一个ESP0TSS一个核一个如果只有一个核,那么TSS存的ESP0永远是正在运行的线程的堆栈原创 2020-11-04 10:28:21 · 794 阅读 · 0 评论 -
系统调用 1.API函数的调用过程(3环进0环)
1.API函数的调用过程(3环进0环)一、Windows APIApplication Programming Interface,简称 API 函数。Windows有多少个API?主要是存放在 C:\WINDOWS\system32 下面所有的dll几个重要的DLLKernel32.dll:最核心的功能模块,比如管理内存、进程和线程相关的函数等.User32.dll:是Windows用户界面相关应用程序接口,如创建窗口和发送消息等.GDI32.dll:全称是Graphical原创 2020-11-02 20:24:07 · 894 阅读 · 0 评论 -
番外:IDA的使用
IDA的使用一、打开关闭文件加载符号链接关闭文件(不打包数据库文件)所有文件分着放打包文件(打包数据库文件)四个文件合成一个文件idb收集垃圾,使文件变小解决错误操作唯一的办法(不保留本次的所有操作)二、窗口Ctrl + 鼠标滚轮 使界面变大变小按空格切换到文本界面查看不同窗口显示硬编码ACDUA:字符串C:代码形式D:数据形式U:不定义,以原始字节的形式显示G:跳转指令Alt+F:搜索N:改名新增结构体成员 按DAlt+q 选择类型为结构体原创 2020-11-01 15:09:15 · 266 阅读 · 0 评论 -
10. 内存缺页处理
0x10. 内存缺页处理原创 2020-11-01 14:26:24 · 397 阅读 · 0 评论 -
9.写拷贝
0x9 写拷贝(WriteCopy)一、什么是写拷贝?HOOK了这个Dll某个函数,其他进程受影响吗?答:不受影响!因为有写拷贝!写拷贝由操作系统执行二、低2G的VAD二叉树(记录了哪些线性地址被占用或被占用)使用命令查看vad的地址level //二叉树的级别start //因为单位为4KB,再加3个0即为真正线性地址commit //若为Private(VirtualAlloc申请)为私有,自己独享 READWRITE //可读可写 READONLY //只读原创 2020-10-31 12:57:13 · 876 阅读 · 2 评论