Option Strict On |
Option Explicit On |
Imports System.Runtime.InteropServices |
Public Class Form1 |
Const MEM_COMMIT As Integer = &H1000 |
Const PAGE_READWRITE As Integer = &H4 |
Const PROCESS_CREATE_THREAD As Integer = &H2 |
Const PROCESS_VM_OPERATION As Integer = &H8 |
Const PROCESS_VM_READ As Integer = &H10 |
Const PROCESS_VM_WRITE As Integer = &H20 |
<DllImport("kernel32.dll", SetLastError:=True, CallingConvention:=CallingConvention.Winapi)> _ |
Public Shared Function OpenProcess(ByVal dwDesiredAccess As UInteger, <MarshalAs(UnmanagedType.Bool)> _ |
ByVal bInheritHandle As Boolean, ByVal dwProcessId As Integer) As System.IntPtr |
End Function |
<DllImport("kernel32.dll", SetLastError:=True, CallingConvention:=CallingConvention.Winapi)> _ |
Public Shared Function WriteProcessMemory(ByVal hProcess As System.IntPtr, ByVal lpBaseAddress As System.IntPtr, _ |
ByVal lpBuffer As String, ByVal nSize As Int32, <Out()> ByRef lpNumberOfBytesWritten As Int32) As _ |
<MarshalAs(UnmanagedType.Bool)> Boolean |
End Function |
<DllImport("kernel32.dll", SetLastError:=True, CallingConvention:=CallingConvention.Winapi)> _ |
Public Shared Function VirtualAllocEx(ByVal hProcess As IntPtr, ByVal lpAddress As Int32, _ |
ByVal dwSize As Int32, ByVal flAllocationType As UInteger, _ |
ByVal flProtect As UInteger) As IntPtr |
End Function |
<DllImport("kernel32.dll", SetLastError:=True, CallingConvention:=CallingConvention.Winapi)> _ |
Public Shared Function GetModuleHandle(ByVal lpModuleName As String) As IntPtr |
End Function |
<DllImport("kernel32.dll", SetLastError:=True, CallingConvention:=CallingConvention.Winapi)> _ |
Public Shared Function GetProcAddress(ByVal hModule As IntPtr, ByVal lpProcName As String) As UIntPtr |
End Function |
<DllImport("kernel32.dll", SetLastError:=True, CallingConvention:=CallingConvention.Winapi)> _ |
Public Shared Function CreateRemoteThread(ByVal hProcess As IntPtr, ByVal lpThreadAttributes As Int32, _ |
ByVal dwStackSize As UInt32, ByVal lpStartAddress As UIntPtr, ByVal lpParameter As IntPtr, _ |
ByVal dwCreationFlags As UInt32, ByRef lpThreadId As Int32) As IntPtr |
End Function |
<DllImport("kernel32.dll", SetLastError:=True, CharSet:=CharSet.Unicode, EntryPoint:="LoadLibraryA")> _ |
Public Shared Function LoadLibrary(ByVal lpFileName As String) As IntPtr |
End Function |
Friend WithEvents OZ As New Timer |
Const TargetName As String = "WARROCK" |
Dim ExeName As String = IO.Path.GetFileNameWithoutExtension(Application.ExecutablePath) |
Private Sub InnjectionMethods_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load |
Me.TopMost = True |
OZ.Interval = 25 |
If IO.File.Exists(Application.StartupPath & "\" + ExeName + ".dll") Then |
Me.Label1.Text = "Wait for Warrock...!" |
OZ.Start() |
Else |
Me.Label1.Text = "" + ExeName + ".dll wurde nicht gefunden!" |
End If |
End Sub |
Private Sub OZs(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles OZ.Tick |
Dim Target As Process() = Process.GetProcessesByName(TargetName) |
If Target.Length <> 0 Then |
Me.Label1.Text = "Warrock gefunden..." |
OZ.Stop() |
InjectToProcess() |
End If |
End Sub |
Sub InjectToProcess() |
Dim ExeName As String = IO.Path.GetFileNameWithoutExtension(Application.ExecutablePath) |
Dim Target As Process() = Process.GetProcessesByName(TargetName) |
Dim pHandle As IntPtr = OpenProcess(PROCESS_CREATE_THREAD Or PROCESS_VM_OPERATION Or PROCESS_VM_WRITE, False, Target(0).Id) |
Dim pszLibFileRemote As String = Application.StartupPath & "\" + ExeName + ".dll" |
Dim pfnStartAddr As UIntPtr = GetProcAddress(GetModuleHandle("Kernel32"), "LoadLibraryA") |
Dim TargetBufferSize As Int32 = Int(1 + Len(pszLibFileRemote)) |
Dim LoadLibParamAdr As IntPtr = VirtualAllocEx(pHandle, 0, TargetBufferSize, MEM_COMMIT, PAGE_READWRITE) |
Dim Rtn As Integer = CInt(WriteProcessMemory(pHandle, LoadLibParamAdr, pszLibFileRemote, TargetBufferSize, 0)) |
If Rtn <> 0 Then |
Label1.Text = "...Injection Gelukt!" |
Else |
Label1.Text = "...Injection misgegaan!" |
End If |
CreateRemoteThread(pHandle, 0, 0, pfnStartAddr, LoadLibParamAdr, 0, 0) |
Me.Close() |
End Sub |
End Class |