POINERRRR
-
iHofel schrieb:
ne ich will son ähnliche programm wie Cheat Eninge scripten deswegen will ich wissen wie man einen wert verändern kann und dazu braucht man ja ne adresse um den wert zu ändern oder ? ._.
Lass es sein. Bei deinem Kenntnisstand hat das einfach keinen Sinn. Sorry, wenn ich das so direkt sage, aber so ein Tool erfordert wirklich *sehr gute* Kenntnisse von C++, evtl. sind Teile sogar in Assembler.
Lade dir doch die Sourcen von CheatEngine und schau mal, wie die das gemacht haben...
-
Und wenn ich admin bin ODER ich das Programm auf linux schreib ?

und warum schfft es dan cheat engine ?

-
iHofel schrieb:
und warum schfft es dan cheat engine ?

wie gesagt, lade dir die Sourcen und schau selbst nach
-
daddy_felix schrieb:
Lass es sein. Bei deinem Kenntnisstand hat das einfach keinen Sinn. Sorry, wenn ich das so direkt sage, aber so ein Tool erfordert wirklich *sehr gute* Kenntnisse von C++, evtl. sind Teile sogar in Assembler.
Assembler-Kenntnisse brauchst du nicht wirklich, ausgezeichnete C++-Kenntnisse auch nicht unbedingt. Aber es ist stark notwendig Grundlagen über die funktionsweise von Betriebssystemen zu kennen bzw. mit der dem OS zugehörigen System-API sauber umzugehen. Davon ist der OP noch weit entfernt.
Und wenn ich admin bin ODER ich das Programm auf linux schreib
Administrationsrechte benötigt dein Programm dann tatsächlich (afaik), aber auch auf Linux ist es nicht wesentlich simpler.
Was aber nicht heißt, dass es unmöglich ist, natürlich geht das.
und warum schfft es dan cheat engine ?
Höchstwahrscheinlich erfahrenerer Programmierer

MfG SideWinder
-
OK Passt mal auf ich will nicht AUF dem Betribsystem die Variablen Ändern ...
Sondern in meiner CMD anwendung
ZB. Wenn ich das hier schreib:
#include <iostream> #include <windows.h> #include <string> #include <stdlib.h> #include <cmath> using namespace std; int var = 123; int main () { cout << &var << endl; system("PAUSE"); return 0; }und dann will ich zb cin machen wo ich die adresse oder oberen var eingeb und dann änder ich den wert von 123 zb auf 4324 DAS mein ich ^^
(wundert euch nicht warum d soviel includes sind ich hab halt keine lust mir alle zu merken und hab eine Vorlage angefertigt ... :3)
-
Höchstwahrscheinlich erfahrenerer Programmierer --> Tjahh so erfahren will ich auch werden xDD
-
iHofel schrieb:
und warum schfft es dan cheat engine ?

Es ist ja nicht unmöglich. Man muss eben eine Anfrage an das Betriebssystem stellen, auf den fremden Prozessspeicher zugreifen zu dürfen. Das ist auch an sich nicht weiter schwierig. Man muss aber natürlich die entsprechenden Rechte haben.
Wir sagen nur, dass du es nicht kannst. Du weißt nicht einmal was ein Pointer zu benutzen ist, geschweige denn, wie virtueller Prozessspeicher funktioniert. Und das ist nur das absolut nötigste, um überhaupt etwas zu sehen. Um gezielt etwas zu ändern, da muss man auch verstehen, was man da tut, also wie das fremde Programm funktioniert.
-
Das ist mir bewusst. Der gesamte Speicher wird aber vom Betriebssystem kontrolliert und es schützt alle Adressen vor direktem Zugriff aus dem Ring 3 - bis auf die Adressen im Data-Segment der eigenen Applikation.
Du musst mit Hilfe einer OS-API-Funktion in einen inneren Ring kommen der die nötigen Rechte hat andere Adressen zu verändern.
Es ist sehr löblich, dass du ein erfahrenerer Programmierer werden willst, aber das wird man nicht dadurch, dass man sich ein für den derzeitigen Kenntnisstand viel zu schwieriges Projekt aussucht.
MfG SideWinder
-
SeppJ schrieb:
iHofel schrieb:
und warum schfft es dan cheat engine ?

Es ist ja nicht unmöglich. Man muss eben eine Anfrage an das Betriebssystem stellen, auf den fremden Prozessspeicher zugreifen zu dürfen. Das ist auch an sich nicht weiter schwierig. Man muss aber natürlich die entsprechenden Rechte haben.
Wir sagen nur, dass du es nicht kannst. Du weißt nicht einmal was ein Pointer zu benutzen ist, geschweige denn, wie virtueller Prozessspeicher funktioniert. Und das ist nur das absolut nötigste, um überhaupt etwas zu sehen. Um gezielt etwas zu ändern, da muss man auch verstehen, was man da tut, also wie das fremde Programm funktioniert.
ich weiß was sich pointer bringen -.- Zb Es gib Heap und Steak New und Delete Konstante Zeiger und es gibt auch Zeiger und Funktionen bla bla bla
-
LEUTE ich will nur die var in meinen kleinen CMD Programm ändern nicht auf dem betriebsystem -.-
-
iHofel schrieb:
LEUTE ich will nur die var in meinen kleinen CMD Programm ändern nicht auf dem betriebsystem -.-
Nein, du willst die eingegebene Adresse ändern und die liegt nunmal höchstwahrscheinlich NICHT innerhalb des Adressraums deines Programms.
Es ist schön, dass du weißt, was ein Zeiger in C++ ist, es fehlt dir aber schlichtweg das nötige Computer-Wissen dazu. Das kannst du dir erstmal sogar via Wikipedia beibringen.
Es hat keinen Sinn dir hier irgendeinen Copy&Paste-Code zu liefern. Wenn du diesen willst downloade ein OpenSource-Cheat-Programm und sieh dort nach.
int addr = 0; cin >> addr; int* ptr = static_cast<int*>(addr); *ptr = 5; // most probably crashWarum crash? Weil du eben doch außerhalb deines eigenen Programmes auf Speicher zugreifst, das Betriebssystem verhindert das. Glaub's mir. Das hat nichts mit "auf dem betriebssystem" zu tun.
MfG SideWinder
-
Dafuer ist uebrigens ein reinterpret_cast erforderlich, ausserdem empfiehlt sich die benutzung von uintptr_t. :p
-
SideWinder schrieb:
iHofel schrieb:
LEUTE ich will nur die var in meinen kleinen CMD Programm ändern nicht auf dem betriebsystem -.-
Nein, du willst die eingegebene Adresse ändern und die liegt nunmal höchstwahrscheinlich NICHT innerhalb des Adressraums deines Programms.
Es ist schön, dass du weißt, was ein Zeiger in C++ ist, es fehlt dir aber schlichtweg das nötige Computer-Wissen dazu. Das kannst du dir erstmal sogar via Wikipedia beibringen.
Es hat keinen Sinn dir hier irgendeinen Copy&Paste-Code zu liefern. Wenn du diesen willst downloade ein OpenSource-Cheat-Programm und sieh dort nach.
int addr = 0; cin >> addr; int* ptr = static_cast<int*>(addr); *ptr = 5; // most probably crashWarum crash? Weil du eben doch außerhalb deines eigenen Programmes auf Speicher zugreifst, das Betriebssystem verhindert das. Glaub's mir. Das hat nichts mit "auf dem betriebssystem" zu tun.
MfG SideWinder
ok ich habs jetzt kapiert ich brauch bessere kenntise also kann man einach nicht auf die addresse zugreifen ok
und was muss ich jetzt lernen damit ih kapier wie man die sperre vom betriebsystem umgeht ?

-
Kellerautomat schrieb:
Dafuer ist uebrigens ein reinterpret_cast erforderlich, ausserdem empfiehlt sich die benutzung von uintptr_t. :p
also muss ich ne headerdatei eingeben um cast zuverwenden ? :0 ?
-
@Kellerautomat: Danke, von uintptr_t hatte ich noch nichts gehört

@iHofel: Unter Windows:
Allgemeines Verständnis bzgl. physikalischem und virtuellem Speicher
Paging
Verstehen des Memory Managements unter Windows
dazugehörige API (also allokieren von Speicher mit WinAPI-Funktionen statt mit new/delete)
Prozesse und Prozessrechte unter Windows
WriteProcessMemory()MfG SideWinder
-
SideWinder schrieb:
@iHofel: Unter Windows:
Allgemeines Verständnis bzgl. physikalischem und virtuellem Speicher
Paging
Verstehen des Memory Managements unter Windows
dazugehörige API (also allokieren von Speicher mit WinAPI-Funktionen statt mit new/delete)
Prozesse und Prozessrechte unter Windows
WriteProcessMemory()MfG SideWinder
und kannst du mir zeigen wie ich WriteProcessMemory() verwenden kann oder was ich in den parameter schreiben muss oder dergleichen n skript zum zeigen währ nicht schlecht falls du dir die zeit nimmst

-
C++ ist keine Scriptsprache.
-
Kellerautomat schrieb:
C++ ist keine Scriptsprache.
coden ?
-
Bevor du WriteProcessMemory() verwenden sollst, solltest du dir die 5 Punkte darüber ansehen und verstehen. Copy & Paste von http://noz3001.wordpress.com/2009/10/07/writeprocessmemory-examples/ wird zwar funktionieren, wird dich aber nicht zu einem erfahreneren Programmierer erheben.
MfG SideWinder
-
Danke links sind immer gut
