PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : vb.net Taskmanager TerminateProcess



krusty
20.10.2010, 15:14
Hey ho, habe gestern über hooks und code injection in .net nachgedacht, ist ja leider alles beschränkt. Habe mir heute mit olly dann ma den taskmanager auf xp angeschaut und habe nen kleinen patch geschrieben, welcher die TerminateProcess Funktion NOPt. Darauf hin lässt sich kein prozess mehr beenden, ist ja logisch.

Glaube, dass das ganze nur auf XP funktioniert (mit diesen Adressen). Wäre n1, wenns jemand auf Win7 und Vista testen könnte.



Public Class TaskManager

Dim TerminateProcess_on_Value() As Byte = {&HFF, &H15, &HC0, &H10, &H0, &H1}
Dim TerminateProcessAdress() As Integer = {&H100C226, &H100C227, &H100C228, &H100C229, &H100C22A, &H100C22B}

Dim NopValue As Byte = &H90

Private Declare Function OpenProcess Lib "kernel32" (ByVal dwDesiredAccess As Integer, ByVal bInheritHandle As Integer, ByVal dwProcessId As Integer) As Integer
Private Declare Function WriteProcessMemory Lib "kernel32" (ByVal hProcess As Integer, ByVal lpBaseAddress As Integer, ByRef lpBuffer As Integer, ByVal nSize As Integer, ByRef lpNumberOfBytesWritten As Integer) As Integer
Private Declare Function CloseHandle Lib "kernel32" (ByVal hObject As Integer) As Integer



Public Function TurnTerminateProcessOFF() As Boolean
Try
For Each p As Process In Process.GetProcessesByName("taskmgr")
Dim pHandle As IntPtr = OpenProcess(&H1F0FFF, 0, p.Id)
For i As Integer = 0 To 5
WriteProcessMemory(pHandle, TerminateProcessAdress(i), NopValue, 1, Nothing)
Next
Next
Return True
Catch ex As Exception
Return False
End Try
End Function
Public Function TurnTerminateProcessON() As Boolean
Try
For Each p As Process In Process.GetProcessesByName("taskmgr")
Dim pHandle As IntPtr = OpenProcess(&H1F0FFF, 0, p.Id)
For i As Integer = 0 To 5
WriteProcessMemory(pHandle, TerminateProcessAdress(i), TerminateProcess_on_Value(i), 1, Nothing)
Next
Next
Return True
Catch ex As Exception
Return False
End Try
End Function
End Class
Aufruf ganz einfach:


Dim t As New TaskManager
'funktion überschreiben
t.TurnTerminateProcessOff()
'funktion zurücksetzen
t.TurnTerminateProcessON()

schöner wäre es natürlich, wenn man noch rausfiltern würde, ob es sich bei dem Prozess um den eigenen handelt und nur dann die funktion aushebeln würde.

mfg Krusty

Shadowgamer
20.10.2010, 15:50
Windows 7 Ultimate (64 Bit) funktioniert NICHT.

spamnade
20.10.2010, 16:24
Windows 7 Ultimate 32Bit funktioniert auch nich.

krusty
20.10.2010, 16:35
sehr informatiever post, herzlichen dank. Hätte ich mir pointer suchen müssen ?
ich habe sowas noch nie von olly direkt übertragen.
dachte eig, dass die konstant bleiben.