TuT : Hack-Injector
__________________________________________
1.0 Einleitung
1.1 Benötigte Tools
2.0 Theorie
2.1 Der Injector
__________________________________________
__________________________________________
1.0 Einleitung
Ich werde in diesem Tutorial alles so einfach wie möglich zu erklären,
und kein Fachchinesisch verwenden.
Daher sollte das Tutorial auch für Einsteiger bestens geignet sein.
Den Hack-Injector werde ich in Visual Basic .Net schreiben.
Bitte beachtet, dass dieses Tutorial nicht ohne meine Erlaubnis kopiert
werden darf.
__________________________________________
__________________________________________
1.1 Benötigte Tools
Um den Hack zu schreiben, braucht ihr 3 Dinge:

Zeit & Geduld
Grundlegende Visual Basic .Net Kenntnisse__________________________________________
__________________________________________
2.0 Theorie
Ein Injector injeziert (daher der Name) einen Hack (meistens ein Dynamic Link Library) in einen Prozess.
z.B. bei Warrock:
Der Injector injeziert den Hack (Hack.dll) in den Prozess (Warrock.exe).
Das ganze kann ziemlich einfach realisiert werden.
Man benötigt dazu einige API-Aufrufe und grundlegende Visual Basic Kenntnisse.
Ich werde nachfolgend alles genau Kommentieren. So sollte es zu keine Verständniss-Schwierigkeiten kommen.
__________________________________________
__________________________________________
2.1 Der Injector
Als erstes erstellen wir in der Entwicklerumgebung (Visual Basic 2010 EE) ein neues Projekt.
Nun passen wir die Form-Eigenschaften wie z.B. Icon, Formname usw. an, womit ihr bereits Erfahrung haben solltet.
Sobald ihr fertig seit, sollte es so aussehen:
Jetzt müssen wir einige Steuerelemente erstellen:
Label: lblHack
Label: lblProcess
Textbox: txtHack
Textbox: txtProcess
Button: cmdInject
Timer: tmInject
Beim Timer setzen wir den Interval noch auf 50.
Nun sieht es in etwa so aus:
Das Design haben wir nun.
Jetzt kommt es zum etwas anspruchsreicheren Teil.
Zum programmieren.
Zunächst brauchen wir folgende API-Funktionen.
(Diese kommen direkt unter die Public Class Form1).
Code:
Private TargetProcessHandle As Integer Private pfnStartAddr As Integer Private pszLibFileRemote As String Private TargetBufferSize As Integer Public Const PROCESS_VM_READ = &H10 Public Const TH32CS_SNAPPROCESS = &H2 Public Const MEM_COMMIT = 4096 Public Const PAGE_READWRITE = 4 Public Const PROCESS_CREATE_THREAD = (&H2) Public Const PROCESS_VM_OPERATION = (&H8) Public Const PROCESS_VM_WRITE = (&H20) Public Declare Function ReadProcessMemory Lib "kernel32" ( _ ByVal hProcess As Integer, _ ByVal lpBaseAddress As Integer, _ ByVal lpBuffer As String, _ ByVal nSize As Integer, _ ByRef lpNumberOfBytesWritten As Integer) As Integer Public Declare Function LoadLibrary Lib "kernel32" Alias "LoadLibraryA" ( _ ByVal lpLibFileName As String) As Integer Public Declare Function VirtualAllocEx Lib "kernel32" ( _ ByVal hProcess As Integer, _ ByVal lpAddress As Integer, _ ByVal dwSize As Integer, _ ByVal flAllocationType As Integer, _ ByVal flProtect As Integer) As Integer Public Declare Function WriteProcessMemory Lib "kernel32" ( _ ByVal hProcess As Integer, _ ByVal lpBaseAddress As Integer, _ ByVal lpBuffer As String, _ ByVal nSize As Integer, _ ByRef lpNumberOfBytesWritten As Integer) As Integer Public Declare Function GetProcAddress Lib "kernel32" ( _ ByVal hModule As Integer, ByVal lpProcName As String) As Integer Private Declare Function GetModuleHandle Lib "Kernel32" Alias "GetModuleHandleA" ( _ ByVal lpModuleName As String) As Integer Public Declare Function CreateRemoteThread Lib "kernel32" ( _ ByVal hProcess As Integer, _ ByVal lpThreadAttributes As Integer, _ ByVal dwStackSize As Integer, _ ByVal lpStartAddress As Integer, _ ByVal lpParameter As Integer, _ ByVal dwCreationFlags As Integer, _ ByRef lpThreadId As Integer) As Integer Public Declare Function OpenProcess Lib "kernel32" ( _ ByVal dwDesiredAccess As Integer, _ ByVal bInheritHandle As Integer, _ ByVal dwProcessId As Integer) As Integer Private Declare Function FindWindow Lib "user32" Alias "FindWindowA" ( _ ByVal lpClassName As String, _ ByVal lpWindowName As String) As Integer Private Declare Function CloseHandle Lib "kernel32" Alias "CloseHandle" ( _ ByVal hObject As Integer) As Integer
Die Injection schreiben wir in eine eigene Sub.
So können wir sie später perfomanter verwenden.
Code:
Private Sub Inject()
Dim TargetProcess As Process() = Process.GetProcessesByName(txtProcess.Text) ' Der Ziel Prozess
Dim Rtn As Integer
Dim LoadLibParamAdr As Integer
tmInject.Stop() ' Den Injection-Timer stoppen
Try
TargetProcessHandle = OpenProcess(PROCESS_CREATE_THREAD Or PROCESS_VM_OPERATION Or PROCESS_VM_WRITE, False, TargetProcess(0).Id) ' Den Ziel-Process öffnen
pszLibFileRemote = txtHack.Text ' Die Hack-DLL
pfnStartAddr = GetProcAddress(GetModuleHandle("Kernel32"), "LoadLibraryA") ' Die Start-Adresse ermitteln
TargetBufferSize = 1 + Len(pszLibFileRemote)
LoadLibParamAdr = VirtualAllocEx(TargetProcessHandle, 0, TargetBufferSize, MEM_COMMIT, PAGE_READWRITE)
Rtn = WriteProcessMemory(TargetProcessHandle, LoadLibParamAdr, pszLibFileRemote, TargetBufferSize, 0)
CreateRemoteThread(TargetProcessHandle, 0, 0, pfnStartAddr, LoadLibParamAdr, 0, 0)
CloseHandle(TargetProcessHandle) ' Injector aus dem Prozess "entfernen"
Catch ex As Exception ' Falls ein Fehler auftritt
MsgBox(ex.Message, MsgBoxStyle.Critical, "Error")
Me.Close()
End Try
End Sub
Jetzt sind wir gleich fertig.
Wir müssen noch im Tick-Event des Timers 'tmInject' die Sub aufrufen:
Code:
Private Sub tmInject_Tick(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles tmInject.Tick
Call Inject() ' Die Injection-Sub aufrufen
End Sub
Code:
Private Sub cmdInject_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles cmdInject.Click
tmInject.Start() ' Den Timer starten
End Sub
Ihr könnt den Injector nun beliebig erweitern.
Zum Beispiel: Automatisches schließen nach der Injection, AutoInject, Hack / Process Saving usw.
Ich hoffe das Tutorial war hilfreich.
Ein Thanks tut auch nicht weh.
Ich habe den Sourcecode als Projekt im Anhang hinzugefügt.
__________________________________________






