Register for your free account! | Forgot your password?

Go Back   elitepvpers > Coders Den > C/C++
You last visited: Today at 20:26

  • Please register to post and access all features, it's quick, easy and FREE!

Advertisement



C++ Injection Fail

Discussion on C++ Injection Fail within the C/C++ forum part of the Coders Den category.

Reply
 
Old   #1
 
elite*gold: 0
Join Date: Dec 2009
Posts: 1,622
Received Thanks: 2,070
C++ Injection Fail

Hi leute,

ich wollte einen Injector für einen hack machen, aber er funktioniert aus irgendeinem Grund nicht.

Könnte sich vielleicht jemand den source angucken und sagen was ich falsch mache?

Code:
#include <Windows.h>
#include <iostream>
#include <stdio.h>
#include <stdlib.h>
#include <fstream>
#include <string>
#include <tlhelp32.h>


#define MAXWAIT 10000
     
using namespace std;

DWORD FindProcessId(const std::wstring& processName)
    {
        PROCESSENTRY32 processInfo;
        processInfo.dwSize = sizeof(processInfo);
     
        HANDLE processesSnapshot = CreateToolhelp32Snapshot(TH32CS_SNAPPROCESS, NULL);
        if ( processesSnapshot == INVALID_HANDLE_VALUE )
            return 0;
     
        Process32First(processesSnapshot, &processInfo);
        if ( !processName.compare(processInfo.szExeFile) )
        {
            CloseHandle(processesSnapshot);
            return processInfo.th32ProcessID;
        }
     
        while ( Process32Next(processesSnapshot, &processInfo) )
        {
            if ( !processName.compare(processInfo.szExeFile) )
            {
                CloseHandle(processesSnapshot);
                return processInfo.th32ProcessID;
            }
        }
     
        CloseHandle(processesSnapshot);
        return 0;
    }


bool insertDll(DWORD procID, std::string dll)
    {
        //Find the address of the LoadLibrary api, luckily for us, it is loaded in the same address for every process
        HMODULE hLocKernel32 = GetModuleHandleA("Kernel32");
        FARPROC hLocLoadLibrary = GetProcAddress(hLocKernel32, "LoadLibraryA");
       
        //Adjust token privileges to open system processes
        HANDLE hToken;
        TOKEN_PRIVILEGES tkp;
        if(OpenProcessToken(GetCurrentProcess(), TOKEN_ADJUST_PRIVILEGES | TOKEN_QUERY, &hToken))
        {
            LookupPrivilegeValue(NULL, SE_DEBUG_NAME, &tkp.Privileges[0].Luid);
            tkp.PrivilegeCount = 1;
            tkp.Privileges[0].Attributes = SE_PRIVILEGE_ENABLED;
            AdjustTokenPrivileges(hToken, 0, &tkp, sizeof(tkp), NULL, NULL);
        }
     
        //Open the process with all access
        HANDLE hProc = OpenProcess(PROCESS_ALL_ACCESS, FALSE, procID);
     
        //Allocate memory to hold the path to the Dll File in the process's memory
        dll += '\0';
        LPVOID hRemoteMem = VirtualAllocEx(hProc, NULL, dll.size(), MEM_COMMIT, PAGE_READWRITE);
     
        //Write the path to the Dll File in the location just created
        DWORD numBytesWritten;
        WriteProcessMemory(hProc, hRemoteMem, dll.c_str(), dll.size(), &numBytesWritten);
     
        //Create a remote thread that starts begins at the LoadLibrary function and is passed are memory pointer
        HANDLE hRemoteThread = CreateRemoteThread(hProc, NULL, 0, (LPTHREAD_START_ROUTINE)hLocLoadLibrary, hRemoteMem, 0, NULL);
     
        cout << hRemoteThread << endl;
     
        //Wait for the thread to finish
        bool res = false;
        if (hRemoteThread)
            res = (bool)WaitForSingleObject(hRemoteThread, MAXWAIT) != WAIT_TIMEOUT;
     
        //Free the memory created on the other process
        VirtualFreeEx(hProc, hRemoteMem, dll.size(), MEM_RELEASE);
     
        //Release the handle to the other process
        CloseHandle(hProc);
     
        return res;
}

int main(HANDLE hConsole)
{
	SetConsoleTitleA("JustHack Launcher");
	cout <<"==================================== JustHack =================================="<< endl;
	cout <<"================================================================================"<< endl;
	while (1)
	{
	if(!FindProcessId(L"S4Client.exe"))
	{
	}
	else
	{
	Sleep(100);
	DWORD PID = FindProcessId(L"S4Client.exe");
     insertDll(PID,"JustHack.dll");
	 Sleep(100);
     return TRUE;
	 ExitProcess(0);
	}
}
}
freehuntx is offline  
Old 09/05/2011, 14:54   #2
 
elite*gold: 0
Join Date: Apr 2006
Posts: 6,597
Received Thanks: 1,830
Ich schätze mal dir fehlt folgendes:

Code:
bool EnableDebugPrivilege()
{
    TOKEN_PRIVILEGES priv;
    HANDLE hThis, hToken;
    LUID luid;
    hThis = GetCurrentProcess();
    OpenProcessToken(hThis, TOKEN_ADJUST_PRIVILEGES, &hToken);
    LookupPrivilegeValue(0, "seDebugPrivilege", &luid);
    priv.PrivilegeCount = 1;
    priv.Privileges[0].Luid = luid;
    priv.Privileges[0].Attributes = SE_PRIVILEGE_ENABLED;
    AdjustTokenPrivileges(hToken, false, &priv, 0, 0, 0);
    CloseHandle(hToken);
    CloseHandle(hThis);
    return true;
}
Medix is offline  
Old 09/05/2011, 16:10   #3
 
elite*gold: 20
Join Date: Sep 2006
Posts: 1,100
Received Thanks: 184
@Medix
Die Privileges setzt er doch in der insertDll Funktion, die übrigens Copypasta von Codeproject ist und allgemein keinen zuverlässigen Weg für eine Dll Injektion darstellt.

Es ist eine ganze Menge Mist in diesem Code, beispielsweise sollte man PROCESS_ALL_ACCESS niemals verwenden, stattdessen sollte man sich nur die Rechte holen die man wirklich braucht, welche das genau sind ist auf MSDN nachzulesen.
Dann wäre da noch das die insertDll Funktionen einen std::string als zweites Argument nimmt, der TE allerdings einen const char* übergibt, außerdem wird in Tokenhandle geleakt.
@TE
Wir brauchen mehr Informationen um dir ordentlich helfen zu können, welches Windows verwendest du, handelt es sich um eine 32bit oder 64bit Applikation, hast du schon überprüft ob der String ordentlich in den Zielprozess geschrieben wird?
Auch ist es möglich das in deinem Zielprozess ASLR aktiv ist, damit wäre deine Methode die LoadLibraryA Funktion zu lokalisieren schonmal nicht korrekt.
Übrigens ist es besser einen richtigen ThreadProc in den Zielprozess zu injizieren und über diesen dann die LoadLibrary API aufzurufen, denn die LoadLibrary API ist nicht dazu gemacht über CreateRemoteThread aufgerufen zu werden.
Bot_interesierter is offline  
Thanks
1 User
Old 09/05/2011, 17:07   #4
 
elite*gold: 0
Join Date: Dec 2009
Posts: 1,622
Received Thanks: 2,070
Quote:
Originally Posted by Bot_interesierter View Post
@Medix
Die Privileges setzt er doch in der insertDll Funktion, die übrigens Copypasta von Codeproject ist und allgemein keinen zuverlässigen Weg für eine Dll Injektion darstellt.

Es ist eine ganze Menge Mist in diesem Code, beispielsweise sollte man PROCESS_ALL_ACCESS niemals verwenden, stattdessen sollte man sich nur die Rechte holen die man wirklich braucht, welche das genau sind ist auf MSDN nachzulesen.
Dann wäre da noch das die insertDll Funktionen einen std::string als zweites Argument nimmt, der TE allerdings einen const char* übergibt, außerdem wird in Tokenhandle geleakt.
@TE
Wir brauchen mehr Informationen um dir ordentlich helfen zu können, welches Windows verwendest du, handelt es sich um eine 32bit oder 64bit Applikation, hast du schon überprüft ob der String ordentlich in den Zielprozess geschrieben wird?
Auch ist es möglich das in deinem Zielprozess ASLR aktiv ist, damit wäre deine Methode die LoadLibraryA Funktion zu lokalisieren schonmal nicht korrekt.
Übrigens ist es besser einen richtigen ThreadProc in den Zielprozess zu injizieren und über diesen dann die LoadLibrary API aufzurufen, denn die LoadLibrary API ist nicht dazu gemacht über CreateRemoteThread aufgerufen zu werden.
Ja die funktion habe ich aus dem interdet, weil ich in c++ keine komplexen funktionen schreiben kann.

- Win7 64-Bit

Ich möchte einen Launcher machen, welcher auf 32, und 64 bit funktionieren sollte.

Er soll eigendlich nur auf den Prozess S4Client.exe warten, und die dll JustHack.dll Injizieren.

Diese Methode hat bei meinem Launcher, welcher den prozes startet funktioniert, aber ich will diesmal nur auf den prozes warten und dann injizieren.

Werde mal schauen was ich machen kann,
freehuntx is offline  
Old 09/05/2011, 18:00   #5
 
elite*gold: 254
Join Date: Jun 2011
Posts: 214
Received Thanks: 42
Quote:
Originally Posted by phrenesis View Post
wieso nimmst du nicht einen fertigen injector?
Man muss doch nicht immer einen fertigen nehmen.
Vielleicht will er ja nicht nur hacken, sonder nebenbei auch mal was lernen.
wutax is offline  
Thanks
1 User
Old 09/05/2011, 18:33   #6
 
elite*gold: 0
Join Date: Dec 2009
Posts: 1,622
Received Thanks: 2,070
Quote:
Originally Posted by wutax View Post
Man muss doch nicht immer einen fertigen nehmen.
Vielleicht will er ja nicht nur hacken, sonder nebenbei auch mal was lernen.
Mir geht es ja nicht ums injecten an sich, dass könnte ich ja mit perx machen oder in autoit, aber wills einfach in c++ hinbekommen.

Naja werde mir vielleicht nochmal genau angucken müssen wie die insertdll funktion genau funktioniert.
freehuntx is offline  
Old 09/05/2011, 18:53   #7
 
elite*gold: 0
Join Date: Apr 2006
Posts: 6,597
Received Thanks: 1,830
Quote:
Originally Posted by Bot_interesierter View Post
@Medix
Die Privileges setzt er doch in der insertDll Funktion, die übrigens Copypasta von Codeproject ist und allgemein keinen zuverlässigen Weg für eine Dll Injektion darstellt.

.
ups übersehen
Medix is offline  
Old 09/05/2011, 21:08   #8
 
link's Avatar
 
elite*gold: 1
Join Date: Jul 2005
Posts: 553
Received Thanks: 454
Debug den Code bzw. bau halt einfach mal ein paar Ausgaben ein:
Lass dir die Handles und Rückgabewerte der einzelnen Funktionen anzeigen, sodass du siehst, wo es nicht mehr weitergeht und dann überprüfst du einfach mit GetLastError, was falsch läuft (GetExitCodeThread zeigt dir den Rückgabewert des Threads an).
Du könntest den Zielprozess auch mal debuggen, um zu sehen, was dein Injector dort eigentlich in den Speicher schreibt.

Btw. bedenke, dass du x64 Dateien nur in x64 Prozesse bzw. x86 Dateien nur in x86 Prozesse injizieren kannst.
Außerdem muss bei deinem VirtualFreeEx-Aufruf der dritte Parameter gleich 0 sein.
link is offline  
Thanks
1 User
Reply


Similar Threads Similar Threads
Intervention Fail | Quickscope Fail | Lobby Fail
08/11/2011 - Call of Duty - 16 Replies
Hallo Leute, Zuerst zum Intervention Fail: ich habe seit einiger Zeit in MW2 das Problem, dass ich nurnoch Hitmaker bekomme. Ich benutze eine Intervention mit Vollmantelgeschoss und Feuerkraft(Pro) Egal ich ich stundenlang ziele, oder einen Quickscope mache, ich bekomme einfach nur einen Hitmaker. Eines meiner neusten Probleme ist, dass die Intervention garnicht mehr trifft. Egal ob Quickscope oder Hardscope, der Schuss geht daneben. In 70% der Fälle. selbst wenn ich genau vor dem...
GRÖSSTER FAIL EINES MODERATOREN ! SO EIN EPIC FAIL WIE NOCH NIE !
08/10/2011 - Off Topic - 5 Replies
.
CYRI Fail oder Laptopt Fail.
04/17/2011 - Technical Support - 3 Replies
Bitteschön dankeschön, was denn nun ^^ ich hoffe ihr sehts ImageShack® - Online Photo and Video Hosting



All times are GMT +1. The time now is 20:26.


Powered by vBulletin®
Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
SEO by vBSEO ©2011, Crawlability, Inc.
This site is protected by reCAPTCHA and the Google Privacy Policy and Terms of Service apply.

Support | Contact Us | FAQ | Advertising | Privacy Policy | Terms of Service | Abuse
Copyright ©2025 elitepvpers All Rights Reserved.