windows安全
文章平均质量分 73
不会写代码的丝丽
这个作者很懒,什么都没留下…
展开
-
win64 内核hook API
除了 SSDT hook和Inline hook外,内核还提供其他官方的API方便我们进行hook操作从而完成一些安全软件的研发等。举例其中以下API函数两个函数都是用于注册一个回调监听进程的创建或者退出时调用,不同的是EX后缀函数不仅可以监听而且还可以控制创建的进程结果。参数说明: 回调函数Remove: 如果为TRUE ,从系统回调表中删除回调函数的注册。FALSE为注册函数到回调函数表中。原创 2023-03-12 18:12:05 · 715 阅读 · 0 评论 -
windows ssdt
我们ring 3跳转ring0另一种方式使用命令。相比起jmp,int xx方式相比速度更快,因为sysenter指令大量的使用了MSR寄存器 存储跳转地址等。MSR寄存器相关读/写命令其中xxx是msr寄存器的编号比如174h等为方便记忆我们约定了一些编号的名字上面上个寄存器就是sysenter指令会涉及的msr寄存器。原创 2023-01-23 19:42:29 · 840 阅读 · 0 评论 -
内核驱动修改内存
本文会利用内核驱动进行读写取第三方应用内存。内核实现会使用内联汇编 所以对于内核数据结构每个windwos版本不一样需要判断,本文使用19041所写代码。winver即可查看你当前的版本,如下图19042.631就是构建版本号或者调用对应内核API.或者链接windbg的时候查看如下图所示。19041便是构建号。原创 2022-12-18 21:17:43 · 1634 阅读 · 2 评论 -
操作系统内存管理-01分段
我们知道每一个程序会被赋予一个"虚拟内存",在进行实际对内存写入的时候会进行一次转物理地址转化在进行操作。下图在来自intel手册,这个转化分为两个部分:段地址转化线性地址(分段机制),线性地址通过页表转化物理地址(分页机制)。当然分页机制intel并没有做强制要求开启,但是分段逻辑被强制开启了。分页逻辑没有开启那么分段逻辑转化的线性地址就是物理地址。intel把内存划分很多个区域每个区域我们把它视为一个段,将虚拟内存的段转化为物理的段地址。每个段都有相关可读可写等属性,这些属性被放入一个叫。原创 2022-11-26 23:02:21 · 591 阅读 · 0 评论 -
windows 驱动与内核调试 学习5
驱动类似如饭店的后厨,而点菜的前台则是window的服务。由服务去进行驱动装载卸载等。本文学习如何自己写一个服务装载一个内核驱动。= =好懒直接贴出代码把。原创 2022-11-12 16:22:02 · 231 阅读 · 0 评论 -
windows 驱动与内核调试 学习4
参数,这个参数决定输出输入缓存流如何定于,一个常规的创建驱动设备代码。这个参数同时也要受限与。我们举例如下控制码生命。原创 2022-11-05 23:18:56 · 189 阅读 · 0 评论 -
windows 驱动与内核调试 学习3
这篇介绍基础的驱动读写,我们看如下一例子因为驱动运行在ring0所以,可以随意写入存在一定安全隐患。另外还有线程安全问题如多线程对于同一IO地址进行读写。为了解决相关问题Windows为对象提供一个flags字段可以增加io方式应对相关问题其中有两种方式分别为和,两则使用场景不同。适合在小数据传输中使用便捷,使用在大数据传输操作繁琐但效率高。可参阅如下文档上图你可以很明显看出两则差别。原创 2022-11-05 19:27:21 · 510 阅读 · 0 评论 -
windows 驱动与内核调试 学习2
我们知道我们驱动存在的意义往往是用于驱动硬件,而一个硬件读写大多数操作系统都是为文件io。既然是文件那么必然涉及到文件打开,读写等。我们看看在内核驱动该如何实现这些逻辑操作。当函数卸载的时候一定要记得删除驱动文件哦我们贴出完成相关代码我们利用工具将驱动文件进行加载然后我们在利用winobj查看我们注册驱动文件我们最后执行卸载操作。上面的注册驱动文件不能在ring3 进行文件读写,如果你期望ring3也可以驱动需要额外注册一个另一个映射名(符号链接 )相关代码如下同样我们加载驱动。原创 2022-10-29 17:32:48 · 948 阅读 · 0 评论 -
栈溢出漏洞
本文利用栈溢出漏洞弹出一个警告窗口。我们假设用户正在运行以下代码:就是一段读取文件后判断内容是否和预期相等。这段代码代码在不开启任何系统保护时会利用进行栈溢出。会一直读取字符串直到碰到特殊字符为止,而又是在栈上的,假设我们有如下骚操作:恶意程序伪装为,并且大小大于20字节。那么将会覆盖原始的栈上存储的返回地址。是一个很特殊的地址,大多数用户电脑这个内存地址都是一个特殊的指令.我们把这个地址称为通用跳板地址,当然你可以找到其他类似地址。也就是函数返回时会执行 jmp esp,转而跳转到我们栈溢出原创 2022-06-25 23:42:37 · 404 阅读 · 0 评论 -
Window 加密壳实现
加密壳是比较初级的壳,本文最后源码链接中有两套不同实现。实现加密粒度完全不一样。壳一般可以启到压缩作用和防逆向工程的作用。DbgView.exe是一个原始程序,Dbgview_pack.ext是被加密后的程序,你可以发现占用磁盘大小减少了一半。当然本文的源码未做重定向处理所以运行可能会奔溃。但对位于不需要重定向的程序是没有太多问题的。如源码中的扫雷程序。本文的加密壳原理图:我们首先编写一个GUI程序让用户选择一个加密的exe程序.Ui代码的编写工程就跳过、我们常看点击后的事件处理:我们将根据函数原创 2022-06-23 22:24:28 · 886 阅读 · 0 评论 -
windows 脚本拖壳-01
概述本文会利用x32dbg 脚本脱掉一个加壳后的exe.软件运行后:我们这里的目的不是在于点击注册后,显示破解成功。而是将其加密后的原始程序还原回来。看段数据很明显,进行自定义段操作导入表为空,证明我们dump程序后需要还原导入表。我们将其拖入x32dbg中.OE:直接执行了pushad操作,证明壳程序想保护上下文,而后运行中还原。pushad 将所有寄存器保存到栈pushfd 保存标志寄存器保存到栈我们首先运行到第二行pushfd,然后给esp设置硬件访问断点.思想原创 2022-05-29 17:18:31 · 949 阅读 · 0 评论 -
地址无关代码
水不脏人,人却脏水。这就是上善若水?前言我们时常说地址无关和地址相关代码是什么?假设我们有一段代码,这段代码可以随意粘贴到任何程序中运行那么我可以简单的理解为这就是位置无关代码。我们看下如下的代码:#include<Windows.h>int main(){ return MessageBoxA(NULL,"hello","world",MB_OK);}这段代码对应的汇编代码如下:下划线就是被重定位后的地址。如果我们把这段汇编代码赋值到其他进程是无法运行的。我们简原创 2022-05-08 16:18:14 · 1246 阅读 · 0 评论