- 监控进程对象和线程对象操作,可以使用`ObRegisterCallbacks`这个内核回调函数,通过回调我们可以实现保护calc.exe进程不被关闭,具体操作从`OperationInformation->Object`获得进程或线程的对象,然后再回调中判断是否是计算器,如果是就直接去掉`TERMINATE_PROCESS`或`TERMINATE_THREAD`权限即可。 监控进程对象和线程对象操作,可以使用`ObRegisterCallbacks`这个内核回调函数,通过回调我们可以实现保护calc.exe进程不被关闭,具体操作从`OperationInformation->Object`获得进程或线程的对象,然后再回调中判断是否是计算器,如果是就直接去掉`TERMINATE_PROCESS`或`TERMINATE_THREAD`权限即可。
- 监控进程的启动与退出可以使用 `PsSetCreateProcessNotifyRoutineEx` 来创建回调,当新进程产生时,回调函数会被率先执行,然后执行我们自己的`MyCreateProcessNotifyEx`函数,并在内部进行打印输出。 监控进程的启动与退出可以使用 `PsSetCreateProcessNotifyRoutineEx` 来创建回调,当新进程产生时,回调函数会被率先执行,然后执行我们自己的`MyCreateProcessNotifyEx`函数,并在内部进行打印输出。
- PEB结构`(Process Envirorment Block Structure)`其中文名是进程环境块信息,进程环境块内部包含了进程运行的详细参数信息,每一个进程在运行后都会存在一个特有的PEB结构,通过附加进程并遍历这段结构即可得到非常多的有用信息。 PEB结构`(Process Envirorment Block Structure)`其中文名是进程环境块信息,进程环境块内部包含了进程运行的详细参数信息,每一个进程在运行后都会存在一个特有的PEB结构,通过附加进程并遍历这段结构即可得到非常多的有用信息。
- 在上一篇博文`《驱动开发:内核通过PEB得到进程参数》`中我们通过使用`KeStackAttachProcess`附加进程的方式得到了该进程的PEB结构信息,本篇文章同样需要使用进程附加功能,但这次我们将实现一个更加有趣的功能,在某些情况下应用层与内核层需要共享一片内存区域通过这片区域可打通内核与应用层的隔离,此类功能的实现依附于MDL内存映射机制实现。 在上一篇博文`《驱动开发:内核通过PEB得到进程参数》`中我们通过使用`KeStackAttachProcess`附加进程的方式得到了该进程的PEB结构信息,本篇文章同样需要使用进程附加功能,但这次我们将实现一个更加有趣的功能,在某些情况下应用层与内核层需要共享一片内存区域通过这片区域可打通内核与应用层的隔离,此类功能的实现依附于MDL内存映射机制实现。
- 多数ARK反内核工具中都存在驱动级别的内存转存功能,该功能可以将应用层中运行进程的内存镜像转存到特定目录下,内存转存功能在应对加壳程序的分析尤为重要,当进程在内存中解码后,我们可以很容易的将内存镜像导出,从而更好的对样本进行分析,当然某些加密壳可能无效但绝大多数情况下是可以被转存的。 多数ARK反内核工具中都存在驱动级别的内存转存功能,该功能可以将应用层中运行进程的内存镜像转存到特定目录下,内存转存功能在应对加壳程序的分析尤为重要,当进程在内存中解码后,我们可以很容易的将内存镜像导出,从而更好的对样本进行分析,当然某些加密壳可能无效但绝大多数情况下是可以被转存的。
- 在上一篇文章`《驱动开发:内核中实现Dump进程转储》`中我们实现了ARK工具的转存功能,本篇文章继续以内存为出发点介绍`VAD`结构,该结构的全程是`Virtual Address Descriptor`即`虚拟地址描述符`,VAD是一个`AVL`自`平衡二叉树`,树的每一个节点代表一段虚拟地址空间。程序中的代码段,数据段,堆段都会各种占用一个或多个`VAD`节点,由一个`MMVAD`结构完整描 在上一篇文章`《驱动开发:内核中实现Dump进程转储》`中我们实现了ARK工具的转存功能,本篇文章继续以内存为出发点介绍`VAD`结构,该结构的全程是`Virtual Address Descriptor`即`虚拟地址描述符`,VAD是一个`AVL`自`平衡二叉树`,树的每一个节点代表一段虚拟地址空间。程序中的代码段,数据段,堆段都会各种占用一个或多个`VAD`节点,由一个`MMVAD`结构完整描
- 前言操作系统的作用不可言喻,几乎成为校招面试必问知识点之一。为什么呢?只要你在这个互联网世界,自然都离不开操作系统,Win、Mac、Linux、Android、IOS你应该都不陌生吧....操作系统在如今这个世界充当的就是基石的作用,连接计算机底层硬件与上层应用软件的桥梁,控制其他程序的运行,并且管理系统的相关资源,同时还提供配套的系统软件支持。可能你会说,我不需要了解操作系统我还是可以编程... 前言操作系统的作用不可言喻,几乎成为校招面试必问知识点之一。为什么呢?只要你在这个互联网世界,自然都离不开操作系统,Win、Mac、Linux、Android、IOS你应该都不陌生吧....操作系统在如今这个世界充当的就是基石的作用,连接计算机底层硬件与上层应用软件的桥梁,控制其他程序的运行,并且管理系统的相关资源,同时还提供配套的系统软件支持。可能你会说,我不需要了解操作系统我还是可以编程...
- 在上一篇文章`《驱动开发:内核枚举DpcTimer定时器》`中我们通过枚举特征码的方式找到了`DPC`定时器基址并输出了内核中存在的定时器列表,本章将学习如何通过特征码定位的方式寻找`Windows 10`系统下面的`PspCidTable`内核句柄表地址。 在上一篇文章`《驱动开发:内核枚举DpcTimer定时器》`中我们通过枚举特征码的方式找到了`DPC`定时器基址并输出了内核中存在的定时器列表,本章将学习如何通过特征码定位的方式寻找`Windows 10`系统下面的`PspCidTable`内核句柄表地址。
- ForkJoin是由JDK1.7之后提供的多线程并发处理框架。ForkJoin框架的基本思想是分而治之。什么是分而治之?分而治之就是将一个复杂的计算,按照设定的阈值分解成多个计算,然后将各个计算结果进行汇总。相应的,ForkJoin将复杂的计算当做一个任务,而分解的多个计算则是当做一个个子任务来并行执行。 ForkJoin是由JDK1.7之后提供的多线程并发处理框架。ForkJoin框架的基本思想是分而治之。什么是分而治之?分而治之就是将一个复杂的计算,按照设定的阈值分解成多个计算,然后将各个计算结果进行汇总。相应的,ForkJoin将复杂的计算当做一个任务,而分解的多个计算则是当做一个个子任务来并行执行。
- 在Java中提供了synchronized关键字来保证只有一个线程能够访问同步代码块。既然已经提供了synchronized关键字,那为何在Java的SDK包中,还会提供Lock接口呢?这是不是重复造轮子,多此一举呢?今天,我们就一起来探讨下这个问题。 在Java中提供了synchronized关键字来保证只有一个线程能够访问同步代码块。既然已经提供了synchronized关键字,那为何在Java的SDK包中,还会提供Lock接口呢?这是不是重复造轮子,多此一举呢?今天,我们就一起来探讨下这个问题。
- 在【高并发专题】的专栏中,我们深度分析了ThreadPoolExecutor类的源代码,而ScheduledThreadPoolExecutor类是ThreadPoolExecutor类的子类。今天我们就来一起手撕ScheduledThreadPoolExecutor类的源代码。 在【高并发专题】的专栏中,我们深度分析了ThreadPoolExecutor类的源代码,而ScheduledThreadPoolExecutor类是ThreadPoolExecutor类的子类。今天我们就来一起手撕ScheduledThreadPoolExecutor类的源代码。
- 经典问题生产者消费者问题问题描述互斥关系:生产者消费者互斥访问缓冲区同步关系:生产供应消费问题解决mutex=1,empty=n,full=0PV顺序实现互斥的p操作一定要在实现同步的p操作之后(否则会死锁)两个V操作顺序可以互换多生产者多消费者问题问题描述爸妈分别放桔子和苹果,儿子女儿分别吃掉互斥,同步关系互斥关系:对缓冲区(盘子)的访问要互斥地进行同步关系:父亲将苹果放入盘子后,女儿才... 经典问题生产者消费者问题问题描述互斥关系:生产者消费者互斥访问缓冲区同步关系:生产供应消费问题解决mutex=1,empty=n,full=0PV顺序实现互斥的p操作一定要在实现同步的p操作之后(否则会死锁)两个V操作顺序可以互换多生产者多消费者问题问题描述爸妈分别放桔子和苹果,儿子女儿分别吃掉互斥,同步关系互斥关系:对缓冲区(盘子)的访问要互斥地进行同步关系:父亲将苹果放入盘子后,女儿才...
- 0. 简介在设计复杂的运行程序时,我们经常需要创建一定数量的线程,然而很多时候线程不都是一直执行的,会存在一些线程处于空闲状态。所以通过线程池的方式,可以有效的对线程进行分配。若线程池中有空闲线程,则从线程池中取出一个空闲的线程处理该任务,任务处理完后,该线程被放到线程池中;若线程池中无空闲线程,则将任务放入任务队列等待线程池中有线程空闲,这样的处理方式可以避免线程在建立与销毁时存在的开销... 0. 简介在设计复杂的运行程序时,我们经常需要创建一定数量的线程,然而很多时候线程不都是一直执行的,会存在一些线程处于空闲状态。所以通过线程池的方式,可以有效的对线程进行分配。若线程池中有空闲线程,则从线程池中取出一个空闲的线程处理该任务,任务处理完后,该线程被放到线程池中;若线程池中无空闲线程,则将任务放入任务队列等待线程池中有线程空闲,这样的处理方式可以避免线程在建立与销毁时存在的开销...
- 2022年即将结束,不知道你这一年写了多少行代码,写代码的同时是否想过今年比较热门的技术有哪些?比较新的技术又有哪些?本文,笔者给大家着重介绍了Java最新版本Java19的新特性以及比较热门的微服务、并发、NoSQL。 2022年即将结束,不知道你这一年写了多少行代码,写代码的同时是否想过今年比较热门的技术有哪些?比较新的技术又有哪些?本文,笔者给大家着重介绍了Java最新版本Java19的新特性以及比较热门的微服务、并发、NoSQL。
- 一、说明线程池的生命周期线程池的状态runState和工作线程数量workerCount共同保存在 AtomicInteger 类型的控制变量 ctl 中ctl高三位保存运行状态(2^3^=8>5),低29位保存工作线程的数量(2^29^-1) // 初始运行状态为RUNNING,线程数为0 private final AtomicInteger ctl = new AtomicIn... 一、说明线程池的生命周期线程池的状态runState和工作线程数量workerCount共同保存在 AtomicInteger 类型的控制变量 ctl 中ctl高三位保存运行状态(2^3^=8>5),低29位保存工作线程的数量(2^29^-1) // 初始运行状态为RUNNING,线程数为0 private final AtomicInteger ctl = new AtomicIn...
上滑加载中
推荐直播
-
算子工具性能优化新特性演示——MatMulLeakyRelu性能调优实操
2025/01/10 周五 15:30-17:30
MindStudio布道师
算子工具性能优化新特性演示——MatMulLeakyRelu性能调优实操
回顾中 -
用代码全方位驱动 OBS 存储
2025/01/14 周二 16:30-18:00
阿肯 华为云生态技术讲师
如何用代码驱动OBS?常用的数据管理,对象清理,多版本对象访问等应该如何编码?本期课程一一演示解答。
即将直播 -
GaussDB数据库开发
2025/01/15 周三 16:00-17:30
Steven 华为云学堂技术讲师
本期直播将带你了解GaussDB数据库开发相关知识,并通过实验指导大家利用java基于JDBC的方式来完成GaussD数据库基础操作。
去报名
热门标签