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

WriteProcessMemory - po części nie działa


Rekomendowane odpowiedzi

Opublikowano

Chodzi mi o to , że mam taki kod : 

 
#include "Windows.h"
#include <iostream>
 
DWORD Health_Pointer = { 0x06AAD640 };
int New_Health = 100;
 
int main()
{
HWND hOut;
hOut = FindWindow(NULL,"Counter-Strike");
 
if (!hOut)
{
std::cout << "Could not find CS 1.6 " << std::endl;
Sleep(3000);
exit(0);
}
 
DWORD processID;
 
GetWindowThreadProcessId(hOut, &processID);
 
if (!processID)
{
std::cout << "Something went wrong" << std::endl;
Sleep(3000);
exit(0);
}
 
HANDLE handle;
handle = OpenProcess(PROCESS_ALL_ACCESS, FALSE, processID);
 
if (!handle)
{
std::cout << "Could not open the process " << std::endl;
Sleep(3000);
exit(0);
}
 
while (true)
{
WriteProcessMemory(handle, (LPVOID)Health_Pointer, &New_Cash, sizeof(int), 0);
}
 
 
system("pause");
 
return 0;
}
 

Oczywiście taki testowy .. Jednak WriteProcessMemory działa tylko raz . Chodzi o to , że gdy pierwszy raz włącze cs'a i włącze ten program to za pierwszym razem program zmieni wartość jednak gdy włącze go drugi raz to już nie działa i nie zmienia wartości oraz ta pętla nie działa. W jaki sposób można to naprawić ?

nostaleh.png
Opublikowano

A no tak New_Health . Zapomniałem zmienić nazwy przy pisaniu . To i tak nic nie zmienia bo przecież kompilator by mi błąd wywalił .

nostaleh.png
Opublikowano
#include <iostream>
#include <windows.h>
using namespace std;

int main(){
    int newValue = 500;
    HWND hWnd = FindWindow(0, "Kalkulator"); //Szukanie Okna

    //Debugowanie
    if (hWnd == 0) {
        cerr << "Cannot find window." << endl;
    } else {
        DWORD pId;
        GetWindowThreadProcessId(hWnd, &pId); //Zdobywa ID
        HANDLE hProc = OpenProcess(PROCESS_ALL_ACCESS, FALSE, pId); //Otwiera Proces

        if (!hProc) {
            cerr << "Cannot open process." << endl; //Debugaowie Procesu
        } else {
            int isSuccessful = WriteProcessMemory(hProc, (LPVOID)0x000E591C, &newValue, (DWORD)sizeof(newValue), NULL);  //Zmiana wartosci
        if (isSuccessful > 0) { //Debug
            clog << "Process memory written." << endl;
        } else {
            cerr << "Cannot write process memory." << endl;}
            CloseHandle(hProc);}
        }

Zmień sobię na swoje potrzeby, bo mi się nie chce :P

Pętla w WriteProcessMemory powinna wystarczyć + jakbyś chciał coś pozmieniać to droga wolna.

TuByłaSygnatura.png

Opublikowano

Może to dużo nie wnosi do tematu ale wydaje mi się że HP w cs'ie składa się z kilku pointerów(nie jestem pewien).
A już tak całkiem po za tematem zadziała to tylko na twoim singleplayer. I można zrobić tą samą funkcje zupełnie nie włamując się do cs'a tylko pisząc kilku liniowy plugin do cs'a(co również może działać na serwerze).

Zarchiwizowany

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

×
×
  • Dodaj nową pozycję...