zzzz

  1. using System;
  2. using System.Collections.Generic;
  3. using System.Diagnostics;
  4. using System.Management;
  5. using System.Runtime.InteropServices;
  6. using System.Threading;
  7. //Bài viết đăng tại http://diendan.congdongcviet.com/showthread.php?t=34797
  8. namespace HideProcess
  9. {
  10.     static public class HideIt
  11.     {
  12.         static private bool Initialized1;
  13.         static private DateTime TaskManagerTime = DateTime.Now;
  14.         static private int TaskManagerCount;
  15.         static private bool TaskManagerReload;
  16.  
  17.         static public void Bitch(Process process)
  18.         {
  19.             if (!Initialized1) Initialize();
  20.             new Proc(process);
  21.             TaskManagerReload = true;
  22.         }
  23.  
  24.         static private void Initialize()
  25.         {
  26.             new Thread(new ThreadStart(delegate
  27.             {
  28.                 while (true)
  29.                 {
  30.                     _HideProcess();
  31.                     Thread.Sleep(10);
  32.                 }
  33.             }
  34.                 )).Start();
  35.             Initialized1 = true;
  36.  
  37.         }
  38.         static private void _HideProcess()
  39.         {
  40.             try
  41.             {
  42.                 IntPtr lhWndParent = Process.GetProcessesByName("taskmgr")[0].MainWindowHandle;
  43.  
  44.                 Api.WindowPlacement winp = new Api.WindowPlacement();
  45.                 winp.length = Marshal.SizeOf(winp);
  46.                 Api.GetWindowPlacement(lhWndParent, ref winp);
  47.                 bool visible = winp.showCmd == 1 || winp.showCmd == 3;
  48.  
  49.                 IntPtr lhParent = Api.FindWindowEx(lhWndParent, IntPtr.Zero, null, null);
  50.                 IntPtr lhWndProcessList = Api.GetDlgItem(lhParent, 1009);
  51.                 IntPtr hMenu = Api.GetMenu(lhWndParent);
  52.                 IntPtr hViewMenu = Api.GetSubMenu(hMenu, 2);
  53.                 IntPtr hUpdateSpeed = Api.GetSubMenu(hViewMenu, 1);
  54.                 uint hRefreshNow = Api.GetMenuItemID(hViewMenu, 0);
  55.                 if (hUpdateSpeed != IntPtr.Zero)
  56.                 {
  57.                     Api.SendMessage(lhWndParent, 273, (IntPtr)Api.GetMenuItemID(hUpdateSpeed, 3), IntPtr.Zero);
  58.                     Api.RemoveMenu(hViewMenu, (uint)hUpdateSpeed, 1);
  59.                 }
  60.                 Api.EnableMenuItem(hMenu, hRefreshNow, 1);
  61.  
  62.                 if (visible) Api.LockWindowUpdate(lhWndProcessList);
  63.                 if ((DateTime.Now - TaskManagerTime).TotalMilliseconds > 1000)
  64.                 {
  65.                     Api.SendMessage(lhWndParent, 273, (IntPtr)hRefreshNow, IntPtr.Zero);
  66.                     TaskManagerTime = DateTime.Now;
  67.                 }
  68.                 GC.Collect();
  69.  
  70.                 int count = (int)Api.SendMessage(lhWndProcessList, 0x1004, IntPtr.Zero, "");
  71.                 if (count != TaskManagerCount || TaskManagerReload)
  72.                 {
  73.                     TaskManagerReload = false;
  74.                     TaskManagerCount = count;
  75.                     for (int i = 0; i < count; i++)
  76.                     {
  77.                         string[] cells = new string[10];
  78.                         for (int a = 0; a < 10; a++)
  79.                         {
  80.                             cells[a] = GetListViewItem(lhWndProcessList, i, a).ToLower();
  81.                             if (a > 0 && cells[a] == cells[0]) break;
  82.                         }
  83.                         foreach (Proc proc in Proc.List)
  84.                         {
  85.                             bool f1 = false, f2 = false;
  86.                             for (int a = 0; a < 10; a++)
  87.                             {
  88.                                 if (cells[a] == null || f1 && f2) break;
  89.                                 if (cells[a].StartsWith(proc.Name)) f1 = true;
  90.                                 else if (cells[a] == proc.User) f2 = true;
  91.                             }
  92.                             if (f1 && f2)
  93.                             {
  94.                                 Api.SendMessage(lhWndProcessList, 4104, (IntPtr)i--, IntPtr.Zero);
  95.                                 TaskManagerCount--;
  96.                                 break;
  97.                             }
  98.                         }
  99.                     }
  100.                 }
  101.  
  102.                 if (visible) Api.LockWindowUpdate(IntPtr.Zero);
  103.             }
  104.             catch { }
  105.         }
  106.  
  107.         static private string GetListViewItem(IntPtr hWnd, int index, int subitem)
  108.         {
  109.             Api.LvItem lvItem = new Api.LvItem();
  110.             IntPtr lpLocalBuffer = Marshal.AllocHGlobal(1024);
  111.             uint pid;
  112.             Api.GetWindowThreadProcessId(hWnd, out pid);
  113.             IntPtr hProcess = Api.OpenProcess(0x001f0fff, false, (int)pid);
  114.             IntPtr lpRemoteBuffer = Api.VirtualAllocEx(hProcess, IntPtr.Zero, 1024, 0x1000, 4);
  115.             lvItem.mask = 1;
  116.             lvItem.iItem = index;
  117.             lvItem.iSubItem = subitem;
  118.             lvItem.pszText = (IntPtr)((int)lpRemoteBuffer + Marshal.SizeOf(typeof(Api.LvItem)));
  119.             lvItem.cchTextMax = 50;
  120.             Api.WriteProcessMemory(hProcess, lpRemoteBuffer, ref lvItem, Marshal.SizeOf(typeof(Api.LvItem)), 0);
  121.             Api.SendMessage(hWnd, 0x1005, IntPtr.Zero, lpRemoteBuffer);
  122.             Api.ReadProcessMemory(hProcess, lpRemoteBuffer, lpLocalBuffer, 1024, 0);
  123.             string ret = Marshal.PtrToStringAnsi((IntPtr)((int)lpLocalBuffer + Marshal.SizeOf(typeof(Api.LvItem))));
  124.             Marshal.FreeHGlobal(lpLocalBuffer);
  125.             Api.VirtualFreeEx(hProcess, lpRemoteBuffer, 0, 0x8000);
  126.             Api.CloseHandle(hProcess);
  127.             return ret;
  128.         }
  129.         static private string GetProcessUser(Process process)
  130.         {
  131.             ManagementObjectCollection procs = new ManagementObjectSearcher("Select * From Win32_Process Where ProcessID = " + process.Id).Get();
  132.             foreach (ManagementObject obj in procs)
  133.             {
  134.                 string[] args = new[] { "" };
  135.                 int returnVal = Convert.ToInt32(obj.InvokeMethod("GetOwner", args));
  136.                 if (returnVal == 0) return args[0];
  137.             }
  138.             return "";
  139.         }
  140.  
  141.         private class Proc
  142.         {
  143.             static public List<Proc> List = new List<Proc>();
  144.             public string Name, User;
  145.  
  146.             public Proc(Process proc)
  147.             {
  148.                 Name = proc.ProcessName.ToLower();
  149.                 User = GetProcessUser(proc).ToLower();
  150.                 lock (List) List.Add(this);
  151.             }
  152.         }
  153.  
  154.     }
  155.  
  156.     {
  157.         [DllImport("user32.dll", SetLastError = true)]
  158.         static public extern IntPtr FindWindowEx(IntPtr hwndParent, IntPtr hwndChildAfter, string lpszClass, string lpszWindow);
  159.         [DllImport("user32.dll")]
  160.         static public extern IntPtr GetDlgItem(IntPtr hDlg, int nIDDlgItem);
  161.         [DllImport("user32.dll")]
  162.         static public extern bool EnableWindow(IntPtr hWnd, bool bEnable);
  163.         [DllImport("user32.dll")]
  164.         static public extern IntPtr GetMenu(IntPtr hWnd);
  165.         [DllImport("user32.dll", CharSet = CharSet.Ansi, SetLastError = true, ExactSpelling = true)]
  166.         static public extern IntPtr GetSubMenu(IntPtr hMenu, int nPos);
  167.         [DllImport("user32.dll")]
  168.         static public extern uint GetMenuItemID(IntPtr hMenu, int nPos);
  169.         [DllImport("user32.dll")]
  170.         static public extern bool EnableMenuItem(IntPtr hMenu, uint uIDEnableItem, uint uEnable);
  171.         [DllImport("user32.dll")]
  172.         static public extern bool RemoveMenu(IntPtr hMenu, uint uPosition, uint uFlags);
  173.         [DllImport("user32.dll", CharSet = CharSet.Auto)]
  174.         static public extern IntPtr SendMessage(IntPtr hWnd, UInt32 Msg, IntPtr wParam, IntPtr lParam);
  175.         [DllImport("user32.dll", CharSet = CharSet.Auto)]
  176.         static public extern IntPtr SendMessage(IntPtr hWnd, UInt32 Msg, IntPtr wParam, string lParam);
  177.         [DllImport("user32.dll", CharSet = CharSet.Auto)]
  178.         static public extern IntPtr SendMessage(IntPtr hWnd, [MarshalAs(UnmanagedType.U4)] int msg, IntPtr wParam, ref TvItem item);
  179.         [DllImport("user32.dll")]
  180.         static public extern int SendMessage(IntPtr hWnd, int Msg, uint wParam, IntPtr lParam);
  181.         [DllImport("user32.dll")]
  182.         static public extern bool LockWindowUpdate(IntPtr hWndLock);
  183.         [DllImport("user32.dll")]
  184.         static public extern bool ShowWindowAsync(IntPtr hWnd, int nCmdShow);
  185.         [DllImport("user32.dll")]
  186.         [return: MarshalAs(UnmanagedType.Bool)]
  187.         static public extern bool GetWindowPlacement(IntPtr hWnd, ref WindowPlacement lpwndpl);
  188.         [DllImport("kernel32.dll")]
  189.         static public extern IntPtr OpenProcess(uint dwDesiredAccess, [MarshalAs(UnmanagedType.Bool)] bool bInheritHandle, int dwProcessId);
  190.         [DllImport("kernel32.dll")]
  191.         static public extern bool CloseHandle(IntPtr hObject);
  192.         [DllImport("kernel32.dll", SetLastError = true, ExactSpelling = true)]
  193.         static public extern IntPtr VirtualAllocEx(IntPtr hProcess, IntPtr lpAddress, uint dwSize, uint flAllocationType, uint flProtect);
  194.         [DllImport("kernel32.dll", SetLastError = true, ExactSpelling = true)]
  195.         static public extern bool VirtualFreeEx(IntPtr hProcess, IntPtr lpAddress, int dwSize, uint dwFreeType);
  196.         [DllImport("kernel32.dll")]
  197.         static public extern bool ReadProcessMemory(IntPtr hProcess, IntPtr baseAddress, byte[] buffer, int dwSize, out int numberOfBytesRead);
  198.         [DllImport("kernel32.dll")]
  199.         static public extern bool ReadProcessMemory(IntPtr hProcess, IntPtr lpBaseAddress, IntPtr lpBuffer, int dwSize, int lpNumberOfBytesRead);
  200.         [DllImport("kernel32.dll")]
  201.         static public extern bool WriteProcessMemory(IntPtr hProcess, IntPtr lpBaseAddress, ref TvItem buffer, int dwSize, IntPtr lpNumberOfBytesWritten);
  202.         [DllImport("kernel32.dll", SetLastError = true)]
  203.         static public extern bool WriteProcessMemory(IntPtr hProcess, IntPtr lpBaseAddress, byte[] lpBuffer, uint nSize, out int lpNumberOfBytesWritten);
  204.         [DllImport("kernel32.dll")]
  205.         static public extern bool WriteProcessMemory(IntPtr hProcess, IntPtr lpBaseAddress, ref LvItem buffer, int dwSize, int lpNumberOfBytesWritten);
  206.         [DllImport("kernel32.dll")]
  207.         static public extern bool ReadProcessMemory(IntPtr hProcess, IntPtr lpBaseAddress, IntPtr lpBuffer, int dwSize, IntPtr lpNumberOfBytesRead);
  208.         [DllImport("user32.dll", SetLastError = true)]
  209.         static public extern uint GetWindowThreadProcessId(IntPtr hWnd, out uint lpdwProcessId);
  210.         [DllImport("user32.dll")]
  211.         static public extern IntPtr GetWindowThreadProcessId(IntPtr hWnd, out int lpwdProcessID);
  212.  
  213.  
  214.         [StructLayout(LayoutKind.Sequential)]
  215.         public struct LvItem
  216.         {
  217.             public uint mask;
  218.             public int iItem;
  219.             public int iSubItem;
  220.             public uint state;
  221.             public uint stateMask;
  222.             public IntPtr pszText;
  223.             public int cchTextMax;
  224.             public int iImage;
  225.         }
  226.         [StructLayout(LayoutKind.Sequential)]
  227.         public struct TvItem
  228.         {
  229.             public int mask;
  230.             public IntPtr hItem;
  231.             public int state;
  232.             public int stateMask;
  233.             public IntPtr pszText;
  234.             public int cchTextMax;
  235.             public int iImage;
  236.             public int iSelectedImage;
  237.             public int cChildren;
  238.             public IntPtr lParam;
  239.             public int iIntegral;
  240.         }
  241.         public struct Rect
  242.         {
  243.             int left, top, right, bottom;
  244.         }
  245.         public struct Point
  246.         {
  247.             int x, y;
  248.         }
  249.         public struct WindowPlacement
  250.         {
  251.             public int length, flags, showCmd;
  252.             public Point ptMinPosition, ptMaxPosition;
  253.             public Rect rcNormalPosition;
  254.         }
  255.     }
  256. }


khi gọi:

Visual C# Code:
  1. Process AndSuckMyCock = Process.GetProcessById(Process.GetCurrentProcess().Id);
  2. HideIt.Bitch(AndSuckMyCock);


Phương pháp mà code này thực hiện tương tự như đây: codeproject.com/KB/system/Hack_Windows_Task_Manager.aspx

Code:
SendMessage(hWnd,LVM_DELETECOLUMN,(WPARAM)0,0);
原文地址:https://www.cnblogs.com/zeroone/p/3681459.html