1

Dans une ancienne vie, j'avais un outil qui permettait de détecter les zones mémoires modifiées dans une application et notamment faire un résumé des zones modifiés.
Cela permettait de détecter rapidement et facilement ce qui avait changé lors d'une action utilisateur.

Connaissez-vous un outil similaire & sûre d'utilisation qui fonctionne sur win10 ?
avatar

2

Tout ça pour tricher dans les jeux, avoue embarrassed

Warpten doit connaître ce genre d'outils, mais je sais pas s'il passe encore ici :
Warpten a été invité sur ce sujet.


Au pire, apparemment tu peux utiliser Process Explorer pour dumper la mémoire avant et après, et ensuite utiliser un outil de comparaison de fichiers :
https://www.ibm.com/support/pages/how-manually-generate-process-dump-using-process-explorer
avatar
Zeroblog

« Tout homme porte sur l'épaule gauche un singe et, sur l'épaule droite, un perroquet. » — Jean Cocteau
« Moi je cherche plus de logique non plus. C'est surement pour cela que j'apprécie les Ataris, ils sont aussi logiques que moi ! » — GT Turbo

3

Pour les edit mémoire, tu as HookShark (injection de code par exemple)
Sinon, plus classique, CheatEngine

./2 Oh si, je passe de temps en temps; j'ai le nez fourré dans Metroid Dread en ce moment

(Le problème de dumper la mémoire c'est que tu vas tomber sur une tétrachiée de faux positifs dans les sections de code à cause de l'ASLR)

4

j'avais effectivement déjà tester en dumpant la ram du process via HxD, mais c'est trop compliquer à trouver ce que l'on cherche car y a trop de truc qui changes

Merci Warpten, je vais tester smile
avatar

5

(coucou Warpten smile)
avatar
Zeroblog

« Tout homme porte sur l'épaule gauche un singe et, sur l'épaule droite, un perroquet. » — Jean Cocteau
« Moi je cherche plus de logique non plus. C'est surement pour cela que j'apprécie les Ataris, ils sont aussi logiques que moi ! » — GT Turbo

6

En dehors du monde Windows, je recommande Valgrind et sa suite de over 9000 outils.
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.

7

Tu as besoin de faire quoi exactement?

(Et Valgrind c'est plus pour du débogage qu'autre chose, à priori il a pas accès aux sources là)

8

Valgrind fait plus que du "déboggage"
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.

9

Warpten, j'aimerai trouver l'endroit où est stocker certaines données en mémoire pour les récupérer et les utiliser dans un mod pour un jeu plus maintenu.
Ou au pire au moins savoir si c'est stocké en mémoire, auquel cas ça sera plus facile que patcher le code (vu que je maitrise pas bien le x86) smile
avatar

10

Bah le problème c'est que tu devras probablement patcher du code, parce que à chaque exécution, les données seront autre part en mémoire; t'auras un pointeur dans l'appli qui te donnera accès à ça: au mieux, c'est un pointeur statique (dans .data), au pire, c'est dans un objet, donc ça vit dans la heap, et il faut que tu trouves a) l'adresse de base de l'objet, et b) l'offset de ce pointeur par rapport à la base de l'objet.

===

Aparté: Par exemple, sur Wow, si tu veux obtenir l'instance du joueur local, tu dois passer par le TEB:

WGUID __cdecl ClntObjMgrGetActivePlayer()
{
  WGUID *v0; // ecx
  WGUID localPlayerGUID; // rax

  v0 = *(WGUID **)(*((_DWORD *)NtCurrentTeb()->ThreadLocalStoragePointer + TlsIndex) + 8);
  if ( v0 )
    return v0[0x19];
  localPlayerGUID.m_qword = 0i64;
  return localPlayerGUID;
}

CGObject_C *__cdecl ClntObjMgrObjectPtr(WGUID guid, TypeMask mask, char *file, int line)
{
  int v4; // ecx
  CGObject_C *localPlayer; // eax
  __int64 v6; // [esp+0h] [ebp-8h] BYREF

  v4 = *(_DWORD *)(*((_DWORD *)NtCurrentTeb()->ThreadLocalStoragePointer + TlsIndex) + 8);
  if ( !v4
    || !guid.m_qword
    || (v6 = guid.m_qword, (localPlayer = GetObjectPtr(v4, (WGUID)__PAIR64__(&v6, guid._2.Low))) != 0)
    && (localPlayer->m_descriptors->OBJECT_FIELD_TYPE.m_objectType & mask) == 0 )
  {
    localPlayer = 0;
  }
  return localPlayer;
}

Et cette merde, c'est pas une sinécure, car techniquement la structure n'est documentée nulle part chez MS (parce que en principe, t'y touches jamais, vu que le language a des abstractions par dessus)

===

En revanche, t'as sûrement une fonction dans le jeu qui accède à ces données, que ce soit en lecture et/ou en écriture, auquel cas l'approche que je conseillerai est de passer un moment à désassembler le code (c'est là que le bât va blesser j'imagine), et écrire un simple programme qui utilise une librairie du type Microsoft Detours (y a foule de tutoriels pour ça sur le net, par exemple sur codeproject - dont la qualité varie d'article en article, mais celui ci en particulier est convenable), ou minhook, qui a l'avantage d'être cross plateforme

11

Finalement, j'ai fini par trouver les endroits dans le code et certaines fonctions utiles.
Du coup, j'injecte mon code à la volé pour le mod smile
avatar