Func INT2HEX($VALUE, $N)
Dim $TMP1, $TMP2, $I
$TMP1 = StringRight("0000000" & Hex($VALUE), $N)
For $I = 0 To StringLen($TMP1) / 2 - 1
$TMP2 = $TMP2 & StringMid($TMP1, StringLen($TMP1) - 1 - 2 * $I, 2)
Next
Return $TMP2
EndFunc
Func PUSHAD()
$OPCODE = $OPCODE & "60"
EndFunc
Func MOV_EAX_DWORD_PTR($I)
$OPCODE = $OPCODE & "A1" & INT2HEX($I, 8)
EndFunc
Func MOV_EDX_DWORD_PTR_ECX_ADD($I)
If $I <= 255 Then
$OPCODE = $OPCODE & "8B51" & INT2HEX($I, 2)
Else
$OPCODE = $OPCODE & "8B91" & INT2HEX($I, 8)
EndIf
EndFunc
Func MOV_ECX_DWORD_PTR_ESI_ADD($I)
If $I <= 255 Then
$OPCODE = $OPCODE & "8B4E" & INT2HEX($I, 2)
Else
$OPCODE = $OPCODE & "8B8E" & INT2HEX($I, 8)
EndIf
EndFunc
Func MOV_EAX_DWORD_PTR_ESI_ADD($I)
If $I <= 255 Then
$OPCODE = $OPCODE & "8B46" & INT2HEX($I, 2)
Else
$OPCODE = $OPCODE & "8B86" & INT2HEX($I, 8)
EndIf
EndFunc
Func MOV_ECX_DWORD_PTR_EAX_ADD($I)
If $I <= 255 Then
$OPCODE = $OPCODE & "8B48" & INT2HEX($I, 2)
Else
$OPCODE = $OPCODE & "8B88" & INT2HEX($I, 8)
EndIf
EndFunc
Func PUSH($I)
$OPCODE = $OPCODE & "68" & INT2HEX($I, 8)
EndFunc
Func MOV_EDX($I)
$OPCODE = $OPCODE & "BA" & INT2HEX($I, 8)
EndFunc
Func MOV_EDI_EAX()
$OPCODE = $OPCODE & "8BF8"
EndFunc
Func MOV_ECX_EDI()
$OPCODE = $OPCODE & "8BCF"
EndFunc
Func CALL_EDX()
$OPCODE = $OPCODE & "FFD2"
EndFunc
Func POPAD()
$OPCODE = $OPCODE & "61"
EndFunc
Func PUSH_EDI()
$OPCODE = $OPCODE & "57"
EndFunc
Func RET()
$OPCODE = $OPCODE & "C3"
EndFunc
Func MOV_ECX_DWORD_PTR_EDX()
$OPCODE = $OPCODE & "8B0A"
EndFunc
And
Func INJECTCODE($PID)
If $PID <> 0 And $OPCODE <> "" Then
Local $DATA = DllStructCreate("byte[" & StringLen($OPCODE) / 2 & "]")
For $I = 1 To DllStructGetSize($DATA)
DllStructSetData($DATA, 1, Dec(StringMid($OPCODE, ($I - 1) * 2 + 1, 2)), $I)
Next
Local $RESULT, $PROCESS, $ADD, $THREAD
$RESULT = DllCall("Kernel32.Dll", "int", "OpenProcess", "int", 2035711, "int", 0, "int", $PID)
$PROCESS = $RESULT[0]
$RESULT = DllCall("Kernel32.dll", "ptr", "VirtualAllocEx", "int", $PROCESS, "ptr", 0, "int", DllStructGetSize($DATA), "int", 4096, "int", 64)
$ADD = $RESULT[0]
$RESULT = DllCall("kernel32.dll", "int", "WriteProcessMemory", "int", $PROCESS, "ptr", $ADD, "ptr", DllStructGetPtr($DATA), "int", DllStructGetSize($DATA), "int", 0)
$RESULT = DllCall("kernel32.dll", "int", "CreateRemoteThread", "int", $PROCESS, "ptr", 0, "int", 0, "int", $ADD, "ptr", 0, "int", 0, "int", 0)
$THREAD = $RESULT[0]
Do
$RESULT = DllCall("kernel32.dll", "int", "WaitForSingleObject", "int", $THREAD, "int", 50)
Until $RESULT[0] <> 258
DllCall("Kernel32.dll", "int", "CloseHandle", "int", $THREAD)
$RESULT = DllCall("Kernel32.dll", "ptr", "VirtualFreeEx", "hwnd", $PROCESS, "ptr", DllStructGetPtr($DATA), "int", DllStructGetSize($DATA), "int", 32768)
DllCall("Kernel32.dll", "int", "CloseHandle", "int", $PROCESS)
$OPCODE = ""
$DATA = 0
EndIf
EndFunc
|