1

Yop,

Je voudrais lire une partie ou la totalité de la mémoire allouée par un programme, d'après msdn ReadProcessMemory semble convenir parfaitement. Pour fonctionner elle prend en paramètre le handle du process, un buffer, une taille, etc... mais surtout l'adresse dans la mémoire de ce processus à laquelle commencer la lecture. Comment peut-on savoir où commencer à lire, et combien lire ? (enfin surtout où commencer, parceque la fonction retourne probablement une erreur quand on essaie de lire trop loin)

mci happy
avatar
All right. Keep doing whatever it is you think you're doing.
------------------------------------------
Besoin d'aide sur le site ? Essayez par ici :)

2

Bin faut lire a partir de l'eop.

Je te conseille, si tu connais pas sur le bout des doigts le format PE de lire des docs avant de te lancer ds une telle aventure.

A++

3

eop, format PE... heu ? ...

enfin je viens de chercher à propos du format PE, c'est surement très interessant mais a priori je vois pas trop le lien ac la question ? enfin c'est pê aussi parceque chercher "eop" sur google sans avoir davantage d'informations ça donne un peu n'importe quoi comme résultats
avatar
All right. Keep doing whatever it is you think you're doing.
------------------------------------------
Besoin d'aide sur le site ? Essayez par ici :)

4

Ton soft pourrais te donner les adresse qu'il utilise via des moyen de communications ? (FIFO, SHM, ...)
avatar
Proud to be CAKE©®™


GCC4TI importe qui a problème en Autriche, pour l'UE plus et une encore de correspours nucléaire, ce n'est pas ytre d'instérier. L'état très même contraire, toujours reconstruire un pouvoir une choyer d'aucrée de compris le plus mite de genre, ce n'est pas moins)
Stalin est l'élection de la langie.

5

heu nop justement, le but serait de faire un truc qui marche quelque soit le soft sur lequel on veut récuperer les infos
avatar
All right. Keep doing whatever it is you think you're doing.
------------------------------------------
Besoin d'aide sur le site ? Essayez par ici :)

6

7

bah le contenu de toute la mémoire utilisée par le processus (ce qu'on peut lire avec ReadProcessMemory en fait, c'est juste que je ne sais pas où le lire, vu qu'a priori ça ne commence pas à l'adresse 0)
avatar
All right. Keep doing whatever it is you think you're doing.
------------------------------------------
Besoin d'aide sur le site ? Essayez par ici :)

8

ben a mon avis il te faut connaitre les zones de mémoire du processus qui ont été mappées

je connais pas windows comment ça marche mais sous linux t'as ça :

j'ai pris un processus au hasard, c'est dhclient avec le PID 1070

[root@seoul ~]# cat /proc/1070/maps
001c4000-002e7000 r-xp 00000000 03:03 3068178    /lib/libc-2.3.5.so (deleted)
002e7000-002e9000 r-xp 00123000 03:03 3068178    /lib/libc-2.3.5.so (deleted)
002e9000-002eb000 rwxp 00125000 03:03 3068178    /lib/libc-2.3.5.so (deleted)
002eb000-002ed000 rwxp 002eb000 00:00 0
0035a000-00374000 r-xp 00000000 03:03 3068162    /lib/ld-2.3.5.so (deleted)
00374000-00375000 r-xp 00019000 03:03 3068162    /lib/ld-2.3.5.so (deleted)
00375000-00376000 rwxp 0001a000 03:03 3068162    /lib/ld-2.3.5.so (deleted)
00d24000-00d8a000 r-xp 00000000 03:03 848800     /sbin/dhclient
00d8a000-00d8b000 r-xp 00065000 03:03 848800     /sbin/dhclient
00d8b000-00d8f000 rwxp 00066000 03:03 848800     /sbin/dhclient
00d8f000-00d99000 rwxp 00d8f000 00:00 0
00e04000-00e05000 r-xp 00e04000 00:00 0          [vdso]
00eaa000-00eb3000 r-xp 00000000 03:03 3068212    /lib/libnss_files-2.3.5.so (deleted)
00eb3000-00eb4000 r-xp 00008000 03:03 3068212    /lib/libnss_files-2.3.5.so (deleted)
00eb4000-00eb5000 rwxp 00009000 03:03 3068212    /lib/libnss_files-2.3.5.so (deleted)
08c4b000-08c8d000 rw-p 08c4b000 00:00 0          [heap]
b7f9c000-b7f9e000 rw-p b7f9c000 00:00 0
b7fa5000-b7fa6000 rw-p b7fa5000 00:00 0
bff91000-bffa6000 rw-p bff91000 00:00 0          [stack]
[root@seoul ~]#


dans l'ordre je suppose:
plage adresses physiques
droits
adresse virtuelle de départ
chépakoi
taille
module correspondant

doit y avoir l'équivalent en win32, c'est clair embarrassed

9

eop = end of program à mon avis
avatar
I'm on a boat motherfucker, don't you ever forget

10

Le (gros?) problème que tu risque de rencontrer c'est que ReadProcessMemory est lié au méthodes de débuggage. J'ai peur que ça ne marche pas sur toutes les applis ou autres choses du genre :
hProcess [in] A handle to the process with memory that is being read. The handle must have PROCESS_VM_READ access to the process.


Déjà si tu compte utiliser sur des appli/process qui ne sont pas de toi, il me semble qu'on peu créer un process qui refuse de se faire débugguer (par ex)

Et comme ReadProcessMemory et WriteProcessMemory sont apriori normalement dédié pour les débuggueurs, j'ai peur que tu rencontres des pbms lié a ça...

Sinon si tu n'est pas tres pressé, tu peut toujours tester tout un pan mémoire jusqu'a ce que tu tombe sur une zone utilisé par l'appli, et apres tu peut chercher la taille max utilisé. C'est pas top mais bon..
avatar
Proud to be CAKE©®™


GCC4TI importe qui a problème en Autriche, pour l'UE plus et une encore de correspours nucléaire, ce n'est pas ytre d'instérier. L'état très même contraire, toujours reconstruire un pouvoir une choyer d'aucrée de compris le plus mite de genre, ce n'est pas moins)
Stalin est l'élection de la langie.

11

12

Note : les zones lisibles sont uniquement celles avec l'état "commited"
[edit: autre note : commence simplement avec l'adresse 0, et il te donne la taille de chaque morceau, donc suffit d'additionner entre deux appels]

13

j'ai pas encore pu tester à fond mais ça a l'air de marcher, mci, je m'y colle quand j'ai un moment libre happy
avatar
All right. Keep doing whatever it is you think you're doing.
------------------------------------------
Besoin d'aide sur le site ? Essayez par ici :)