c# webbrowser flash base pointer finden

08/03/2012 15:28 0racle.#1
hi,

ich hatte vor mir per Webbrowser-Komponente in C# eine Seite zu öffnen und dann per ReadProcessMemory() Werte nur auszulesen.

Das mit dem Auslesen funktioniert gut (eigene Klasse geschrieben) sofern ich bei jedem Programmstart die dynamische Adresse eingebe.

Mit der Cheatengine finde ich den Basepointer nicht. Ich finde bei einer Instanz vom Programm:

Die Adressen

Code:
154AD3AC:1
154AD3AC:2
154AD3AC:4
154AD3B4:1
154AD3B4:2
154AD3B4:4
1A12FF08:1
1A12FF08:2
1A12FF08:4
1A12FF08:8
Schaue ich mir diese genauer an

Code:
2034DC09 - 8B 4A 30  - mov ecx,[edx+30]   // edx+30=0x1A12FED8+30 =0x1A12FF08
54E8D174 - 8B 07  - mov eax,[edi]             // edi = 0x1A12FF08 , steht oben mit in der Liste
Im ecx-Register steht der richtige Wert drin. Also wird edx+30 als pointer verwendet. Sucht man nach 1A12FED8, so

steht man bei

Code:
2034DC09 - 8B 4A 30  - mov ecx,[edx+30]   // edx=0x1A12FED8
Sucht man weiter nach 1A12FED8, landet man bei

Code:
54E8E32C - 8B 50 04  - mov edx,[eax+04] // eax = 13BE9F58
                                test edx,edx        // ist edx==0
                                je Flash ....
Weitergraben nach 13BE9F58 bringt einem

Code:
54E8E329 - 8B 04 10   - mov eax,[eax+edx]
mit
Code:
EAX=13BE9F58
EBX=00000001
ECX=10385270
EDX=2271F000
Da wird nun an der Stelle 0x2271F000+0x13BE9F58=0x36308F58 der Wert ausgelesen und nach eax geschoben. Doch Dort findet die Cheatengine nichts.

Wie lange soll ich suchen? Bis ich irgendwann den Basepointer ebp mit in der Rechnung habe. Dann könnte ich ja nach und nach die Adressen rückwärts rechnen.

Diese automatische Suche der CE ist langsam und findet keine Adresse. Kann natürlich auch daran liegen, dass Flash nicht als Standalone läuft, sondern das Flash in der Webbrowser-Komponente ausgeführt wird.

Als Process-Id verwende ich
Code:
System.Diagnostics.Process.GetCurrentProcess();
Habe ich mich da verlaufen?
08/06/2012 00:01 0racle.#2
Hi,

ich bin es noch einmal. Wäre schön, wenn mir jemand helfen kann. Ich möchte lediglich den Wert nur lesen.

Für eine Instanz

Ich habe nun herausgefunden, dass der Wert in 0x1B1D4F08 steht
und 0x13B6DA48 + 0x60 auf 0x1B1D4F08 zeigt.

Die weiteren Multipointer sind
0x13C24160 + 0x24 ---> 0x13B6DA48
0x001AD2E8 ---> 0x13C24160

Da wird einfach nur "mov ebx,[edi]" ausgeführt. Doch dann tritt mein Problem auf.

Wenn ich jetzt auf "Findout what access this address"
bei "0x001AD2E8" klicke erhalte ich keine Stellen.

Irgendwo müssen doch auch bei den Flash-Spielen man zum Ende kommen.

Im Netzt gibt es nur Tutorials, bei denen man ganz einfach gleich eine grüne Addresse serviert bekommt. Gibt es irgendwo anspruchsvollere Tutorials?

Ich danke schon mal im Voraus.

Edit: Natürlich weiß ich, dass die Adressen sich jedes Mal ändern. Allerdings ist es immer der gleiche Ablauf und ich komme einfach nicht tiefer.