[DLL Injection] Firefox.exe



  • 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