comment
IRC Chat
play_arrow
Este sitio utiliza cookies propias y de terceros. Si continúa navegando consideramos que acepta el uso de cookies. OK Más Información.

[Delphi] DH Process Killer 0.5

  • 0 Respuestas
  • 1994 Vistas

0 Usuarios y 1 Visitante están viendo este tema.

Desconectado BigBear

  • *
  • Underc0der
  • Mensajes: 543
  • Actividad:
    0%
  • Reputación 3
    • Ver Perfil
« en: Diciembre 10, 2016, 09:32:50 pm »
Un programa en Delphi para listar los procesos de Windows y darles muerte si quieren.

Se puede matar procesos por nombre,pid y por hash md5.

Una imagen :



El codigo :

Código: Delphi
  1. // Program : DH Process Killer
  2. // Version : 0.5
  3. // (C) Doddy Hackman 2016
  4.  
  5. unit ProcessKiller;
  6.  
  7. interface
  8.  
  9. uses
  10.   Winapi.Windows, Winapi.Messages, System.SysUtils, System.Variants,
  11.   System.Classes, Vcl.Graphics,
  12.   Vcl.Controls, Vcl.Forms, Vcl.Dialogs, Vcl.ExtCtrls, Vcl.StdCtrls,
  13.   Vcl.ComCtrls, tlhelp32, PsAPI, Vcl.ImgList, ShellApi, Vcl.Menus,
  14.   Vcl.Styles.Utils.ComCtrls, Vcl.Styles.Utils.Menus,
  15.   Vcl.Styles.Utils.SysStyleHook,
  16.   Vcl.Styles.Utils.SysControls, Vcl.Styles.Utils.Forms,
  17.   Vcl.Styles.Utils.StdCtrls, Vcl.Styles.Utils.ScreenTips, DH_Tools,
  18.   Vcl.Imaging.pngimage;
  19.  
  20. type
  21.   TFormHome = class(TForm)
  22.     imgLogo: TImage;
  23.     gbProcessFound: TGroupBox;
  24.     lvProcess: TListView;
  25.     status: TStatusBar;
  26.     pmOpciones: TPopupMenu;
  27.     RefreshList: TMenuItem;
  28.     K1: TMenuItem;
  29.     KillSelected: TMenuItem;
  30.     KillByPID: TMenuItem;
  31.     KillByName: TMenuItem;
  32.     KillByMD5: TMenuItem;
  33.     ilIconos: TImageList;
  34.     ilIconosProcesos: TImageList;
  35.     procedure FormCreate(Sender: TObject);
  36.     procedure RefreshListClick(Sender: TObject);
  37.     procedure KillSelectedClick(Sender: TObject);
  38.     procedure KillByPIDClick(Sender: TObject);
  39.     procedure KillByNameClick(Sender: TObject);
  40.     procedure KillByMD5Click(Sender: TObject);
  41.   private
  42.     { Private declarations }
  43.   public
  44.     { Public declarations }
  45.     procedure listar_procesos;
  46.     function kill_process(option: string; arg: string): bool;
  47.   end;
  48.  
  49. type
  50.   TParametros = record
  51.     Handle: Thandle;
  52.     pid_global: DWORD;
  53.   end;
  54.  
  55.   parametros_globales = ^TParametros;
  56.  
  57. var
  58.   FormHome: TFormHome;
  59.  
  60. implementation
  61.  
  62. {$R *.dfm}
  63. // Functions
  64.  
  65. function message_box(title, message_text, type_message: string): string;
  66. begin
  67.   if not(title = '') and not(message_text = '') and not(type_message = '') then
  68.   begin
  69.     try
  70.       begin
  71.         if (type_message = 'Information') then
  72.         begin
  73.           MessageBox(FormHome.Handle, PChar(message_text), PChar(title),
  74.             MB_ICONINFORMATION);
  75.         end
  76.         else if (type_message = 'Warning') then
  77.         begin
  78.           MessageBox(FormHome.Handle, PChar(message_text), PChar(title),
  79.             MB_ICONWARNING);
  80.         end
  81.         else if (type_message = 'Question') then
  82.         begin
  83.           MessageBox(FormHome.Handle, PChar(message_text), PChar(title),
  84.             MB_ICONQUESTION);
  85.         end
  86.         else if (type_message = 'Error') then
  87.         begin
  88.           MessageBox(FormHome.Handle, PChar(message_text), PChar(title),
  89.             MB_ICONERROR);
  90.         end
  91.         else
  92.         begin
  93.           MessageBox(FormHome.Handle, PChar(message_text), PChar(title),
  94.             MB_ICONINFORMATION);
  95.         end;
  96.         Result := '[+] MessageBox : OK';
  97.       end;
  98.     except
  99.       begin
  100.         Result := '[-] Error';
  101.       end;
  102.     end;
  103.   end
  104.   else
  105.   begin
  106.     Result := '[-] Error';
  107.   end;
  108. end;
  109.  
  110. // Get path of process
  111.  
  112. function get_path_by_pid(process_pid: integer): string;
  113. type
  114.   TQueryFullProcessImageName = function(hProcess: Thandle; dwFlags: DWORD;
  115.     lpExeName: PChar; nSize: PDWORD): bool; stdcall;
  116. var
  117.   handle_process: Thandle;
  118.   path_found: array [0 .. MAX_PATH - 1] of Char;
  119.   query: TQueryFullProcessImageName;
  120.   limit: Cardinal;
  121.   code: string;
  122. begin
  123.  
  124.   code := '';
  125.  
  126.   try
  127.     begin
  128.       handle_process := OpenProcess(PROCESS_QUERY_INFORMATION or
  129.         PROCESS_VM_READ, False, process_pid);
  130.       if GetModuleFileNameEX(handle_process, 0, path_found, MAX_PATH) <> 0 then
  131.       begin
  132.         code := path_found;
  133.       end
  134.       else if Win32MajorVersion >= 6 then
  135.       begin
  136.         limit := MAX_PATH;
  137.         ZeroMemory(@path_found, MAX_PATH);
  138.         @query := GetProcAddress(GetModuleHandle('kernel32'),
  139.           'QueryFullProcessImageNameW');
  140.         if query(handle_process, 0, path_found, @limit) then
  141.         begin
  142.           code := path_found;
  143.         end;
  144.       end
  145.       else
  146.       begin
  147.         code := '';
  148.       end;
  149.       CloseHandle(handle_process);
  150.     end;
  151.   except
  152.     begin
  153.       //
  154.     end;
  155.   end;
  156.  
  157.   if (code = '') then
  158.   begin
  159.     code := '--';
  160.   end;
  161.  
  162.   Result := code;
  163.  
  164. end;
  165.  
  166. // Functions to get window title
  167.  
  168. function EnumWindowsProc(handle_finder: Thandle; parametro: lParam)
  169.   : bool; stdcall;
  170. var
  171.   pid_found: integer;
  172. begin
  173.   Result := True;
  174.   GetWindowThreadProcessId(handle_finder, @pid_found);
  175.   if parametros_globales(parametro).pid_global = pid_found then
  176.   begin
  177.     parametros_globales(parametro).Handle := handle_finder;
  178.     Result := False;
  179.   end;
  180. end;
  181.  
  182. function get_window_by_pid(pid: integer): string;
  183. var
  184.   parametros: TParametros;
  185.   title: string;
  186.   open_handle: Thandle;
  187.  
  188. begin
  189.  
  190.   parametros.pid_global := pid;
  191.   EnumWindows(@EnumWindowsProc, lParam(@parametros));
  192.  
  193.   repeat
  194.  
  195.     open_handle := parametros.Handle;
  196.     parametros.Handle := GetParent(open_handle);
  197.  
  198.     title := '';
  199.     SetLength(title, 255);
  200.     SetLength(title, GetWindowText(open_handle, PChar(title), Length(title)));
  201.  
  202.     Result := title;
  203.  
  204.   until parametros.Handle = 0;
  205.  
  206. end;
  207.  
  208. procedure TFormHome.KillByMD5Click(Sender: TObject);
  209. var
  210.   argumento: string;
  211. begin
  212.   argumento := InputBox('DH Process Killer 0.5', 'MD5 : ', '');
  213.   if not(argumento = '') then
  214.   begin
  215.     if (kill_process('md5', argumento)) then
  216.     begin
  217.       message_box('DH Process Killer 0.5', 'Process Killed', 'Information');
  218.     end
  219.     else
  220.     begin
  221.       message_box('DH Process Killer 0.5', 'Error killing process', 'Error');
  222.     end;
  223.   end
  224.   else
  225.   begin
  226.     message_box('DH Process Killer 0.5', 'Write MD5', 'Warning');
  227.   end;
  228.   listar_procesos();
  229. end;
  230.  
  231. procedure TFormHome.KillByNameClick(Sender: TObject);
  232. var
  233.   argumento: string;
  234. begin
  235.   argumento := InputBox('DH Process Killer 0.5', 'Name : ', '');
  236.   if not(argumento = '') then
  237.   begin
  238.     if (kill_process('name', argumento)) then
  239.     begin
  240.       message_box('DH Process Killer 0.5', 'Process Killed', 'Information');
  241.     end
  242.     else
  243.     begin
  244.       message_box('DH Process Killer 0.5', 'Error killing process', 'Error');
  245.     end;
  246.   end
  247.   else
  248.   begin
  249.     message_box('DH Process Killer 0.5', 'Write Name', 'Warning');
  250.   end;
  251.   listar_procesos();
  252. end;
  253.  
  254. procedure TFormHome.KillByPIDClick(Sender: TObject);
  255. var
  256.   argumento: string;
  257. begin
  258.   argumento := InputBox('DH Process Killer', 'PID : ', '');
  259.   if not(argumento = '') then
  260.   begin
  261.     if (kill_process('pid', argumento)) then
  262.     begin
  263.       message_box('DH Process Killer 0.5', 'Process Killed', 'Information');
  264.     end
  265.     else
  266.     begin
  267.       message_box('DH Process Killer 0.5', 'Error killing process', 'Error');
  268.     end;
  269.   end
  270.   else
  271.   begin
  272.     message_box('DH Process Killer 0.5', 'Write PID', 'Warning');
  273.   end;
  274.   listar_procesos();
  275. end;
  276.  
  277. procedure TFormHome.KillSelectedClick(Sender: TObject);
  278. var
  279.   process_id: string;
  280. begin
  281.   if not(lvProcess.Itemindex = -1) then
  282.   begin
  283.     process_id := lvProcess.Selected.Caption;
  284.     if (kill_process('pid', process_id)) then
  285.     begin
  286.       message_box('DH Process Killer 0.5', 'Process Killed', 'Information');
  287.     end
  288.     else
  289.     begin
  290.       message_box('DH Process Killer 0.5', 'Error killing process', 'Error');
  291.     end;
  292.   end
  293.   else
  294.   begin
  295.     message_box('DH Process Killer 0.5', 'Select Process', 'Warning');
  296.   end;
  297.   listar_procesos();
  298. end;
  299.  
  300. function TFormHome.kill_process(option: string; arg: string): bool;
  301. var
  302.   tools: T_DH_Tools;
  303.   loop_run: bool;
  304.   Handle: Thandle;
  305.   process_load: TProcessEntry32;
  306.   resultado: bool;
  307.   check_ok: bool;
  308.   path: string;
  309.   md5_to_check: string;
  310. begin
  311.  
  312.   resultado := False;
  313.  
  314.   tools := T_DH_Tools.Create();
  315.  
  316.   try
  317.     begin
  318.       Handle := CreateToolhelp32Snapshot(TH32CS_SNAPPROCESS, 0);
  319.       process_load.dwSize := SizeOf(process_load);
  320.       loop_run := Process32First(Handle, process_load);
  321.  
  322.       while integer(loop_run) <> 0 do
  323.       begin
  324.  
  325.         if (option = 'pid') then
  326.         begin
  327.           if (process_load.th32ProcessID = StrToInt(arg)) then
  328.           begin
  329.             TerminateProcess(OpenProcess(PROCESS_TERMINATE, bool(0),
  330.               process_load.th32ProcessID), 0);
  331.             resultado := True;
  332.             check_ok := True;
  333.             break;
  334.           end;
  335.         end;
  336.  
  337.         if (option = 'name') then
  338.         begin
  339.           if (ExtractFileName(process_load.szExeFile) = arg) then
  340.           begin
  341.             TerminateProcess(OpenProcess(PROCESS_TERMINATE, bool(0),
  342.               process_load.th32ProcessID), 0);
  343.             resultado := True;
  344.             check_ok := True;
  345.             break;
  346.           end;
  347.         end;
  348.  
  349.         if (option = 'md5') then
  350.         begin
  351.           path := get_path_by_pid(process_load.th32ProcessID);
  352.           if (FileExists(path)) then
  353.           begin
  354.             md5_to_check := tools.get_file_md5(path);
  355.             if (md5_to_check = arg) then
  356.             begin
  357.               TerminateProcess(OpenProcess(PROCESS_TERMINATE, bool(0),
  358.                 process_load.th32ProcessID), 0);
  359.               resultado := True;
  360.               check_ok := True;
  361.               break;
  362.             end;
  363.           end
  364.         end;
  365.  
  366.         loop_run := Process32Next(Handle, process_load);
  367.       end;
  368.       if not(check_ok = True) then
  369.       begin
  370.         resultado := False;
  371.       end;
  372.       CloseHandle(Handle);
  373.     end;
  374.   except
  375.     begin
  376.       resultado := False;
  377.     end;
  378.   end;
  379.  
  380.   tools.Free;
  381.  
  382.   Result := resultado;
  383.  
  384. end;
  385.  
  386. //
  387.  
  388. procedure TFormHome.listar_procesos;
  389. var
  390.   handle_process: Thandle;
  391.   check_process: LongBool;
  392.   process_load: TProcessEntry32;
  393.   lista: TListItem;
  394.   path: string;
  395.   getdata: SHFILEINFO;
  396.   icono: TIcon;
  397.   cantidad: integer;
  398. var
  399.   Handle: Thandle;
  400.   title: string;
  401.   pid: integer;
  402. begin
  403.  
  404.   cantidad := 0;
  405.  
  406.   handle_process := CreateToolhelp32Snapshot(TH32CS_SNAPPROCESS, 0);
  407.   process_load.dwSize := SizeOf(process_load);
  408.   check_process := Process32First(handle_process, process_load);
  409.  
  410.   lvProcess.Items.Clear;
  411.  
  412.   while check_process do
  413.   begin
  414.  
  415.     Inc(cantidad);
  416.  
  417.     lista := lvProcess.Items.Add;
  418.     lista.Caption := IntToStr(process_load.th32ProcessID);
  419.     lista.SubItems.Add(process_load.szExeFile);
  420.  
  421.     path := get_path_by_pid(process_load.th32ProcessID);
  422.  
  423.     if (FileExists(path)) then
  424.     begin
  425.       SHGetFileInfo(PChar(path), 0, getdata, SizeOf(getdata),
  426.         SHGFI_ICON or SHGFI_SMALLICON);
  427.     end
  428.     else
  429.     begin
  430.       SHGetFileInfo(PChar('C:\Windows\System32\ftp.exe'), 0, getdata,
  431.         SizeOf(getdata), SHGFI_ICON or SHGFI_SMALLICON);
  432.     end;
  433.  
  434.     icono := TIcon.Create;
  435.  
  436.     icono.Handle := getdata.hIcon;
  437.     lista.ImageIndex := ilIconosProcesos.AddIcon(icono);
  438.  
  439.     lista.SubItems.Add(path);
  440.  
  441.     title := get_window_by_pid(process_load.th32ProcessID);
  442.  
  443.     if (title = '') then
  444.     begin
  445.       title := '--';
  446.     end;
  447.  
  448.     lista.SubItems.Add(title);
  449.  
  450.     DestroyIcon(getdata.hIcon);
  451.     icono.Free;
  452.  
  453.     check_process := Process32Next(handle_process, process_load);
  454.  
  455.   end;
  456.  
  457.   gbProcessFound.Caption := 'Process Found : ' + IntToStr(cantidad);
  458.  
  459. end;
  460.  
  461. procedure TFormHome.RefreshListClick(Sender: TObject);
  462. begin
  463.   listar_procesos();
  464. end;
  465.  
  466. procedure TFormHome.FormCreate(Sender: TObject);
  467. begin
  468.   listar_procesos();
  469. end;
  470.  
  471. end.
  472.  
  473. // The End ?
  474.  

Si quieren bajar el programa lo pueden hacer de aca :

No tienes permisos para ver links. Registrate o Entra con tu cuenta.

Eso seria todo.

 

¿Te gustó el post? COMPARTILO!



[Sintaxis general de Delphi] By: Geek Lord Venezuela [R00t] Team

Iniciado por ANTRAX

Respuestas: 0
Vistas: 1985
Último mensaje Febrero 24, 2010, 04:35:15 pm
por ANTRAX
Eliminar acentos y otros agregados de un caracter/cadena Delphi 2009

Iniciado por ANTRAX

Respuestas: 0
Vistas: 3131
Último mensaje Febrero 24, 2010, 04:57:14 pm
por ANTRAX
1er troyano en Delphi By: Geek Lord Venezuela [R00t] Team

Iniciado por ANTRAX

Respuestas: 0
Vistas: 3263
Último mensaje Febrero 24, 2010, 04:34:48 pm
por ANTRAX
[Delphi] Project Arsenal X 0.2 (Regalo de navidad)

Iniciado por BigBear

Respuestas: 2
Vistas: 2577
Último mensaje Diciembre 28, 2015, 10:27:44 am
por BigBear
[Delphi] Creacion de un Troyano de conexion inversa

Iniciado por BigBear

Respuestas: 4
Vistas: 3341
Último mensaje Mayo 05, 2017, 09:10:55 am
por _inicio_cerrarsesión