Zmieniający sie adres bazowy, wstrzykiwanie dll

0

Cześć ;)

w czym tkwi problem:
otóż napisałem prostą funkcje która która będzie zmieniać mi wartość adresu.
Jakiego adresu? No postanowilem zrobić mini cheata do pasjansa by po zinjectowaniu pliku dll mój wynik zmienił się na 9999

Wyciągnąłem z pasjansa adres bazowy który sie nie zmienia i wygląda on tak

Solitaire.exe"+0x3691C8

do tego adresu dochodzi sie poziomowo ,czyli:

Solitaire.exe+0x3691C8 + ofset = nowy adres  i ten nowy adres +ofset2 = koncowy adres

wszystkie adresy są inne po każdym uruchomieniu gry. Nie zmienia sie tylko

Solitaire.exe+0x3691C8

więc zrobiłem mini haczka,jednak to

Solitaire.exe sie

zmienia co uruchomienie gry.. i nie wiem jaką to ma wartośc
chciałbym za każdym razem gdy zinjectuje moją funkcje mięć wartość tego procesu... na dodatek mam błąd w kodzie z którym nie moge sie uporać
oto mój kod

#include <windows.h>

//ADRESY
#define ADR_PLPTR ("Solitaire.exe"+0x3691C8) //adres bazowy pasjansa
#define OFS_PTR 0x8006D0 // ofset bazowego adresu który po dodaniu tworzy adres
#define ADR_PLOFS (ADR_PLPTR + OFS_PTR) // suma bazowego adresu i offsetu
#define OFS_WYNIK 0x16C // kolejny offset do adresu powstałego w wyniku dodania ofsetu 0x8006D0 by powstał adres dynamiczny


//////////////////////////////////////////////////////


//FUNKCJA

void FUNKCJA()
{
    
    *( float * )( ADR_PLOFS + OFS_WYNIK ) = 9999; //
    
}


//SLEEP

void Pentelka()
{
    FUNKCJA();
    
    Sleep( 150 );
}


//BAZA

BOOL WINAPI DllMain( HINSTANCE module, DWORD dwReason, LPVOID lpvReserved )
{
    //MessageBoxA(NULL, NULL, "Cheat zinjectowany", MB_OK);
    if( dwReason == DLL_PROCESS_ATTACH )
    {
        
        CreateThread( NULL, NULL,( LPTHREAD_START_ROUTINE ) Pentelka, NULL, NULL, NULL );
    }
    return true;
}

a tu error

Kodzik.cpp( 18 )
    : error C2440
    : 'type cast'
    : cannot convert from 'System::String ^' to 'float *' Cannot convert a managed type to an unmanaged type

Bardzo mi zależy ,nie moge sie z tym uporać za pomoc stawiam piwo :D

0
*( float * )( ADR_PLOFS + OFS_WYNIK ) = 9999; //

Po rozwinięciu makr staje się:

* (float *)("Solitaire.exe"+0x3691C8+0x8006D0) = 9999;

Jak według Ciebie miałoby to działać? :|


Btw, *pętelka Btw2,

Wyciągnąłem z pasjansa adres bazowy który sie nie zmienia i wygląda on tak...

Bodajże od Visty M$ wprowadziło ASLR, wtedy już właściwie żaden adres nie jest stały...

0

to nie musi być pasjans może być nawet inna aplikacja ;)

a gdybym zrobił tak?
(float)((ADR_PLPTR+OFS_PTR)+OFS_WYNIK) = 9999;//

jesli nie dodam ofsetu do bazowego adresu to nie stworzy mi sie kolejny adres który potrzebuje offsetu by dać mi koncowy dynamiczny adres dzięki któremu moge zmienić wartość

-ofsety mam zawsze takie same.
co do bazowego Solitaire.exe"+0x3691C8 jest on zawsze taki sam tylko to Solitaire.exe ciagle jest inne i nie wiem co to czy to proces id czy to memory jakies
jak to zrobic ;/

1

W ogóle źle to robisz, nie możesz tak po prostu mazać po pamięci innego procesu (oraz co w Twoim mniemaniu powinno zwracać wyrażenie "cośtam"+jakaśliczba? :|) i dla mnie to wygląda na jakieś programowanie przez permutacje; aby grzebać po pamięci innego procesu musisz użyć funkcji WinAPI, dokładniej poczytaj w internecie.

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