Что нового

_WinAPI_GetProcessFileName не всегда говорит где находится файл

tonycstech

Новичок
Сообщения
94
Репутация
3
Код:
$ProcessList = ProcessList() ;get total number of all processes and their names and PID's
        $NumberOfProcesses = $ProcessList[0][0]
        For $i = 1 To $NumberOfProcesses
            $Name = $ProcessList[$i][0]
            $PID = $ProcessList[$i][1]
            $Path = _WinAPI_GetProcessFileName($PID)
        Next

$Path почемуто пустой почти во всех найденых процессах.
Независимо от х86 или х64 запуска.
Чего делать ? Есть ли алтернатива ?
 

sngr

AutoIT Гуру
Сообщения
1,010
Репутация
408
Код:
$ProcessList = ProcessList()
$obj = ObjGet("WinMgmts:\\.\root\cimv2")
        $NumberOfProcesses = $ProcessList[0][0]
        For $i = 1 To $NumberOfProcesses
            $Name = $ProcessList[$i][0]
            $PID = $ProcessList[$i][1]
$que = $obj.get('Win32_Process.Handle="'&$pid&'"')
			ConsoleWrite( $que.ExecutablePath & @LF)
        Next
Exit
 

xXx

╚{■_■}╗
Меценат
Сообщения
248
Репутация
95
Код:
#include <Array.au3>
#include <WinAPIProc.au3>

Global $hToken, $aAdjust, $aProcessList, $Path
$hToken = _WinAPI_OpenProcessToken(BitOR($TOKEN_ADJUST_PRIVILEGES, $TOKEN_QUERY)) ; Открывает маркер доступа текущего процесса
_WinAPI_AdjustTokenPrivileges($hToken, $SE_DEBUG_NAME, $SE_PRIVILEGE_ENABLED, $aAdjust) ; Включает привилегии в указанном маркере доступа

$aProcessList = ProcessList()
For $i = 1 To $aProcessList[0][0]
    $Path = _WinAPI_GetProcessFileName($aProcessList[$i][1])
    If $Path Then $aProcessList[$i][0] = $Path
Next

_WinAPI_AdjustTokenPrivileges($hToken, $aAdjust, 0, $aAdjust) ; Отключает привилегии в указанном маркер доступа
If $hToken Then _WinAPI_CloseHandle($hToken)

_ArrayDisplay($aProcessList) ; <<<<<<<<<<<<<<<<<<<<<<<< П Р О В Е Р К А >>>>>>>>>>>>>>>>>>>>>>>>
 
Последнее редактирование:
Автор
T

tonycstech

Новичок
Сообщения
94
Репутация
3
Короче дело в том что нехватает превилегий или как ? Я под администратором.

Попробывал ваш метод и работает но не на все процессы хотя и на большенство.
Некоторые как smss.exe csrss.exe wininit.exe ничего не показывают хотя и начодятся в C:\Windows\System32

$obj = ObjGet("WinMgmts:\\.\root\cimv2") ничего не обЬясняет. Понятия не имею что это такое.

Да и почему в Help File нет упоминания об этой проблеме ? Могли бы хотяб написать о превилегиях и дать пример типа ваш.
Спасибо.
 
Последнее редактирование:

xXx

╚{■_■}╗
Меценат
Сообщения
248
Репутация
95
Такие процессы как:
System
Registry
smss.exe
csrss.exe
wininit.exe
services.exe
Memory Compression
avp.exe
SecurityHealthService.exe
SgrmBroker.exe
svchost.exe
csrss.exe
выше всех привилегий. Забудьте о них, да и не нужны они вам.
Вы ни чего с ними сделать не сможете и это не зря сделано так.
 
Автор
T

tonycstech

Новичок
Сообщения
94
Репутация
3
Они то мне и нужны.
Если я не вижу где они находятся то я смогу сопоставить их с процессами которые могут иметь такое же название то будут имет место нахождения.
Таком образом я смогу выявить вирусные процессы которые прячутся за системными именами.
Вирусные процессы всегда дадут знать откуда они а вов системные нет. Тут то я их "тут как тут" за горло.

Кстати, avp.exe это разве не антивирус ?да и причём не от микрософта ? Могу ошибатся, у меня отключено.

Мне важно знать почему в Help File нет упоминания о том что нужно особые превилегии для многих, даже стандартных процессов ?
Это очен важно было не упустить. Может вы там посоветуйте им добавить обьяснение для снедующего выпуска ?
 
Автор
T

tonycstech

Новичок
Сообщения
94
Репутация
3
Так бери процесс и проверяй $path, если нет - значит процесс системный, если $path есть - значит вирус маскируется под системный файл.
Именно так я и делаю.
ВАжно не это а то что документация на _WinAPI_GetProcessFileName($PID) ничего не говорит об превилегиях нужных для полноценной работы этой функции.
Меня бы тут не было если бы это описали в документации.
 

IMStrelcov

CTPEJIbLLOB
Сообщения
253
Репутация
64
Именно так я и делаю.
ВАжно не это а то что документация на _WinAPI_GetProcessFileName($PID) ничего не говорит об превилегиях нужных для полноценной работы этой функции.
Меня бы тут не было если бы это описали в документации.
В документации WinApi многое не говорится, так как сам MICROSOFT о многом умалчивает, я бы сказал даже большая часть функций заложеная в WinApi не документирована или же не раскрыта полностью для общественности.

Запустил ради интереса пример выше от XXX и у процесса mpc-hc64.exe (видео плеер) путь к файлу не определился, хотя это обычный процесс.
2020-03-29_074807.png

Вот функции для процессов, в них больше путей показывает, бери и разбирай как работает.
запусти файл - TestProcessListProperties.au3
2020-03-29_080318.png

И еще глупая это затея, до того как скрипт определит является ли процесс вредным - пройдет некоторое время, и этого достаточно чтобы натворить бед. А бед можно натворить даже запустив сценарий cmd с одной строкой кода и все. Для этого процессы и отлавливаются перед созданием с помощью драйверов - как это делают антивирусы и им подобные программы.
 

Вложения

  • ProcessFunctions.zip
    62.5 КБ · Просмотры: 17
Последнее редактирование:

xXx

╚{■_■}╗
Меценат
Сообщения
248
Репутация
95
Вот еще проще пример:
Код:
#RequireAdmin ; >>> Специально Для IMStrelcov <<<
#include <Array.au3>
#include <WinAPIProc.au3>
#include <ProcessConstants.au3>

Global $aProcessList, $sPath, $hProcess
$aProcessList = ProcessList()
For $i = 1 To $aProcessList[0][0]
    $hProcess = _WinAPI_OpenProcess($PROCESS_QUERY_LIMITED_INFORMATION, 0, $aProcessList[$i][1], True)
    If @error Then ContinueLoop
    $sPath = _WinAPI_GetModuleFileNameEx($hProcess)
    If Not @error Then $aProcessList[$i][0] = $sPath
    _WinAPI_CloseHandle($hProcess)
Next
_ArrayDisplay($aProcessList) ; <<<<<<<<<<<<<<<<<<<<<<<< П Р О В Е Р К А >>>>>>>>>>>>>>>>>>>>>>>>

... у процесса mpc-hc64.exe (видео плеер) путь к файлу не определился...
В примере выше первая строка специально для вас.
 
Последнее редактирование:

IMStrelcov

CTPEJIbLLOB
Сообщения
253
Репутация
64
В примере выше первая строка специально для вас.
Специально для XXX.
Ваш:
Код:
#RequireAdmin

и пример выше и пример еще выше ничего не изменил.
Не надо прям так пальцем тыкать, я не первый год на форуме.
 

polzovatelau

Новичок
Сообщения
15
Репутация
0
Специально для XXX.
Ваш:
Код:
#RequireAdmin

и пример выше и пример еще выше ничего не изменил.
Не надо прям так пальцем тыкать, я не первый год на форуме.

А где находится файл TestProcessListProperties.au3 ?
 
Верх