能力值:
( LV2,RANK:10 )
|
-
-
2 楼
第二种
使用PostMessage向目标窗口发送WM_CLOSE消息
|
能力值:
( LV2,RANK:10 )
|
-
-
3 楼
第三种
使用keybd_event向目标窗口发送VK_ESC按键
|
能力值:
( LV2,RANK:10 )
|
-
-
4 楼
第四种
使用mouse_event模拟点击目标窗口的关闭
|
能力值:
( LV2,RANK:10 )
|
-
-
5 楼
第五种
使用Windows消息钩子注入dll到目标进程中,dll入口点判断是否是在CrackMe.exe中加载,如果是则调用ExitProcess
|
能力值:
( LV2,RANK:10 )
|
-
-
6 楼
第六种
使用CreateToolhelp32Snapshot函数枚举系统内所有线程,结束属于目标进程的全部线程
|
能力值:
( LV2,RANK:10 )
|
-
-
7 楼
之后的为使用到驱动的
第七种
使用驱动打开进程句柄,然后在ring3下调用TerminateProcess
|
能力值:
( LV2,RANK:10 )
|
-
-
8 楼
第八种
使用驱动打开目标进程句柄,构造一段代码(push 0,call [ExitProcess]) 使用VirtualAlloc,WriteProcess,CreateRemoteThread在目标进程中执行
|
能力值:
( LV2,RANK:10 )
|
-
-
9 楼
第九种
使用驱动打开目标进程句柄,构造一段代码在目标进程中完成加载注入DLL,注入DLL的入口点调用ExitProcess
|
能力值:
( LV2,RANK:10 )
|
-
-
10 楼
第十种
恢复系统SSDT后,使用OpenProcess(pid)打开进程后调用TerminateProcess结束进程
|
能力值:
( LV2,RANK:10 )
|
-
-
11 楼
第十一种
恢复SSDT后使用DebugApi附加进目标进程,然后退出宿主进程,则被调试进程结束
|
能力值:
( LV2,RANK:10 )
|
-
-
12 楼
第十二种
直接在驱动中结束目标进程
|
能力值:
( LV2,RANK:10 )
|
-
-
13 楼
Ring 3的忘了写一种
第十三种
调用EndTask函数直接使用窗口句柄结束目标进程
|
能力值:
( LV2,RANK:10 )
|
-
-
14 楼
ring3 增加一种
第十四种
Pid+1至Pid+3和原始Pid指向同一个进程,可以使用Pid+X打开进程并结束进程
|
能力值:
( LV2,RANK:10 )
|
-
-
15 楼
第十五种 未用代码实现,但肯定可以的
使用驱动跳过目标程序驱动的Pid检测部分,之后在应用层可正常关闭。
目标程序驱动比较Pid部分代码如下
.text:00011741 jz short AllowAccess
.text:00011743 mov ecx, offset SpinLock ; SpinLock
.text:00011748 call ds:KfAcquireSpinLock
.text:0001174E mov [ebp+NewIrql], al
.text:00011751 mov ecx, g_dwProtectPid
.text:00011757 mov [ebp+ProtectPid], ecx
.text:0001175A mov dl, [ebp+NewIrql] ; NewIrql
.text:0001175D mov ecx, offset SpinLock ; SpinLock
.text:00011762 call ds:KfReleaseSpinLock
.text:00011768 mov edx, [ebp+arg_C]
.text:0001176B mov esi, [edx]
.text:0001176D and esi, 0FFFFFFFCh
.text:00011770 call PsGetCurrentProcessId
.text:00011775 cmp esi, eax
.text:00011777 jnz short loc_1177D
.text:00011779 jmp short AllowAccess
.text:0001177B ; ---------------------------------------------------------------------------
.text:0001177B jmp short AllowAccess
.text:0001177D ; ---------------------------------------------------------------------------
.text:0001177D
.text:0001177D loc_1177D: ; CODE XREF: sub_11700+77j
.text:0001177D mov eax, [ebp+arg_C]
.text:00011780 mov ecx, [eax]
.text:00011782 and ecx, 0FFFFFFFCh
.text:00011785 cmp [ebp+ProtectPid], ecx
.text:00011788 jnz short AllowAccess
.text:0001178A jmp short NotAllowAccess
.text:0001178C ; ---------------------------------------------------------------------------
.text:0001178C jmp short NotAllowAccess
.text:0001178E ; ---------------------------------------------------------------------------
.text:0001178E
.text:0001178E AllowAccess: ; CODE XREF: sub_11700+32j
|
能力值:
( LV2,RANK:10 )
|
-
-
16 楼
第十六种 也没写代码
目标程序和配套驱动使用DeviceIoControl进行通信,设置需要保护的进程pid,注入目标进程后向驱动程序发送一个错误的pid即可去掉进程保护
程序和驱动交互的类的虚函数表如下
.rdata:00403590 off_403590 dd offset sub_4016F0 ; DATA XREF: sub_401600+A9o
.rdata:00403590 ; sub_401710+9o
.rdata:00403594 dd offset CreatetCrackMeDriver
.rdata:00403598 dd offset StartCrackMeDriver
.rdata:0040359C dd offset StopCrackMeDriver
.rdata:004035A0 dd offset DeleteCrackMeDriver
.rdata:004035A4 dd offset GethModNtdll
.rdata:004035A8 dd offset IsDeviceHandleOk
.rdata:004035AC dd offset QueryCrackMeServiceStatus
.rdata:004035B0 dd offset CrackMeDeviceIoControl
|
能力值:
( LV2,RANK:10 )
|
-
-
17 楼
第十七种
注入目标程序后关闭已经打开的设备句柄(ring 0和ring 3均可)后即可直接在自己的程序中打开设备句柄,之后无论是卸载驱动还是调用DeviceIoControl均可实现去除驱动保护
|
能力值:
( LV2,RANK:10 )
|
-
-
18 楼
不行了,还有很多种实在没精力写了,累死了,睡觉去了
|
能力值:
( LV2,RANK:10 )
|
-
-
19 楼
睡前添两种
使用PID+1的方法打开进程,可以把使用驱动打开句柄的(远程线程的那两个)重新实现一次
又多两种
|
能力值:
( LV2,RANK:10 )
|
-
-
20 楼
ring0添加一种
恢复SSDT后,直接修改ThreadContext的EIP指向目标程序的
.text:00402866 push eax ; int
.text:00402867 call ds:exit
则程序在获得调度的时候自动退出
调用SetForeGroundWindow是为了让线程立刻得到调度
|
|
|