当前位置: 首页 > news >正文

删除杀软回调 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 正常执行功能。

  • 注册表修改测试:

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

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

相关文章:

删除杀软回调 bypass EDR 研究

01 — 杀软或EDR内核回调简介 Windows x64 系统中&#xff0c;由于 PatchGuard 的限制&#xff0c;杀软或EDR正常情况下&#xff0c;几乎不能通过 hook 的方式&#xff0c;完成其对恶意软件的监控和查杀。那怎么办呢&#xff1f;别急&#xff0c;微软为我们提供了其他的方法&a…...

Ansible自动化部署工具-组件及语法介绍

大家好&#xff0c;我是蓝胖子&#xff0c;我认为自动化运维要做的事情就是把运维过程中的某些步骤流程化&#xff0c;代码化&#xff0c;这样在以后执行类似的操作的时候就可以解放双手了&#xff0c;让程序自动完成。避免出错&#xff0c;Ansible就是这方面非常好用的工具。它…...

postgresql实现job的六种方法

简介 在postgresql数据库中并没有想oracle那样的job功能&#xff0c;要想实现job调度&#xff0c;就需要借助于第三方。本人更为推荐kettle&#xff0c;pgagent这样的图形化界面&#xff0c;对于开发更为友好 优势劣势Linux 定时任务&#xff08;crontab&#xff09; 简单易用…...

layui 表格(table)合计 取整数

第一步 开启合计行 是否开启合计行区域 table.render({elem: #myTable, url: ../baidui/, page: true, cellMinWidth: 100,totalRow:true,cols: [[ //表头//{ type: checkbox },{ type: checkbox,totalRowText: "合计" },//合计行区域{ field: id, align: center,…...

深入理解 TCP;场景复现,掌握鲜为人知的细节

握手失败 第一次握手丢失了&#xff0c;会发生什么&#xff1f; 当客户端想和服务端建立 TCP 连接的时候&#xff0c;首先第一个发的就是 SYN 报文&#xff0c;然后进入到 SYN_SENT 状态。 在这之后&#xff0c;如果客户端迟迟收不到服务端的 SYN-ACK 报文&#xff08;第二次…...

【MySQL系列】 第二章 · SQL(中)

写在前面 Hello大家好&#xff0c; 我是【麟-小白】&#xff0c;一位软件工程专业的学生&#xff0c;喜好计算机知识。希望大家能够一起学习进步呀&#xff01;本人是一名在读大学生&#xff0c;专业水平有限&#xff0c;如发现错误或不足之处&#xff0c;请多多指正&#xff0…...

IBM Qiskit量子机器学习速成(一)

声明&#xff1a;本篇笔记基于IBM Qiskit量子机器学习教程的第一节&#xff0c;中文版译文详见&#xff1a;https://blog.csdn.net/qq_33943772/article/details/129860346?spm1001.2014.3001.5501 概述 首先导入关键的包 from qiskit import QuantumCircuit from qiskit.u…...

音视频基础知识

图像&#xff08;YUV RGB&#xff09; ​​​​​​​​​​​​​​这个讲的比较好 RGB颜色编码 图像显示主要是由像素组成&#xff0c;每个像素点的颜色组成都是采用RGB格式&#xff0c;RGB就是红、绿、蓝&#xff0c;RGB分别取不同的值&#xff0c;展示不同的颜色。 YUV…...

ida81输入密码验证算法分析以及破解思路

本文分析了ida81对输入密码的验证流程&#xff0c;分别对输入密码到生成解密密钥、密码素材的生成过程以及文件数据的加密过程这三个流程进行分析&#xff0c;并尝试找一些可利用的破绽。很遗憾&#xff0c;由于水平有限&#xff0c;目前也只是有个思路未能完全实现&#xff0c…...

C语言——贪吃蛇

一. 游戏效果 贪吃蛇 二. 游戏背景 贪吃蛇是久负盛名的游戏&#xff0c;它也和俄罗斯⽅块&#xff0c;扫雷等游戏位列经典游戏的⾏列。 贪吃蛇起源于1977年的投币式墙壁游戏《Blockade》&#xff0c;后移植到各种平台上。具体如下&#xff1a; 起源。1977年&#xff0c;投币式…...

Android sqlite 使用简介

进行Android应用开发时经常会用到数据库。Android系统支持sqlite数据库&#xff0c;在app开发过程中很容易通过SQLiteOpenHelper使用数据库&#xff0c;SQLiteOpenHelper依赖于Context对象&#xff0c;但是基于uiatomator1.0和Java程序等无法获取Context的应用如何使用数据库呢…...

UE地形系统材质混合实现和Shader生成分析(UE5 5.2)

前言 随着电脑和手机硬件性能越来越高&#xff0c;游戏越来越追求大世界&#xff0c;而大世界非常核心的一环是地形系统&#xff0c;地形系统两大构成因素&#xff1a;高度和多材质混合&#xff0c;此篇文章介绍下UE4/UE5 地形的材质混合方案----基于WeightMap混合。 材质层 …...

Git分支与Git标签的介绍及其场景应用

目录 一、Git分支 1.1 定义 1.2 基本概念 1.3 特点与优势 1.4 Git分支操作命令 1.4.1 查看分支 1.4.2 创建分支 1.4.3 删除分支 1.4.4 切换分支 1.4.5 创建并切换到新建分支 1.5 场景应用 1.5.1 前期准备 1.5.2 具体操作 二、Git标签 2.1 定义 2.2 类型 2.3 标…...

Three.js——基于原生WebGL封装运行的三维引擎

文章目录 前言一、什么是WebGL&#xff1f;二、Three.js 特性 前言 Three.js中文官网 Three.js是基于原生WebGL封装运行的三维引擎&#xff0c;在所有WebGL引擎中&#xff0c;Three.js是国内文资料最多、使用最广泛的三维引擎。既然Threejs是一款WebGL三维引擎&#xff0c;那么…...

第八章认识Express框架

目录 Express模块化路由 基本概述 基本使用 基本构建 案例项目 Express接收请求参数 基本概述 基本类别 Express接收GET请求参数 Express接收POST请求参数 Express接收路由参数 Express模块化路由 基本概述 在Express中&#xff0c;路由是指确定应用程序如何响应对…...

【K8s集群离线安装-kubeadm】

1、kubeadm概述 kubeadm是官方社区推出的一个用于快速部署kubernetes集群的工具。这个工具能通过两条指令快速完成一个kubernetes集群的部署。 2、环境准备 2.1 软件环境 软件版本操作系统CentOS 7Docker19.03.13K8s1.23 2.2 服务器 最小硬件配置&#xff1a;2核CPU、2G内存…...

python工具CISCO ASA设备任意文件读取

​python漏洞利用 构造payload&#xff1a; /CSCOT/translation-table?typemst&textdomain/%2bCSCOE%2b/portal_inc.lua&default-language&lang../漏洞证明&#xff1a; 文笔生疏&#xff0c;措辞浅薄&#xff0c;望各位大佬不吝赐教&#xff0c;万分感谢。 免…...

TCP关闭的两种方法概述

一个TCP需要经过四次挥手才可以关闭连接&#xff0c;能够开启四次挥手的函数有两个&#xff1a; int close(int sockfd) int shutdown(int sockfd,int howto) 接下来就分别讲解一下这两个函数。 close()函数 函数原型 #include<unistd.h> int close(int sockfd)这个函…...

Git的Hooks机制

参考文章&#xff1a;详解如何在项目中使用git Hooks&#xff08;husky、yorkie&#xff09; git hooks钩子 git hooks是一些自定义的脚本&#xff0c;用于控制git工作的流程&#xff0c;分为客户端钩子和服务端钩子。  ~/work/step-time/ [master*] ll .git/hooks total…...

代码随想录算法训练营第四十九天|121. 买卖股票的最佳时机、122. 买卖股票的最佳时机 II

第九章 动态规划part10 121. 买卖股票的最佳时机 给定一个数组 prices &#xff0c;它的第 i 个元素 prices[i] 表示一支给定股票第 i 天的价格。 你只能选择 某一天 买入这只股票&#xff0c;并选择在 未来的某一个不同的日子 卖出该股票。设计一个算法来计算你所能获取的最…...

【根据当天日期输出明天的日期(需对闰年做判定)。】2022-5-15

缘由根据当天日期输出明天的日期(需对闰年做判定)。日期类型结构体如下&#xff1a; struct data{ int year; int month; int day;};-编程语言-CSDN问答 struct mdata{ int year; int month; int day; }mdata; int 天数(int year, int month) {switch (month){case 1: case 3:…...

UE5 学习系列(三)创建和移动物体

这篇博客是该系列的第三篇&#xff0c;是在之前两篇博客的基础上展开&#xff0c;主要介绍如何在操作界面中创建和拖动物体&#xff0c;这篇博客跟随的视频链接如下&#xff1a; B 站视频&#xff1a;s03-创建和移动物体 如果你不打算开之前的博客并且对UE5 比较熟的话按照以…...

在 Nginx Stream 层“改写”MQTT ngx_stream_mqtt_filter_module

1、为什么要修改 CONNECT 报文&#xff1f; 多租户隔离&#xff1a;自动为接入设备追加租户前缀&#xff0c;后端按 ClientID 拆分队列。零代码鉴权&#xff1a;将入站用户名替换为 OAuth Access-Token&#xff0c;后端 Broker 统一校验。灰度发布&#xff1a;根据 IP/地理位写…...

华为云Flexus+DeepSeek征文|DeepSeek-V3/R1 商用服务开通全流程与本地部署搭建

华为云FlexusDeepSeek征文&#xff5c;DeepSeek-V3/R1 商用服务开通全流程与本地部署搭建 前言 如今大模型其性能出色&#xff0c;华为云 ModelArts Studio_MaaS大模型即服务平台华为云内置了大模型&#xff0c;能助力我们轻松驾驭 DeepSeek-V3/R1&#xff0c;本文中将分享如何…...

腾讯云V3签名

想要接入腾讯云的Api&#xff0c;必然先按其文档计算出所要求的签名。 之前也调用过腾讯云的接口&#xff0c;但总是卡在签名这一步&#xff0c;最后放弃选择SDK&#xff0c;这次终于自己代码实现。 可能腾讯云翻新了接口文档&#xff0c;现在阅读起来&#xff0c;清晰了很多&…...

群晖NAS如何在虚拟机创建飞牛NAS

套件中心下载安装Virtual Machine Manager 创建虚拟机 配置虚拟机 飞牛官网下载 https://iso.liveupdate.fnnas.com/x86_64/trim/fnos-0.9.2-863.iso 群晖NAS如何在虚拟机创建飞牛NAS - 个人信息分享...

人工智能--安全大模型训练计划:基于Fine-tuning + LLM Agent

安全大模型训练计划&#xff1a;基于Fine-tuning LLM Agent 1. 构建高质量安全数据集 目标&#xff1a;为安全大模型创建高质量、去偏、符合伦理的训练数据集&#xff0c;涵盖安全相关任务&#xff08;如有害内容检测、隐私保护、道德推理等&#xff09;。 1.1 数据收集 描…...

【深尚想】TPS54618CQRTERQ1汽车级同步降压转换器电源芯片全面解析

1. 元器件定义与技术特点 TPS54618CQRTERQ1 是德州仪器&#xff08;TI&#xff09;推出的一款 汽车级同步降压转换器&#xff08;DC-DC开关稳压器&#xff09;&#xff0c;属于高性能电源管理芯片。核心特性包括&#xff1a; 输入电压范围&#xff1a;2.95V–6V&#xff0c;输…...

02-性能方案设计

需求分析与测试设计 根据具体的性能测试需求&#xff0c;确定测试类型&#xff0c;以及压测的模块(web/mysql/redis/系统整体)前期要与相关人员充分沟通&#xff0c;初步确定压测方案及具体的性能指标QA完成性能测试设计后&#xff0c;需产出测试方案文档发送邮件到项目组&…...

MySQL基本操作(续)

第3章&#xff1a;MySQL基本操作&#xff08;续&#xff09; 3.3 表操作 表是关系型数据库中存储数据的基本结构&#xff0c;由行和列组成。在MySQL中&#xff0c;表操作包括创建表、查看表结构、修改表和删除表等。本节将详细介绍这些操作。 3.3.1 创建表 在MySQL中&#…...