很多时候我们会碰到杀进程的需求,但是很多程序会hook系统的api造成我们无法结束指定的进程。
你流氓,我只有更流氓!下面介绍一种模拟native api ZwTerminateProcess 结束进程的方法,这种方法可以结束掉hook的不深的进程。
那么hook的更深的怎么办?你深,我只有更深!不过这不在本文的讨论内容之内。
下面上代码:
1
INT __declspec(naked) __stdcall ZwTerminateProcess(HANDLE ProcessHandle,INT ExitStatus)
2 {
3 __asm
4 {
5 // 方法1
6 mov eax, 101h
7 db 0xE8
8 dd 0x00
9 mov edx,esp
10 sysenter
11 ret 8h
12
13 /* 方法2 lea edx,[esp + 4]
14 int 2eh
15 ret 2ch */
16 }
17 }
18
19 void __fastcall TForm1::btn1Click(TObject * Sender)
20 {
21 HANDLE h = GetCurrentProcess();
22 ZwTerminateProcess(h, 0 );
23 }
2 {
3 __asm
4 {
5 // 方法1
6 mov eax, 101h
7 db 0xE8
8 dd 0x00
9 mov edx,esp
10 sysenter
11 ret 8h
12
13 /* 方法2 lea edx,[esp + 4]
14 int 2eh
15 ret 2ch */
16 }
17 }
18
19 void __fastcall TForm1::btn1Click(TObject * Sender)
20 {
21 HANDLE h = GetCurrentProcess();
22 ZwTerminateProcess(h, 0 );
23 }
两种方法都是管用的。
我们看到其实Zw系列的api只是进入内核调用了一个指定序号的服务,上面的代码稍微修改一下就可以模拟出所有的Zw系列了。
怎么样?是不是感觉生活美好了一些啊?