x64windows安全机制进程_线程_模块加载回调摘要

x64上面的每个回调都会对应一个count计数。注册表回调也会有。保存PspNotifyEnableMask标志,每个位分别代表相应的回调是否存在。

对应的位和相应的汇编代码如下。即使这个回调已经被杀毒软件注册了,我们通过定位相应的count并将其清0或者将相应的标志位置为0就可以让相应的回调得不到执行。

从而禁用掉杀软的安全机制。

PspNotifyEnableMask

    1            1            1                1=f
thread      processex        process            image回调

xp  count 清零攻击
nt!PspCreateProcessNotifyRoutineCount       PspCreateThread  PspExitProcess    PsSetCreateProcessNotifyRoutine
PAGE:83FCC97B B8 E4 AD F7 83                                      mov     eax, offset _PspCreateProcessNotifyRoutineCount
PAGE:83FCC980 F0 0F C1 08                                         lock xadd [eax], ecx
PAGE:83FCC984 A1 78 AB F7 83                                      mov     eax, _PspNotifyEnableMask
PAGE:83FCC989 A8 02                                               test    al, 2    //10
PAGE:83FCC98B 0F 85 70 FF FF FF                                   jnz     loc_83FCC901
PAGE:83FCC991 B8 78 AB F7 83                                      mov     eax, offset _PspNotifyEnableMask
PAGE:83FCC996 F0 0F BA 28 01                                      lock bts dword ptr [eax], 1

nt!PspCreateProcessNotifyRoutineExCount       PspCreateThread  PspExitProcess    PsSetCreateProcessNotifyRoutineEx
PAGE:83FCC9A0 B8 E0 AD F7 83                                      mov     eax, offset _PspCreateProcessNotifyRoutineExCount
PAGE:83FCC9A5 F0 0F C1 08                                         lock xadd [eax], ecx
PAGE:83FCC9A9 A1 78 AB F7 83                                      mov     eax, _PspNotifyEnableMask
PAGE:83FCC9AE A8 04                                               test    al, 4    //100

nt!PspCreateThreadNotifyRoutineCount        PspCreateThread  PspExitThread  PsSetCreateThreadNotifyRoutine
PAGE:840A07C1 E8 48 F3 FF FF                                      call    [email protected]12 ; EtwTraceThread(x,x,x)
PAGE:840A07C6 A1 78 AB F7 83                                      mov     eax, _PspNotifyEnableMask
PAGE:840A07CB A8 08                                               test    al, 8    //1000

nt!PspLoadImageNotifyRoutineCount              _PsImageNotifyEnabled             PsSetLoadImageNotifyRoutine
PAGE:83FFDF16 E8 41 06 00 00                                      call    [email protected]20 ; MiObtainSectionForDriver(x,x,x,x,x)
PAGE:83FFDF1B 33 DB                                               xor     ebx, ebx
PAGE:83FFDF1D 89 44 24 0C                                         mov     [esp+60h+var_54], eax
PAGE:83FFDF21 39 5C 24 14                                         cmp     [esp+60h+var_4C], ebx
PAGE:83FFDF25 0F 84 B7 00 00 00                                   jz      loc_83FFDFE2
PAGE:83FFDF2B A1 78 AB F7 83                                      mov     eax, _PspNotifyEnableMask
PAGE:83FFDF30 8B 4C 24 14                                         mov     ecx, [esp+60h+var_4C]
PAGE:83FFDF34 A8 01                                               test    al, 1//1

win7 PspNotifyEnableMask 统管这4个

0111=7
时间: 2024-08-17 04:49:22

x64windows安全机制进程_线程_模块加载回调摘要的相关文章

Lock锁_线程_线程域

using System;using System.Collections.Generic;using System.ComponentModel;using System.Data;using System.Drawing;using System.Linq;using System.Text;using System.Threading;using System.Threading.Tasks;using System.Windows.Forms; namespace Lock锁_线程_线程

Angular Material串串学客户端开发 2 - Node.js模块加载机制Require()

题外话解一下博客标题,因为第一篇文章评论中,有人质疑离题很远,说了半天和Angular Material没有半毛关系.其实我的的中心在后半句<串串学客户端开发>. require() 不要把这里的Require()和RequireJS混为一谈.不过有意思的是,Typescript的模块定义,甚至同时支持这两种模块机制. 导入和使用外部模块,只是简单的一句require(),看看angular/material/docs下的编译文件gulpfile.js的代码片段.对模块导入和使用有个直观的感觉

模块加载机制与包的加载机制

模块加载机制 包是更好的组织功能的代码结构 当前指定一个文件夹,会将文件夹内的index.js作为程序的入口    3 如果当前目录下有一个和文件夹同名的文件,优先加载文件        1 如果当前目录下有一个和文件夹同名的json文件,优先加载json  2 对于文件的加载,顺序是,如果你写上./xxx,优先会加载xxx.js/xxx.json/xxx.node 加载优先级,例如: ./abc 1:先检查当前目录下./abc目录中的package.json文件的main属性,满足就立刻加载

深入浅出nodejs(一) 模块加载机制

声明: 深入浅出nodejs系列文章将会在后面持续更新. 该系列文章部分参考 朴灵<深入浅出nodejs>,并加以总结补充 你真的了解require函数吗? 看似简单的require函数, 其实内部做了大量工作...下面我们将详细说明require为我们所做的一切 nodejs模块加载原理 node加载模块步骤: 1) 路径分析 (如判断是不是核心模块.是绝对路径还是相对路径等) 2) 文件定位 (文件扩展名分析, 目录和包处理等细节) 3) 编译执行 原生模块加载顺序 1) 缓存 2) 本地

Java类加载机制——如何实现一个工程中不同模块加载不同版本的同名jar包。

如何实现一个工程中不同模块加载不同版本的同名jar包? 曾是阿里面试的时候遇到的一个面试题.当时就有点晕,如果是平时遇到这样的问题肯定是统一加载相同版本的就好了. 而如果系统特别庞大依赖冲突繁多,涉及多部门协调,真的有必要解决这样的问题. 这个问题困扰我很久,一直没有好的解决办法.最近研究java虚拟机.终于找到了答案. 在JVM里由类名和类加载器区别不同的Java类型.因此,JVM允许我们使用不同的加载器加载相同namespace的java类,而实际上这些相同namespace的java类可以

requireJs的模块加载和依赖机制的分析和简单实现。

requireJs的文件加载和依赖管理确实非常好用,相信大家都有这个体会.在此之前,我们的html文件头部总是要有一长串的script标签来引入js文件,并且还必须非常注意script标签的先后顺序. 这篇文章对requireJs的核心功能做了简单实现,希望能帮助大家更好理解requireJs. 下面的思路是我参考了requireJs 0.0.7版本实现的.之前有尝试理解当前版本的requireJs的源码,不过最后发现,这特么不是短时间能搞的定的. 无奈之下找了github上先前较早的版本,那时

【模块化编程】理解requireJS-实现一个简单的模块加载器

在前文中我们不止一次强调过模块化编程的重要性,以及其可以解决的问题: ① 解决单文件变量命名冲突问题 ② 解决前端多人协作问题 ③ 解决文件依赖问题 ④ 按需加载(这个说法其实很假了) ⑤ ...... 为了深入了解加载器,中间阅读过一点requireJS的源码,但对于很多同学来说,对加载器的实现依旧不太清楚 事实上不通过代码实现,单单凭阅读想理解一个库或者框架只能达到一知半解的地步,所以今天便来实现一个简单的加载器 加载器原理分析 分与合 事实上,一个程序运行需要完整的模块,以下代码为例: 1

模块加载简单实现

代码仍有问题,就是导入jQuery后无法使用$问题.想参考RequireJS的做法(先去研究下): require(['jquery', 'underscore', 'backbone'], function ($, _, Backbone){ // some code here});本代码为原创,但有一些部分参考阮一峰老师的博客和RequireJS源码. 注意Test.html中在测试ModuleLoader之前先通过<script type="text/javascript"

从整理上理解进程创建、可执行文件的加载和进程执行进程切换,重点理解分析fork、execve和进程切换

一.首先我们来看看进程控制块PCB也就是task_struct,(源码) 选出task_struct中几个关键的参数进行分析 struct task_struct {volatile long state; //进程状态 /* -1 unrunnable, 0 runnable, >0 stopped */ void *stack; //进程内核堆栈 atomic_t usage; unsigned int flags; //进程标识符 /* per process flags, defined