Windows内核(6)——内核调试
Windows内核环境配置:学习系统内核程序是如何运行的,分析程序的运行就必须用到调试,要调试就要能下断点
Windows系统当处于调试状态的时候,所有进程都会被挂起,除了一个调试子系统,用来与本机(Windbg)通过串口进行交互,传递调试指令
Win7+WmWare+Windbg双机调试看这个博客吧,很详细
https://cloud.tencent.com/developer/article/1470241
嘿嘿嘿配好了
注意注意,一定要在系统启动的时候,打开Windbg才能调试上!
X86的Windbg有个bug,就是寄存器窗口没有值,这个可以去github上面下载一个dll
放在同个文件夹即可
然后执行命令:
1!WingDbg.regfix #注意大小写
值得注意的是,命令为:Wingdbg而不是Windbg,虽然我也不知道为什么
这下寄存器窗口就有值了
建议界面可以弄得和OD和x96dbg一样,然后点击保存工作界面:
然后再次进入Windbg的时候,如果没有自动还原工作界面,可以自行打开
Open Workspace
调试驱动程序旧版Windbg首先我们要编译 ...
Windows内核(5)——安全通讯
Windows内核安全通讯乱写Ring3的代码让Ring0崩掉???
例如Ring3给Ring0传一个地址,然后Ring0去访问这块内存,内核直接读写用户内存地址,就会造成系统崩溃。
那么如何去预防?
1.禁止内核直接访问用户层的内存地址(这能避免大部分漏洞)
非要用要保证:1.检查三环地址是否有效(ProbeRead/ProbeWrite)2.保证进程不产生切换(严格检测)
但是不访问三环地址,很难进行通讯
微软就提供了通讯方式(解决缓冲区安全问题)
1.缓冲区方式
2.直接方式
3.其他方式(直接读写用户层的内存地址 Irp->UserBuffer就是直接读写用户层地址,这个很危险)
如何设置?
在创建设备完,要设置缓冲区通讯方式,如果不设置,默认用其他方式,也就是直接访问用户层的内存地址:
设置DEVICE_OBJECT结构体里面的Flags,有缓冲区通讯和直接通讯
12345678910status = IoCreateDevice( DriverObject, // 驱动程序对象 0, ...
Windows内核(4)——R0,R3通讯,交换数据
Windows内核Windows 组件概述调用例如CreateFile这个NTDll的API,这个API会进入0环,在0环里面找到相关的服务,将信息先传给IO Mgr,被打包为IRP,然后传递给驱动,等待驱动完成请求,处理完以后,才将结果返回给Ring3
WriteFile => ntdll.dll => kernel => I/O Manager => AllocIrp => Driver
一些介绍 IoCompleteRequest 是 Windows 内核模式驱动程序开发中的一个关键函数,用于完成 I/O 请求并通知 I/O 管理器和请求的发起者(通常是用户模式应用程序或其他内核模式组件)操作已经完成。这个函数会更新 IRP(I/O 请求包)的状态,并根据请求的优先级和完成状态触发相应的后续操作。
1234VOID IoCompleteRequest( _Inout_ PIRP Irp, _In_ CCHAR PriorityBoost);
使 ...
Windows内核(3)——手搓驱动加载器
Windows内核ntoskrnl.exe杂记驱动也是一个PE文件,类似于DLL,DriverEntry类似于DllMain
多了一个INIT节
用IDA打开一个驱动程序:
发现使用到的函数都是来自一个库,叫做ntoskrnl,
发现貌似是一个exe文件,我们用IDA打开看看
ntoskrnl.exe 是 Windows 操作系统的内核映像,简称为 NT Kernel (Windows NT Kernel Image)。它是 Windows 内核的核心部分,负责多种关键任务和系统服务
发现导出函数都在这个EXE的导出表里面
说明,逆向内核就相当于逆向这个exe程序
做一个驱动加载工具目标:尝试做一个驱动加载工具
自行写一个驱动的安装,启动,关闭,卸载
PrintErrorMessage这个函数能够自动根据错误码输出错误内容
12345678910111213141516171819202122void PrintErrorMessage(DWORD errorCode){ LPVOID lpMsgBuf; FormatMessage( FORMAT_MESSAGE ...
Windows内核(2)——IRP介绍&实现Ring0与Ring3交互
Windows内核2IRP(I/O Request Package)IRP是什么从概念上讲IRP类似于windows应用程序的消息。我们知道在windows中应用程序是由消息驱动的。
IRP的全名是I/O Request Package,即输入输出请求包,它是Windows内核中的一种非常重要的数据结构。上层应用程序与底层驱动程序通信时,应用程序会发出I/O请求,操作系统将相应的I/O请求转换成相应的IRP,不同的IRP会根据类型被分派到不同的派遣例程中进行处理。
与IRP相关的几个常用的事件
驱动层
功能解释
对应于应用层
IRP_MJ_CREATE
请求一个句柄
CreateFile
IRP_MJ_CLOSE
关闭句柄
CloseHandle
IRP_MJ_READ
从设备得到数据
ReadFile
IRP_MJ_WRITE
传送数据到设备
WriteFile
IRP_MJ_DEVICE_CONTROL
控制操作利用IOCTL宏
DeviceIoControl
这几个IRP事件放在MajorFunctio ...
Windows内核(1)——内核初探&编写第一个驱动程序
Windows内核内核杂记内核(Kernel)
安全角度:Rootkit,漏洞利用,病毒
Rootkit(也称隐匿软件[1])是指主要为隐藏其他程序进程的软件,可能是一种或以上软件的组合;广义而言,Rootkit也可视为一项技术。今天,Rootkit一词更多指伪装成驱动程序加载到操作系统内核中的恶意软件,其代码在特权模式运行,能造成意外危险。
三种模式CPU的三种模式:
实模式(Real Mode)
实模式是x86处理器的初始模式,也是最早期的处理模式。在实模式下,CPU的特性和限制主要包括:
地址空间:只有20位地址总线,因此可以访问的物理内存最多为1MB。
段式内存管理:内存地址通过段寄存器和偏移量组合计算,例如,地址由段寄存器(16位)乘以16再加上偏移量(16位)组成。
无内存保护:没有内存保护机制,任何程序可以访问所有内存区域,包括操作系统和硬件设备的内存。
简单的中断处理:中断向量表固定在内存地址0x0000到0x03FF之间。
保护模式(Protected Mode)
保护模式是x86处理器的一种增强模式,提供了更强大的内存管理和保护功能。保护模式的主 ...
用管道将cmd.exe信息输出到窗口代码分析
用管道将cmd.exe信息输出到窗口12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182void CParentDlg::OnBnClickedButton3(){ //创建管道 SECURITY_ATTRIBUTES sa = {}; sa.nLength = sizeof(sa); sa.bInheritHandle = TRUE; ::CreatePipe(&m_hSelfRead, &m_hCmdWrite, &sa, 0); ::CreatePipe(&m_hCmdRead, &m_hSelfWrite, &sa, 0); //创建子进程 STARTUPINFO si = {}; si.cb = sizeof(si); s ...
X64异常分析(新旧版本)
X64逆向异常分析旧版本64位异常处理:
在x64的异常处理中,VS编译器不再采用在函数中注册SEH完成异常处理的方式,而是将异常信息存放在PE文件中的一个.pdata节中
在32位的情况下,想要找Funcinfo可以通过一个函数的开局 有一个
1offset __ehhandler$_main
双击点进去可以看到CxxFrameHanlder的其中一个参数unk_41B2C4,这个就是FuncInfo
但是在64位,我们在函数开头貌似并没有看到
1offset __ehhandler$_main
ThrowInfo我们只能找到CxxThrowException这个函数,然后找到pThrowInfo,然后找到ThrowInfo这个结构体
我们点进去发现,最后一个参数是一个RVA参数,为什么要用RVA呢?
原因是因为这样可以支持随机基址,拿到正确的地址的话,就可以直接通过随机基地址加上这个RVA即可
但是每次都要自己手动计算RVA转换为正确的地址,难免有些繁琐,所以我们在结构体定义的时候,就可以自己加上ImageBase,变成正确的地址:
可以看到快捷键是C ...
X64逆向
X64逆向64位相比于32位的优势:
更大的地址空间:64位系统可以访问的内存地址空间比32位系统大得多。具体来说,32位系统最多可以使用4GB的内存(2^32字节),而64位系统则可以使用高达16EB(2^64字节)的内存。这对于需要大量内存的应用程序,如大型数据库、视频编辑软件和虚拟化应用程序等,尤为重要。
更高的性能:在某些情况下,64位程序可以利用更多的寄存器和更宽的数据路径,从而提高性能。例如,64位处理器可以一次性处理更大的整数和浮点数,这对于科学计算、加密和多媒体处理等任务有显著的性能提升。
增强的安全性:64位系统通常包含更多的安全功能,例如硬件层面的地址空间布局随机化(ASLR)和数据执行保护(DEP)。这些功能可以帮助防范某些类型的攻击,如缓冲区溢出攻击。
兼容性和未来性:随着技术的发展,越来越多的软件和操作系统开始只支持64位版本。使用64位程序可以确保更好的兼容性和未来的支持,因为软件和硬件供应商将逐渐减少对32位系统的支持。
更好的多任务处理能力:64位处理器在处理多任务和多线程应用程序时,表现通常优于32位处理器。这对于需要同时运行多个应用程序或处理大量并发 ...
彩虹猫病毒分析
彩虹猫简介
彩虹猫病毒,也称为 Nyancat 病毒,是一种恶意软件,通常被归类为计算机蠕虫或恶搞病毒。其名称和特征灵感来自于流行的互联网迷因“彩虹猫”(Nyancat),这是一只带着彩虹尾巴的动画猫。
彩虹猫病毒属于MBR病毒,从功能上看,它是一款恶作剧病毒。该病毒会修改MBR主引导扇区,以此来破坏电脑的正常启动。在修改MBR后,电脑重启会停留在一个彩虹猫的画面,因此该病毒被称为是彩虹猫病毒。但该病毒没有采取隐藏或者规避查杀等技术。
感染效果:
一旦感染系统,彩虹猫病毒会修改系统文件或注册表,增加自身的启动项以确保重启后继续运行。
典型的恶搞效果是弹出彩虹猫动画,播放背景音乐,使得用户无法正常操作计算机。
病毒访问google网站和程序,使计算机变得难以使用。
确定之后,病毒就会打开很多个网页。链接指向了谷歌搜索,但是由于网络的缘故,我们不知道这个浏览器具体显示的是什么。紧接着,鼠标就会不受指控,不断抖动。还会不断弹出各种窗口铺满屏幕,有些窗口颜色会变成黑色或者褐色。
病毒初探:因为彩虹猫病毒没有采用隐藏或规避查杀技术,并且里面一堆敏感API,所以我们选择在虚拟机中操作, ...