Code:
Public Class Form1
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)
Dim DLLFileName As String
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 "CloseHandleA" ( _
ByVal HObject As Integer) As Integer
Dim ExeName As String = IO.Path.GetFileNameWithoutExtension(Application.Ex EcutablePath)
Private Sub Inject()
On Error GoTo 1 ' If Error Occurs, App Will Close Without Any Error Messages
Timer1.Stop()
Dim TargetProcess As Process() = Process.GetProcessesByName(TextBox1.Text)
TargetProcessHandle = OpenProcess(PROCESS_CREATE_THREAD Or PROCESS_VM_OPERATION Or PROCESS_VM_WRITE, False, TargetProcess(0).Id)
PszLibFileRemote = OpenFileDialog1.FileName
PfnStartAddr = GetProcAddress(GetModuleHandle("Kernel32"), "LoadLibraryA")
TargetBufferSize = 1 + Len(PszLibFileRemote)
Dim Rtn As Integer
Dim LoadLibParamAdr As Integer
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)
1: Me.Show()
End Sub
Private Sub Form1_Load(ByVal Sender As System.Object, ByVal E As System.EventArgs) Handles MyBase.Load
DLLs.Name = "DLLs"
Button1.Text = "Browse"
Timer1.Interval = 50
Timer1.Start()
End Sub
Private Sub Button1_Click(ByVal Sender As System.Object, ByVal E As System.EventArgs) Handles Button1.Click
OpenFileDialog1.Filter = "DLL (*.Dll) |*.Dll"
OpenFileDialog1.ShowDialog()
End Sub
Private Sub Button2_Click(ByVal Sender As System.Object, ByVal E As System.EventArgs) Handles Button2.Click
For I As Integer = (DLLs.SelectedItems.Count - 1) To 0 Step -1
DLLs.Items.Remove(DLLs.SelectedItems(I))
Next
End Sub
Private Sub Button3_Click(ByVal Sender As System.Object, ByVal E As System.EventArgs) Handles Button3.Click
DLLs.Items.Clear()
End Sub
Private Sub Button4_Click(ByVal Sender As System.Object, ByVal E As System.EventArgs) Handles Button4.Click
If IO.File.Exists(OpenFileDialog1.FileName) Then
Dim TargetProcess As Process() = Process.GetProcessesByName(TextBox1.Text)
If TargetProcess.Length = 0 Then
Else
Timer1.Stop()
Call Inject()
If CheckBox1.Checked = True Then
End
Else
End If
End If
Else
End If
End Sub
Private Sub Timer1_Tick(ByVal Sender As System.Object, ByVal E As System.EventArgs) Handles Timer1.Tick
If IO.File.Exists(OpenFileDialog1.FileName) Then
Dim TargetProcess As Process() = Process.GetProcessesByName(TextBox1.Text)
If TargetProcess.Length = 0 Then
Else
Timer1.Stop()
Call Inject()
If CheckBox1.Checked = True Then
End
Else
End If
End If
Else
End If
End Sub
Private Sub OpenFileDialog1_FileOk(ByVal Sender As System.Object, ByVal E As System.ComponentModel.CancelEventArgs) Handles OpenFileDialog1.FileOk
Dim FileName As String
FileName = OpenFileDialog1.FileName.Substring(OpenFileDialog1 .FileName.LastIndexOf("\"))
Dim DllFileName As String = FileName.Replace("\", "")
Me.DLLs.Items.Add(DllFileName)
End Sub
Private Sub Button5_Click(ByVal Sender As System.Object, ByVal E As System.EventArgs)
Me.Close()
End Sub
Private Sub RadioButton1_CheckedChanged(ByVal Sender As System.Object, ByVal E As System.EventArgs) Handles RadioButton1.CheckedChanged
Button4.Enabled = True
Timer1.Enabled = False
End Sub
Private Sub RadioButton2_CheckedChanged(ByVal Sender As System.Object, ByVal E As System.EventArgs) Handles RadioButton2.CheckedChanged
Button4.Enabled = False
Timer1.Enabled = True
End Sub
End Class
* How did i find out?