| Autor |
Beitrag |
cherrymoon69
Hält's aus hier
Beiträge: 12
|
Verfasst: Do 28.02.08 22:11
Hallo,
ich programmiere grad einen Spieletrainer zu lernzwecken.
Wenn ich eine Adresse im Speicher ändere erfolgt genau der Effekt den ich haben möchte, nämlich, das Geld friert ein.
Delphi-Quelltext 1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13: 14: 15: 16: 17: 18: 19:
| procedure TForm1.Button1Click(Sender: TObject); const v1 = $90; begin WindowName := FindWindow(nil,WindowTitle); If WindowName = 0 then MessageDlg('...erst spiel starten...dann trainer starten =)', mtwarning,[mbOK],0); ThreadId := GetWindowThreadProcessId(WindowName,@ProcessId); HandleWindow := OpenProcess(PROCESS_ALL_ACCESS,False,ProcessId); GetMem(buf,1); buf^ := Chr(v1); WriteProcessMemory(HandleWindow,ptr($480802),buf,1,write); WriteProcessMemory(HandleWindow,ptr($480803),buf,1,write); WriteProcessMemory(HandleWindow,ptr($480804),buf,1,write); WriteProcessMemory(HandleWindow,ptr($480805),buf,1,write); WriteProcessMemory(HandleWindow,ptr($480806),buf,1,write); WriteProcessMemory(HandleWindow,ptr($480807),buf,1,write); FreeMem(buf); closehandle(HandleWindow); MessageDlg('Geld ist eingefroren', mtwarning,[mbOK],0); end; |
Aber, wenn ich das rückgängig machen möchte, dann stürzt das Spiel sofort ab.
Delphi-Quelltext 1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13: 14: 15: 16: 17:
| procedure TForm1.Button2Click(Sender: TObject); var Value1: Cardinal; begin Value1 := $D99EF41B0000; WindowName := FindWindow(nil,WindowTitle); If WindowName = 0 then MessageDlg('...erst spiel starten...dann trainer starten =)', mtwarning,[mbOK],0); ThreadId := GetWindowThreadProcessId(WindowName,@ProcessId); HandleWindow := OpenProcess(PROCESS_ALL_ACCESS,False,ProcessId); GetMem(buf,1); WriteProcessMemory(HandleWindow,ptr($480802),@Value1,6,write); FreeMem(buf); closehandle(HandleWindow); MessageDlg('Geld ist nicht mehr eingefroren', mtwarning,[mbOK],0);
end; |
Das verstehe ich nicht. ich schreibe doch lediglich den alten Wert wieder an seine Stelle. D)9EF41B0000.
Wo ist da der Fehler?
In einem anderen Forum habe ich mal gelesen, das er die letzt 2 Bytes 00 00 nicht schreiben würde. liegt es daran?
Weiß jemand weiter?
Danke
Markus
Moderiert von Narses: Delphi-Tags hinzugefügt
|
|
Sinspin
      
Beiträge: 1338
Erhaltene Danke: 120
Win 10
RIO, CE, Lazarus
|
Verfasst: Fr 29.02.08 00:18
Ich könnte ja jetzt sagen, wer für so ein Problem WriteProcessMemory verwendet, hat nicht besseres verdient. Aber, ich sage es nicht
Wie kommst du auf die statischen Adressen?
Und wie auf den Wert den du da dann reinpackst? Mal versucht dem Wert reinzuschreiben den du dort vorm überschreiben rausgelesen hast? (lesen musst).
Wenn du 6 Byte auf einmal schreiben willst brauchst du auch was mindestens 6 Byte groß ist!
Also am besten ein statisches Array das 6 Byte groß ist und die Werte aufnimmt.
Wobei ich die gesammte Idee nicht sonderlich Intelligent finde. (Wenn du da belohnen willst dann darf das Spiel nicht schon vorher vorhanden sein, sondern muss von dir gestartet werden. Besser noch, von dir geschrieben sein.
Dann könntest du auch eine weniger bescheidene Technik zum blockieren des Spiels verwenden.
_________________ Wir zerstören die Natur und Wälder der Erde. Wir töten wilde Tiere für Trophäen. Wir produzieren Lebewesen als Massenware um sie nach wenigen Monaten zu töten. Warum sollte unser aller Mutter, die Natur, nicht die gleichen Rechte haben?
|
|
cherrymoon69 
Hält's aus hier
Beiträge: 12
|
Verfasst: Fr 29.02.08 00:54
ok. du hast deinen standpunkt deutlich gemacht.
aber wirklich geholfen hast du mir nicht. ich programmiere noch nicht lange. deswegen kann ich immer hilfe gebrauchen.
die adresse ist ein pointer, welche ich mit tsearch ermittelt habe. wenn ich die 6 bytes noppe friert das geld ein. denn die tatsächliche adresse, auf der das geld liegt, ist jedesmal eine andere.
so funktioniert es ganz gut. bis auf das aufheben. ich will das ganze verstehen. und daraus lernen.
kannst du mir denn eine bessere variante nennen? bitte mit etwas code. sonst werde ich das wohl nicht verstehen und kann es nicht nachvollziehen.
|
|
BenBE
      
Beiträge: 8721
Erhaltene Danke: 191
Win95, Win98SE, Win2K, WinXP
D1S, D3S, D4S, D5E, D6E, D7E, D9PE, D10E, D12P, DXEP, L0.9\FPC2.0
|
Verfasst: Fr 29.02.08 01:12
Sorry, aber eine korrekte Lösung hat Dir Sinspin in seinem Post bereits gesagt, ergo: Lesen hilft.
Reserviere einen Puffer von 6 Bytes (z.B. mit einem statischen Array) und trage in diesem die zu schreibenden Daten ein.
Ferner: Lese die Daten aus dem Programm aus, die später zurückgeschrieben werden sollten ...
Und wenn ich mal Recht in der Annahme gehe, patchst Du einen CALL auf eine Funktion, die das Verändern des Geldes ausführt ... dieser Aufruf wird sich wahrscheinlich bei unterschiedlichen Varianten des Spieles ändern. Wenn da dann das falsche zurückgeschrieben wird, wundert mich solch ein Absturz reichlich wenig.
_________________ Anyone who is capable of being elected president should on no account be allowed to do the job.
Ich code EdgeMonkey - In dubio pro Setting.
|
|
Luckie
Ehemaliges Mitglied
Erhaltene Danke: 1
|
Verfasst: Fr 29.02.08 11:43
cherrymoon69 hat folgendes geschrieben: | | ich programmiere grad einen Spieletrainer zu lernzwecken. |
cherrymoon69 hat folgendes geschrieben: | | aber wirklich geholfen hast du mir nicht. ich programmiere noch nicht lange. deswegen kann ich immer hilfe gebrauchen. |
Meinst du nicht auch, dass es sinnvoller wäre, erstmal mit etwas leichterem anzufangen und sich erstmal die Grundlagen sowohl in der Programmiersprache als auch bezüglich der Windows Interna und der Windows-API anzueignen?
|
|
cherrymoon69 
Hält's aus hier
Beiträge: 12
|
Verfasst: Fr 29.02.08 16:28
wie seit ihr denn drauf?
ist dieses forum nur für supertypen???
es hat doch wohl jeder mal angefangen, oder?
der eine meint es wäre wohl keine gute idee mit so etwas zu starten, der andere meint das ich nicht das recht hätte an einem spiel etwas zu ändern, welches ich nicht selber geschrieben habe...
also echt.
das geht doch niemanden etwas an. ich habe eine frage gestellt, dazu habe ich meinen wissensstand erläutert.
ich gehe davon aus, dass manmir vernünftig, auf mein wissen zugeschnitten, antwortet.
wenn das in diesem forum nicht möglich ist, dann sollte man jemanden wie mich gar nicht erst aufnehmen, sondern die frage, ob man profi ist, am anfang der registrierung stellen und alle anderen zurückweisen.
|
|
AXMD
      
Beiträge: 4006
Erhaltene Danke: 7
Windows 10 64 bit
C# (Visual Studio 2019 Express)
|
Verfasst: Fr 29.02.08 16:36
Hallo cherrymoon89!
Um Missverständnisse zu vermeiden: es geht hier nicht darum, dass man ein "Profi" sein muss, um hier Fragen stellen zu dürfen. Es geht darum, dass dir mit Recht mitgeteilt wurde, dass du das Spiel nicht ändern darfst, wenn du es nicht selbst geschrieben hast.
cherrymoon69 hat folgendes geschrieben: | | also echt.das geht doch niemanden etwas an. |
Doch, das tut es, und zwar in letzter Konsequenz Tino. Wenn dir hier geantwortet wird und du die Antworten dazu nutzt, gesetzeswidrige Handlungen zu begehen (z.B. ein Spiel manipulieren, das du nicht selbst geschrieben hast), kann Tino eventuell teilweise dafür haftbar gemacht werden. Daher geht es uns sehr wohl etwas an, ob das Spiel von dir ist oder nicht. Außerdem ist Code dieser Art ohne die Kenntnis über seinen Verwendungszweck gefährlich, da das Topic auch von Usern genutzt werden kann, gesetzeswidrige Handlungen zu begehen.
Du solltest das also auch von dieser Seite her sehen und nicht gleich anfangen, ausfallend zu werden.
AXMD
|
|
Luckie
Ehemaliges Mitglied
Erhaltene Danke: 1
|
Verfasst: Fr 29.02.08 16:38
Natürlich hat jedermann mal angefangen und jedermann hat auch festgestellt, dass es mehr Sinn macht mit den Grundlagen anzufangen. Klar sollte man auch mal Herausforderungen angehen, allerdings sollte sie dem Wissenstand entsprechen.
| Zitat: | | ich gehe davon aus, dass manmir vernünftig, auf mein wissen zugeschnitten, antwortet. |
Genau das ist das Problem. Um dir helfen zu können, setzt es nun mal voraus, dass ein gewisser Wissenstand da ist, sonst macht das ganze keinen Sinn, weil du unsere Antworten nicht verstehst. Und damit ist weder dir noch uns geholfen.
| Zitat: | | der andere meint das ich nicht das recht hätte an einem spiel etwas zu ändern |
Du kannst ein einer Exe-Datei so viel ändern wie du willst, auch wenn die Lizenz was anderes besagt. Was du nicht darfst, ist die modifizierte Exe-Datei zu veröffentlichen nach deutschem Recht. Auch kannst du natürlich auch Trainer oder sonstiges dafür entwickeln, du solltest dir nur der möglichen Folgen bewußt sein, wenn sie von dir oder anderen eingesetzt werden.
|
|
cherrymoon69 
Hält's aus hier
Beiträge: 12
|
Verfasst: Fr 29.02.08 18:35
also. wenn ihr das ausfallend nennt? wo war ich denn ausfallend?rainer zu tausenden im internet.
habe nur meine meinung gesagt und nicht ausfallend geworden.
ich verändere kein programm an sich. schon gar keine exe.
ich schreibe nur zur laufzeit einen wert in den ram. das ist alles.
und das ist nicht verboten. ausserdem mache ich das für mich. es gibt diese trainer zu tausenden im internet.
ich will das aber selber machen. um es auch zu verstehen.
ich lerne sehr wohl etwas dabei. denn ich schaue mir den code genau an und experimentiere damit rum. dadurch lerne ich. natürlich arbeite ich auch diverse tuturials durch.
aber die trainersache liegt mir am herzen.
versteht ihr das nicht? es ist doch besser es selber zu machen und zu lernen, als das trainermakerkit runterzuladen und das selbe zu machen und dumm zu bleiben.
|
|
elundril
      
Beiträge: 3747
Erhaltene Danke: 123
Windows Vista, Ubuntu
Delphi 7 PE "Codename: Aurora", Eclipse Ganymede
|
Verfasst: Fr 29.02.08 20:40
das is sehr lobenswert das du sagst ok das will ich selbst machen und wir wollen dir auch helfen aber um unsere Hilfe zu verstehen brauchst du einen gewissen wissenstand. Wir können dir nicht Delphi von grund auf erlernen. Dazu gibts nämlich auch tutorials die das können. (-> Crashkurs)
insofern kann ich dir auch nur raten dich mal etwas genauer in die materie einzuarbeiten. man kann nicht gleich bei 100 anfangen. Bill Gates hat sicher auch nicht sofort mit windows angefangen sondern mit kleinen programmen.
lg elundril
_________________ This Signature-Space is intentionally left blank.
Bei Beschwerden, bitte den Beschwerdebutton (gekennzeichnet mit PN) verwenden.
|
|
cherrymoon69 
Hält's aus hier
Beiträge: 12
|
Verfasst: Fr 29.02.08 20:50
das verstehe ich zum teil. die tuturials arbeite ich ja durch.
und das mit dem array habe ich auch verstanden. setze es gleich mal um.
viel mehr hätte ich gerne ein statement dazu:
Zitat: Ich könnte ja jetzt sagen, wer für so ein Problem WriteProcessMemory verwendet, hat nicht besseres verdient. Aber, ich sage es nicht.
wie wäre denn ein besserer ansatz???
|
|
Sinspin
      
Beiträge: 1338
Erhaltene Danke: 120
Win 10
RIO, CE, Lazarus
|
Verfasst: Fr 29.02.08 22:17
Sinspin hat folgendes geschrieben: | Ich könnte ja jetzt sagen, wer für so ein Problem WriteProcessMemory verwendet, hat nicht besseres verdient. Aber, ich sage es nicht  |
Ich würde mal vermuten dass das in meine Richtung geht?
Da ist die Antwort: Sinspin hat folgendes geschrieben: |
Wobei ich die gesammte Idee nicht sonderlich Intelligent finde. (Wenn du da belohnen willst dann darf das Spiel nicht schon vorher vorhanden sein, sondern muss von dir gestartet werden. Besser noch, von dir geschrieben sein.
Dann könntest du auch eine weniger bescheidene Technik zum blockieren des Spiels verwenden. |
Dein Trainer ist das eine. (schöne Idee)
Die Belohnung das andere! (bisher keine schöne Idee)
Da du ja eh nur Spiele anbieten kannst die dir bekannt sind (du fummelst ja drinne rum), kannst du doch auch Spiele verwenden die du selber schreibst, oder zumindest die Quelltexte davon hast.
Und schon kannst du Techniken verwenden die nicht so mords heikle Sachen anstellen!
Dann könnten deine Programme über Dateien, Sockets, Pipes oder SharedMemory miteinander kommunizieren und sich mitteilen was der Spieler gerade darf oder nicht.
_________________ Wir zerstören die Natur und Wälder der Erde. Wir töten wilde Tiere für Trophäen. Wir produzieren Lebewesen als Massenware um sie nach wenigen Monaten zu töten. Warum sollte unser aller Mutter, die Natur, nicht die gleichen Rechte haben?
|
|
cherrymoon69 
Hält's aus hier
Beiträge: 12
|
Verfasst: Fr 29.02.08 23:36
hallo?
ich möchte aber bei meinem lieblingsspiel das geld einfrieren können. das ist es worum es geht. um nix anderes.
|
|
|