Code:
Imports System.Collections.Generic
Imports System.Text
Imports System.Diagnostics
Imports System.ComponentModel
Imports System.Data
Imports System.Drawing
Imports System.Windows.Forms
Imports System.Threading
Imports System.Security.Cryptography
Imports System.Net
Imports System.Runtime.InteropServices
Imports System****
Imports System.Media
Imports System.Xml
'Created by -[I]fLuX
Namespace IfLuXInject
Class Inject
Private NotInheritable Class WINAPI
Private Sub New()
End Sub
<DllImport("kernel32.dll", SetLastError := True)> _
Public Shared Function OpenProcess(dwDesiredAccess As UInt32, bInheritHandle As Int32, dwProcessId As UInt32) As IntPtr
End Function
<DllImport("kernel32.dll", SetLastError := True)> _
Public Shared Function CloseHandle(hObject As IntPtr) As Int32
End Function
<DllImport("kernel32.dll", SetLastError := True)> _
Public Shared Function GetProcAddress(hModule As IntPtr, lpProcName As String) As IntPtr
End Function
<DllImport("kernel32.dll", SetLastError := True)> _
Public Shared Function GetModuleHandle(lpModuleName As String) As IntPtr
End Function
<DllImport("kernel32.dll", SetLastError := True)> _
Public Shared Function VirtualAllocEx(hProcess As IntPtr, lpAddress As IntPtr, dwSize As IntPtr, flAllocationType As UInteger, flProtect As UInteger) As IntPtr
End Function
<DllImport("kernel32.dll", SetLastError := True)> _
Public Shared Function WriteProcessMemory(hProcess As IntPtr, lpBaseAddress As IntPtr, buffer As Byte(), size As UInteger, ByRef lpNumberOfBytesWritten As IntPtr) As Int32
End Function
<DllImport("kernel32.dll", SetLastError := True)> _
Public Shared Function CreateRemoteThread(hProcess As IntPtr, lpThreadAttribute As IntPtr, dwStackSize As IntPtr, lpStartAddress As IntPtr, lpParameter As IntPtr, dwCreationFlags As UInteger, _
lpThreadId As IntPtr) As IntPtr
End Function
Public NotInheritable Class VAE_Enums
Private Sub New()
End Sub
Public Enum AllocationType
MEM_COMMIT = &H1000
MEM_RESERVE = &H2000
MEM_RESET = &H80000
End Enum
Public Enum ProtectionConstants
PAGE_EXECUTE = &H10
PAGE_EXECUTE_READ = &H20
PAGE_EXECUTE_READWRITE = &H4
PAGE_EXECUTE_WRITECOPY = &H8
PAGE_NOACCESS = &H1
End Enum
End Class
End Class
Public Shared Function DoInject(pToBeInjected As Process, sDllPath As String, ByRef sError As String) As Boolean
Dim hwnd As IntPtr = IntPtr.Zero
If Not CRT(pToBeInjected, sDllPath, sError, hwnd) Then
If hwnd <> CType(0, IntPtr) Then
WINAPI.CloseHandle(hwnd)
End If
Return False
End If
Dim wee As Integer = Marshal.GetLastWin32Error()
Return True
End Function
Private Shared Function CRT(pToBeInjected As Process, sDllPath As String, ByRef sError As String, ByRef hwnd As IntPtr) As Boolean
sError = [String].Empty
Dim hndProc As IntPtr = WINAPI.OpenProcess((&H2 Or &H8 Or &H10 Or &H20 Or &H400), 1, CUInt(pToBeInjected.Id))
hwnd = hndProc
If hndProc = CType(0, IntPtr) Then
sError = "Unable to attatch to process." & vbLf
sError += "Error code: " & Marshal.GetLastWin32Error()
Return False
End If
Dim lpLLAddress As IntPtr = WINAPI.GetProcAddress(WINAPI.GetModuleHandle("kernel32.dll"), "LoadLibraryA")
If lpLLAddress = CType(0, IntPtr) Then
sError = "Unable to find address of ""LoadLibraryA""." & vbLf
sError += "Error code: " & Marshal.GetLastWin32Error()
Return False
End If
Dim lpAddress As IntPtr = WINAPI.VirtualAllocEx(hndProc, CType(Nothing, IntPtr), CType(sDllPath.Length, IntPtr), CUInt(WINAPI.VAE_Enums.AllocationType.MEM_COMMIT) Or CUInt(WINAPI.VAE_Enums.AllocationType.MEM_RESERVE), CUInt(WINAPI.VAE_Enums.ProtectionConstants.PAGE_EXECUTE_READWRITE))
If lpAddress = CType(0, IntPtr) Then
If lpAddress = CType(0, IntPtr) Then
sError = "Unable to allocate memory to target process." & vbLf
sError += "Error code: " & Marshal.GetLastWin32Error()
Return False
End If
End If
Dim bytes As Byte() = CalcBytes(sDllPath)
Dim ipTmp As IntPtr = IntPtr.Zero
WINAPI.WriteProcessMemory(hndProc, lpAddress, bytes, CUInt(bytes.Length), ipTmp)
If Marshal.GetLastWin32Error() <> 0 Then
sError = "Unable to write memory to process."
sError += "Error code: " & Marshal.GetLastWin32Error()
Return False
End If
Dim ipThread As IntPtr = WINAPI.CreateRemoteThread(hndProc, CType(Nothing, IntPtr), CType(0, IntPtr), lpLLAddress, lpAddress, 0, _
CType(Nothing, IntPtr))
If ipThread = CType(0, IntPtr) Then
sError = "Unable to load dll into memory."
sError += "Error code: " & Marshal.GetLastWin32Error()
Return False
End If
Return True
End Function
Private Shared Function CalcBytes(sToConvert As String) As Byte()
Dim bRet As Byte() = System.Text.Encoding.ASCII.GetBytes(sToConvert)
Return bRet
End Function
End Class
Class DxInject
<DllImport("user32.dll")> _
Public Shared Function GetKeyState(nVirtKey As Short) As UShort
End Function
Public Const keyDownBit As UShort = &H80
Public Shared Function IsKeyPressed(key As Keys) As Boolean
Return ((GetKeyState(CShort(key)) And keyDownBit) = keyDownBit)
End Function
Private Shared Sub InjectDll()
Dim ID As Integer = 0
Dim proc As Process
Dim [error] As [String]
Dim bfound As Boolean = False
Dim sProcess As String = "crossfire"
Dim ProcName As String = Process.GetCurrentProcess().ProcessName
Dim exePath As String = Environment.CurrentDirectory & "\" & ProcName
Dim DllPath As String = exePath & ".dll"
If Not File.Exists(DllPath) Then
MessageBox.Show("Dll File Not Found!")
System.Environment.[Exit](1)
End If
While Not bfound
If IsKeyPressed(Keys.[End]) Then
MessageBox.Show("Exiting Injection!")
System.Environment.[Exit](1)
End If
For Each pro As Process In Process.GetProcesses()
If pro.ProcessName = sProcess Then
ID = pro.Id
bfound = True
Exit For
End If
Next
Thread.Sleep(100)
End While
proc = Process.GetProcessById(ID)
Dim result As Boolean = Inject.DoInject(proc, DllPath, [error])
If [error] <> "" Then
MessageBox.Show("Injection Error: " & [error])
Else
System.Environment.[Exit](1)
End If
End Sub
Private Shared Sub Main()
MessageBox.Show("-[I]fLuX Crossfire Injector" & vbTab & vbLf & "Press 'OK' and start CrossFire")
Dim t_inject As Thread
t_inject = New Thread(AddressOf InjectDll)
t_inject.Start()
End Sub
End Class
End Namespace