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.
Code:
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:
Code:
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