Сейчас на форуме: Lohmaty (+6 невидимых)

 eXeL@B —› Вопросы новичков —› Выполнение действия при появлении процесса
Посл.ответ Сообщение

Ранг: 4.6 (гость)
Активность: 0.040
Статус: Участник

Создано: 01 сентября 2018 20:09
· Личное сообщение · #1

Прошу помощи по коду:
Code:
  1. #include <iostream>
  2. #include <cstring>
  3. #include <windows.h>
  4. #include <tlhelp32.h>
  5.  
  6. int proccess_is_exist(char *name)
  7. {
  8.          PROCESSENTRY32 pe32;
  9.          HANDLE hProcessSnap = CreateToolhelp32Snapshot(TH32CS_SNAPPROCESS, 0);
  10.          if (hProcessSnap == INVALID_HANDLE_VALUE)
  11.                  return -1;
  12.          pe32.dwSize = sizeof(PROCESSENTRY32);
  13.          Process32First(hProcessSnap, &pe32);
  14.          do
  15.          {
  16.                  if (!strcmp(name, pe32.szExeFile))
  17.                  {
  18.                         CloseHandle(hProcessSnap);
  19.                         return 1;
  20.                  }
  21.          } while (Process32Next(hProcessSnap, &pe32));
  22.          CloseHandle(hProcessSnap);
  23.          return 0;
  24. }
  25.  
  26. int main(int argc, char *argv[])
  27. {
  28.          setlocale(LC_ALL, "Russian");
  29.          char proc_name[] = "notepad.exe";
  30.         while (true)
  31.          {
  32.                  if (proccess_is_exist(proc_name))
  33.                  WinExec("C:\1.exe", SW_SHOWMINNOACTIVE);
  34.                  Sleep(1000);
  35.          }
  36.          return 0;
  37. }
- Здесь при обнаружении процесса notepad.exe запускается 1.exe многократно. Как сделать, чтобы происходило обнаружение нового процесса с интервалом ~1 сек, и при обнаружении, запускался 1.exe однократно? Делал убийство этой программы из 1.exe, но это не спасает, т.к. при обнаружении нового параллельно запущенного notepad.exe также должен быть произведен однократный запуск 1.exe. Т.Е. как сделать чтобы отслеживалось появление нового процесса *.exe происходило однократное срабатывание действия?




Ранг: 271.2 (наставник), 331thx
Активность: 0.321.49
Статус: Участник

Создано: 01 сентября 2018 20:14 · Поправил: f13nd
· Личное сообщение · #2

Заполняй массив pid(explorer.exe) - true/false, что он обработан, передавай его функции и пропускай уже обработанные. Ну и pid в аргументы 1.exe, чтоб он не растерялся что ему делать.

-----
2 оттенка серого




Ранг: 4.6 (гость)
Активность: 0.040
Статус: Участник

Создано: 01 сентября 2018 20:16
· Личное сообщение · #3

f13nd пишет:
Заполняй массив pid(explorer.exe) - true/false, что он обработан, передавай его функции и пропускай уже обработанные.
Вы не могли бы показать на примере?




Ранг: 337.5 (мудрец), 348thx
Активность: 2.112.42
Статус: Участник

Создано: 01 сентября 2018 20:27 · Поправил: difexacaw
· Личное сообщение · #4

inkermann

> как сделать чтобы отслеживалось появление нового процесса

Стандартные функции ждут сигнализацию обьекта, например завершение потока/процесса. Выполнить же обратное действие штатным путём не ясно как, осевой апи не предназначен для написания малвари, что бы отслеживать процессы. Есть косвенные способы - к примеру можно загружаться через гуй как фильтры. Можно запускаться как отладчик, но для заранее определённых процессов.

Это не корректно поставленная задача, зачем запускать есчо одно апп!?

-----
vx





Ранг: 271.2 (наставник), 331thx
Активность: 0.321.49
Статус: Участник

Создано: 01 сентября 2018 20:31 · Поправил: f13nd
· Личное сообщение · #5

Вы не могли бы показать на примере?
Code:
  1. stdcall proccess_is_exist,szProcessFilename,addr pbinHandledArray,[nHandledArrayMaxIndex]
  2. test ecx,ecx
  3. .if ~ZERO?
  4.          mov [nHandledArrayMaxIndex],ecx
  5.          ;запуск "1.exe %d",eax
  6. .endif
  7.  
  8. proc proccess_is_exist pszProcessFilename,pbinHandledArray,nHandledArrayMaxIndex
  9.          locals
  10.                  binProcessInfo  PROCESSENTRY32
  11.          endl
  12.          invoke CreateToolhelp32Snapshot,TH32CS_SNAPPROCESS,0
  13.          mov [hProcessSnapshot],eax
  14.          mov [binProcessInfo.dwSize],sizeof.PROCESSENTRY32
  15.          invoke Process32First,[hProcessSnapshot],addr binProcessInfo
  16.          .next:
  17.          .if eax = TRUE
  18.                  lea ecx,[binModuleInfo.szModule]
  19.                  invoke lstrcmpiA,addr binProcessInfo.szExeFile],[pszProcessFilename]
  20.                  test eax,eax
  21.                  .if ZERO?
  22.                         mov eax,[binProcessInfo.th32ProcessID]
  23.                         xor ecx,ecx
  24.                         mov edx,[pbinHandledArray]
  25.                         @@:
  26.                         .if ecx<[nHandledArrayMaxIndex]
  27.                               .if eax <> [edx + ecx*4]
  28.                                    inc ecx
  29.                                    jmp @B
  30.                               .endif
  31.                         .endif
  32.                         .if ecx=[nHandledArrayMaxIndex]
  33.                               mov DWORD[edx + ecx*4],eax
  34.                               inc ecx
  35.                               jmp @F
  36.                         .endif
  37.                  .endif
  38.                  invoke Process32Next,[hProcessSnapshot],addr binProcessInfo
  39.                  jmp .next
  40.          .else
  41.                  xor ecx,ecx
  42.          .endif
  43.          @@:
  44.          ret
  45. endp


-----
2 оттенка серого





Ранг: 337.5 (мудрец), 348thx
Активность: 2.112.42
Статус: Участник

Создано: 01 сентября 2018 20:38
· Личное сообщение · #6

f13nd

invoke lstrcmpiA,addr binProcessInfo.szExeFile]

-----
vx





Ранг: 271.2 (наставник), 331thx
Активность: 0.321.49
Статус: Участник

Создано: 01 сентября 2018 20:40
· Личное сообщение · #7

difexacaw
Я методом Кашпировского, без отладки и даже компиляции набросал. Просто идея, вряд ли он этот кусок использует.

-----
2 оттенка серого




Ранг: 4.6 (гость)
Активность: 0.040
Статус: Участник

Создано: 01 сентября 2018 20:43
· Личное сообщение · #8

f13nd, спасибо! Сейчас буду разбираться...
difexacaw, Ну там возможно не exe, а батник будет(чтобы в зависимости от задачи с разными настройками использовать.) Пока нужно на 20 сек. системное время дергать...

Добавлено спустя 2 минуты
Конечно, тяжеловато, Я только азы познаю...




Ранг: 337.5 (мудрец), 348thx
Активность: 2.112.42
Статус: Участник

Создано: 01 сентября 2018 20:49 · Поправил: difexacaw
· Личное сообщение · #9

inkermann

Не нужны вам пакетные файлы. Забудь про это. Спалит тебя авер, будешь гореть как ёлка.

-----
vx


| Сообщение посчитали полезным: Crawler

Ранг: 4.6 (гость)
Активность: 0.040
Статус: Участник

Создано: 01 сентября 2018 21:06
· Личное сообщение · #10

Да я пока для экспериментов, потом все в один запихну.




Ранг: 337.5 (мудрец), 348thx
Активность: 2.112.42
Статус: Участник

Создано: 01 сентября 2018 21:11
· Личное сообщение · #11

inkermann

На батниках тесты нельзя выполнить на ав сканерах. В любом случае это всё не правильно. Так не делается.

-----
vx




Ранг: 173.8 (ветеран), 208thx
Активность: 0.120.36
Статус: Участник

Создано: 01 сентября 2018 22:00
· Личное сообщение · #12

Зачем удалять гланды через автогеном?
Есть же IFEO. Можно легко и просто запускать свою программу вместо любой заранее заданной. Нет заморочек с правами, не нужно постоянно дергать список процессов, а поскольку срабатывать будет при каждом старте нового процесса, не будет путанницы с многократным запуском целевого софта.
И где топикстартер писал про виксы я тоже чот не увидел, Инде как всегда на своей волне

| Сообщение посчитали полезным: zds


Ранг: 271.2 (наставник), 331thx
Активность: 0.321.49
Статус: Участник

Создано: 01 сентября 2018 22:05 · Поправил: f13nd
· Личное сообщение · #13

VOLKOFF пишет:
Есть же IFEO.

Одну малварную технику вместо другой ага Че ifeo, тупо explorer.exe заменить и готово.

-----
2 оттенка серого





Ранг: 216.9 (наставник), 85thx
Активность: 0.310.15
Статус: Участник
X-Literator

Создано: 01 сентября 2018 22:07
· Личное сообщение · #14

inkermann

Мьютексы. Можно создавать мьютекс, который видят другие процессы. Так проверяется, запущен ты один раз или несколько.

Можно в запускаемом EXE открывать пайп, если уже открыт - опять же, не запускать процесс в очередной раз.

Добавлено спустя 15 минут
f13nd учитывая, что сейчас новый зеродей появился, это не такое уж и безумие - заменить что-нибудь. Это я про эксплоит от SandboxEscaper. Все слышали о таком?

Короче, там пздц, можно через баг в планировщике повышать права от гостевых до системных перезаписью DACL хардлинка на любой файл, доступный на чтение. Соответственно, становится возможным его перезаписать.

В примере кода там перезаписывается printconfig.dll, потом запускается задание печати, и запускается через пэйлоад любая программа с системными правами.

-----
Харе курить веники и нюхать клей, к вам едет из Америки бог Шива, и он еврей.


| Сообщение посчитали полезным: inkermann

Ранг: 173.8 (ветеран), 208thx
Активность: 0.120.36
Статус: Участник

Создано: 01 сентября 2018 22:32 · Поправил: VOLKOFF
· Личное сообщение · #15

f13nd пишет:
Одну малварную технику вместо другой ага

Это стандартный легальный системный механизм, который юзается достаточно часто, втч Process Explorer, Process Hacker, редакторами, альт консолями итп. Инде не буксуй, читай маны

Для автора (если он не умолчал о важных нюансах) это самый простой и надежный путь, идеально для любых тестов,- добавляешь одну запись в реестр и получаешь автоматический перехват запуска нужных процессов с вызовом своего кода. По сути это легальный хук CreateProcess. Не думаю, что найдется способ решить данную задачу эффективнее.

| Сообщение посчитали полезным: inkermann


Ранг: 337.5 (мудрец), 348thx
Активность: 2.112.42
Статус: Участник

Создано: 01 сентября 2018 22:40
· Личное сообщение · #16

VOLKOFF

Так не в техниках дело, если вы не поняли задачу тс

-----
vx





Ранг: 271.2 (наставник), 331thx
Активность: 0.321.49
Статус: Участник

Создано: 02 сентября 2018 02:42 · Поправил: f13nd
· Личное сообщение · #17

Более правильный вариант использовать эвенты/колбеки, чтоб не было лага. Это можно сделать через эвенты WMI --> Link <-- или грязненьким способом через SetWindowsHookEx --> Link <--. Грязненький потому что отслеживать можно создание окна, а не процесса, но для explorer.exe это почти одно и то же. WMI сама по себе довольно тупая и глючная подсистема, я бы наверное выбрал второй вариант.

-----
2 оттенка серого


| Сообщение посчитали полезным: inkermann

Ранг: 4.6 (гость)
Активность: 0.040
Статус: Участник

Создано: 02 сентября 2018 21:27 · Поправил: inkermann
· Личное сообщение · #18

Решил пойти по другому пути и заблудился в трех соснах:
Code:
  1. #include "windows.h"
  2. #include "iostream"
  3. using namespace std;
  4.  
  5. int main(int argc, char *argv[])
  6. {
  7.          for (int i = 0; i < argc; i++) {
  8.                   //Выводим список аргументов в цикле
  9.                  cout << "Argument " << i << " : " << argv[i] << endl;
  10.          
  11.  
  12.  
  13. -----------------------------------------------------------------------------------
  14.  
  15.  
  16.  
  17.     fi = ??????????
  18.          
  19.          STARTUPINFO cif;
  20.          ZeroMemory(&cif, sizeof(STARTUPINFO));
  21.          PROCESS_INFORMATION pi;
  22.          LPTSTR fi;
  23.          if (CreateProcess("C:\game.exe", fi,
  24.                  NULL, NULL, FALSE, NULL, NULL, NULL, &cif, &pi) == TRUE)
  25.                  WinExec("C:\1.cmd", SW_SHOWMINNOACTIVE);
  26.          {
  27.                  cout << "process" << endl;
  28.                  cout << "handle " << pi.hProcess << endl;
  29.                  Sleep(1000);
  30.          }
  31. }

Не получается нормально связать верхнюю часть с нижней ... Нужно, чтобы командная строка данного л..
из неизвестно какого кол-ва аргументов нормально передавалась game.exe. Т.Е. fi присвоить правильное значение, если сработает.. Что не пробовал - ошибки лезут.



Ранг: 173.8 (ветеран), 208thx
Активность: 0.120.36
Статус: Участник

Создано: 02 сентября 2018 22:22
· Личное сообщение · #19

inkermann пишет:
Что не пробовал - ошибки лезут

А маны CreateProcess читать не пробовал?
Для простоты жизни на таком уровне кодинга однострочник с GetCommandLine покатит.

| Сообщение посчитали полезным: ajax


Ранг: 2014.5 (!!!!), 1278thx
Активность: 1.340.25
Статус: Модератор
retired

Создано: 02 сентября 2018 22:40
· Личное сообщение · #20

Размер в структуре STARTUPINFO укажи.

| Сообщение посчитали полезным: inkermann

Ранг: 4.6 (гость)
Активность: 0.040
Статус: Участник

Создано: 03 сентября 2018 01:15
· Личное сообщение · #21

Как только не извращался:
Code:
  1. #include <iostream>
  2. #include <windows.h>
  3. using namespace std;
  4.  
  5. int main(int argc, char *argv[])
  6.  
  7. {
  8.          for (int i = 1; i < argc; i++) {
  9.                  char cmdline;
  10.                  cmdline = (cout <<" "<< argv[i]);
  11.  
  12.  
  13.                  {
  14.                         char cmdline(argv);
  15.                         if (CreateProcess("1.exe", &cmdline, NULL, NULL, FALSE, NULL, NULL, NULL, NULL, NULL))
  16.                  
  17.          Sleep(1000); }
  18. }





Ранг: 337.6 (мудрец), 224thx
Активность: 0.210.1
Статус: Участник
born to be evil

Создано: 03 сентября 2018 08:02 · Поправил: ajax
· Личное сообщение · #22

inkermann
--> Link <--
как уже VOLKOFF написал, GetCommandLine с минимумом движений покатит для параметров

-----
От многой мудрости много скорби, и умножающий знание умножает печаль


| Сообщение посчитали полезным: inkermann


Ранг: 568.2 (!), 464thx
Активность: 0.550.57
Статус: Участник
оптимист

Создано: 03 сентября 2018 09:10
· Личное сообщение · #23

Получай PID процесса ,в пеши в массив и чекай его ......

-----
Чтобы правильно задать вопрос, нужно знать большую часть ответа. Р.Шекли.


| Сообщение посчитали полезным: Crawler, inkermann

Ранг: 4.6 (гость)
Активность: 0.040
Статус: Участник

Создано: 03 сентября 2018 11:22 · Поправил: inkermann
· Личное сообщение · #24

ajax пишет:
GetCommandLine
Понятно. но интересно было бы именно с CreateProcess, т.к. остальные возможности, тоже понадобятся... То, что выше, я только для примера привел, чтобы носом ткнули , как &cmdline присвоить входное значение.



Ранг: 173.8 (ветеран), 208thx
Активность: 0.120.36
Статус: Участник

Создано: 03 сентября 2018 15:01
· Личное сообщение · #25

inkermann пишет:
GetCommandLine Понятно. но интересно было бы именно с CreateProcess

Они не взаимоисключающие, если че

inkermann пишет:
остальные возможности

страшно подумать, что там в "подводной части айсберга"



Ранг: 4.6 (гость)
Активность: 0.040
Статус: Участник

Создано: 03 сентября 2018 19:36 · Поправил: inkermann
· Личное сообщение · #26

VOLKOFF пишет:
страшно подумать, что там в "подводной части айсберга"



Добавлено спустя 3 часа 40 минут
Вот так проходит 1 аргумент командной строки, а нужно, чтобы все. Подправьте пожалуйста мой код:
Code:
  1. #include <iostream>
  2.  
  3. using namespace std;
  4. int main(int argc,      // Number of strings in array argv
  5.          char *argv[],   // Array of command-line argument strings
  6.          char *envp[])  // Array of environment variable strings
  7. {
  8.          int count;
  9.  
  10.          // Display each command-line argument.
  11.          cout << "\nCommand-line arguments:\n";
  12.          for (count = 0; count < argc; count++)
  13.                  cout << " argv[" << count << "] "
  14.                  << argv[count] << "\n";
  15.  
  16.          if ((UINT)ShellExecute(
  17.                  NULL,
  18.                  "open",
  19.                  "C:\App.exe",
  20.                  argv[1],
  21.                  NULL,
  22.                  SW_SHOWNORMAL) <= 32) {
  23.                  // обработка ошибок
  24.          }
  25. }




Ранг: 4.6 (гость)
Активность: 0.040
Статус: Участник

Создано: 04 сентября 2018 20:24 · Поправил: inkermann
· Личное сообщение · #27

Конечно устроил бы и предложенный вариант (LPTSTR WINAPI GetCommandLine(void);), но не могу его связать ни с shell execute ни с create proces. на все попытки ругается компилятор (vs17)... Если не затруднит, покажите пожалуйста на примере как. (Только чтобы длинные аргументы от 1 до 5 с путями, проходили, как есть дочернему процессу. Остальное сам приделаю. Уже не пойму толи библиотеки не те , толи глюки.)




Ранг: 271.2 (наставник), 331thx
Активность: 0.321.49
Статус: Участник

Создано: 05 сентября 2018 00:30 · Поправил: f13nd
· Личное сообщение · #28

Возможно дело в двойных кавычках. Вообще на голом апи можно аргументы передавать и забирать, чтоб студия вместо тебя не думала.

Code:
  1. invoke memset,addr binSui,0,sizeof.STARTUPINFO
  2. add esp,3*4
  3. mov [binSui.cb],sizeof.STARTUPINFO
  4. invoke CreateProcessW,0,addr szuUnzipCmd,0,0,0,0,0,0,addr binSui,addr binPri

Code:
  1. invoke GetCommandLineW
  2. invoke CommandLineToArgvW,eax,addr nArgs
  3. mov [pArgs],eax
  4. mov [nCurrentArg],1
  5. @@:
  6. mov eax,[nCurrentArg]
  7. .if eax < [nArgs]
  8.          lea eax,[eax*4]
  9.          add eax,[pArgs]
  10.          invoke lstrcpyW,addr szuArgument,DWORD[eax]
  11.          ...
  12.          inc [nCurrentArg]
  13.          jmp @B
  14. .endif


-----
2 оттенка серого


| Сообщение посчитали полезным: inkermann


Ранг: 605.2 (!), 341thx
Активность: 0.470.25
Статус: Модератор
Research & Development

Создано: 05 сентября 2018 08:47
· Личное сообщение · #29

Глянь сорсы плагина DbgChild - Debug Child Process Tool:
--> https://github.com/David-Reguera-Garcia-Dreg/DbgChild <--

Фичи:
Hook process creation for x86 or x64 child processes
Patching and unpatching of NTDLL process creation for x86 and x64 child processes
Process watcher for auto launching of new x64dbg instance when child process detected
Modify the suspend (pre) and resume (post) logic to adapt to your own requirements

-----
EnJoy!


| Сообщение посчитали полезным: inkermann

Ранг: 4.6 (гость)
Активность: 0.040
Статус: Участник

Создано: 08 сентября 2018 12:49 · Поправил: inkermann
· Личное сообщение · #30

f13nd пишет:
Возможно дело в двойных кавычках.
Да! Именно! В составе аргумента они передаются, а powershell их сжирает. Экранировать же достаточно проблематично, особенно если кавычка в середине аргумента. Помимо того режется еще раньше, при разборе argv.


 eXeL@B —› Вопросы новичков —› Выполнение действия при появлении процесса
:: Ваш ответ
Жирный  Курсив  Подчеркнутый  Перечеркнутый  {mpf5}  Код  Вставить ссылку 
:s1: :s2: :s3: :s4: :s5: :s6: :s7: :s8: :s9: :s10: :s11: :s12: :s13: :s14: :s15: :s16:


Максимальный размер аттача: 500KB.
Ваш логин: german1505 » Выход » ЛС
   Для печати Для печати