Autor Beitrag
Shadow110
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 64



BeitragVerfasst: Sa 17.04.04 00:04 
Hallo.

Ich hab mal wieder eine kleine Frage...

Wenn ein Prozess B den Speicher von Prozess A lesen will, dann geht das ja über READPROCESSMEMORY...

So....

Jetzt der komplizierte Teil...

Die Anwendung läd eine DLL.... von dieser DLL aus wird Memory der Hauptanwendung gelesen... Muss keine DLL sein, kann auch der Prozess direkt machen.
Ich hab sowas auch mal gemacht, die eigene Anwendung bestimmte Speicherbereiche auslesen lassen und dann eine Checksumme bilden.

Ich würde jetzt gerne irgendwie abfangen (auswerten) welche Speicheraddressen die Anwendung überprüft.
Wenn die API ReadProcessMe... genutzt wird, ist das klar(Api Hook und Parameter auslesen).

Aber wie kann man das machen, wenn die Anwendung keine API nutzt, sondern das direkt über ASM Befehle macht?

Hat da vielleicht jemand eine Idee zu?

Grüße
Alex
obbschtkuche
Gast
Erhaltene Danke: 1



BeitragVerfasst: Sa 17.04.04 10:51 
Wenn nur Assembler benutzt wird (ohne irgendwelche DLLs), ist das IMO unmöglich.
Luckie
Ehemaliges Mitglied
Erhaltene Danke: 1



BeitragVerfasst: Sa 17.04.04 12:50 
Und wie macht dann das die API? Wenn ich meine Anwendung compliliert habe, ist es doch auch nur noch ASM.
obbschtkuche
Gast
Erhaltene Danke: 1



BeitragVerfasst: Sa 17.04.04 13:24 
Zitat:
Ich würde jetzt gerne irgendwie abfangen (auswerten) welche Speicheraddressen die Anwendung überprüft.
Wenn die API ReadProcessMe... genutzt wird, ist das klar(Api Hook und Parameter auslesen).

Aber wie kann man das machen, wenn die Anwendung keine API nutzt, sondern das direkt über ASM Befehle macht?


Fragt die API ab, welche Speicheradressen gelesen werden? :roll: :mrgreen:
Shadow110 Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 64



BeitragVerfasst: Sa 17.04.04 18:11 
Hi.

Danke euch schon mal für eure Antworten.

Zitat:
Fragt die API ab, welche Speicheradressen gelesen werden?


Die Frage habe ich jetzt irgendwie nicht verstanden. Mein Problem ist, dass die Anwendung keine Api´s nutzt, um den eigenen Speicherbereich zu überprüfen. Das wird warscheinlich sowas sein wie:

MOV eax, [0040000] // Das sollte ja den Inhalt von Speicheraddresse 0040000 nach EAX moven.
CMP eax, FF12
jne 00815

Hoffe das stimmt jetzt *G

So, somit kann eine Speicheraddresse geprüft werden, ohne das eine API Funktion genutzt wird.

Man müsste irgendwie den gesammten Speicher Bereich der Anwendung überwachen, und die Zugriffe rausfiltern, die von der eigentlichen Code Ausführung unabhängig sind...

Wenn das geht. Ist nur mal so eine Idee...

Freue mich auf euren Input.

Grüße
Alex
Shadow110 Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 64



BeitragVerfasst: So 18.04.04 01:40 
Hallo.

ausblenden Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
function readhex (address:integer):byte;
begin
asm
  mov eax, address
  mov al, [eax]
  mov @result, al
end;


Soweit so gut... Meine TestAnwendung ruft das jetzt mit nem Counter auf... alle 5 Sekunden...


Da gibts warscheinlich keine Möglichkeit, dass von einer anderen Anwendung aus mitzubekommen?

Grüße
Alex
obbschtkuche
Gast
Erhaltene Danke: 1



BeitragVerfasst: So 18.04.04 10:52 
Das war auf

Zitat:
Und wie macht dann das die API? Wenn ich meine Anwendung compliliert habe, ist es doch auch nur noch ASM.


Das bezogen.

Es könnte möglich sein: Du lässt den ensprechenden Prozess und setzt einen Brakepoint auf jede Adresse, wo der entsprechende opcode ausgeführt wird. Das ganze würde natürlich die Performance reichlich drücken. Falls du dich dafür entscheiden solltest, kannst du ja mal das hier durchackern:

nasm.sourceforge.net...c/html/nasmdocb.html

Allerdings wirst du dann wohl nicht darum kommen den ganzen Prozess vorher noch zu disassemblisieren.

//EDIT:

Du könntest auch vorher den Prozess auf die Festplatte bannen (natürlich nur den Code-Teil) und dann von z.B. perdr disassemblisieren lassen und dir die entsprechenden MOVs raussuchen.

//EDIT2:

Allerdings weiß ich nicht ob man problemlos einen laufenden Thread debuggen kann.