Proces się uruchamia, gra nie działa

0

To znowu ja, piekło ludzi ogarniętych ;) Mam problem, mianowicie proces gry poprawnie się uruchamia, ale nie pokazuje się ona jako aplikacja ani na pasku zadań, jej proces jednak jest. Oto potrzebny fragment kodu:

  if(!CreateProcessA("D:\\GTASA\\GTASA\\gta_sa.exe",
                  GetCommandLineA(),
                  NULL,
                  NULL,
                  FALSE,
                  CREATE_SUSPENDED,
                  NULL,
                  NULL,
                  &si,
                  &pi) )
                  {
                    printf( "Could not create process. (%ld)", GetLastError() );
                  return 0;
                  }

                  outputToConsole("Gra zostala uruchomiona!");


                  WaitForSingleObject( pi.hProcess, INFINITE );
                  outputToConsole("Proces gry zostal wylaczony.");
                  CloseHandle( pi.hProcess );
                  CloseHandle( pi.hThread );

Z góry dzięki za pomoc.

0

Niestety, nie można znaleźć żądanej strony.

0

Poprawiłem, teraz jest:

 
    PROCESS_INFORMATION pi;
    STARTUPINFO si;

    ZeroMemory( & pi, sizeof( pi ) );
    ZeroMemory( & si, sizeof( si ) );
    si.cb = sizeof( si );

    if(!CreateProcessA("D:\\GTASA\\GTASA\\gta_sa.exe",
                  GetCommandLineA(),
                  NULL,
                  NULL,
                  FALSE,
                  CREATE_SUSPENDED,
                  NULL,
                  NULL,
                  &si,
                  &pi) )
                  {
                    printf( "Could not create process. (%ld)", GetLastError() );
                  return 0;
                  }

                  // tutaj mozna sie wczepic w gta

                  ResumeThread ( pi.hThread );
                  // ponizej tej funkcji juz nie

                  outputToConsole("Gra zostala uruchomiona!");



                  WaitForSingleObject( pi.hProcess, INFINITE );
                  outputToConsole("Proces gry zostal wylaczony.");
                  CloseHandle( pi.hProcess );
                  CloseHandle( pi.hThread );

Ale wciąż nie działa.

0

A co zwraca GetLastError?

0

https://msdn.microsoft.com/en-us/library/windows/desktop/ms684863(v=vs.85).aspx wklejałem linka na tablecie i coś się zwaliło

0
kAzek napisał(a):

A co zwraca GetLastError?

Myślałem że przecież nic nie zwraca, a tu proszę! 1813. Ale dzięki za pomoc, właśnie odpisali mi na stackoverflow i.. działa! :DD

0

No dobra, to teraz coś innego. Wiecie może w jaki sposób wygodnie podpiąć się pod proces? Chciałbym teraz się wpiąć w proces gry i zmieniać wartości adresów.

0

chcesz zmieniać zmienne w innej aplikacji?

0

Tak, ale w tej do której kodu źródłowego nie mam dostępu. Zakodziłem coś takiego: (umieściłem po linii outputToConsole("Gra zostala uruchomiona!"); )

         int lel = 6;
        WriteProcessMemory(pi.hProcess, (void *)0xC8D4C0, &lel, (DWORD)1, NULL); // usuwamy splashscreena od nvidii

ale nie działa, powinno usuwać splashscreena na starcie gry.

0

Cofam to, nie działa. Znaczy dałem ustawianie kasy po sleep(50000) to działało, ale jak chce splashscreena wyłączyć to już nie działa.

0

Hmmm może to ci pomoże jeżeli chcesz hakować funkcje wyświetlająca ekran powitalny.
http://www.moddb.com/groups/ibepex/tutorials/function-hooking

0
konserwa napisał(a):

Hmmm może to ci pomoże jeżeli chcesz hakować funkcje wyświetlająca ekran powitalny.
http://www.moddb.com/groups/ibepex/tutorials/function-hooking

Ano, pomogło. To teraz taki problem;
Mam folder z .exe programu i pozniej z .dllka
A takze mam folder z gra.

Jak teraz podpiac dllke pod gre, i jednoczesnie moc wywolywac eksportowane funkcje z poziomu exe programu?

0

Okej, wróciłem. Dodałem do swojej apki injection DLL, a plik main.cpp mojej DLL'ki wygląda tak:

 #include <windows.h>
#include <stdio.h>
#include <string.h>

#define kasa 0x00B7CE50

template < class T, class U >
void MemPut ( U ptr, const T value )
{
    if ( *(T*)ptr != value )
        memcpy ( (void*)ptr, &value, sizeof ( T ) );
}


int initHooks(){
             MemPut < BYTE > ( 0x468EB5, 0xEB );
             MemPut < BYTE > ( 0x468EB6, 0x32 );
         //    WriteProcessMemory(GetCurrentProcess(), (void*)kasa, (void*)10000, 5, NULL);
             MemPut < BYTE > ( 0x72DF0D, 0xEB );
             MemPut < BYTE > ( 0x441770, 0xC3 );
return 1;
}


// glowna funkcja DLLki
extern "C" BOOL __stdcall DllMain(HMODULE hDLL, DWORD Reason, LPVOID Reserved)
{
    switch(Reason)
    {
        case DLL_PROCESS_ATTACH:
            initHooks();
        break;

        case DLL_PROCESS_DETACH:
            MessageBox(0,"DLLka usunieta","komunikat",0);
        break;

    }
    return TRUE;
}

DLLka jest injectowana po funkcji resumeThread w .exe. O ile jest poprawnie injectowana bo przedtem wyswietlalem komunikat po injectowaniu, to tyle ustawianie adresów coś nie działa. Pierwsza linijka w initHooks odpowiada za wyłączenie ładowania main.scm, jednak ten plik ciągle się ładuje. Co jest nie tak? Dodam, że inne adresy też nie działają. Gdy przeglądałem kod multiplayera pewnego do SA bo czymś w tym rodzaju to ma być to zauważyłem że po podpięciu .dllki jest wykonywana funkcja AddUtf8FileHooks, ale nie wiem czemu to ma służyć. Może muszę coś takiego zrobić? Funkcja: https://github.com/multitheftauto/mtasa-blue/blob/9d2147b273fa009ad764a90ac4a55a773fea8bf2/Shared/sdk/SharedUtil.Win32Utf8FileHooks.hpp linijka 548

1 użytkowników online, w tym zalogowanych: 0, gości: 1