Skocz do zawartości
  • 👋 Witaj na MPCForum!

    Przeglądasz forum jako gość, co oznacza, że wiele świetnych funkcji jest jeszcze przed Tobą! 😎

    • Pełny dostęp do działów i ukrytych treści
    • Możliwość pisania i odpowiadania w tematach
    • System prywatnych wiadomości
    • Zbieranie reputacji i rozwijanie swojego profilu
    • Członkostwo w jednej z największych społeczności graczy

    👉 Dołączenie zajmie Ci mniej niż minutę – a zyskasz znacznie więcej!

    Zarejestruj się teraz

C++ - PROCESY


Rekomendowane odpowiedzi

Opublikowano

Witam, mam pytanie a mianowicie posiada ktos moze kod do C++ aby zmieniał wartości ? Albo jakąś dobrą książkę do ogarnięcia C++? Chciałbym jakiś kod żebym przy użyciu cheat engine mógł ogarnąć jakiś trainer :)

65135238787935115850.gif

Opublikowano

Polecę ci takiego pana z yt. Nazywa się on Fleep Hacks. Ogarnij jego filmiki. Jak C++ to np. 


linki w górę

Opublikowano

Pooglądałem ale nic nie kumam z tego kodu po prostu jest za dużo :D, ja potrzebuję jakieś funkcje, np po kliknięciu F1 wartość zmieni się na 99999

65135238787935115850.gif

Opublikowano

a ja prosze o milion złotych

 

 

nikt ci nie da gotowca, albo jakiś własny wkład, albo płacisz komuś.

Opublikowano

@dadajszen

 

Poleciłem ci MTK jak ci się nie chce uczyć to używaj jego. Na yt jest nawet poradnik po polsku.. Zrozum, nikt ci gotowca nie da..

linki w górę

Opublikowano

1) Klepanie kodu na ślepo i jego nie rozumienie to bardzo gówniane podejście

2) Na samym WPM i RPM nie zrobisz za dużo, chyba że chcesz działać na sztywno, na podanym adresie, bez żadnej wiedzy na temat tego jak to działa, czyli przenieść sztywny efekt Cheat Engine na kod. Bez sensu.

3) Żeby zacząć rozumieć jak to działa, najpierw musiałbyś przestudiować:

- Budowę procesu

- Jak działa ogólnie pamięć i stos

- Reverse engineering

- Wskaźniki i cały syf związany z alokacją pamięci się przydaje

Więc jest się czego uczyć.

 

A Write/ReadProcessMemory masz od groma w internecie. Tylko musisz odpowiednio doczytać, bo jak ktoś ci zacznie tłumaczyć o co tu chodzi to nie ogarniesz. Zresztą, ja to mogę zrobić:

https://msdn.microsoft.com/pl-pl/library/windows/desktop/ms681674%28v=vs.85%29.aspx

 

 

BOOL WINAPI WriteProcessMemory(
  _In_   HANDLE hProcess,
  _In_   LPVOID lpBaseAddress,
  _In_   LPCVOID lpBuffer,
  _In_   SIZE_T nSize,
  _Out_  SIZE_T *lpNumberOfBytesWritten
);

 

Pierwszy parametr to uchwyt do procesu, który zwraca funkcja CreateProcess lub OpenProcess. To jak sobie ten uchwyt znajdziesz używając OpenProcess to inna bajka. HF z szukaniem PID procesu co jego restart, bo nie sądzę że uda ci się zrobić funkcję z użyciem snapshota do szukania PID procesu po jego nazwie na przykład (metoda kopiego i pasta się nie liczy). Proces musi mieć prawa PROCESS_VM_WRITE i PROCESS_VM_OPERATION do tego, żeby funkcja mogła zadziałać.

 

Drugi parametr to adres od którego będziemy zaczynać zapis danych.

Trzeci parametr to bufor w którym trzymane są bajty do zapisania.

Czwarty parametr to ilość bajtów jaka ma zostać nadpisana

Piąty parametr, opcjonalny, to parametr w którym możemy referencyjnie podać zmienną w której będzie trzymana liczba bajtów zapisanych przez funkcję.

 

GL&HF. Teraz napisz ładnie program który zrobi co chcesz żeby zrobił. Całą wiedzę zawarłem w tym poście.

846331404756772371599.jpeg
Opublikowano

Dobra, trochę poprzemieniałem kod i dostałem coś takiego

#include <iostream>

#include <windows.h>

using namespace std;



int main()

{

    int newValue = 40;



    HWND hWnd = FindWindow(0, "Saper");



    if (hWnd == 0) {

        cerr << "Nie ma okna" << endl;

    } else {

        DWORD pId;

        GetWindowThreadProcessId(hWnd, &pId);

        HANDLE hProc = OpenProcess(PROCESS_ALL_ACCESS, FALSE, pId);



        if (!hProc) {

            cerr << "Nie widac procesu" << endl;

        } else {

            int isSuccessful = WriteProcessMemory(hProc, (LPVOID)0x0024909C, &newValue, (DWORD)sizeof(newValue), NULL);



            if (isSuccessful > 0) {

                clog << "Proces zostal dobrze zaladowany!" << endl;

            } else {

                cerr << "Nie mozna zapisac w pamieci procesu." << endl;

            }



            CloseHandle(hProc);

        }

    }



    return 0;

}

Jak mogę zrobić funkcję na klawisz? Oraz jak mogę usunąć to, że jak odpalam mój program to żeby w consoli nie pojawiał się napis ''Process returned 0 <0x0>    excution time : .... s

Oraz jak mogę dodać offset do tego adresu, ponieważ co chwilę muszę zmieniać adresy a chcę żeby był stały 

65135238787935115850.gif

Opublikowano

Dobra, trochę poprzemieniałem kod i dostałem coś takiego

#include <iostream>

#include <windows.h>

using namespace std;



int main()

{

    int newValue = 40;



    HWND hWnd = FindWindow(0, "Saper");



    if (hWnd == 0) {

        cerr << "Nie ma okna" << endl;

    } else {

        DWORD pId;

        GetWindowThreadProcessId(hWnd, &pId);

        HANDLE hProc = OpenProcess(PROCESS_ALL_ACCESS, FALSE, pId);



        if (!hProc) {

            cerr << "Nie widac procesu" << endl;

        } else {

            int isSuccessful = WriteProcessMemory(hProc, (LPVOID)0x0024909C, &newValue, (DWORD)sizeof(newValue), NULL);



            if (isSuccessful > 0) {

                clog << "Proces zostal dobrze zaladowany!" << endl;

            } else {

                cerr << "Nie mozna zapisac w pamieci procesu." << endl;

            }



            CloseHandle(hProc);

        }

    }



    return 0;

}

Jak mogę zrobić funkcję na klawisz? Oraz jak mogę usunąć to, że jak odpalam mój program to żeby w consoli nie pojawiał się napis ''Process returned 0 <0x0>    excution time : .... s

Oraz jak mogę dodać offset do tego adresu, ponieważ co chwilę muszę zmieniać adresy a chcę żeby był stały 

Czy to nie przypadkiem przepisany moj kod z innego tematu na mpc i zmienione na własne potrzeby :P?

Musisz po prostu dodawac ten offset heksadecymalnie do wskaznika itd.

A żeby kod dalej działał to musisz jakoś go zatrzymać, bo tak to skończył całe swoje działanie... (pętla)

Google gryzie? Sam sobie funkcję na klawisz poszukaj.

TuByłaSygnatura.png

Opublikowano

@dadajszen

 

Poleciłem ci MTK jak ci się nie chce uczyć to używaj jego. Na yt jest nawet poradnik po polsku.. Zrozum, nikt ci gotowca nie da..

W Trainer Maker Kit jest dosyć prosto, lecz o ile się nie mylę nie można dodać offsetu 

65135238787935115850.gif

Opublikowano

@Phoenix_PL

 

Przyda mi się to do czegoś ? Jednak wolę w Trainer Maker Kit coś stworzyć.. Ale nie wiem czy można tam dodawać offsety spójrz na tego screena

 

06223316357662758516_thumb.jpg

 

Który tu jest adres główny ( pointer ) 00599909C czy 003C68B4 :) . Przy tym pointerze jest offset D4 i nie wiem jak mam go dopisać do kogdu w TKM

65135238787935115850.gif

Opublikowano

@Phoenix_PL

 

Przyda mi się to do czegoś ? Jednak wolę w Trainer Maker Kit coś stworzyć.. Ale nie wiem czy można tam dodawać offsety spójrz na tego screena

 

06223316357662758516_thumb.jpg

 

Który tu jest adres główny ( pointer ) 00599909C czy 003C68B4 :) . Przy tym pointerze jest offset D4 i nie wiem jak mam go dopisać do kogdu w TKM

trainer maker kit to syf ponad syfy i jesli nie rozpoznajesz co jest czym, i takie adresiki ci nic nie dadza, jesli nie sa stattyczne, pointery tez sie moga zmeiniac co kilka odpalen gry

­

Opublikowano

@Phoenix_PL

 

Przyda mi się to do czegoś ? Jednak wolę w Trainer Maker Kit coś stworzyć.. Ale nie wiem czy można tam dodawać offsety spójrz na tego screena

 

06223316357662758516_thumb.jpg

 

Który tu jest adres główny ( pointer ) 00599909C czy 003C68B4 :) . Przy tym pointerze jest offset D4 i nie wiem jak mam go dopisać do kogdu w TKM

DWORD pointer = 0x12345
DWORD dwPointer = *(DWORD*)pointer + 0xD5 
DWORD dwPointer2 = *(DWORD*)dwPointer + 0xE6

I tak dalej dodajesz offsety aż dojdziesz do base adresu.Zamiast WriteProcessMemory lepiej użyć memcpy i VirtualProtect.

 

UP@A tak wgl ten pointer co masz w CE jest na czarno czyli dynamiczny czy  statyczny na zielono ?

nostaleh.png
Opublikowano
DWORD pointer = 0x12345
DWORD dwPointer = *(DWORD*)pointer + 0xD5 
DWORD dwPointer2 = *(DWORD*)pointer + 0xE6

I tak dalej dodajesz offsety aż dojdziesz do base adresu.Zamiast WriteProcessMemory lepiej użyć memcpy i VirtualProtect.

 

UP@A tak wgl ten pointer co masz w CE jest na czarno czyli dynamiczny czy  statyczny na zielono ?

 

czlowieku, co ty pieprzysz xD jak memcpy sie uzywa internalnie do kopiowania bufferow, externalnie masz wpm albo inne mniej znane funkcje winapi lol

­

Opublikowano

­^dlatego internal jest lepszy xD

memcpy <3

void MemDataCopy(DWORD adres, unsigned char* code, int bytes)
{
    DWORD oldprot;
    VirtualProtect((LPVOID)adres, bytes, PAGE_EXECUTE_READWRITE, &oldprot);
    memcpy((void*)adres, code, bytes);
    VirtualProtect((LPVOID)adres, bytes, oldprot, &oldprot);
}
846331404756772371599.jpeg
Opublikowano

czlowieku, co ty pieprzysz xD jak memcpy sie uzywa internalnie do kopiowania bufferow, externalnie masz wpm albo inne mniej znane funkcje winapi lol

­

Tak tylko , że można zrobić coś takiego ...

 memcpy((void*)Pointer, &value, sizeof(value));

I normalnie działa tak jak WPM.Sam jestem nowy w hackowaniu gier i nie wszystko wiem ..

nostaleh.png
Opublikowano

­@GrAvItY1 ale to działa tylko i wyłącznie przy wstrzyknięciu tego kodu do procesu, nie da się użyć memcpy w obrębie pamięci innego procesu...

 

...chyba że uda ci się wyciągnąć shellcode memcpy (bezsens, bo da się zrobić to prościej, ale mniejsza), alokować pamięć w procesie (VirtualAlloc), wrzucić tam swój shellcode i wywołać jakoś poprzez hooka którego też wrzucisz zewnętrznie przez WPM.

846331404756772371599.jpeg
Opublikowano

A tym Trainer Maker Kit da się coś ogarnąć jeszcze? W jakis sposób mogę wyciągnąć pointery, chodzi mi o inny program tylko nie Cheat Engine

65135238787935115850.gif

Zarchiwizowany

Ten temat przebywa obecnie w archiwum. Dodawanie nowych odpowiedzi zostało zablokowane.

×
×
  • Dodaj nową pozycję...