[DLL Injection] Firefox.exe



  • Vl noch zur Info:

    Habe es am Beispiel von DeepBurner auch getestet:

    My DLL Injector

    Library: dll.dll
    Process: DeepBurner.exe

    path is: C:\Dev-Cpp\projects\dll.dll
    Waiting for DeepBurner.exe...
    Process detected!

    PID: 1136

    Injecting dll.dll...

    Thread has been closed...
    [information] Got GetExitCodeThread: 1628176384
    Dll succesfully injected!
    Drücken Sie eine beliebige Taste . . .

    Dann habe ich es für Notepad getestet, und siehe da:

    My DLL Injector

    Library: dll.dll
    Process: notepad.exe

    path is: C:\Dev-Cpp\projects\dll.dll
    Waiting for notepad.exe...
    Process detected!

    PID: 6032

    Injecting dll.dll...

    Injection failed
    Drücken Sie eine beliebige Taste . . .

    GetLastError()

    Gibt auch kein Ergebnis 😞



  • Ich gehe mal davon aus das Dein Injector schon läuft bevor Du den Targetprozess startest?
    Falls das so ist: Bevor Du injectes solltest Du unbedingt ein bisschen Zeit vergehen lassen, bis sich der Prozess vollständig initialisiert hat.

    Das hier

    while (!ProcessExists(ProcessName)){ }
    

    Ist übrigens auch Mist und verbrät viel Rechenzeit.
    Mach mal so:

    while (!ProcessExists(ProcessName)){ Sleep(1000);}
    
    // zu Testzwecken:
    // zusätzlich Zeit einräumen für das starten des Prozesses
    Sleep(5000);
    


  • Hallo,

    Danke für deine Antwort.
    Nein ich lasse den Prozess in der Regel 1-2 Minuten laufen, bevor ich injecte...

    HAbe den Code mal angepasst - leider auch keine Änderungen.

    Gruss



  • In Deinem Code waren noch einige komische Dinge.
    So wie hier unten geht es bei mir problemlos. Achtung ich habe hier mit wchar_t gearbeitet.

    Natürlich ohne Gewähr.

    // Injector.cpp : Definiert den Einstiegspunkt für die Konsolenanwendung.
    //
    
    #include "stdafx.h"
    #include <iostream>
    #include <string>
    #include <windows.h>
    #include <tlhelp32.h>
    
    using namespace std;
    
    DWORD GetProcID(wstring ProcName)
    {
        HANDLE hProcessSnap;
        PROCESSENTRY32 pe32;
    
        hProcessSnap = CreateToolhelp32Snapshot(TH32CS_SNAPPROCESS, 0);
        pe32.dwSize = sizeof(PROCESSENTRY32); //** I had problems for weeks until I realized this was missing -.-
        do
        {
        //cout << pe32.szExeFile <<"\n";
               if(pe32.szExeFile == ProcName)
               {
                  DWORD ProcId = pe32.th32ProcessID;
                  CloseHandle(hProcessSnap);
                  return ProcId;
               }
        }
        while(Process32Next(hProcessSnap, &pe32));
        CloseHandle(hProcessSnap);
    
        return 0;
    }
    
    bool ProcessExists(wstring process)
    {
        HANDLE hProcessSnap;
        PROCESSENTRY32 pe32;
        hProcessSnap = CreateToolhelp32Snapshot(TH32CS_SNAPPROCESS, 0);
        pe32.dwSize = sizeof(PROCESSENTRY32);
        do
        {
          if(pe32.szExeFile == process)
          {
           CloseHandle(hProcessSnap);
           return true;
          }
        }
        while(Process32Next(hProcessSnap, &pe32));
    
        CloseHandle(hProcessSnap);
    
        return false;
    } 
    
    int _tmain(int argc, wchar_t* argv[])
    {
    	wstring DLLName = L"InjectorDll.dll";
    	//wstring ProcessName = L"firefox.exe";
    	wstring ProcessName = L"notepad.exe";
    	//bool CloseAfterCorrectInjection=true;
    
    	DWORD procID = 0;
    	system("color a");
    	wcout << L"My DLL Injector\n" << endl;
    	wcout << L"Library: " << DLLName << endl;
    	wcout << L"Process: " << ProcessName << endl << endl;
    
    	wchar_t awBuffer[MAX_PATH];
    	GetCurrentDirectory(MAX_PATH, awBuffer) ;
    	wstring dll = awBuffer;
    	dll.append(L"\\");
    	dll.append(DLLName);
    
    	HMODULE hLocKernel32 = GetModuleHandle(L"Kernel32.dll");
    	FARPROC hLocLoadLibrary = GetProcAddress(hLocKernel32, "LoadLibraryW");
    	HANDLE hToken;
    	TOKEN_PRIVILEGES tkp;
    
    	if(OpenProcessToken(GetCurrentProcess(), TOKEN_ADJUST_PRIVILEGES | TOKEN_QUERY | PROCESS_ALL_ACCESS, &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);
    	}
    
    	HANDLE hProc = INVALID_HANDLE_VALUE;
    	wcout << L"Waiting for " << ProcessName << L"..." << endl;
    
    	while (!ProcessExists(ProcessName)){Sleep(1000);}
    
    	wcout << L"Process detected!" << endl << endl;
    	procID = GetProcID(ProcessName);
    	wcout << L"PID: " << procID  << endl << endl;
    	Sleep(2500);
    	wcout << L"Injecting " << dll << "..." << endl << endl;
    
    	LPVOID hRemoteMem = NULL;
    	hProc = OpenProcess(PROCESS_ALL_ACCESS, FALSE, procID);
    
    	if (hProc != INVALID_HANDLE_VALUE)
    	{
    		hRemoteMem = VirtualAllocEx(hProc, NULL, (dll.size() + 1) * sizeof(wchar_t), MEM_COMMIT, PAGE_READWRITE);
    
    		if (hRemoteMem != NULL)
    		{
    			DWORD numBytesWritten;
    			WriteProcessMemory(hProc, hRemoteMem, dll.c_str(), (dll.size() + 1) * sizeof(wchar_t), &numBytesWritten);
    			HANDLE hRemoteThread = CreateRemoteThread(hProc, NULL, 0, (LPTHREAD_START_ROUTINE)hLocLoadLibrary, hRemoteMem, 0, NULL);
    			bool res = false;
    
    			if (hRemoteThread != 0)
    			{
    				DWORD lpExitCode;
    				Sleep(1000);
    				GetExitCodeThread(hRemoteThread, &lpExitCode);
    
    				wcout << L"[information] Got GetExitCodeThread: " << lpExitCode << L" " << hex << lpExitCode <<endl;
    
    				if (lpExitCode != 0)
    				{
    					wcout << L"Dll succesfully injected!" << endl;
    				}
    				else
    				{
    					wcout << L"Injection failed " << GetLastError() << endl;
    				}
    
    				CloseHandle(hRemoteThread);
    			}
    			else
    			{
    				wcout << L"Injection failed " << GetLastError() << endl;
    			}
    		}
    		else
    		{
    			wcout << L"Injection failed " << GetLastError() << endl;
    		}
    	}
    	else
    	{
    		wcout << L"Injection failed " << GetLastError() << endl;
    	}
    
    	if (hProc != INVALID_HANDLE_VALUE)
    	{
    		if (hRemoteMem != NULL) VirtualFreeEx(hProc, hRemoteMem, (dll.size() + 1) * sizeof(wchar_t), MEM_RELEASE);
    		CloseHandle(hProc);
    	}
    
    	system("PAUSE");
    
    	return 0;
    }
    


  • Hallo,

    Danke.
    Hast du das mit Visual Studio C++ 2010 Express kompiliert?
    Dev-C++ lässt das nicht durch den Compiler (mal abgesehen von der stdafx.h)

    Danke und Gruss



  • Ja habe ich.
    Schmeiße Dev C++ weg. Nimm besser CodeBlocks oder VC++ Express.



  • Hab's jetzt mit VC++ versucht, jedoch schreit der Compiler nach 100terten Fehlern...
    Muss noch etwas inkludiert oder verändert werden?

    zur Info:

    testing.cpp(68): error C2679: Binärer Operator '<<': Es konnte kein Operator gefunden werden, der einen rechtsseitigen Operanden vom Typ 'std::wstring' akzeptiert (oder keine geeignete Konvertierung möglich)
    1> C:\Program Files (x86)\Microsoft Visual Studio 10.0\VC\include\ostream(679): kann 'std::basic_ostream<_Elem,_Traits> &std::operator <<<char,std::char_traits<char>>(std::basic_ostream<_Elem,_Traits> &,const char *)' sein
    1> with
    1> [
    1> _Elem=char,
    1> _Traits=std::char_traits<char>
    1> ]
    1> C:\Program Files (x86)\Microsoft Visual Studio 10.0\VC\include\ostream(726): oder "std::basic_ostream<_Elem,_Traits> &std::operator <<<char,std::char_traits<char>>(std::basic_ostream<_Elem,_Traits> &,char)"
    1> with
    1> [
    1> _Elem=char,
    1> _Traits=std::char_traits<char>
    1> ]
    1> C:\Program Files (x86)\Microsoft Visual Studio 10.0\VC\include\ostream(764): oder "std::basic_ostream<_Elem,_Traits> &std::operator <<<std::char_traits<char>>(std::basic_ostream<_Elem,_Traits> &,const char *)"
    1> with
    1> [
    1> _Elem=char,
    1> _Traits=std::char_traits<char>
    1> ]
    1> C:\Program Files (x86)\Microsoft Visual Studio 10.0\VC\include\ostream(811): oder "std::basic_ostream<_Elem,_Traits> &std::operator <<<std::char_traits<char>>(std::basic_ostream<_Elem,_Traits> &,char)"
    1> with
    1> [
    1> _Elem=char,
    1> _Traits=std::char_traits<char>
    1> ]
    1> C:\Program Files (x86)\Microsoft Visual Studio 10.0\VC\include\ostream(937): oder "std::basic_ostream<_Elem,_Traits> &std::operator <<<std::char_traits<char>>(std::basic_ostream<_Elem,_Traits> &,const signed char *)"
    1> with
    1> [
    1> _Elem=char,
    1> _Traits=std::char_traits<char>
    1> ]
    1> C:\Program Files (x86)\Microsoft Visual Studio 10.0\VC\include\ostream(944): oder "std::basic_ostream<_Elem,_Traits> &std::operator <<<std::char_traits<char>>(std::basic_ostream<_Elem,_Traits> &,signed char)"
    1> with
    1> [
    1> _Elem=char,
    1> _Traits=std::char_traits<char>
    1> ]
    1> C:\Program Files (x86)\Microsoft Visual Studio 10.0\VC\include\ostream(951): oder "std::basic_ostream<_Elem,_Traits> &std::operator <<<std::char_traits<char>>(std::basic_ostream<_Elem,_Traits> &,const unsigned char *)"
    1> with
    1> [
    1> _Elem=char,
    1> _Traits=std::char_traits<char>
    1> ]
    1> C:\Program Files (x86)\Microsoft Visual Studio 10.0\VC\include\ostream(958): oder "std::basic_ostream<_Elem,_Traits> &std::operator <<<std::char_traits<char>>(std::basic_ostream<_Elem,_Traits> &,unsigned char)"
    1> with
    1> [
    1> _Elem=char,
    1> _Traits=std::char_traits<char>
    1> ]
    1> C:\Program Files (x86)\Microsoft Visual Studio 10.0\VC\include\ostream(968): oder "std::basic_ostream<_Elem,_Traits> &std::operator <<<char,std::char_traits<char>,std::wstring>(std::basic_ostream<_Elem,_Traits> &&,_Ty)"
    1> with
    1> [
    1> _Elem=char,
    1> _Traits=std::char_traits<char>,
    1> _Ty=std::wstring
    1> ]
    1> C:\Program Files (x86)\Microsoft Visual Studio 10.0\VC\include\ostream(1085): oder "std::basic_ostream<_Elem,_Traits> &std::operator <<<char,std::char_traits<char>>(std::basic_ostream<_Elem,_Traits> &,const std::error_code &)"
    1> with
    1> [
    1> _Elem=char,
    1> _Traits=std::char_traits<char>
    1> ]
    1> C:\Program Files (x86)\Microsoft Visual Studio 10.0\VC\include\ostream(186): oder "std::basic_ostream<_Elem,_Traits> &std::basic_ostream<_Elem,_Traits>::operator <<(std::basic_ostream<_Elem,_Traits> &(__cdecl *)(std::basic_ostream<_Elem,_Traits> &))"
    1> with
    1> [
    1> _Elem=char,
    1> _Traits=std::char_traits<char>
    1> ]
    1> C:\Program Files (x86)\Microsoft Visual Studio 10.0\VC\include\ostream(192): oder "std::basic_ostream<_Elem,_Traits> &std::basic_ostream<_Elem,_Traits>::operator <<(std::basic_ios<_Elem,_Traits> &(__cdecl *)(std::basic_ios<_Elem,_Traits> &))"
    1> with
    1> [
    1> _Elem=char,
    1> _Traits=std::char_traits<char>
    1> ]
    1> C:\Program Files (x86)\Microsoft Visual Studio 10.0\VC\include\ostream(199): oder "std::basic_ostream<_Elem,_Traits> &std::basic_ostream<_Elem,_Traits>::operator <<(std::ios_base &(__cdecl *)(std::ios_base &))"
    1> with
    1> [
    1> _Elem=char,
    1> _Traits=std::char_traits<char>
    1> ]
    1> C:\Program Files (x86)\Microsoft Visual Studio 10.0\VC\include\ostream(206): oder "std::basic_ostream<_Elem,_Traits> &std::basic_ostream<_Elem,_Traits>::operator <<(std::_Bool)"
    1> with
    1> [
    1> _Elem=char,
    1> _Traits=std::char_traits<char>
    1> ]
    1> C:\Program Files (x86)\Microsoft Visual Studio 10.0\VC\include\ostream(226): oder "std::basic_ostream<_Elem,_Traits> &std::basic_ostream<_Elem,_Traits>::operator <<(short)"
    1> with
    1> [
    1> _Elem=char,
    1> _Traits=std::char_traits<char>
    1> ]
    1> C:\Program Files (x86)\Microsoft Visual Studio 10.0\VC\include\ostream(260): oder "std::basic_ostream<_Elem,_Traits> &std::basic_ostream<_Elem,_Traits>::operator <<(unsigned short)"
    1> with
    1> [
    1> _Elem=char,
    1> _Traits=std::char_traits<char>
    1> ]
    1> C:\Program Files (x86)\Microsoft Visual Studio 10.0\VC\include\ostream(280): oder "std::basic_ostream<_Elem,_Traits> &std::basic_ostream<_Elem,_Traits>::operator <<(int)"
    1> with
    1> [
    1> _Elem=char,
    1> _Traits=std::char_traits<char>
    1> ]
    1> C:\Program Files (x86)\Microsoft Visual Studio 10.0\VC\include\ostream(305): oder "std::basic_ostream<_Elem,_Traits> &std::basic_ostream<_Elem,_Traits>::operator <<(unsigned int)"
    1> with
    1> [
    1> _Elem=char,
    1> _Traits=std::char_traits<char>
    1> ]
    1> C:\Program Files (x86)\Microsoft Visual Studio 10.0\VC\include\ostream(325): oder "std::basic_ostream<_Elem,_Traits> &std::basic_ostream<_Elem,_Traits>::operator <<(long)"
    1> with
    1> [
    1> _Elem=char,
    1> _Traits=std::char_traits<char>
    1> ]
    1> C:\Program Files (x86)\Microsoft Visual Studio 10.0\VC\include\ostream(345): oder "std::basic_ostream<_Elem,_Traits> &std::basic_ostream<_Elem,_Traits>::operator <<(unsigned long)"
    1> with
    1> [
    1> _Elem=char,
    1> _Traits=std::char_traits<char>
    1> ]
    1> C:\Program Files (x86)\Microsoft Visual Studio 10.0\VC\include\ostream(366): oder "std::basic_ostream<_Elem,_Traits> &std::basic_ostream<_Elem,_Traits>::operator <<(__int64)"
    1> with
    1> [
    1> _Elem=char,
    1> _Traits=std::char_traits<char>
    1> ]
    1> C:\Program Files (x86)\Microsoft Visual Studio 10.0\VC\include\ostream(386): oder "std::basic_ostream<_Elem,_Traits> &std::basic_ostream<_Elem,_Traits>::operator <<(unsigned __int64)"
    1> with
    1> [
    1> _Elem=char,
    1> _Traits=std::char_traits<char>
    1> ]
    1> C:\Program Files (x86)\Microsoft Visual Studio 10.0\VC\include\ostream(407): oder "std::basic_ostream<_Elem,_Traits> &std::basic_ostream<_Elem,_Traits>::operator <<(float)"
    1> with
    1> [
    1> _Elem=char,
    1> _Traits=std::char_traits<char>
    1> ]
    1> C:\Program Files (x86)\Microsoft Visual Studio 10.0\VC\include\ostream(427): oder "std::basic_ostream<_Elem,_Traits> &std::basic_ostream<_Elem,_Traits>::operator <<(double)"
    1> with
    1> [
    1> _Elem=char,
    1> _Traits=std::char_traits<char>
    1> ]
    1> C:\Program Files (x86)\Microsoft Visual Studio 10.0\VC\include\ostream(447): oder "std::basic_ostream<_Elem,_Traits> &std::basic_ostream<_Elem,_Traits>::operator <<(long double)"
    1> with
    1> [
    1> _Elem=char,
    1> _Traits=std::char_traits<char>
    1> ]
    1> C:\Program Files (x86)\Microsoft Visual Studio 10.0\VC\include\ostream(467): oder "std::basic_ostream<_Elem,_Traits> &std::basic_ostream<_Elem,_Traits>::operator <<(const void *)"
    1> with
    1> [
    1> _Elem=char,
    1> _Traits=std::char_traits<char>
    1> ]
    1> C:\Program Files (x86)\Microsoft Visual Studio 10.0\VC\include\ostream(487): oder "std::basic_ostream<_Elem,_Traits> &std::basic_ostream<_Elem,_Traits>::operator <<(std::basic_streambuf<_Elem,_Traits> *)"
    1> with
    1> [
    1> _Elem=char,
    1> _Traits=std::char_traits<char>
    1> ]
    1> bei Anpassung der Argumentliste '(std::basic_ostream<_Elem,_Traits>, std::wstring)'
    1> with
    1> [
    1> _Elem=char,
    1> _Traits=std::char_traits<char>
    1> ]
    1>testing.cpp(90): error C2679: Binärer Operator '<<': Es konnte kein Operator gefunden werden, der einen rechtsseitigen Operanden vom Typ 'std::wstring' akzeptiert (oder keine geeignete Konvertierung möglich)
    1> C:\Program Files (x86)\Microsoft Visual Studio 10.0\VC\include\ostream(679): kann 'std::basic_ostream<_Elem,_Traits> &std::operator <<<char,std::char_traits<char>>(std::basic_ostream<_Elem,_Traits> &,const char *)' sein
    1> with
    1> [
    1> _Elem=char,
    1> _Traits=std::char_traits<char>
    1> ]
    1> C:\Program Files (x86)\Microsoft Visual Studio 10.0\VC\include\ostream(726): oder "std::basic_ostream<_Elem,_Traits> &std::operator <<<char,std::char_traits<char>>(std::basic_ostream<_Elem,_Traits> &,char)"
    1> with
    1> [
    1> _Elem=char,
    1> _Traits=std::char_traits<char>
    1> ]
    1> C:\Program Files (x86)\Microsoft Visual Studio 10.0\VC\include\ostream(764): oder "std::basic_ostream<_Elem,_Traits> &std::operator <<<std::char_traits<char>>(std::basic_ostream<_Elem,_Traits> &,const char *)"
    1> with
    1> [
    1> _Elem=char,
    1> _Traits=std::char_traits<char>
    1> ]
    1> C:\Program Files (x86)\Microsoft Visual Studio 10.0\VC\include\ostream(811): oder "std::basic_ostream<_Elem,_Traits> &std::operator <<<std::char_traits<char>>(std::basic_ostream<_Elem,_Traits> &,char)"
    1> with
    1> [
    1> _Elem=char,
    1> _Traits=std::char_traits<char>
    1> ]
    1> C:\Program Files (x86)\Microsoft Visual Studio 10.0\VC\include\ostream(937): oder "std::basic_ostream<_Elem,_Traits> &std::operator <<<std::char_traits<char>>(std::basic_ostream<_Elem,_Traits> &,const signed char *)"
    1> with
    1> [
    1> _Elem=char,
    1> _Traits=std::char_traits<char>
    1> ]
    1> C:\Program Files (x86)\Microsoft Visual Studio 10.0\VC\include\ostream(944): oder "std::basic_ostream<_Elem,_Traits> &std::operator <<<std::char_traits<char>>(std::basic_ostream<_Elem,_Traits> &,signed char)"
    1> with
    1> [
    1> _Elem=char,
    1> _Traits=std::char_traits<char>
    1> ]
    1> C:\Program Files (x86)\Microsoft Visual Studio 10.0\VC\include\ostream(951): oder "std::basic_ostream<_Elem,_Traits> &std::operator <<<std::char_traits<char>>(std::basic_ostream<_Elem,_Traits> &,const unsigned char *)"
    1> with
    1> [
    1> _Elem=char,
    1> _Traits=std::char_traits<char>
    1> ]
    1> C:\Program Files (x86)\Microsoft Visual Studio 10.0\VC\include\ostream(958): oder "std::basic_ostream<_Elem,_Traits> &std::operator <<<std::char_traits<char>>(std::basic_ostream<_Elem,_Traits> &,unsigned char)"
    1> with
    1> [
    1> _Elem=char,
    1> _Traits=std::char_traits<char>
    1> ]
    1> C:\Program Files (x86)\Microsoft Visual Studio 10.0\VC\include\ostream(968): oder "std::basic_ostream<_Elem,_Traits> &std::operator <<<char,std::char_traits<char>,std::wstring>(std::basic_ostream<_Elem,_Traits> &&,_Ty)"
    1> with
    1> [
    1> _Elem=char,
    1> _Traits=std::char_traits<char>,
    1> _Ty=std::wstring
    1> ]
    1> C:\Program Files (x86)\Microsoft Visual Studio 10.0\VC\include\ostream(1085): oder "std::basic_ostream<_Elem,_Traits> &std::operator <<<char,std::char_traits<char>>(std::basic_ostream<_Elem,_Traits> &,const std::error_code &)"
    1> with
    1> [
    1> _Elem=char,
    1> _Traits=std::char_traits<char>
    1> ]
    1> C:\Program Files (x86)\Microsoft Visual Studio 10.0\VC\include\ostream(186): oder "std::basic_ostream<_Elem,_Traits> &std::basic_ostream<_Elem,_Traits>::operator <<(std::basic_ostream<_Elem,_Traits> &(__cdecl *)(std::basic_ostream<_Elem,_Traits> &))"
    1> with
    1> [
    1> _Elem=char,
    1> _Traits=std::char_traits<char>
    1> ]
    1> C:\Program Files (x86)\Microsoft Visual Studio 10.0\VC\include\ostream(192): oder "std::basic_ostream<_Elem,_Traits> &std::basic_ostream<_Elem,_Traits>::operator <<(std::basic_ios<_Elem,_Traits> &(__cdecl *)(std::basic_ios<_Elem,_Traits> &))"
    1> with
    1> [
    1> _Elem=char,
    1> _Traits=std::char_traits<char>
    1> ]
    1> C:\Program Files (x86)\Microsoft Visual Studio 10.0\VC\include\ostream(199): oder "std::basic_ostream<_Elem,_Traits> &std::basic_ostream<_Elem,_Traits>::operator <<(std::ios_base &(__cdecl *)(std::ios_base &))"
    1> with
    1> [
    1> _Elem=char,
    1> _Traits=std::char_traits<char>
    1> ]
    1> C:\Program Files (x86)\Microsoft Visual Studio 10.0\VC\include\ostream(206): oder "std::basic_ostream<_Elem,_Traits> &std::basic_ostream<_Elem,_Traits>::operator <<(std::_Bool)"
    1> with
    1> [
    1> _Elem=char,
    1> _Traits=std::char_traits<char>
    1> ]
    1> C:\Program Files (x86)\Microsoft Visual Studio 10.0\VC\include\ostream(226): oder "std::basic_ostream<_Elem,_Traits> &std::basic_ostream<_Elem,_Traits>::operator <<(short)"
    1> with
    1> [
    1> _Elem=char,
    1> _Traits=std::char_traits<char>
    1> ]
    1> C:\Program Files (x86)\Microsoft Visual Studio 10.0\VC\include\ostream(260): oder "std::basic_ostream<_Elem,_Traits> &std::basic_ostream<_Elem,_Traits>::operator <<(unsigned short)"
    1> with
    1> [
    1> _Elem=char,
    1> _Traits=std::char_traits<char>
    1> ]
    1> C:\Program Files (x86)\Microsoft Visual Studio 10.0\VC\include\ostream(280): oder "std::basic_ostream<_Elem,_Traits> &std::basic_ostream<_Elem,_Traits>::operator <<(int)"
    1> with
    1> [
    1> _Elem=char,
    1> _Traits=std::char_traits<char>
    1> ]
    1> C:\Program Files (x86)\Microsoft Visual Studio 10.0\VC\include\ostream(305): oder "std::basic_ostream<_Elem,_Traits> &std::basic_ostream<_Elem,_Traits>::operator <<(unsigned int)"
    1> with
    1> [
    1> _Elem=char,
    1> _Traits=std::char_traits<char>
    1> ]
    1> C:\Program Files (x86)\Microsoft Visual Studio 10.0\VC\include\ostream(325): oder "std::basic_ostream<_Elem,_Traits> &std::basic_ostream<_Elem,_Traits>::operator <<(long)"
    1> with
    1> [
    1> _Elem=char,
    1> _Traits=std::char_traits<char>
    1> ]
    1> C:\Program Files (x86)\Microsoft Visual Studio 10.0\VC\include\ostream(345): oder "std::basic_ostream<_Elem,_Traits> &std::basic_ostream<_Elem,_Traits>::operator <<(unsigned long)"
    1> with
    1> [
    1> _Elem=char,
    1> _Traits=std::char_traits<char>



  • Er kann kein geeignetes casting für die Streamoperationen finden. Aber eigentlich sollte es so gehen wie ich es gepostet habe.

    Was steht denn bei Dir zB in Zeile 68 und 90?



  • Wenn Du nicht selber dahinter kommts, solltest Du besser noch an den Grundlagen arbeiten.



  • Zeile 68:

    cout << L"Process: " << ProcessName << endl << endl;
    

    Zeile 90:

    cout << L"Waiting for " << ProcessName << L"..." << endl;
    

    Scheint mir dass die cout's mit dem "L" Probleme machen?



  • Es sieht wirklich danach aus, das VC++ Probleme hat:
    Hab den Code mal angepasst (couts auskommentiert, tmain in main umbenannt)

    testing.obj : error LNK2028: Nicht aufgelöstes Token (0A000385) ""extern "C" int __stdcall AdjustTokenPrivileges(void *,int,struct _TOKEN_PRIVILEGES *,unsigned long,struct _TOKEN_PRIVILEGES *,unsigned long *)" (?AdjustTokenPrivileges@@$$J224YGHPAXHPAU_TOKEN_PRIVILEGES@@K1PAK@Z)", auf das in Funktion ""int __cdecl main(int,wchar_t * * const)" (?main@@$$HYAHHQAPA_W@Z)" verwiesen wird.
    1>testing.obj : error LNK2028: Nicht aufgelöstes Token (0A000386) ""extern "C" int __stdcall LookupPrivilegeValueW(wchar_t const *,wchar_t const *,struct _LUID *)" (?LookupPrivilegeValueW@@$$J212YGHPB_W0PAU_LUID@@@Z)", auf das in Funktion ""int __cdecl main(int,wchar_t * * const)" (?main@@$$HYAHHQAPA_W@Z)" verwiesen wird.
    1>testing.obj : error LNK2028: Nicht aufgelöstes Token (0A000388) ""extern "C" int __stdcall OpenProcessToken(void *,unsigned long,void * *)" (?OpenProcessToken@@$$J212YGHPAXKPAPAX@Z)", auf das in Funktion ""int __cdecl main(int,wchar_t * * const)" (?main@@$$HYAHHQAPA_W@Z)" verwiesen wird.
    1>testing.obj : error LNK2019: Verweis auf nicht aufgelöstes externes Symbol ""extern "C" int __stdcall AdjustTokenPrivileges(void *,int,struct _TOKEN_PRIVILEGES *,unsigned long,struct _TOKEN_PRIVILEGES *,unsigned long *)" (?AdjustTokenPrivileges@@$$J224YGHPAXHPAU_TOKEN_PRIVILEGES@@K1PAK@Z)" in Funktion ""int __cdecl main(int,wchar_t * * const)" (?main@@$$HYAHHQAPA_W@Z)".
    1>testing.obj : error LNK2019: Verweis auf nicht aufgelöstes externes Symbol ""extern "C" int __stdcall LookupPrivilegeValueW(wchar_t const *,wchar_t const *,struct _LUID *)" (?LookupPrivilegeValueW@@$$J212YGHPB_W0PAU_LUID@@@Z)" in Funktion ""int __cdecl main(int,wchar_t * * const)" (?main@@$$HYAHHQAPA_W@Z)".
    1>testing.obj : error LNK2019: Verweis auf nicht aufgelöstes externes Symbol ""extern "C" int __stdcall OpenProcessToken(void *,unsigned long,void * *)" (?OpenProcessToken@@$$J212YGHPAXKPAPAX@Z)" in Funktion ""int __cdecl main(int,wchar_t * * const)" (?main@@$$HYAHHQAPA_W@Z)".



  • gestg schrieb:

    Zeile 68:

    cout << L"Process: " << ProcessName << endl << endl;
    

    Zeile 90:

    cout << L"Waiting for " << ProcessName << L"..." << endl;
    

    Scheint mir dass die cout's mit dem "L" Probleme machen?

    Ja, sicher. Entweder Du lässt die "L" weg oder Du solltest da wcout (also die wide char Variante) einsetzen.

    Es sieht wirklich danach aus, das VC++ Probleme hat:
    Hab den Code mal angepasst (couts auskommentiert, tmain in main umbenannt)

    Nein, Du scheinst einfach nur nicht genug Erfahrung zu haben. Vielleicht ist es wirklich besser Du vertiefst erst einmal die Grundlagen.



  • Hallo, versuch mal das hier:
    ( Injecten in Notepad und Windows Taschenrechner ging nicht. )

    Ich hab damit schonmal eine DLL erfolgreich in einem Programm injectet (jetzt frag net welches prog ich weiss es nicht mehr ^^ )

    Wenn du SetDebugPrevileg benutzt dann müsste es auch in notepad gehen.
    Zumindest laut der Quelle (www.elitepvpers.com/forum/) wo ich mich kurz dazu eingelesen hatte.

    Sonst erstell da halt einen Thread falls du das Tutorial dort nicht findest. (Ich finds auch gerade nicht auf die schnelle^^ )

    DLL

    #include <windows.h>
    
    void InjNachricht()//der erstellte Thread
    {
        MessageBox(0, "Hallo", " Hallo", 0);//4. Eine Message Box
    }
    
    int WINAPI DllMain(HINSTANCE hInst,DWORD reason,LPVOID reserved)//1. Beim öffnen der Dll wird diese funktion ausgeführt
    {
        if(reason==DLL_PROCESS_ATTACH)//2. Falls der Grund des Aufrufes der DllMain-Funktion das Anhängen an ein Prozesses ist..
        {
            CreateThread(0, 0, (LPTHREAD_START_ROUTINE) InjNachricht, 0, 0, 0);//3.erstelle einen SubProzess, der die übergebene Funktion ausführt
        }
        return true;
    }
    

    DLL Injector

    #include "windows.h"
    #include <iostream>
    
    using namespace std;
    
    char const Path[]="C:\\Message Box.dll";
    
    int main(int argc, char* argv)
    {
    bool virt;
    bool write_ret;
    
        HANDLE hWnd, hProcess, AllocAdresse, hRemoteThread;
        DWORD PID;
    
    // Injecten in notepad oder den windows taschenrechner ging nicht
    
    	hWnd = FindWindow(0,"Irgendein Programm");
    	cout<<"FindWindow: " << hWnd<< endl;
    
        GetWindowThreadProcessId((HWND)hWnd, &PID);
    
    	hProcess = OpenProcess(PROCESS_ALL_ACCESS, false, PID);
    	cout<<"OpenProcess: " << hProcess << endl;
    
    	AllocAdresse = VirtualAllocEx(hProcess, 0, sizeof(Path), MEM_COMMIT, PAGE_EXECUTE_READWRITE);
    	cout<<"VirtualAllocEx: " << AllocAdresse <<endl;
    
    	write_ret = WriteProcessMemory(hProcess, (void*)AllocAdresse, (void*)Path, sizeof(Path), 0);
    	cout<<"WriteProcessMemory: " << write_ret << endl;
    
    	hRemoteThread=CreateRemoteThread(hProcess, 0, 0, (LPTHREAD_START_ROUTINE) GetProcAddress(GetModuleHandle("kernel32.dll"),"LoadLibraryA"), AllocAdresse, 0, 0);
    	cout<<"CreateRemoteThread: " << hRemoteThread << endl;
    
        WaitForSingleObject(hRemoteThread, INFINITE);
    
    	virt =	VirtualFreeEx(hProcess, AllocAdresse, sizeof(Path), MEM_DECOMMIT);
    	cout<<"VirtualFreeE: " << virt << endl;
    
    	CloseHandle(hProcess);
    
    	system("PAUSE");
    }
    


  • VirtualAllocEx hat folgende Parameter:

    LPVOID WINAPI VirtualAllocEx(
    __in HANDLE hProcess,
    __in_opt LPVOID lpAddress,
    __in SIZE_T dwSize,
    __in DWORD flAllocationType,
    __in DWORD flProtect
    );

    dwSize ist definiert als: "The size of the region of memory to allocate, in bytes."

    In den Codebeispielen im ersten Post sowie im Post über mir sehe ich aber:

    gestg schrieb:

    LPVOID hRemoteMem = VirtualAllocEx(hProc, NULL, dll.size(), MEM_COMMIT, PAGE_READWRITE);
    

    _ schrieb:

    AllocAdresse = VirtualAllocEx(hProcess, 0, sizeof(Path), MEM_COMMIT, PAGE_EXECUTE_READWRITE);
    

    Hier wird doch jeweils die Größe des Char-Arrays angegeben, in dem der Pfad zur Injection-DLL abgelegt ist - das kann doch nicht richtig sein, oder?



  • Doch, das kann richtig sein. Normalerweise wird im Target Prozess die Funktion LoadLibrary aufgerufen, die dann die DLL nachlädt. Und dazu braucht man halt den kompletten Pfad zur DLL.
    Hab mir den Code hier aber nicht genau genug angeguckt um zu wissen, ob TE das so vorhat.


Anmelden zum Antworten