 |
Das deutsche QBasic- und FreeBASIC-Forum Für euch erreichbar unter qb-forum.de, fb-forum.de und freebasic-forum.de!
|
Vorheriges Thema anzeigen :: Nächstes Thema anzeigen |
Autor |
Nachricht |
psygate
Anmeldungsdatum: 05.04.2005 Beiträge: 304 Wohnort: Wien und der Computer
|
Verfasst am: 29.07.2006, 20:50 Titel: Gameshark, Pointer |
|
|
hallo!
Ich würde gerne einen Art Gameshark bauen. Ich sehe das als hesausforderung schaffe es aber einfach nciht auf die Variablen in einem anderen Programm zu zugreifen. Kann mir Jemand helfen?
PS: Ich meine, z.B: Ichs tarte programm A mit variable B und will von Programm C aus diese Variable B editieren! _________________ Danke an Volta für seine großartige MMX_fade function. *verneig*
Personal-DNA:
<script src="http://personaldna.com/h/?k=qtrCFboSuCOpFrX-OI-AADBA-f78d&t=Free-Wheeling+Leader">
</script>
Zitat: | Das Forum für den zum QBASIC kompatieblen open soure FreeBasic Kompiler. | by DJ. Peters |
|
Nach oben |
|
 |
raph ael
Anmeldungsdatum: 12.04.2006 Beiträge: 472
|
Verfasst am: 29.07.2006, 21:08 Titel: |
|
|
Die Programme können ja via WinSock kommunizieren.
Beispiel:
OK, das war ein blödes Beispiel.
Nächster Versuch:
Ein Programm fungiert als Server.
Das wird ein seperates Programm sein, dass die Nachrichten weiterleitet.
Die anderen Programme fungieren als Client.
Sie senden die Nachrichten.
Also nehmen wir einmal an, du hättest Programm A, dass die Variable xy auf 312 setzen möchte, dies allerdings den Programm B auch sagen möchte.
Also schickt es eine Anfrage an den Server.
Diese könnte z.B. so aussehen:
Der Server hat jetzt die Aufgabe, diese Nachricht an alle Clients weiterzuleiten.
Diese wiederrum führen die Anfrage aus und senden eine Bestätigung, z.B.:
Wenn der Server dieses "OK" von allen Clients empfängt, weiß er das alles OK ist.
Um den Code musst du dich leider selber kümmern . _________________
Zitat: | 1000 Yottabytes sind absurd. 640 Yottabytes sollten genug für jeden sein. |
|
|
Nach oben |
|
 |
Michael Frey

Anmeldungsdatum: 18.12.2004 Beiträge: 2577 Wohnort: Schweiz
|
|
Nach oben |
|
 |
psygate
Anmeldungsdatum: 05.04.2005 Beiträge: 304 Wohnort: Wien und der Computer
|
Verfasst am: 30.07.2006, 16:44 Titel: |
|
|
*Pointer-Nadel in Lanzenlänge schnell versteck* öhm... Eigentlich wollte ich das schon über die WinAPI regeln *pfeiff*, köntne man das nciht direkt mit den Pointern machen? Mir ist nur eines dabei aufgefallen: Ein Pointer in einem programm gleich einem andern. So hat die screen 12 in programm a die adresse 1002... und in B auch! Wieso zum Teufel ist das so?? _________________ Danke an Volta für seine großartige MMX_fade function. *verneig*
Personal-DNA:
<script src="http://personaldna.com/h/?k=qtrCFboSuCOpFrX-OI-AADBA-f78d&t=Free-Wheeling+Leader">
</script>
Zitat: | Das Forum für den zum QBASIC kompatieblen open soure FreeBasic Kompiler. | by DJ. Peters |
|
Nach oben |
|
 |
Michael Frey

Anmeldungsdatum: 18.12.2004 Beiträge: 2577 Wohnort: Schweiz
|
Verfasst am: 30.07.2006, 19:03 Titel: |
|
|
psygate hat Folgendes geschrieben: | *Pointer-Nadel in Lanzenlänge schnell versteck* öhm... Eigentlich wollte ich das schon über die WinAPI regeln *pfeiff*, köntne man das nciht direkt mit den Pointern machen? Mir ist nur eines dabei aufgefallen: Ein Pointer in einem programm gleich einem andern. So hat die screen 12 in programm a die adresse 1002... und in B auch! Wieso zum Teufel ist das so?? |
Wie bist du an den Pointer vom Screen gekommen?
Ich glaube, die Pointer in Freebasic sind relativ.
Das heisst: Im RAM liegt dein Programm auf irgendeiner Adresse und Freebasic rechnet immer von da aus weiter. _________________ http://de.wikibooks.org/wiki/FreeBasic Jede Hilfe für dieses Buch ist Willkommen!
http://de.wikibooks.org/wiki/FreeBasic:_FAQ FAQ zu Freebasic (im Aufbau, hilfe Willkommen)
Neu mit Syntax Highlight |
|
Nach oben |
|
 |
OdinX

Anmeldungsdatum: 29.07.2005 Beiträge: 253 Wohnort: SG Schweiz
|
Verfasst am: 30.07.2006, 22:37 Titel: |
|
|
wie wärs wenn du den variableninhalt in eine text-datei speicherst? dann kann jedes andere programm diese wieder auslesen. |
|
Nach oben |
|
 |
psygate
Anmeldungsdatum: 05.04.2005 Beiträge: 304 Wohnort: Wien und der Computer
|
Verfasst am: 30.07.2006, 23:16 Titel: |
|
|
@OdinX: Das ist eine Idee... die hat nur einen Hacken! Nehmen wir mal das Spiel civilization (großer fan davon bin!). Ich möchte nun meine Schatzkammer und Credits etwas aufpolieren. Civilization wird mir wohl nichts in einer TextDatei Speichern  _________________ Danke an Volta für seine großartige MMX_fade function. *verneig*
Personal-DNA:
<script src="http://personaldna.com/h/?k=qtrCFboSuCOpFrX-OI-AADBA-f78d&t=Free-Wheeling+Leader">
</script>
Zitat: | Das Forum für den zum QBASIC kompatieblen open soure FreeBasic Kompiler. | by DJ. Peters |
|
Nach oben |
|
 |
Michael Frey

Anmeldungsdatum: 18.12.2004 Beiträge: 2577 Wohnort: Schweiz
|
Verfasst am: 31.07.2006, 08:19 Titel: |
|
|
psygate hat Folgendes geschrieben: | @OdinX: Das ist eine Idee... die hat nur einen Hacken! Nehmen wir mal das Spiel civilization (großer fan davon bin!). Ich möchte nun meine Schatzkammer und Credits etwas aufpolieren. Civilization wird mir wohl nichts in einer TextDatei Speichern  |
Kannst ja denn Spielstand öffnen und bearbeiten . _________________ http://de.wikibooks.org/wiki/FreeBasic Jede Hilfe für dieses Buch ist Willkommen!
http://de.wikibooks.org/wiki/FreeBasic:_FAQ FAQ zu Freebasic (im Aufbau, hilfe Willkommen)
Neu mit Syntax Highlight |
|
Nach oben |
|
 |
psygate
Anmeldungsdatum: 05.04.2005 Beiträge: 304 Wohnort: Wien und der Computer
|
Verfasst am: 31.07.2006, 12:01 Titel: |
|
|
Es geht mir aber gerade um den Zugriff aufden RAM, natürlich könnte ich das saavegame auslesen und bearbeiten, aber das ist doch etwas langweilig oder? _________________ Danke an Volta für seine großartige MMX_fade function. *verneig*
Personal-DNA:
<script src="http://personaldna.com/h/?k=qtrCFboSuCOpFrX-OI-AADBA-f78d&t=Free-Wheeling+Leader">
</script>
Zitat: | Das Forum für den zum QBASIC kompatieblen open soure FreeBasic Kompiler. | by DJ. Peters |
|
Nach oben |
|
 |
Michael Frey

Anmeldungsdatum: 18.12.2004 Beiträge: 2577 Wohnort: Schweiz
|
Verfasst am: 31.07.2006, 12:56 Titel: |
|
|
Anderer netter Ansatz:
Das Spiel deasemblieren und alle Objekte Kostenlos machen .
Das im RAM arbeiten kannst du auch versuchen, aber es ist halt ziemlihc Trickreich und es gibt viele Unbekannte. _________________ http://de.wikibooks.org/wiki/FreeBasic Jede Hilfe für dieses Buch ist Willkommen!
http://de.wikibooks.org/wiki/FreeBasic:_FAQ FAQ zu Freebasic (im Aufbau, hilfe Willkommen)
Neu mit Syntax Highlight |
|
Nach oben |
|
 |
raph ael
Anmeldungsdatum: 12.04.2006 Beiträge: 472
|
Verfasst am: 31.07.2006, 13:05 Titel: |
|
|
*Netwidedisassemblerhernehm*
Naja, wenn es dir mit den Savegame zu laaaangweilig ist ...
Beim RAM weißt du ja nicht wo was ist, und wenn du's herausfindest, müsstest du es nach jeden Start neu berechnen .
Das mit den Savegames geht doch viiiiiiel leichter . _________________
Zitat: | 1000 Yottabytes sind absurd. 640 Yottabytes sollten genug für jeden sein. |
|
|
Nach oben |
|
 |
psygate
Anmeldungsdatum: 05.04.2005 Beiträge: 304 Wohnort: Wien und der Computer
|
Verfasst am: 31.07.2006, 13:08 Titel: |
|
|
Ja, aber da muss es einen Weg geben! Wie sonst könnten die Trainer für Spiele funktionieren?!
Ich seh das mal als meine Herausforderung an die Community hier.  _________________ Danke an Volta für seine großartige MMX_fade function. *verneig*
Personal-DNA:
<script src="http://personaldna.com/h/?k=qtrCFboSuCOpFrX-OI-AADBA-f78d&t=Free-Wheeling+Leader">
</script>
Zitat: | Das Forum für den zum QBASIC kompatieblen open soure FreeBasic Kompiler. | by DJ. Peters |
|
Nach oben |
|
 |
Michael712 aka anfänger, programmierer
Anmeldungsdatum: 26.03.2005 Beiträge: 1593
|
Verfasst am: 31.07.2006, 21:05 Titel: |
|
|
Ach, das hab ich schon gemacht. Muss ich mal rauskramen.
Das geht mit den Windows debug funktionen, dadurch kann man, wenn man als administrator eingeloggt ist, auf den RAM von anderen Programmen zugreifen. Ich poste gleich mal den quellcode von 2 FB programmen. Das eine erhöht alle 5sec eine zahl um 2, das andere ändert dann die 2 in 3, schon wird immer 3 addiert
Muss mal gucken, ob ich das noch im backup habe, meine festplatte is kaputt, hab aber noch ein wenig retten können. |
|
Nach oben |
|
 |
Michael712 aka anfänger, programmierer
Anmeldungsdatum: 26.03.2005 Beiträge: 1593
|
Verfasst am: 01.08.2006, 01:56 Titel: |
|
|
Michael Frey hat Folgendes geschrieben: |
Wie bist du an den Pointer vom Screen gekommen?
|
Screenptr rul0rt
Code wieder gefunden, hab ich übrigens mal nach nem c tutorial gemacht.
Zuerst beide Programme kompilieren, danach ram1.exe starten, dann ram2.exe.
ram1.bas:
Code: |
screen 18
Dim As Integer i,j,k,pause=1000
i=1
j=2
k=j+1
Print @j 'mit der ausgabe von ram2.exe vergleichen
Do
Sleep pause,1
Print i,j
i+=j
If j+1<>k Then
Print "j wurde von";k-1;" zu";j;" verändert"
k=j+1
End If
Loop until i>100000 Or Inkey<>""
|
ram2.bas
Code: |
#include "windows.bi"
Screen 18
Option Explicit
Declare Sub aendere(phandle As handle, alt AS Integer, neu As Integer)
Declare Function suche_wert(phandle As handle, wert As Integer, start As uInteger, ende As uInteger)
Dim As handle phandle
Dim As hwnd fenster
Dim As dword pid
Dim As Integer buffer
fenster = FindWindow(0,"ram1") 'Fenster suchen und hwnd speichern
If fenster=0 Then
Print "Fenster konnte nicht gefunden werden."
Sleep
End
End If
GetWindowThreadProcessId(fenster, @pid) 'prozess id zu dem fenster speichern
phandle = OpenProcess(PROCESS_ALL_ACCESS, 0, pid) 'Prozess "öffnen", um nacher variablen zu suchen/ändern
aendere(phandle,2,3) 'hier den alten und neuen wert eingeben
aendere(phandle,1000,100)
Print "Fertig."
Sleep
CloseHandle(phandle) 'Prozess schließen
Sub aendere(phandle As handle, alt AS Integer, neu As Integer)
Dim AS MEMORY_BASIC_INFORMATION mbi
Dim As Unsigned Integer adress = &H400000, adresse, rw
Dim As Integer start, ende, buffer
buffer=neu
do
VirtualQueryEx(phandle,cast(any ptr,adress),@mbi,sizeof(MEMORY_BASIC_INFORMATION))
If mbi.State = MEM_COMMIT And mbi.Protect = PAGE_READWRITE And mbi.type= 16777216 THen 'Prüfen, ob man nicht im Programmspeicher ist
start = mbi.BaseAddress
ende = start+mbi.regionsize
Do
adresse=suche_wert(phandle, alt, start, ende) 'Den alten wert suchen
If adresse<>0 Then
WriteProcessMemory(phandle, cast(any ptr,adresse), @buffer, sizeof(buffer),0) 'und ändern
Print alt;" gefunden an adresse: ";adresse;" und geändert zu";neu
start=adresse
End IF
Loop Until adresse=0
End If
adress += mbi.RegionSize
Loop Until adress > &H8000000
End Sub
Function suche_wert(phandle As handle, wert As Integer, start As uInteger, ende As uInteger)
Dim As Integer r,i,buffer
For i = start To ende+1
ReadProcessMemory(phandle, cast(any ptr,i), @buffer, sizeof(buffer), 0) 'an der adresse einleses
If buffer=wert Then Return i 'und prüfen, ob der wert enthalten ist
Next i
End Function
|
Hab ein bisschen kommentiert, mach nacher vielleicht noch mehr. |
|
Nach oben |
|
 |
|
|
Du kannst keine Beiträge in dieses Forum schreiben. Du kannst auf Beiträge in diesem Forum nicht antworten. Du kannst deine Beiträge in diesem Forum nicht bearbeiten. Du kannst deine Beiträge in diesem Forum nicht löschen. Du kannst an Umfragen in diesem Forum nicht mitmachen.
|
|