PDA

View Full Version : سوال: End Task با چک کردن Process Description



___mehdi.rato___
شنبه 25 اردیبهشت 1395, 18:56 عصر
سلام
سورسی که ضمیمه کردم میاد یه لیست از Process ها میسازه...
میخوام یه Timer بذارم که هر 30 ثانیه یک بار بیاد Description پروسس ها رو چک کنه ببینه اگر بعضی از برنامه ها باز بودن، اونارو End Task کنه...
قبلش می خواستم چیزی بنویسم که بیاد Process Name رو چک کنه اما متوجه شدم اگه Name یه برنامه رو تغییر بدم Process Name هم تغییر می کنه و همه می تونن برنامه رو دور بزنن.
حالا میخوام Description پروسس هارو چک کنم... یا اینکه اگه راه بهتری هست راهنمایی کنید لطفا...

(نمیخوام Caption فرم برنامه رو چک کنه و Alt+F4 بفرسته به برنامه، میخوام End Task کنم.)

meys34
یک شنبه 26 اردیبهشت 1395, 23:31 عصر
سلام

تا اونجایی که فهمیدم پروسس description نداره و از روی description فایل exe بدست میاد


'https://support.microsoft.com/en-us/kb/160042
'http://forums.codeguru.com/showthread.php?363731-finding-file-path-from-process-name


Option Explicit

Private Declare Function EnumProcesses Lib "psapi.dll" (ByRef lpidProcess As Long, ByVal cb As Long, ByRef cbNeeded As Long) As Long
Private Declare Function OpenProcess Lib "kernel32" (ByVal dwDesiredAccess As Long, ByVal bInheritHandle As Long, ByVal dwProcessId As Long) As Long
Private Declare Function CloseHandle Lib "kernel32" (ByVal hObject As Long) As Long
Private Declare Function EnumProcessModules Lib "psapi.dll" (ByVal hProcess As Long, ByRef lphModule As Long, ByVal cb As Long, ByRef cbNeeded As Long) As Long
Private Declare Function GetModuleFileNameExA Lib "psapi.dll" (ByVal hProcess As Long, ByVal hModule As Long, ByVal ModuleName As String, ByVal nSize As Long) As Long



Private Declare Function GetFileVersionInfoSize Lib "Version.dll" Alias "GetFileVersionInfoSizeA" (ByVal lptstrFilename As String, lpdwHandle As Long) As Long
Private Declare Function GetFileVersionInfo Lib "Version.dll" Alias "GetFileVersionInfoA" (ByVal lptstrFilename As String, ByVal dwHandle As Long, ByVal dwLen As Long, lpData As Any) As Long
Private Declare Sub MoveMemory Lib "kernel32" Alias "RtlMoveMemory" (dest As Any, ByVal Source As Long, ByVal Length As Long)
Private Declare Function lstrcpy Lib "kernel32" Alias "lstrcpyA" (ByVal lpString1 As String, ByVal lpString2 As Long) As Long
Private Declare Function VerQueryValue Lib "Version.dll" Alias "VerQueryValueA" (pBlock As Any, ByVal lpSubBlock As String, lplpBuffer As Long, puLen As Long) As Long


Private Sub Command1_Click()
getDescription List1
End Sub

Public Function getDescription(ByVal list As ListBox)
list.Clear

Dim cb As Long
Dim cbNeeded As Long
Dim NumElements As Long
Dim ProcessIDs() As Long
Dim cbNeeded2 As Long
Dim NumElements2 As Long
Dim Modules(1 To 200) As Long
Dim lRet As Long
Dim ModuleName As String
Dim nSize As Long
Dim hProcess As Long
Dim i As Long

'Get the array containing the process id's for each process object
cb = 8
cbNeeded = 96

Do While cb <= cbNeeded
cb = cb * 2
ReDim ProcessIDs(cb / 4) As Long
lRet = EnumProcesses(ProcessIDs(1), cb, cbNeeded)
Loop
NumElements = cbNeeded / 4



Const PROCESS_QUERY_INFORMATION = 1024
Const PROCESS_VM_READ = 16
Const MAX_PATH = 260

For i = 1 To NumElements
'Get a handle to the Process
hProcess = OpenProcess(PROCESS_QUERY_INFORMATION Or PROCESS_VM_READ, 0, ProcessIDs(i))
'Got a Process handle
If hProcess <> 0 Then
'Get an array of the module handles for the specified process
lRet = EnumProcessModules(hProcess, Modules(1), 200, cbNeeded2)
'If the Module Array is retrieved, Get the ModuleFileName
If lRet <> 0 Then
ModuleName = Space$(MAX_PATH)
nSize = 500
lRet = GetModuleFileNameExA(hProcess, Modules(1), ModuleName, nSize)
ModuleName = Left(ModuleName, lRet)
list.AddItem DescriptionFromFile(ModuleName)
End If
End If
'Close the handle to the process
lRet = CloseHandle(hProcess)
Next
End Function

Public Function DescriptionFromFile(ByVal filePath As String) As String
Dim lBufferLen As Long, lDummy As Long

lBufferLen = GetFileVersionInfoSize(filePath, lDummy)
If lBufferLen < 1 Then
Exit Function
End If

Dim sBuffer() As Byte
ReDim sBuffer(lBufferLen)

Dim rc As Long
rc = GetFileVersionInfo(filePath, 0&, lBufferLen, sBuffer(0))
If rc = 0 Then
Exit Function
End If

Dim lVerPointer As Long
rc = VerQueryValue(sBuffer(0), "\VarFileInfo\Translation", lVerPointer, lBufferLen)
If rc = 0 Then
Exit Function
End If

'lVerPointer is a pointer to four 4 bytes of Hex number,
'first two bytes are language id, and last two bytes are code
'page. However, Lang_Charset_String needs a string of
'4 hex digits, the first two characters correspond to the
'language id and last two the last two character correspond
'to the code page id.

Dim bytebuffer(255) As Byte

MoveMemory bytebuffer(0), lVerPointer, lBufferLen

Dim Lang_Charset_String As String
Dim HexNumber As Long

HexNumber = bytebuffer(2) + bytebuffer(3) * &H100 + bytebuffer(0) * &H10000 + bytebuffer(1) * &H1000000
Lang_Charset_String = Hex(HexNumber)

Do While Len(Lang_Charset_String) < 8
Lang_Charset_String = "0" & Lang_Charset_String
Loop

Dim strTemp As String

strTemp = "\StringFileInfo\" & Lang_Charset_String & "\FileDescription"
rc = VerQueryValue(sBuffer(0), strTemp, lVerPointer, lBufferLen)
If rc = 0 Then
Exit Function
End If

Dim Buffer As String
Buffer = String(255, 0)
lstrcpy Buffer, lVerPointer

Buffer = Mid$(Buffer, 1, InStr(Buffer, Chr(0)) - 1)

DescriptionFromFile = Buffer

End Function

___mehdi.rato___
دوشنبه 27 اردیبهشت 1395, 15:10 عصر
این کد میاد مسیر فایل رو پیدا میکنه و File Description رو در میاره...
من Process Description رو میخواستم...

برنامه هایی هستند که File Description آنها خالیه و Process Description توضیحات برنامه...

meys34
سه شنبه 28 اردیبهشت 1395, 13:40 عصر
سلام

دوباره گشتم ولی چیزی پیدا نکردم...

چه برنامه ای دارید که File Description نداره ولی Process Description داره... اگر ممکنه آپلود کنید...

Felony
سه شنبه 28 اردیبهشت 1395, 13:49 عصر
نمیدونم دقیقا برای چه کاری به همچین چیزی نیاز دارید ولی اگر بحث امنیتی رو وسط بکشیم و قرار باشه یه چیز درست درمون نوشته بشه باید از فایل مورد نظر singature تهیه بشه و تو لیست پروسه ها این سیگنچر بررسی بشه .

امضا نباید محدود به Description یا نام فایل یا ... باشه - راه درست استفاده از پارامترهای مختلف برای تهیه امضا هست که میتونید در مقالات مربوط به آنتی ویروس ها و کشت بدافزار ها و ... در موردشون اطلاعات کسب کنید .

___mehdi.rato___
سه شنبه 28 اردیبهشت 1395, 13:56 عصر
سلام.
اشتباه کردم من! به یه چیزی دقت نکردم...
برنامه هایی که Description آن ها خالی باشه تو Task Manager به جای Description همون نام App رو نشون میده...

مرسی از راهنمایی هاتون...

___mehdi.rato___
سه شنبه 28 اردیبهشت 1395, 15:23 عصر
نمیدونم دقیقا برای چه کاری به همچین چیزی نیاز دارید ولی اگر بحث امنیتی رو وسط بکشیم و قرار باشه یه چیز درست درمون نوشته بشه باید از فایل مورد نظر singature تهیه بشه و تو لیست پروسه ها این سیگنچر بررسی بشه .

امضا نباید محدود به Description یا نام فایل یا ... باشه - راه درست استفاده از پارامترهای مختلف برای تهیه امضا هست که میتونید در مقالات مربوط به آنتی ویروس ها و کشت بدافزار ها و ... در موردشون اطلاعات کسب کنید .

میتونید بیشتر راهنمایی کنید و نمونه سورس بزارید...
میخوام برنامه ای بنویسم که رو یه سری برنامه هایی که میزارم تو لیستش حساس باشه و اجازه نده باز شن...
آنتی چیت برای یک بازی آنلاین میخوام بنویسم...
میخوام وقتی برنامم بازه هیچ ترینر و لودری اجرا نشه (یه بد لیست دارم که اطلاعات همه ترینر ها و لودر ها داخلش هست.)
یه سری رو از Title فرم End میکنم... یه سری رو از تسک منیجر... یه سری رو از Description...
با vb6 نتوستم کاری کنم که یه دیوار دور بازی بکشه که نذاره چیزی متصل شه به بازی... (تغییر Title, Process Name,...)
کسی یه راه مطمئن و خوب برای اینکه یه سری برنامه ها اجرا نشن نداره؟