avatar
文章
73
标签
30
分类
0

首页
时间轴
标签
分类
清单
  • 音乐
  • 照片
  • 电影
友链
关于
Cc12138's blog
搜索
首页
时间轴
标签
分类
清单
  • 音乐
  • 照片
  • 电影
友链
关于

Cc12138's blog

Windows内核(7)——内核API介绍
发表于2024-07-16|更新于2025-01-07|Windows内核
Windows内核内核API的使用关于内存检查的API123MmIsAddressValid();//查表检测该页是否有效 一般是0x12345678 & 0xffff000 ,操作系统申请没有一个字节,而是以页为单位ProbeForRead(); //只能检测UserBuffer,而且要用异常处理,而且参数为0的时候不干事ProbeForWrite();//只能检测UserBuffer,而且要用异常处理,而且参数为0的时候不干事 关于字符串的API以 Rtl(Runtime Library)开头的函数命名源自 Windows 操作系统的运行时库(Runtime Library),这些库提供了一组基本函数,用于支持操作系统和驱动程序的开发。Rtl 函数主要用于以下几个方面: 字符串操作:包括 Unicode 和 ANSI 字符串的初始化、复制、比较、转换等操作。 内存管理:提供内存分配、释放、复制等基本功能。 其他基础操作:如列表操作、异常处理等。 12345678910RtlInitUnicodeString();//初始化一个 UNICODE_STRIN ...
Windows内核(6)——内核调试
发表于2024-07-14|更新于2024-07-14|Windows内核
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)——安全通讯
发表于2024-07-14|更新于2025-02-05|Windows内核
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通讯,交换数据
发表于2024-07-13|更新于2025-02-03|Windows内核
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)——手搓驱动加载器
发表于2024-07-11|更新于2024-07-11|Windows内核
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交互
发表于2024-07-10|更新于2024-07-10|Windows内核
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)——内核初探&编写第一个驱动程序
发表于2024-07-10|更新于2024-07-10|Windows内核
Windows内核内核杂记内核(Kernel) 安全角度:Rootkit,漏洞利用,病毒 Rootkit(也称隐匿软件[1])是指主要为隐藏其他程序进程的软件,可能是一种或以上软件的组合;广义而言,Rootkit也可视为一项技术。今天,Rootkit一词更多指伪装成驱动程序加载到操作系统内核中的恶意软件,其代码在特权模式运行,能造成意外危险。 三种模式CPU的三种模式: 实模式(Real Mode) 实模式是x86处理器的初始模式,也是最早期的处理模式。在实模式下,CPU的特性和限制主要包括: 地址空间:只有20位地址总线,因此可以访问的物理内存最多为1MB。 段式内存管理:内存地址通过段寄存器和偏移量组合计算,例如,地址由段寄存器(16位)乘以16再加上偏移量(16位)组成。 无内存保护:没有内存保护机制,任何程序可以访问所有内存区域,包括操作系统和硬件设备的内存。 简单的中断处理:中断向量表固定在内存地址0x0000到0x03FF之间。 保护模式(Protected Mode) 保护模式是x86处理器的一种增强模式,提供了更强大的内存管理和保护功能。保护模式的主 ...
用管道将cmd.exe信息输出到窗口代码分析
发表于2024-07-09|更新于2024-07-09
用管道将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异常分析(新旧版本)
发表于2024-07-09|更新于2024-07-09|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逆向
发表于2024-07-01|更新于2024-07-01|x64逆向
X64逆向64位相比于32位的优势: 更大的地址空间:64位系统可以访问的内存地址空间比32位系统大得多。具体来说,32位系统最多可以使用4GB的内存(2^32字节),而64位系统则可以使用高达16EB(2^64字节)的内存。这对于需要大量内存的应用程序,如大型数据库、视频编辑软件和虚拟化应用程序等,尤为重要。 更高的性能:在某些情况下,64位程序可以利用更多的寄存器和更宽的数据路径,从而提高性能。例如,64位处理器可以一次性处理更大的整数和浮点数,这对于科学计算、加密和多媒体处理等任务有显著的性能提升。 增强的安全性:64位系统通常包含更多的安全功能,例如硬件层面的地址空间布局随机化(ASLR)和数据执行保护(DEP)。这些功能可以帮助防范某些类型的攻击,如缓冲区溢出攻击。 兼容性和未来性:随着技术的发展,越来越多的软件和操作系统开始只支持64位版本。使用64位程序可以确保更好的兼容性和未来的支持,因为软件和硬件供应商将逐渐减少对32位系统的支持。 更好的多任务处理能力:64位处理器在处理多任务和多线程应用程序时,表现通常优于32位处理器。这对于需要同时运行多个应用程序或处理大量并发 ...
1…678
avatar
Ccai
文章
73
标签
30
分类
0
Follow Me
公告
ROIS Team Member
最新文章
ETW-Ti的应用记录2025-02-06
将进程提升至PPL权限2025-02-05
WDF框架学习2025-01-12
NDIS/WFP网络过滤2025-01-12
病毒分析2025-01-06
标签
Git的使用 c++ 无模块注入Dll器项目(安全启动线程版) 提升PPL windows内核网络过滤 QT FPS辅助 x86 C++逆向分析 ARK工具开发 WDF框架 x86下的c++异常处理 ByPassUAC CE的使用 文件过滤 MFC逆向分析 远控开发 Windows应急响应 PWN x64逆向 ETW Windows内核 病毒分析 Minifilter 数据库 Hook Win x64内核 免杀 PE x64异常分析 网络编程
归档
  • 二月 20252
  • 一月 20254
  • 十二月 20245
  • 十一月 20248
  • 十月 202416
  • 九月 202410
  • 八月 202410
  • 七月 202415
网站资讯
文章数目 :
73
本站访客数 :
本站总访问量 :
最后更新时间 :
©2020 - 2025 By Ccai
框架 Hexo|主题 Butterfly
搜索
数据库加载中