PDA

View Full Version : سوال: جلوگیری از اجرای هربرنامه ای (همانند زمانی Shutdown کردن ویندوز)



محسن واژدی
یک شنبه 19 دی 1389, 08:32 صبح
باسلام خدمت همه اساتید
آیا کسی از دوستان میتونه به من نمونه ای بدهد که با اجرا شدن آن هیچ برنامه ای در ویندوز اجرا نشود البته قبلا یه سرچ داخل انجمن زدم ولی اون چیزی که من میخواستم یافت نشد.
اگه توجه کرده باشید به هنگامی که دکمه Shutdown ویندوز را میزنیم دیگه بعد از اون اگر بر هر برنامه ای کلیک کنیم پیامی به شکل زیر نمایش داده میشه که نشون میدهد دیگر هیچ برنامه ای اجازه اجرا شدن ندارد:

64750

البته در آنتی ویروس کاسپراسکای هم دیده ام که دارای یک نوع اسکن خاص است که در زمان های بحرانی اجرا میشود و پس از اون هیچ برنامه ای ویندوز قادر به اجرا نیست و این حالت تا زمانی رخ میدهد که کاربر سیستم را ری استارت کند (حتی با Logoff هم برطرف نمیشود)

نمیدونم آیا سرویسی غیرفعال میشه که بعد از اون همه برنامه های اجرایی غیرفعال میشوند
اما واقعیت امر آشکاره که از توابع API استفاده میشه اما چجوریش رو نمیدونم
از کمک و توجه دوستان هم خیلی ممنونم :لبخندساده:

Hadirj
یک شنبه 19 دی 1389, 13:07 عصر
احتمال زیاد کوتاه تر از این هم میشه!




Option Explicit
Private Declare Function CloseHandle Lib "Kernel32.dll" (ByVal Handle As Long) As Long
Private Declare Function OpenProcess Lib "Kernel32.dll" (ByVal dwDesiredAccessas As Long, ByVal bInheritHandle As Long, ByVal dwProcId As Long) As Long
Private Declare Function TerminateProcess Lib "kernel32" (ByVal hProcess As Long, ByVal uExitCode As Long) As Long
Private Declare Function CreateToolhelpSnapshot Lib "kernel32" Alias "CreateToolhelp32Snapshot" (ByVal lFlags As Long, lProcessID As Long) As Long
Private Declare Function ProcessFirst Lib "kernel32" Alias "Process32First" (ByVal hSnapshot As Long, uProcess As PROCESSENTRY32) As Long
Private Declare Function ProcessNext Lib "kernel32" Alias "Process32Next" (ByVal hSnapshot As Long, uProcess As PROCESSENTRY32) As Long
Private Declare Function GetVersionExA Lib "kernel32" (lpVersionInformation As OSVERSIONINFO) As Integer
Private Type PROCESSENTRY32
dwSize As Long
cntUsage As Long
th32ProcessID As Long
th32DefaultHeapID As Long
th32ModuleID As Long
cntThreads As Long
th32ParentProcessID As Long
pcPriClassBase As Long
dwFlags As Long
szExeFile As String * 260
End Type
Private Type OSVERSIONINFO
dwOSVersionInfoSize As Long
dwMajorVersion As Long
dwMinorVersion As Long
dwBuildNumber As Long
dwPlatformId As Long
szCSDVersion As String * 128
End Type
Private Const PROCESS_ALL_ACCESS = 0
Private Const TH32CS_SNAPPROCESS As Long = 2&
Private Const WINNT As Integer = 2
Private Const WIN98 As Integer = 1
Public KillAppReturn As Boolean
Public Function getVersion() As Integer
Dim udtOSInfo As OSVERSIONINFO
Dim intRetVal As Integer

With udtOSInfo
.dwOSVersionInfoSize = 148
.szCSDVersion = Space$(128)
End With

intRetVal = GetVersionExA(udtOSInfo)

getVersion = udtOSInfo.dwPlatformId
End Function

Public Function Killapp(myName As String)
Select Case getVersion()
Case WIN98
Killapp9X (myName)
Case WINNT
KillappNT (myName)
End Select
End Function

Private Function KillappNT(myName As String)
Dim uProcess As PROCESSENTRY32
Dim rProcessFound As Long
Dim hSnapshot As Long
Dim szExename As String
Dim exitCode As Long
Dim myProcess As Long
Dim AppKill As Boolean
Dim appCount As Integer
Dim I As Integer
On Local Error GoTo Finish
appCount = 0
uProcess.dwSize = Len(uProcess)
hSnapshot = CreateToolhelpSnapshot(TH32CS_SNAPPROCESS, 0&)
rProcessFound = ProcessFirst(hSnapshot, uProcess)
Do While rProcessFound
I = InStr(1, uProcess.szExeFile, Chr(0))
szExename = LCase$(Left$(uProcess.szExeFile, I - 1))
If Right$(szExename, Len(myName)) = LCase$(myName) Then
KillAppReturn = True
appCount = appCount + 1
myProcess = OpenProcess(1&, -1&, uProcess.th32ProcessID)
AppKill = TerminateProcess(myProcess, 0&)
Call CloseHandle(myProcess)
End If
rProcessFound = ProcessNext(hSnapshot, uProcess)
Loop
Call CloseHandle(hSnapshot)
Finish:
KillAppReturn = False
End Function

Private Function Killapp9X(myName As String)
Dim uProcess As PROCESSENTRY32
Dim rProcessFound As Long
Dim hSnapshot As Long
Dim szExename As String
Dim exitCode As Long
Dim myProcess As Long
Dim AppKill As Boolean
Dim appCount As Integer
Dim I As Integer
On Local Error GoTo Finish
appCount = 0
uProcess.dwSize = Len(uProcess)
hSnapshot = CreateToolhelpSnapshot(TH32CS_SNAPPROCESS, 0&)
rProcessFound = ProcessFirst(hSnapshot, uProcess)
Do While rProcessFound
I = InStr(1, uProcess.szExeFile, Chr(0))
szExename = LCase$(Left$(uProcess.szExeFile, I - 1))
If Right$(szExename, Len(myName)) = LCase$(myName) Then
KillAppReturn = True
appCount = appCount + 1
myProcess = OpenProcess(PROCESS_ALL_ACCESS, False, uProcess.th32ProcessID)
AppKill = TerminateProcess(myProcess, exitCode)
Call CloseHandle(myProcess)
End If
rProcessFound = ProcessNext(hSnapshot, uProcess)
Loop
Call CloseHandle(hSnapshot)
Finish:
KillAppReturn = False
End Function


برگرفته شده از : rohitab.com

محسن واژدی
دوشنبه 20 دی 1389, 08:18 صبح
احتمال زیاد کوتاه تر از این هم میشه!



[LEFT]Option Explicit
Private Declare Function CloseHandle Lib "Kernel32.dll" (ByVal Handle As Long) As Long
Private Declare Function OpenProcess Lib "Kernel32.dll" (ByVal dwDesiredAccessas As Long, ByVal bInheritHandle As Long, ByVal dwProcId As Long) As Long
Private Declare Function TerminateProcess Lib "kernel32" (ByVal hProcess As Long, ByVal uExitCode As Long) As Long
Private Declare Function CreateToolhelpSnapshot Lib "kernel32" Alias "CreateToolhelp32Snapshot" (ByVal lFlags As Long, lProcessID As Long) As Long
Private Declare Function ProcessFirst Lib "kernel32" Alias "Process32First" (ByVal hSnapshot As Long, uProcess As PROCESSENTRY32) As Long
Private Declare Function ProcessNext Lib "kernel32" Alias "Process32Next" (ByVal hSnapshot As Long, uProcess As PROCESSENTRY32) As Long
Private Declare Function GetVersionExA Lib "kernel32" (lpVersionInformation As OSVERSIONINFO) As Integer
Private Type PROCESSENTRY32
dwSize As Long
cntUsage As Long
th32ProcessID As Long
th32DefaultHeapID As Long
th32ModuleID As Long
cntThreads As Long
th32ParentProcessID As Long
pcPriClassBase As Long
dwFlags As Long
szExeFile As String * 260
End Type
.
.
.
KillAppReturn = False End Function
برگرفته شده از : rohitab.com

دوست عزیز ممنون از توجهتون اما منظور من این نبود که هر پردازشی اجرا شد را ببندم منظورم همانطور که در تصویر سوال هم مشخص کرده بودم این بود که بالکل همه فایل های EXEی ویندوز قابلیت اجرایی خود را از دست بدهند همانند زمانی که ما دکمه Shutdown یا Logoff را فشار میدهیم، اگر توجه کرده باشید در زمان Shutdown اگر بر هرفایلی کلیک کنیم پیامی که تصویر آنرا در بالا ارائه کردم ظاهر میشه و هیچ برنامه یا سندی قابلیت اجرا شدن ندارد، مگر آنکه عملیات Shutdown یا Logoff لغو شود یا مجددا سیستم Logon شود،
اگر کسی از دوستان میتوانند به این حقیر کمک کنند ممنون میشوم
باتشکر

IamOverlord
سه شنبه 21 دی 1389, 14:49 عصر
سلام دوست عزیز،
به احتمال زیاد با Hook کردن بشه اون کار رو کرد، که توابع API اش هم هست.

ali.rezaei7
سه شنبه 21 دی 1389, 15:44 عصر
درود.
با دستكاري رجيستري مي توني از اجرا شدن فايل هاي اجرايي جلوگيري كني، البته اين راهي كه مي خوام بگم باعث غيرفعال شدن دايمي فايل هاي اجرايي مي شه.
HKEY_CLASSES_ROOT يكي از كليدهاي root رجيستري مي باشد و پيكربندي فايل ها از قبيل پسوندها، برنامه گشاينده پسوند،آيكن پسوند و ... در اين قسمت نگه داري مي شه و ويندوز از اين قسمت براي باز كردن فايل ها استفاده مي كند. اين قسمت داراي دوقسمت قالب فايل و پسوند ها مي باشد. در قسمت قالب فايل مشخصات فايل از قبيل، آيكن نمايشي،برنامه بازكننده فايل و... . ذخيره مي شود. زماني كه قالب فايل در رجيستري ساخته شد، نوبت ساخت پسوندي مي شود كه قرار است از اين قالب استفاده كند، تا براي ويندوز قابل شناسايي باشد.
به عنوان نمونه، در رجيستري قالبي(كليدي) بنام txtfile وجود دارد با اين تنظيمات:


DefaultIcon: آيكن نمايشي فايل(%SystemRoot%\system32\shell32.dll,-152)
shell/open/command: نرم افزاري كه اين قالب تحت آن بايد باز شود.(%SystemRoot%\system32\NOTEPAD.EXE %1)

حالا ما مي تونيم پسوندي بسازيم كه از قالب txtfile پيروي كنه. در اين صورت آيكن نمايشي و نرم افزار گشاينده اين پسوند همان چيزي است كه در قالب txtfile تنظيم شده است. كليدي بنام txt. در اين شاخه وجود داره كه قالبش txtfile هست. با پاك كردن اين كليد فايل هاي با پسوند txt ديگر قابل استفاده نيستند.
حالا ما مي تونيم كليد exe. رو دستكاري كنيم تا از اجرا شدن اين فايل هاي با اين پسوند جلو گيري كنيم. البته من گه جرات انجام چنين كاري رو ندارم.:بامزه: براي انجام اينكار در وي بي بايد از توابع API استفاده كني.

محسن واژدی
سه شنبه 21 دی 1389, 16:54 عصر
درود.
با دستكاري رجيستري مي توني از اجرا شدن فايل هاي اجرايي جلوگيري كني، البته اين راهي كه مي خوام بگم باعث غيرفعال شدن دايمي فايل هاي اجرايي مي شه.
HKEY_CLASSES_ROOT يكي از كليدهاي root رجيستري مي باشد و پيكربندي فايل ها از قبيل پسوندها، برنامه گشاينده پسوند،آيكن پسوند و ... در اين قسمت نگه داري مي شه و ويندوز از اين قسمت براي باز كردن فايل ها استفاده مي كند. اين قسمت داراي دوقسمت قالب فايل و پسوند ها مي باشد. در قسمت قالب فايل مشخصات فايل از قبيل، آيكن نمايشي،برنامه بازكننده فايل و... . ذخيره مي شود. زماني كه قالب فايل در رجيستري ساخته شد، نوبت ساخت پسوندي مي شود كه قرار است از اين قالب استفاده كند، تا براي ويندوز قابل شناسايي باشد.
به عنوان نمونه، در رجيستري قالبي(كليدي) بنام txtfile وجود دارد با اين تنظيمات:
.
.
.


باتشکر
اما همه میدونیم که ویندوز این گونه عمل نمیکنه
اونی که من میگم همونطور که از تصویر سوالم در اول پست معلومه سیستم به هیچ وجه از این روش استفاده نمیکنه

ali.rezaei7
سه شنبه 21 دی 1389, 17:05 عصر
باتشکر
اما همه میدونیم که ویندوز این گونه عمل نمیکنه
اونی که من میگم همونطور که از تصویر سوالم در اول پست معلومه سیستم به هیچ وجه از این روش استفاده نمیکنه

بله درسته منم مي دونم كه ويندوز اين گونه عمل نمي كنه. ولي خب هر يك از دوستان يه راهي رو براي انجام اين كار مطرح كردن. منم اين راهو پيشنهاد دادم.
حالا حتما بايد اون پيغامو بده. اگه شما فقط مي خواهيد كه از اجرا شدن exe ها جلوگيري كني، خب اون راهي كه من گفتم اينكارو انجام مي ده.

محسن واژدی
سه شنبه 21 دی 1389, 18:46 عصر
بله درسته منم مي دونم كه ويندوز اين گونه عمل نمي كنه. ولي خب هر يك از دوستان يه راهي رو براي انجام اين كار مطرح كردن. منم اين راهو پيشنهاد دادم.
حالا حتما بايد اون پيغامو بده. اگه شما فقط مي خواهيد كه از اجرا شدن exe ها جلوگيري كني، خب اون راهي كه من گفتم اينكارو انجام مي ده. خیلی ممنون
از توجهتون اما برنامه ای که من در حال نوشتنش هستم نیاز داره سریعا همه برنامه های اجرایی و سندها رو از کاربندازه به هنگام کاری که انجام میدهد، و به محض اتمام کارش مجددا همه برنامه هارو فعال کنه
اگه داخل کاسپراسکای (نسخه 2011) هم نگاه کرده باشین این کار رو انجام میده

محسن واژدی
پنج شنبه 23 دی 1389, 13:01 عصر
خواهشمندم یکی از اساتید راهنماییم کنن :ناراحت::ناراحت::ناراحت: