删除杀软回调 bypass EDR 研究

01

杀软或EDR内核回调简介

Windows x64 系统中,由于 PatchGuard 的限制,杀软或EDR正常情况下,几乎不能通过 hook 的方式,完成其对恶意软件的监控和查杀。那怎么办呢?别急,微软为我们提供了其他的方法,完成此类功能,那就是系统回调机制。比如本文提到的“创建进程通知回调”、“创建线程通知回调”、“加载镜像通知回调”、“注册表通知回调”等等。

在恶意软件和杀软 攻与防的对抗中,二者经过激烈的较量,完成了螺旋式的上升变革,给我们的感觉是,杀软越来越强大了,我们的网络环境越来越安全了。

02

删除杀软回调项目简介

github 上有两个比较经典的项目,可以完成删除杀软回调的功能,项目如下所示:

https://github.com/br-sn/CheekyBlinder

https://github.com/lawiet47/STFUEDR

这些项目主要完成了三大功能:

  1. 利用合法驱动读取或修改内核数据;

  2. 寻找“创建进程通知回调”、“创建线程通知回调”、“加载镜像通知回调”、“注册表通知回调”内核数组地址;

  3. 将杀软或EDR驱动对应的回调数组中的某个元素,置 0 或删除;

这里需要注意的是,“创建进程通知回调”、“创建线程通知回调”、“加载镜像通知回调”是正常的数组,而“注册表通知回调”是一个双向循环链表。

下面简单介绍一下,上述四大回调数组内核地址的寻找方法和删除杀软回调的方法。

使用工具:windbg preview

系统环境:Windows 1809 x64

03

创建进程回调数组定位

// 1. 由 PsSetCreateProcessNotifyRoutine 定位 nt!PspSetCreateProcessNotifyRoutine 地址
0: kd> uf PsSetCreateProcessNotifyRoutine
nt!PsSetCreateProcessNotifyRoutine:
fffff802`6ca90570 4883ec28        sub     rsp,28h
fffff802`6ca90574 8ac2            mov     al,dl
fffff802`6ca90576 33d2            xor     edx,edx
fffff802`6ca90578 84c0            test    al,al
fffff802`6ca9057a 0f95c2          setne   dl
fffff802`6ca9057d e80e010000      call    nt!PspSetCreateProcessNotifyRoutine (fffff802`6ca90690)
fffff802`6ca90582 4883c428        add     rsp,28h
fffff802`6ca90586 c3              ret// 2. 定位 nt!PspCreateProcessNotifyRoutine 数组地址
0: kd> uf nt!PspSetCreateProcessNotifyRoutine
nt!PspSetCreateProcessNotifyRoutine:
fffff802`6ca90690 48895c2408      mov     qword ptr [rsp+8],rbx
fffff802`6ca90695 48896c2410      mov     qword ptr [rsp+10h],rbp
fffff802`6ca9069a 4889742418      mov     qword ptr [rsp+18h],rsi
fffff802`6ca9069f 57              push    rdi
fffff802`6ca906a0 4154            push    r12
fffff802`6ca906a2 4155            push    r13
fffff802`6ca906a4 4156            push    r14
fffff802`6ca906a6 4157            push    r15... ...nt!PspSetCreateProcessNotifyRoutine+0x49:
fffff802`6ca906d9 488bd7          mov     rdx,rdi
fffff802`6ca906dc 498bcf          mov     rcx,r15
fffff802`6ca906df e8a4000000      call    nt!ExAllocateCallBack (fffff802`6ca90788)
fffff802`6ca906e4 488bf8          mov     rdi,rax
fffff802`6ca906e7 4885c0          test    rax,rax
fffff802`6ca906ea 0f845b890c00    je      nt!PspSetCreateProcessNotifyRoutine+0xc89bb (fffff802`6cb5904b)  Branchnt!PspSetCreateProcessNotifyRoutine+0x60:
fffff802`6ca906f0 33db            xor     ebx,ebx
fffff802`6ca906f2 4c8d2d375dddff  lea     r13,[nt!PspCreateProcessNotifyRoutine (fffff802`6c866430)]nt!PspSetCreateProcessNotifyRoutine+0x69:
fffff802`6ca906f9 488d0cdd00000000 lea     rcx,[rbx*8]
fffff802`6ca90701 4533c0          xor     r8d,r8d
fffff802`6ca90704 4903cd          add     rcx,r13
fffff802`6ca90707 488bd7          mov     rdx,rdi
fffff802`6ca9070a e86dd5aeff      call    nt!ExCompareExchangeCallBack (fffff802`6c57dc7c)
fffff802`6ca9070f 84c0            test    al,al
fffff802`6ca90711 750c            jne     nt!PspSetCreateProcessNotifyRoutine+0x8f (fffff802`6ca9071f)  Branch// 3. 显示回调数组
0: kd> dq fffff802`6c866430
fffff802`6c866430  ffffbb83`fc851a8f ffffbb83`fc9febaf
fffff802`6c866440  ffffbb83`fe0e8b7f ffffbb83`fe0e8def
fffff802`6c866450  ffffbb83`fe413f0f ffffbb83`fe43612f
fffff802`6c866460  ffffbb83`fe436bdf ffffbb83`fc9feccf
fffff802`6c866470  ffffbb83`fe4366cf ffffbb83`fe436b7f
fffff802`6c866480  ffffbb83`fe436f3f ffffbb83`fe52133f
fffff802`6c866490  ffffbb83`fe521f6f ffffbb83`fe4be96f
fffff802`6c8664a0  ffffbb84`01737c3f 00000000`00000000
0: kd> dq
fffff802`6c8664b0  00000000`00000000 00000000`00000000
fffff802`6c8664c0  00000000`00000000 00000000`00000000
fffff802`6c8664d0  00000000`00000000 00000000`00000000
fffff802`6c8664e0  00000000`00000000 00000000`00000000
fffff802`6c8664f0  00000000`00000000 00000000`00000000
fffff802`6c866500  00000000`00000000 00000000`00000000
fffff802`6c866510  00000000`00000000 00000000`00000000
fffff802`6c866520  00000000`00000000 00000000`00000000// 4. 取出回调数组第一个数据
0: kd> dq (ffffbb83`fc851a8f>>4)<<4
ffffbb83`fc851a80  00000000`00000020 fffff800`704d8230
ffffbb83`fc851a90  00000000`00000000 00000000`00000000
ffffbb83`fc851aa0  6e497350`02030000 00000000`00000000
ffffbb83`fc851ab0  00000000`00100010 ffffbb83`fc851ac0
ffffbb83`fc851ac0  00690067`00650052 00790072`00740073
ffffbb83`fc851ad0  6e496c41`02030000 00000000`00000000
ffffbb83`fc851ae0  00000001`00060000 ffffbb83`fc851ae8
ffffbb83`fc851af0  ffffbb83`fc851ae8 00790072`00740073// 5. 上述数据中第 2 个 8 字节 指针(回调函数) 所在模块
0: kd> lm a fffff800`704d8230
Browse full module list
start             end                 module name
fffff800`704b0000 fffff800`70505000   360qpesv64   (no symbols)

04

创建线程回调数组定位

方法一:

// 1. 由 PsSetCreateThreadNotifyRoutine 定位 nt!PspSetCreateThreadNotifyRoutine 地址
0: kd> uf PsSetCreateThreadNotifyRoutine
nt!PsSetCreateThreadNotifyRoutine:
fffff805`2e2a4350 4883ec28        sub     rsp,28h
fffff805`2e2a4354 33d2            xor     edx,edx
fffff805`2e2a4356 e865000000      call    nt!PspSetCreateThreadNotifyRoutine (fffff805`2e2a43c0)
fffff805`2e2a435b 4883c428        add     rsp,28h
fffff805`2e2a435f c3              ret// 2. 定位 nt!PspCreateThreadNotifyRoutine 数组地址
0: kd> uf nt!PspSetCreateThreadNotifyRoutine
nt!PspSetCreateThreadNotifyRoutine:
fffff805`2e2a43c0 48895c2408      mov     qword ptr [rsp+8],rbx
fffff805`2e2a43c5 4889742410      mov     qword ptr [rsp+10h],rsi
fffff805`2e2a43ca 57              push    rdi
fffff805`2e2a43cb 4883ec20        sub     rsp,20h
fffff805`2e2a43cf 8bf2            mov     esi,edx
fffff805`2e2a43d1 8bd2            mov     edx,edx
fffff805`2e2a43d3 e8b0030000      call    nt!ExAllocateCallBack (fffff805`2e2a4788)
fffff805`2e2a43d8 488bf8          mov     rdi,rax
fffff805`2e2a43db 4885c0          test    rax,rax
fffff805`2e2a43de 0f842e8b0c00    je      nt!PspSetCreateThreadNotifyRoutine+0xc8b52 (fffff805`2e36cf12)  Branchnt!PspSetCreateThreadNotifyRoutine+0x24:
fffff805`2e2a43e4 33db            xor     ebx,ebxnt!PspSetCreateThreadNotifyRoutine+0x26:
fffff805`2e2a43e6 488d0d435cddff  lea     rcx,[nt!PspCreateThreadNotifyRoutine (fffff805`2e07a030)]
fffff805`2e2a43ed 4533c0          xor     r8d,r8d
fffff805`2e2a43f0 488d0cd9        lea     rcx,[rcx+rbx*8]
fffff805`2e2a43f4 488bd7          mov     rdx,rdi
fffff805`2e2a43f7 e880d8aeff      call    nt!ExCompareExchangeCallBack (fffff805`2dd91c7c)
fffff805`2e2a43fc 84c0            test    al,al
fffff805`2e2a43fe 7436            je      nt!PspSetCreateThreadNotifyRoutine+0x76 (fffff805`2e2a4436)  Branchnt!PspSetCreateThreadNotifyRoutine+0x40:
fffff805`2e2a4400 40f6c601        test    sil,1
fffff805`2e2a4404 0f85128b0c00    jne     nt!PspSetCreateThreadNotifyRoutine+0xc8b5c (fffff805`2e36cf1c)  Branch// 3. 显示回调数组
0: kd> dq nt!PspCreateThreadNotifyRoutine
fffff805`2e07a030  ffffbb8f`d044ab7f ffffbb8f`d368fdbf
fffff805`2e07a040  00000000`00000000 00000000`00000000
fffff805`2e07a050  00000000`00000000 00000000`00000000
fffff805`2e07a060  00000000`00000000 00000000`00000000
fffff805`2e07a070  00000000`00000000 00000000`00000000
fffff805`2e07a080  00000000`00000000 00000000`00000000
fffff805`2e07a090  00000000`00000000 00000000`00000000
fffff805`2e07a0a0  00000000`00000000 00000000`00000000// 4. 取出回调数组第一个数据
0: kd> dq (ffffbb8f`d044ab7f>>4)<<4
ffffbb8f`d044ab70  00000000`00000020 fffff805`2ecdd72c
ffffbb8f`d044ab80  00000000`00000000 e8f10366`0081e800
ffffbb8f`d044ab90  72724d46`02030000 66d18b66`00218c0f
ffffbb8f`d044aba0  ffffbb8f`cee83200 ffffbb8f`cee831f0
ffffbb8f`d044abb0  00000002`00000040 c82b66c4`eb586643
ffffbb8f`d044abc0  20206f49`02032b00 8a67c92b`66c3c02b
ffffbb8f`d044abd0  00690072`0044005c 005c0072`00650076
ffffbb8f`d044abe0  00610072`006d0076 006b0073`00640077// 5. 上述数据中 第 2 个 8字节 指针(回调函数) 所在模块
0: kd> lm a fffff805`2ecdd72c
Browse full module list
start             end                 module name
fffff805`2ecb0000 fffff805`2ed93000   360FsFlt   (deferred)

方法二:

05

加载镜像回调数组定位

方法一:

// 1. 由 PsSetLoadImageNotifyRoutine 定位 nt!PsSetLoadImageNotifyRoutineEx 地址
0: kd> uf PsSetLoadImageNotifyRoutine
nt!PsSetLoadImageNotifyRoutine:
fffff805`2e2a4370 4883ec28        sub     rsp,28h
fffff805`2e2a4374 33d2            xor     edx,edx
fffff805`2e2a4376 e8d5000000      call    nt!PsSetLoadImageNotifyRoutineEx (fffff805`2e2a4450)
fffff805`2e2a437b 4883c428        add     rsp,28h
fffff805`2e2a437f c3              ret// 2. 定位 nt!PspLoadImageNotifyRoutine 数组地址
0: kd> uf nt!PsSetLoadImageNotifyRoutineEx
nt!PsSetLoadImageNotifyRoutineEx:
fffff805`2e2a4450 48895c2418      mov     qword ptr [rsp+18h],rbx
fffff805`2e2a4455 4889742420      mov     qword ptr [rsp+20h],rsi
fffff805`2e2a445a 57              push    rdi
fffff805`2e2a445b 4883ec70        sub     rsp,70h
fffff805`2e2a445f 488b058a37d8ff  mov     rax,qword ptr [nt!_security_cookie (fffff805`2e027bf0)]
fffff805`2e2a4466 4833c4          xor     rax,rsp
fffff805`2e2a4469 4889442460      mov     qword ptr [rsp+60h],rax
fffff805`2e2a446e 488bf1          mov     rsi,rcx
fffff805`2e2a4471 48f7c2feffffff  test    rdx,0FFFFFFFFFFFFFFFEh
fffff805`2e2a4478 0f85c28a0c00    jne     nt!PsSetLoadImageNotifyRoutineEx+0xc8af0 (fffff805`2e36cf40)  Branchnt!PsSetLoadImageNotifyRoutineEx+0x2e:
fffff805`2e2a447e e805030000      call    nt!ExAllocateCallBack (fffff805`2e2a4788)
fffff805`2e2a4483 488bf8          mov     rdi,rax
fffff805`2e2a4486 4885c0          test    rax,rax
fffff805`2e2a4489 0f84c58a0c00    je      nt!PsSetLoadImageNotifyRoutineEx+0xc8b04 (fffff805`2e36cf54)  Branchnt!PsSetLoadImageNotifyRoutineEx+0x3f:
fffff805`2e2a448f 33db            xor     ebx,ebxnt!PsSetLoadImageNotifyRoutineEx+0x41:
fffff805`2e2a4491 488d0d985dddff  lea     rcx,[nt!PspLoadImageNotifyRoutine (fffff805`2e07a230)]
fffff805`2e2a4498 4533c0          xor     r8d,r8d
fffff805`2e2a449b 488d0cd9        lea     rcx,[rcx+rbx*8]
fffff805`2e2a449f 488bd7          mov     rdx,rdi
fffff805`2e2a44a2 e8d5d7aeff      call    nt!ExCompareExchangeCallBack (fffff805`2dd91c7c)
fffff805`2e2a44a7 84c0            test    al,al
fffff805`2e2a44a9 0f849f000000    je      nt!PsSetLoadImageNotifyRoutineEx+0xfe (fffff805`2e2a454e)  Branch// 3. 显示回调数组
0: kd> dq nt!PspLoadImageNotifyRoutine
fffff805`2e07a230  ffffbb8f`ceef9bdf ffffbb8f`d044a6ff
fffff805`2e07a240  ffffbb8f`d055fa8f ffffbb8f`d055fc6f
fffff805`2e07a250  00000000`00000000 00000000`00000000
fffff805`2e07a260  00000000`00000000 00000000`00000000
fffff805`2e07a270  00000000`00000000 00000000`00000000
fffff805`2e07a280  00000000`00000000 00000000`00000000
fffff805`2e07a290  00000000`00000000 00000000`00000000
fffff805`2e07a2a0  00000000`00000000 00000000`00000000// 4. 取出回调数组第一个数据
0: kd> dq (ffffbb8f`ceef9bdf>>4)<<4
ffffbb8f`ceef9bd0  00000000`00000020 fffff805`317e37a4
ffffbb8f`ceef9be0  00000000`00000000 ffffbb8f`ceef9be0
ffffbb8f`ceef9bf0  434f444e`02030000 00000000`00000001
ffffbb8f`ceef9c00  ffffbb8f`d387b8c0 ffffbb8f`d387b8c0
ffffbb8f`ceef9c10  00000002`00000040 00000000`00000001
ffffbb8f`ceef9c20  20206f49`02030000 a2aba245`696ddc74
ffffbb8f`ceef9c30  00690072`0044005c 005c0072`00650076
ffffbb8f`ceef9c40  00550041`00450050 00000000`00480054// 5. 上述数据中 第 2 个 8 字节指针(回调函数) 所在模块
0: kd> lm a fffff805`317e37a4
Browse full module list
start             end                 module name
fffff805`317d0000 fffff805`317fb000   DsArk64    (deferred)

方法二:

// 1. 由 PsRemoveLoadImageNotifyRoutine 定位 nt!PspLoadImageNotifyRoutine 数组地址
0: kd> uf PsRemoveLoadImageNotifyRoutine
nt!PsRemoveLoadImageNotifyRoutine:
fffff805`2e42d560 48895c2408      mov     qword ptr [rsp+8],rbx
fffff805`2e42d565 48896c2410      mov     qword ptr [rsp+10h],rbp
fffff805`2e42d56a 4889742418      mov     qword ptr [rsp+18h],rsi
fffff805`2e42d56f 57              push    rdi
fffff805`2e42d570 4156            push    r14
fffff805`2e42d572 4157            push    r15
fffff805`2e42d574 4883ec20        sub     rsp,20h
fffff805`2e42d578 65488b342588010000 mov   rsi,qword ptr gs:[188h]
fffff805`2e42d581 4183cfff        or      r15d,0FFFFFFFFh
fffff805`2e42d585 4c8bf1          mov     r14,rcx
fffff805`2e42d588 664401bee4010000 add     word ptr [rsi+1E4h],r15w
fffff805`2e42d590 33ff            xor     edi,edint!PsRemoveLoadImageNotifyRoutine+0x32:
fffff805`2e42d592 488d0d97ccc4ff  lea     rcx,[nt!PspLoadImageNotifyRoutine (fffff805`2e07a230)]
fffff805`2e42d599 488d2cf9        lea     rbp,[rcx+rdi*8]
fffff805`2e42d59d 488bcd          mov     rcx,rbp
fffff805`2e42d5a0 e81b4186ff      call    nt!ExReferenceCallBackBlock (fffff805`2dc916c0)
fffff805`2e42d5a5 488bd8          mov     rbx,rax
fffff805`2e42d5a8 4885c0          test    rax,rax
fffff805`2e42d5ab 7429            je      nt!PsRemoveLoadImageNotifyRoutine+0x76 (fffff805`2e42d5d6)  Branchnt!PsRemoveLoadImageNotifyRoutine+0x4d:
fffff805`2e42d5ad 488bc8          mov     rcx,rax
fffff805`2e42d5b0 e8cb4186ff      call    nt!ExGetCallBackBlockRoutine (fffff805`2dc91780)
fffff805`2e42d5b5 493bc6          cmp     rax,r14
fffff805`2e42d5b8 7511            jne     nt!PsRemoveLoadImageNotifyRoutine+0x6b (fffff805`2e42d5cb)  Branch

06

注册表通知回调数组定位

// 仅 CmUnRegisterCallback 可以定位// 1. 由 CmUnRegisterCallback 定位 nt!CallbackListHead 链表地址
0: kd> uf CmUnRegisterCallback
nt!CmUnRegisterCallback:
fffff805`2e38bd50 4c8bdc          mov     r11,rsp
fffff805`2e38bd53 53              push    rbx
fffff805`2e38bd54 56              push    rsi
fffff805`2e38bd55 57              push    rdi
fffff805`2e38bd56 4154            push    r12
fffff805`2e38bd58 4155            push    r13
fffff805`2e38bd5a 4156            push    r14
fffff805`2e38bd5c 4157            push    r15
fffff805`2e38bd5e 4881ec80000000  sub     rsp,80h
fffff805`2e38bd65 488bd9          mov     rbx,rcx
fffff805`2e38bd68 be0d0000c0      mov     esi,0C000000Dh
fffff805`2e38bd6d 89b424d8000000  mov     dword ptr [rsp+0D8h],esi
fffff805`2e38bd74 33c0            xor     eax,eax
fffff805`2e38bd76 498943b0        mov     qword ptr [r11-50h],rax
fffff805`2e38bd7a 498943b8        mov     qword ptr [r11-48h],rax
fffff805`2e38bd7e 498943c0        mov     qword ptr [r11-40h],rax
fffff805`2e38bd82 49214380        and     qword ptr [r11-80h],rax
fffff805`2e38bd86 65488b042588010000 mov   rax,qword ptr gs:[188h]
fffff805`2e38bd8f 4183ccff        or      r12d,0FFFFFFFFh
fffff805`2e38bd93 664401a0e4010000 add     word ptr [rax+1E4h],r12w
fffff805`2e38bd9b 33d2            xor     edx,edx
fffff805`2e38bd9d 4c8d35ecf3ccff  lea     r14,[nt!CmpCallbackListLock (fffff805`2e05b190)]
fffff805`2e38bda4 498bce          mov     rcx,r14
fffff805`2e38bda7 e894f094ff      call    nt!ExAcquirePushLockExclusiveEx (fffff805`2dcdae40)
fffff805`2e38bdac 41bf00000080    mov     r15d,80000000hnt!CmUnRegisterCallback+0x62:
fffff805`2e38bdb2 4533c0          xor     r8d,r8d
fffff805`2e38bdb5 488d542438      lea     rdx,[rsp+38h]
fffff805`2e38bdba 488d0ddff3ccff  lea     rcx,[nt!CallbackListHead (fffff805`2e05b1a0)]
fffff805`2e38bdc1 e82a94e1ff      call    nt!CmListGetNextElement (fffff805`2e1a51f0)
fffff805`2e38bdc6 488bf8          mov     rdi,rax
fffff805`2e38bdc9 4889442440      mov     qword ptr [rsp+40h],rax
fffff805`2e38bdce 4885c0          test    rax,rax
fffff805`2e38bdd1 0f84cf000000    je      nt!CmUnRegisterCallback+0x156 (fffff805`2e38bea6)  Branch// 2. 显示 CMREG_CALLBACK 结构(nt!CallbackListHead)
0: kd> dq nt!CallbackListHead
fffff805`2e05b1a0  ffff9705`3572b420 ffff9705`3572ba20
fffff805`2e05b1b0  00000000`00000000 01d9e206`c817750c
fffff805`2e05b1c0  fffff805`2e05b1c0 fffff805`2e05b1c0
fffff805`2e05b1d0  00000000`00000000 00000000`00000000
fffff805`2e05b1e0  00000000`00060001 fffff805`2e05b1e8
fffff805`2e05b1f0  fffff805`2e05b1e8 00000000`00000000
fffff805`2e05b200  00000000`00060001 fffff805`2e05b208
fffff805`2e05b210  fffff805`2e05b208 00000000`00000000// 3. 显示 nt!CallbackListHead 下一个结点
0: kd> dq ffff9705`3572ba20
ffff9705`3572ba20  fffff805`2e05b1a0 ffff9705`35449660
ffff9705`3572ba30  00000000`00000000 01d9e206`c817750b
ffff9705`3572ba40  00000000`00000000 fffff805`3015c728
ffff9705`3572ba50  00000000`000c000c ffff9705`3572a530
ffff9705`3572ba60  ffff9705`3572ba60 ffff9705`3572ba60
ffff9705`3572ba70  74705041`03060000 00000000`00000000
ffff9705`3572ba80  ffff9705`35729ae0 00000000`00000000
ffff9705`3572ba90  00000000`00000000 00000000`00000000// 4. 偏移 0x28 位置 的 8 字节指针(回调函数)所在模块
0: kd> lm a fffff805`3015c728
Browse full module list
start             end                 module name
fffff805`30150000 fffff805`301a5000   360qpesv64   (deferred)

07

删除杀软回调的方法

删除上述四大系统回调的方法被分为两类,“创建进程通知回调”、“创建线程通知回调”、“加载镜像通知回调”被分为一类,为数组类;“注册表通知回调”被分为一类,为双向循环链表类,以下简称链表类。

数组类删除方法是:找到驱动对应数组中的元素,将该元素内核地址赋值为 0;

链表类删除方法是:找到驱动对应的链表中的结点,利用数据结构中双向循环链表删除结点的方法,删除杀软驱动对应的结点。

这里需要注意,数组类中:

“创建进程通知回调”、“创建线程通知回调”,在 win7 及以上的 个人系统和 Server 系统中,通常情况下,数组大小为 64 个元素;而“加载镜像通知回调”中,通常情况下,win10 全系列及以上,数组大小为 64 个元素,win7-7601、win8-9200、win8.1-9600系统中,可能为 8 个或 64 个元素,为不定值,相关资料可以参考微软官方文档,解决方法是,通过 nt!PspLoadImageNotifyRoutineCount 确定当前注册回调个数。

08

删除杀软回调效果

  • 运行 Mimikatz 测试:

    这里测试国内外6款主流杀软,国内两款:某0 数字卫士和某绒,国外四款:卡巴斯基、Windows Defender、eset-nod32、avast;由于该项目主要消弱杀软或EDR的动态查杀能力,这里,使用内存加载 Mimikatz 的方式进行测试,注意该项目需要免杀或者重新构思编码,比如:换个合法漏洞驱动,编写自定义驱动使用 kdmapper 改良版等项目内存加载等,总之,首先要保证你的测试程序在杀软环境下要免杀而且能正常执行功能。在这里,只考虑删除杀软回调对杀软的影响,其他相关因素需要通过某些方法进行消除处理。

    测试结果:

    • eset-nod32、avast、某绒、某0 数字卫士:无需删除杀软回调,内存加载 Mimikatz,就可以正常执行功能;

    • 卡巴斯基、Windows Defender:删除全部回调前,内存加载 Mimikatz 被查杀;删除全部回调后,内存加载 Mimikatz 正常执行功能。

  • 注册表修改测试:

    • 删除全部回调前,某些注册表键值不可修改;

    • 删除全部回调后,某些注册表键值现在已经可以修改。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/139943.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

如何从零开始手写一个消息中间件(从宏观角度理解消息中间件的技术原理)

如何从零开始手写一个消息中间件&#xff08;从宏观角度理解消息中间件的技术原理&#xff09; 什么是消息中间件消息中间件的作用逐一拆解消息中间件的核心技术消息中间件核心技术总览IOBIONIOIO多路复用AIOIO多路复用详细分析selectpollepoll Java中的IO多路复用 协议序列化消…

FD-Align论文阅读

FD-Align: Feature Discrimination Alignment for Fine-tuning Pre-Trained Models in Few-Shot Learning&#xff08;NeurIPS 2023&#xff09; 主要工作是针对微调的和之前的prompt tuining&#xff0c;adapter系列对比 Motivation&#xff1a; 通过模型对虚假关联性的鲁棒…

Python 的 datetime 模块

目录 简介 一、date类 &#xff08;一&#xff09;date 类属性 &#xff08;二&#xff09;date 类方法 &#xff08;三&#xff09;实例属性 &#xff08;四&#xff09;实例的方法 二、time类 &#xff08;一&#xff09;time 类属性 &#xff08;二&#xff09;tim…

JavaScript_动态表格_删除功能

1、动态表格_删除功能 <!DOCTYPE html> <html lang"en"> <head><meta charset"UTF-8"><title>动态表格_添加和删除功能</title><style>table{border: 1px solid;margin: auto;width: 100%;}td,th{text-align: …

图像相似度对比方法

1.哈希方法&#xff0c;其中包括均值哈希、插值哈希、感知哈希方法。计算出图片的哈希值&#xff0c;一般使用汉明 距离计算两个图片间的差距。 2.直方图算法&#xff0c;其中包括灰度直方图算法&#xff0c;RGB直方图算法&#xff0c; 3.灰度图算法&#xff1a;MSE、SSIM、…

ELK之Logstash解析时间相差8h的问题

一、问题描述 服务器当前时间为&#xff1a;2022年 06月 28日 星期二 11:24:22 CST 而logstash解析的时间为2022-06-28T03:15:25.545Z与实际时间相差8h 一、解决办法&#xff1a; 需改logstash的配置文件&#xff1a; 原理就是&#xff1a;定义一个中间变量timestamp&…

第十三章《搞懂算法:神经网络是怎么回事》笔记

目前神经网络技术受到追捧&#xff0c;一方面是由于数据传感设备、数据通信技术和数据存储技术 的成熟与完善&#xff0c;使得低成本采集和存储海量数据得以成为现实;另一方面则是由于计算能力的大幅提升&#xff0c;如图形处理器(Graphics Processing Unit&#xff0c;GPU)在神…

【数据结构】拓扑序列求法

概念不多说了&#xff0c;有疑问的搜一下&#xff0c;这里直接放求法&#xff1a; 找到入度为0的节点输出并删除该节点&#xff0c;并删除与该点链接的边重复第一步 例子 输出a&#xff0c;删除a输出b&#xff0c;删除b输出c&#xff0c;删除c 最终结果为abcdef 注意 拓扑排…

实战Leetcode(四)

Practice makes perfect&#xff01; 实战一&#xff1a; 这个题由于我们不知道两个链表的长度我们也不知道它是否有相交的节点&#xff0c;所以我们的方法是先求出两个链表的长度&#xff0c;长度长的先走相差的步数&#xff0c;使得两个链表处于同一起点&#xff0c;两个链…

杂记 | 使用FRP搭建内网穿透服务(新版toml配置文件,搭配反向代理食用)

文章目录 01 需求与回顾02 下载程序包03 编辑.toml文件3.1 编辑frps.toml3.2 编辑frpc.toml 04 启动服务4.1 启动服务端4.2 启动客户端 05 配置反向代理&#xff08;可选&#xff09;06 windows设置为默认启动&#xff08;可选&#xff09;6.1 创建启动脚本6.2 设置为开机自启 …

Liunx命令汇总

一.用户相关命令 1.1账号管理 创建用户&#xff1a; useradd &#xff08;选项&#xff09; 用户名用户口令&#xff1a; passwd &#xff08;选项&#xff09; 用户名修改用户&#xff1a; usermod 选项 用户名删除用户&#xff1a; userdel &#xff08;选项&#xff09; 用…

加班把数据库重构完毕

加班把数据库重构完毕 本文的数据库重构是基于 clickhouse 时序非关系型的数据库。该数据库适合存储股票数据&#xff0c;速度快&#xff0c;一般查询都是 ms 级别&#xff0c;不需要异步查询更新界面 ui。 达到目标效果&#xff1a;数据表随便删除&#xff0c;重新拉数据以及指…

elastic-job 完结篇

一 elastic-job 1.1 案例场景分析 1.设置4个分片&#xff0c;10秒执行一次。 分片弹性扩容缩容机制测试&#xff1a; 测试1&#xff1a;测试窗口1不关闭&#xff0c;再次运行main方法查看控制台日志&#xff0c;注意修改application.properties中的 server.port&#xf…

Vant 移动端UI 组件自动引入

Vue项目中安装Vant # Vue 3 项目&#xff0c;安装最新版 Vant npm i vant 组件按需引入配置 Vant按需引入- - -安装&#xff1a;unplugin-vue-components 插件 unplugin-vue-components 插件可以在Vue文件中自动引入组件&#xff08;包括项目自身的组件和各种组件库中的组件&…

7.运算符

目录 一.算数运算符 1、算术运算符 2、比较运算符 1、等号()用来判断数字、字符串和表达式是否相等。 2、安全等于运算符(<>) 3、不等于运算符(<>或者!) 4、小于或等于运算符(<) 5、小于运算符(<) 6、IS NULL(IS NULL)&#xff0c;IS NOT NULL 运算…

2352 智能社区医院管理系统JSP【程序源码+文档+调试运行】

摘要 本文介绍了一个智能社区医院管理系统的设计和实现。该系统包括管理员、护工和医生三种用户&#xff0c;具有社区资料管理、药品管理、挂号管理和系统管理等功能。通过数据库设计和界面设计&#xff0c;实现了用户友好的操作体验和数据管理。经过测试和优化&#xff0c;系…

WorkPlus Meet:局域网内部使用的高效视频会议系统

随着全球化和远程办公的趋势&#xff0c;视频会议已成为现代企业和机构不可或缺的沟通工具。而现在&#xff0c;大多数政企单位或者涉密强的企业&#xff0c;都会使用局域网部署的音视频会议系统&#xff0c;提供更高的安全性和隐私保护。因为音视频会议中可能涉及到公司机密和…

程序员的护城河:职业发展的关键元素

目录 1. 技术深度与广度 2. 项目经验与实际操作 3. 沟通与团队协作 4. 持续学习与自我更新 5. 社区参与与开源贡献 6. 创新思维与解决问题的能力 7. 职业规划与自我管理 结语 在科技日新月异的今天&#xff0c;程序员的竞争已经不再仅仅依赖于技术水平&#xff0c;而是…

C++: 内存管理 (new / delete)

文章目录 一. C/C 内存分布二. C 语言中动态内存管理方式: malloc/calloc/realloc/free三. C内存管理方式1. new / delete 操作内置类型2. new / delete 操作自定义类型 四. operator new 与 operator delete 函数五. new 和 delete 的实现原理1. 内置类型2. 自定义类型 六. 定…

【中间件篇-Redis缓存数据库02】Redis高级特性和应用(慢查询、Pipeline、事务、Lua)

Redis高级特性和应用(慢查询、Pipeline、事务、Lua) Redis的慢查询 许多存储系统&#xff08;例如 MySQL)提供慢查询日志帮助开发和运维人员定位系统存在的慢操作。所谓慢查询日志就是系统在命令执行前后计算每条命令的执行时间&#xff0c;当超过预设阀值,就将这条命令的相关…