"HK"日常之冻结术
Posted twilightlemon
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了"HK"日常之冻结术相关的知识,希望对你有一定的参考价值。
在那遥远的MSDN上,有那么一只被隐藏的函数,它掌管着Windows内核威力不容小觑~
本教程仅作为学习研究,禁止其他用途!
富强、民主、文明、和谐, 自由、平等、公正、法治, 爱国、敬业、诚信、友善
一、准备工作
首先我们需要准备4只dll:需要引用using System.Runtime.InteropServices;
1 [DllImport("ntdll.dll")] 2 private static extern uint NtSuspendProcess([In] IntPtr processHandle);//冻结术 3 4 [DllImport("ntdll.dll")] 5 private static extern uint NtResumeProcess([In] IntPtr processHandle);//解冻术 6 7 [DllImport("kernel32.dll", SetLastError = true)] 8 private static extern IntPtr OpenProcess( 9 uint desiredAccess, 10 bool inheritHandle, 11 int processId);//打开线程并获取Handle 12 13 [DllImport("kernel32.dll", SetLastError = true)] 14 [return: MarshalAs(UnmanagedType.Bool)] 15 private static extern bool CloseHandle([In] IntPtr handle);//释放之前的OpenProcess
接下来我们把它封装起来
1 public static void SuspendProcess(int processId) 2 { 3 IntPtr hProc = IntPtr.Zero; 4 hProc = OpenProcess(0x800, false, processId); 5 if (hProc != IntPtr.Zero) { 6 NtSuspendProcess(hProc); 7 CloseHandle(hProc); 8 } 9 } 10 11 public static void ResumeProcess(int processId) 12 { 13 IntPtr hProc = IntPtr.Zero; 14 hProc = OpenProcess(0x800, false, processId); 15 if (hProc != IntPtr.Zero){ 16 NtResumeProcess(hProc); 17 CloseHandle(hProc); 18 } 19 }
二、编码工作
以C#WinForm为例,将这段代码放在Form的Loaded或Button_Click事件里
var data = Process.GetProcesses();//获取所有进程 foreach (var p in data) { try { if (p.ProcessName != "Freeze") //注意不要把自己冻结了!!此处“Freeze”可以换成你的进程名,一般就是项目名称 ProcessMgr.SuspendProcess(p.Id);//[滑稽]冻结大法 } catch { } }
三、运行调试
千万不能在VisualStudio里调试
千万不能在VisualStudio里调试
千万不能在VisualStudio里调试
因为程序也会冻结VS,而VS关联这程序,所以冻结vs自己也动不了了
但如果你想在vs里调试可以在上方加入if判断
前方高能
好了,我要关电脑了。。。
感兴趣的小伙伴可以自己下载来玩一玩:https://github.com/TwilightLemon/Freeze
以上是关于"HK"日常之冻结术的主要内容,如果未能解决你的问题,请参考以下文章
" XSS易容术---bypass之编码混淆篇+辅助脚本编写"