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

[Delphi] Co to są te bajty i jak je obliczyć z Float


Rekomendowane odpowiedzi

Opublikowano

Witam

 

Nie wiem jak obliczyć bajty

 

Mam tu kod do cheata który zmienia parametry w pamięci procesu

 

procedure TForm1.Timer1Timer(Sender: TObject);
var
 WIN : integer;
 PID : integer;
 TID : integer;
 HND : integer;
 WRT : cardinal;
 BUF : pchar;
 tablica:array[1..5] of string;
 losowy_string:string;

const
 // nalezy dopasowac zmienne stale do swoich potrzeb
 Caption = 'Live For Speed';
 Addr0 = $00623BBB;
 Bytes = 1;
begin
 randomize;
 tablica[1] := '7';
 tablica[2] := '8';
 tablica[3] := '10';
 tablica[4] := '8';
 tablica[5] := '2';
 losowy_string:=tablica[random(5)+1];
 // wyszukujemy okna o zadanym tytule w belce tytulowej, w naszym przypadku Caption := 'Saper'
 // jezeli znajdziemy okno o takiej nazwie, to otrzymamy uchwyt do tego okna, ktory przechowujemy w zmiennej WIN
 WIN := FindWindow(nil,Caption);
 // jezeli uchwyt jest zerowy to oznacza, ze nie udalo znalezc sie okna o podanej nazwie, wyrzucamy informacje o tym i wyskakujemy z procedury
 if WIN = 0 then
 begin
   MessageBox(0, 'Gra nie jest uruchomiona', 'Error', MB_OK);
   Abort;
 end;
 // teraz pobieramy ID procesu (PID), przy okazji otrzymujemy rowniez ID glownego watku (TID), ale z niego nie bedziemy korzystac
 TID := GetWindowThreadProcessId(WIN,@PID);
 // otwieramy proces z odpowiednimi uprawnieniami (zawsze wybieraj tylko te uprawnienia, ktore sa konieczne do wykonania danej akcji)
 HND := OpenProcess(PROCESS_VM_OPERATION or PROCESS_VM_WRITE,False,PID);
 // alokujemy bufor o dlugosci 1, w tym buforze bedziemy trzymac wartosc, ktora chcemy zapisac do innego procesu
 // jest wiele sposobow i funkcji alokujacych pamiec, ja przedstawilem ta, pomimo, ze jest juz rzadko uzywana
 GetMem(BUF, Bytes);
 // teraz zapisujemy go pod podany adres w procesie, ktory otworzylismy
 WriteProcessMemory(HND,ptr(Addr0),Pointer(losowy_string),Bytes,WRT);
 // tutaj powtarzamy ta sama czynnosc
 //BUF^ := Chr(Poke1);
 //WriteProcessMemory(HND,ptr(Addr1),BUF,Bytes,WRT);
 // ostatecznie zwalniamy pamiec i zamykamy uchwyt do procesu
 FreeMem(BUF);
 closehandle(HND);
end;

 

Nie wiem co wpisać w Bytes = 1; i nie wiem jak to zrobić że jak wpisze w tablicy tablica[1] := '7'; liczbę 7 to ona się zapiszę w pamięci procesu jako 7 a nie jako 9,5367431640625E-6 oczywiście tak jest w Float a w byte jest 55 ale to musi być zapisane w Float bo inaczej źle wychodzi i najlepiej jak by było po prostu 7.0 nawet może być 9.5 ale żeby liczba nie była taka długa po przecinku da się to jakoś załatwić

 

Proszę szybką odpowiedz i pozdrawiam serdecznie.

Opublikowano

ok a gdzie ją zastosować bo początkujący jestem

 

 

mam inny kod bardziej dopracowany i jak zrobić żeby było takie coś jak pisałem wcześniej

const
//adresy wartosci postaci
Odleglosc = $00623BBB;
//koniec - adresy wartosci postaci

// Funkcje zapisujaca
procedure MemWriteInteger(Address: Integer; buf: Integer; Length: DWORD);
var ProcID, THandle: Integer;
e: DWORD;
begin
GetWindowThreadProcessId(FindWindow('LFS', Nil), @ProcID);
THandle := OpenProcess(PROCESS_ALL_ACCESS, False, ProcID);
WriteProcessMemory(THandle, Ptr(Address), @buf, Length, e);
CloseHandle(THandle);
end;

procedure MemWriteString(Address: Integer; buf: String; Length: DWORD);
var ProcID: Integer;
THandle: hWnd;
e: DWORD;
begin
GetWindowThreadProcessId(FindWindow('LFS', Nil), @ProcID);
THandle := OpenProcess(PROCESS_ALL_ACCESS, False, ProcID);
WriteProcessMemory(THandle, Pointer(Address), PChar(buf), Length, e);
CloseHandle(THandle);
end;

// Koniec - Funkcje zapisujaca

procedure TForm1.Button1Click(Sender: TObject);
begin
MemWriteInteger(Odleglosc, 1, 1)
end;

Zarchiwizowany

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

×
×
  • Dodaj nową pozycję...