Code:
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 = "...Waiting For WarRock.exe"
OZ.Start()
Else
Me.Label1.Text = "..." + ExeName + ".dll Not Found !"
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 Is Running"
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 Succed!"
Else
Label1.Text = "...Injection Failed!"
End If
CreateRemoteThread(pHandle, 0, 0, pfnStartAddr, LoadLibParamAdr, 0, 0)
Me.Close()
End Sub
End Class