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

GUI Cheata


laB2

Rekomendowane odpowiedzi

Opublikowano

-- Ten poradnik przedstawia jak zrobić GUI, nie gotowego hacka :) Wysilcie się i sami poszperajcie w pamięci. --

 

Witam. Zademonstruje wam w tym poradniku jak stworzyć własnego cheata. Potrzebne będzie Delphi 7 Personal, na google go pełno, jest darmowy do użytku niekomercyjnego, jednak po darmowej rejestracji tylko że na stronie która nie istnieje :) Jak ktoś nie ma klucza, to pisać na pw.

instalujemy i uruchamiamy Delphi 7. Wstawiamy na formularz Label, klikając na ikonkę

 

44375249.png

 

a następnie w miejscu gdzie ma się pojawić na formularzu. Ustawiamy mu takie opcje

 

34048204.png

 

pamiętaj że w polu 'Name' nie może być odstępów! Przykładowa opcja

 

22769582.png

 

klikamy dwa razy na tym wstawionym labelu, przeniesie nas do edycji kodu. kod wygląda tak

 

10760204.png

 

zmieniamy go żeby wyglądał tak

 

65064543.png

 

wracamy do formularza, klikamy raz na labelu, przechodzimy na zakładkę 'Events' i zmieniamy wpis w OnClick na cheatClick

 

64255955.png

 

przechodzimy do kodu. Edytujemy procedure cheatClick na taką

procedure TForm1.cheatClick(Sender: TObject);
begin

 // po kliknięciu

 // jesli czcionka jest standardowego koloru, cheat nie jest aktywny
 if ( TLabel(Sender).Font.Color = clWindowText ) then begin

   // musimy go aktywowac

   // sprawdzamy ktory to cheat
   if ( TLabel(Sender).Name = 'airman' ) then begin

     // TUTAJ AKTYWUJEMY AIRMANA

   end;

   // ...

   // teraz ustawiamy kolor czcionki na czerwony
   TLabel(Sender).Font.Color := clRed;

   // odgrywamy dzwiek o czestotliwosci 800 przez 200 ms
   Windows.Beep(800,200);

 // jesli nie jest standardowego koloru, cheat jest aktywny
 end else begin

   // musimy go dezaktywowac

   // sprawdzamy ktory to cheat
   if ( TLabel(Sender).Name = 'airman' ) then begin

     // TUTAJ DEZAKTYWUJEMY AIRMANA

   end;

   // ...

   // teraz ustawiamy kolor czcionki na standardowy
   TLabel(Sender).Font.Color := clWindowText;

   // odgrywamy dzwiek o czestotliwosci 400 przez 200 ms
   Windows.Beep(400,200);

 end;

end;

w miejscu w którym napisałem trzy kropki w komentarzu wstawiamy wyższy od nich blok kodu

if ( TLabel(Sender).Name = 'NAZWA_CHEATA' ) then begin

     // TUTAJ AKTYWUJEMY/DEZAKTYWUJEMY NAZWA_CHEATA

   end;

dla innych opcji w cheacie. robimy je klikając na labelu, naciskając ctrl+c i ctrl+v. nastepnie zmieniamy 'Name' i 'Caption' nowego labela i ustawiamy go pod poprzednim. przykładowo

 

86571241.png

 

możemy dodać jakiś obrazek pod spód żeby ładniej wyglądało, ale wtedy nie zapomnij żeby ustawić opcji 'Transparent' na 'True' w labelach! musimy jeszcze dodać procedure szukającą Soldata. kod zaczynając od 'var' powinien wyglądać tak

var
 Form1: TForm1;
 h : THandle;
 ProcessHandle, PID: longword;

implementation

{$R *.dfm}

function FIND(name: PAnsiChar):boolean;
begin

  GetWindowThreadProcessId(FindWindow(nil, name), @PID);
  h := OpenProcess(PROCESS_ALL_ACCESS, False, PID);
  if (PID = 0) then result := false else result := true;

end;

procedure TForm1.cheatClick(Sender: TObject);
begin

 // po kliknięciu

 // jesli Soldat jest wlaczony
 if FIND('Soldat') then begin

   // jesli czcionka jest standardowego koloru, cheat nie jest aktywny
   if ( TLabel(Sender).Font.Color = clWindowText ) then begin

     // musimy go aktywowac

     // sprawdzamy ktory to cheat
     if ( TLabel(Sender).Name = 'airman' ) then begin

       // TUTAJ AKTYWUJEMY AIRMANA

     end;

     if ( TLabel(Sender).Name = 'tele2mouse' ) then begin

       // TUTAJ AKTYWUJEMY TELE2MOUSE

     end;

     // ...

     // teraz ustawiamy kolor czcionki na czerwony
     TLabel(Sender).Font.Color := clRed;

     // odgrywamy dzwiek o czestotliwosci 800 przez 200 ms
     Windows.Beep(800,200);

   // jesli nie jest standardowego koloru, cheat jest aktywny
   end else begin

     // musimy go dezaktywowac

     // sprawdzamy ktory to cheat
     if ( TLabel(Sender).Name = 'airman' ) then begin

       // TUTAJ DEZAKTYWUJEMY AIRMANA

     end;

     if ( TLabel(Sender).Name = 'tele2mouse' ) then begin

       // TUTAJ DEZAKTYWUJEMY TELE2MOUSE

     end;

     // ...

     // teraz ustawiamy kolor czcionki na standardowy
     TLabel(Sender).Font.Color := clWindowText;

     // odgrywamy dzwiek o czestotliwosci 400 przez 200 ms
     Windows.Beep(400,200);

   end;

 // jesli Soldat nie jest wlaczony wyswietlamy komunikat
 end else ShowMessage('Open Soldat first!');

end;

end.

airmana aktywujemy zmieniając kilka bajtów. a co z np. tele2mouse? potrzebujemy sprawdzać cały czas czy przycisk odpowiadający za teleport jest naciśnięty, i jeśli tak to teleportować gracza. musimy wstawić na formularz obiekt 'timer' który będzie się wywoływał co określony okres czasu. Przechodzimy na zakładkę 'System', wybieramy ikonkę zegara, i klikamy gdzieś na formie. ustawiamy go najlepiej tak

 

82263202.png

 

'Interval' to ilość milisekund co jaką będzie wywoływała się procedura timera, 100 będzie dobrą wartością. klikamy 2 razy na ikonce timera (na formularzu), stworzy się funkcja

procedure TForm1.Timer1Timer(Sender: TObject);
begin

end;

to właśnie ona się będzie wywoływać co te 100 milisekund. w niej zapiszemy funkcje hacka. po drobnych poprawkach cały kod wygląda tak

unit Unit;

interface

uses
 Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
 Dialogs, StdCtrls, jpeg, ExtCtrls;

type
 TForm1 = class(TForm)
   airman: TLabel;
   tele2mouse: TLabel;
   Image1: TImage;
   Timer1: TTimer;
   procedure cheatClick(Sender: TObject);
   procedure Timer1Timer(Sender: TObject);
 private
   { Private declarations }
 public
   { Public declarations }
 end;

var
 Form1: TForm1;
 h : THandle;
 ProcessHandle, PID: longword;
 dwTemp : DWORD;
 temp : boolean;

implementation

{$R *.dfm}

function FIND(name: PAnsiChar):boolean;
begin

  GetWindowThreadProcessId(FindWindow(nil, name), @PID);
  h := OpenProcess(PROCESS_ALL_ACCESS, False, PID);
  if (PID = 0) then result := false else result := true;

end;

procedure TForm1.cheatClick(Sender: TObject);
begin

 // po kliknięciu

 // jesli Soldat jest wlaczony
 if FIND('Soldat') then begin

   // jesli czcionka jest standardowego koloru, cheat nie jest aktywny
   if ( TLabel(Sender).Font.Color = clWindowText ) then begin

     // musimy go aktywowac

     // sprawdzamy ktory to cheat
     if ( TLabel(Sender).Name = 'airman' ) then begin

       // TUTAJ AKTYWUJEMY AIRMANA

     end;

     if ( TLabel(Sender).Name = 'tele2mouse' ) then begin

       // TUTAJ AKTYWUJEMY TELE2MOUSE

     end;

     // teraz ustawiamy kolor czcionki na czerwony
     TLabel(Sender).Font.Color := clRed;

     // odgrywamy dzwiek o czestotliwosci 800 przez 200 ms
     //Windows.Beep(800,200);

   // jesli nie jest standardowego koloru, cheat jest aktywny
   end else begin

     // musimy go dezaktywowac

     // sprawdzamy ktory to cheat
     if ( TLabel(Sender).Name = 'airman' ) then begin

       // TUTAJ DEZAKTYWUJEMY AIRMANA

     end;

     if ( TLabel(Sender).Name = 'tele2mouse' ) then begin

       // TUTAJ DEZAKTYWUJEMY TELE2MOUSE

     end;

     // ...

     // teraz ustawiamy kolor czcionki na standardowy
     TLabel(Sender).Font.Color := clWindowText;

     // odgrywamy dzwiek o czestotliwosci 400 przez 200 ms
     //Windows.Beep(400,200);

   end;

 // jesli Soldat nie jest wlaczony wyswietlamy komunikat
 end else ShowMessage('Open Soldat first!');

end;

procedure TForm1.Timer1Timer(Sender: TObject);
var
 id: byte;
 x,y : SmallInt;
 xx,yy : single;
begin

 if ( tele2mouse.Font.Color = clRed ) then begin

   // JESLI TELE2MOUSE JEST WLACZONE

   if (GetAsyncKeyState(VK_LCONTROL)<0) then begin

     if not temp then begin

       // JESLI LEWY CONTROL JEST NACISNIETY

       // tutaj teleportujemy...

       temp := true;

     end;

   end else temp := false;

 end;

end;

end.

Jak czytać z pamięci?

readprocessmemory(h,pointer($00000000),@zmienna,4,dwTemp);

$00000000 - adres z którego czytamy

zmienna - zmienna do której czytamy

4 - ilość bajtów którą czytamy (float/single - 4, integer - 4, byte - 1, itp.)

Wpiszemy do pamięci w ten sam sposób tylko 'writeprocessmemory', i jest analogicznie jak z czytaniem. jak znaleźć adresy? na youtube jest mnóstwo poradników, tutaj jest nawet temat z adresami. używaj najlepiej KikiUCE do szukania. enjoy.

Nie siłą, a młotkiem.

Opublikowano

Świetne, jeżeli by Ci się chciało to opisz jak zrobić GUI w direct 8 ^^ [ chociaż trudne to nie jest, można sterowanie po menu zrobić np strzałkami co nam zaoszczędzi dużo niepotrzebnego pisania :P

 

 

Obecnie po trochu piszę cheata do soldat :

przechwytywaniesb.png

Opublikowano

bo Soldat wykrywa cheat engine i się crashuje access violation'ami. używaj kiki uce, albo podobnego programu.

życie jest tylko po stronie clienta, czyli działa tylko na single player jego zmienianie.

 

Jak chcesz wpisywać to za pomocą writeprocessmemory. O tak:

writeprocessmemory(h,pointer($ADRES_DO_KTÓREGO_WPISUJESZ),@zmienna,ILOŚĆ_BAJTÓW_DO_WPISANIA,dwTemp);

Adres, jeśli jest w postaci hex, wpisujesz z $ na początku, np. $00B700C0, @zmienna to odwołanie do adresu zmiennej która ma zostać wpisana, najpierw oczywiscie musi zostac zainicjowana w sekcji 'var', np. 'var a:integer' i potem wpisujesz @a , ILOŚĆ_BAJTÓW_DO_WPISANIA to ilość bajtów jaką zajmuje ta zmienna, np. jeśli typ w cheat engine to Byte, to zmienna jest typu byte i tu jest liczba 1, jeśli 2 bytes, to zmienna jest typu word (lub smallint, jeśli nie wiesz, to poczytaj sobie w jakimś kursie czym się różnią), i jest tu liczba 2, jeśli 4 bytes to typ jest integer albo DWORD (jak wcześniej), i tu jest liczba 4, float - zmienna typu single, tutaj liczba 4, double - zmienna typu double, tutaj liczba 8. Jak dalej nie rozumiesz, to podaj adres i jaki jest typ tej wartości w cheat engine to ci pokaże jak.

Nie siłą, a młotkiem.

Opublikowano

To jest tylko szkielet hacka, panie @up, jeśli chcą zrobić swojego muszą sobie znaleźć adresy i umiejętnie nimi manipulować.

Nie siłą, a młotkiem.

  • 2 tygodnie później...
Opublikowano

Zrobił ktoś Tele2Mouse ?? jestem ciekawy jak współrzędne myszki na mapie przekazać do pamięci

 

TeleTo(AktualneID, X + (X2 - (w/2))*2, Y + (Y2 - (h/2))*2);

 

TeleTo to moja procedurka do teleportowania, jest tam wyzerowanie predkosci i sam teleport, AktualneID to funkcja zwracajaca ID aktywnego gracza ( czyli tego ktory uzywa hax'a ). X - pozycja X gracza, X1 - pozycja X myszki, Y - pozycja Y gracza, Y2 - pozycja Y myszkyi, w - szerokosc ekranu, h - wysokosc ekranu.

 

Mialem zamiar sprzedawac mojego hax'a ale nie mam czasu i checi go dokonczyc.

Opublikowano

Też tak dawniej robiłem ale jest prostsza metoda :)

71A90A + (id-1) * C0F0 <-- signed short int, pozycja x myszki gracza ID na mapie

71A90C + (id-1) * C0F0 <-- signed short int, pozycja y myszki gracza ID na mapie

I wystarczy pobrać z tego adresu gotową pozycję myszki, i skonwertować na float [kompilery robią to same].

Twoja stara robi catch the clowny w Game Makerze.

Opublikowano
procedure Teleport;
var
id:byte;
x,y:single;
xx,yy:SmallInt;
begin

// obecne id
readprocessmemory(h,pointer($00B4AC74),@id,sizeof(id),dwTemp);

// przeczytanie pozycji x myszki
readprocessmemory(h,pointer($0071A90A + (id-1) * $C0F0),@xx,sizeof(xx),dwTemp);

// konwersja na float
x := xx;

// wpisanie tej pozycji graczu
writeprocessmemory(h,pointer($PozycjaXPierwszegoID + (id-1) * $8),@x,sizeof(x),dwTemp);

end;

Twoja stara robi catch the clowny w Game Makerze.

Opublikowano

Tak sobie mysle, nie chce mi sie bawic z adresami, moze jakbym mial wene na pisanie, to sprobuje napisac template'a, programik czytal by adresy i typy zmiennych z pliku txt/ini i wrzucal je na formularz ( okienko ) programu, mozna powiedziec ze bylby to taki Cheat Engine dedykowany dla Soldat'a, wpadlem nawet na pomysl jak oszukac MSAC'a, ale to tylko w teorii, praktyke trzeba by sprawdzic pozniej.

 

Edit: Hmm, albo moze lepiej by bylo to zrobic jako dll'ke, latwiej wtedy zamrozic adresy ( nie trzeba sie bawic z timer'ami ).

Opublikowano
wpadlem nawet na pomysl jak oszukac MSAC'a

Jeśli nie dasz cheata publicznie ani nikomu kto może go zgłosić do Massacre, nie ma potrzeby oszukiwania MSAC'a, bo nie wykryje cheata...

 

BTW, lepiej dll'ke bo można łatwo i bezpośrednio wywoływać / hookować funkcje w kodzie.

Twoja stara robi catch the clowny w Game Makerze.

Opublikowano

Jeśli nie dasz cheata publicznie ani nikomu kto może go zgłosić do Massacre, nie ma potrzeby oszukiwania MSAC'a, bo nie wykryje cheata...

 

BTW, lepiej dll'ke bo można łatwo i bezpośrednio wywoływać / hookować funkcje w kodzie.

 

Pisalem o pomysle, gdzie kazdy moglby sobie dodawac adresy, to bym wydal publicznie. Co do hookowania, MSAC chyba wykrywa hook'i nawet jesli nie zna programu/dll'ki ktora to wywoluje..

 

Edit:

 

procedure Teleport;
var
id:byte;
x,y:single;
xx,yy:SmallInt;
begin

// obecne id
readprocessmemory(h,pointer($00B4AC74),@id,sizeof(id),dwTemp);

// przeczytanie pozycji x myszki
readprocessmemory(h,pointer($0071A90A + (id-1) * $C0F0),@xx,sizeof(xx),dwTemp);

// konwersja na float
x := xx;

// wpisanie tej pozycji graczu
writeprocessmemory(h,pointer($PozycjaXPierwszegoID + (id-1) * $8),@x,sizeof(x),dwTemp);

end;

 

Po co pobierasz najpierw SmallInt? Mozna od razu Single odczytac. Watpie zeby to zadzialalo, SmallInt ma 2 bajty, a Single 4, czytasz polowe danych. Zeby wszystko bylo jak trzeba wystarczy xx zamienic na x i usunac xx z sekcji var.

 

 

 

Heh gdyby nie bawienie się z adresami każdy by używał edytorów pamięci :D woBniaR dzięki za kodzik ;)

 

Slyszalem kiedys ze Cheat Engine powoduje problemy z Soldat'em ( crash czy cos, sam nie sprawdzalem ), poza tym, to bylo by wygodniejsze, nie trzbea by za kazdym razem wyszukiwac procesu Soldat'a i mozna by sie w latwiejszy sposob wymieniac "cheat'ami", taki programik mozna by tez uzyc w 1.5.1, jesli dozyjemy aktualnizacji.

Opublikowano

Nie, pozycja myszy na mapie to signed short czyli 2 bajty z znakiem z przodu. Sprawdź w cheat engine lub podobnym programie :)

MSAC nie kickuje za nieznane hacki, jakiekolwiek by one nie były.

A cheat engine crashuje po chwili Soldata, ale jest mnóstwo przeróbek, których Soldat nie wykrywa.

 

BTW, było coś takiego autorstwa Massacre'a, z tym że był to tylko hook d3d8 z callbackiem na funkcje rysujące. Tak że w prosty sposób można było sobie stworzyć dll'ke która była obsługiwana i się bawić.

Twoja stara robi catch the clowny w Game Makerze.

Opublikowano

Nie, pozycja myszy na mapie to signed short czyli 2 bajty z znakiem z przodu. Sprawdź w cheat engine lub podobnym programie :)

MSAC nie kickuje za nieznane hacki, jakiekolwiek by one nie były.

A cheat engine crashuje po chwili Soldata, ale jest mnóstwo przeróbek, których Soldat nie wykrywa.

 

BTW, było coś takiego autorstwa Massacre'a, z tym że był to tylko hook d3d8 z callbackiem na funkcje rysujące. Tak że w prosty sposób można było sobie stworzyć dll'ke która była obsługiwana i się bawić.

 

Nie bede sie klocil odnosnie typu, napisalem tak, bo wszystki koordynaty w Soldat'cie z jakimi sie spotkalem sa typu single i maja 4 bajty.

Jeszcze zanim MSAC mial wbudowane banowanie za GameHack #XX byly bany za D3D Hook, wiec szczerze watpie zeby hooki na np rysowanie poligonow byly niewykrywalne, a szkoda, bo chetnie bym napisal Show Polygon'a ( opcja z Weeeedy'ego ).

Wiem ze sa przerobki Cheat Engine'a, ale dalej, jako osobny programik, od razu z lista adresow bylo by to wygodniejsze. Inna sprawa ze mi sie pewnie nie bedzie chcialo tego pisac, tak to juz jest u mnie.

Opublikowano

Sam używam Kiki Uce 1.4 do pamięci, tylko dla początkujących nie odpalajcie programiku w folderze z nim o nazwie kernel coś albo odpalcie jak wam restart się podoba :D

 

mój "czit" ma już 2 funkcje ;)

sio z scenerami przydatny do mapek z krzakami dzięki czemu widzimy camperów w krzakach ^^

i menu broni

 

lolz.jpg-2178-129.jpg

Opublikowano

Może kiedyś za d3d hook'a kickował, ale nie teraz (choć pewnie to było tylko na zasadzie - jeśli istnieje plik d3d8.dll w folderze, albo jakiś inny znany plik haxa). Spójrz - chatMod jest niewykrywalny. Więc nic nie wykrywa i za nic nie kickuje.

A odnośnie rysowania, wciąż nie mogę dojść do tego jak rysować wcześniej od interfejsu. Mogę sobie narysować poligony itp. bezproblemowo ale przykrywa mi to chat i interfejs. Próbowałem statycznie przechowywać wskaźnik do d3d_device i używać go w zhook'owanych funkcjach, które mam pewność że są wykonywane przed rysowaniem interfejsu, ale niestety nic się nie dzieje ...

Twoja stara robi catch the clowny w Game Makerze.

Opublikowano

Ciesze się że ci się podoba i że są ludzie którzy potrafią to wykorzystać :)

Twoja stara robi catch the clowny w Game Makerze.

Opublikowano

Czas pokazać co można zrobić dzięki tutowi jaki tu jest + Manual Delphi :D

Easy Czit 0.3 funkcje:

 

Menu Broni - Klawisz Tab

Grawitacja 0.03 - Klawisz Del

Wyłączenie Scenerów - Klawisz End

 

Fast Download:

http://195.117.191.103/zrzut/czitek.zip

Skan:

http://www.virustotal.com/url-scan/report.html?id=1d98426d4d0c4804f4dbc9c62b174a7c-1312650045

Wyłącznik Scenerów i Grawitacji już nie dałem bo to wkońcu nawet nie całkiem beta :D

 

Jak narazie nie wykrywalne przez MSAC ale pewnie dominik zaraz poleci naskarżyć szwabom xD

 

Jak ktoś zna się na Delph niech pisze mam małe problemy z pamięcią dot ID gracza ;)

Opublikowano

Ładnie, ładnie :)

 

Jak narazie nie wykrywalne przez MSAC ale pewnie dominik zaraz poleci naskarżyć szwabom

Hahhaha rozwaliłeś mnie tym, ale uważaj bo ci szwaby dadzą bana na wszystkich serwerach xD

I jaki problem?

Twoja stara robi catch the clowny w Game Makerze.

Zarchiwizowany

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

×
×
  • Dodaj nową pozycję...