2017-10-16 22 views
0

Bonjour, J'essaie d'apprendre l'ingénierie inverse, donc j'utiliser de process hacker pour afficher les chaînes dynamiques dans la mémoire du processus ...possible d'obtenir l'adresse d'assemblage de référence dans le fichier pour l'adresse de mémoire spéciale?

je reçois quelque chose comme ceci:

Address Length Result 
----------------------- 
0x853978 (43): hello 
0xfb5e1a8 (86): hello alex ! 

maintenant je veux savoir comment peut je reçois/trouve l'adresse de référence pour eux? Je tente avec WinHex mais je ne peux pas, je ne sais pas comment puis-je faire, est-il possible de trouver l'adresse d'assemblage de référence dans l'adresse mémoire sous forme de fichier (par exemple: 0x853978) ou ce n'est pas possible .

quelqu'un peut-il aider?

Répondre

3

C'est une variation de halting problem, donc c'est impossible, mais une heuristique faible imparfaite peut être faite en temps polynomial pour trouver des modèles communs.

Si le rédacteur de code a décidé d'éviter des motifs communs de chargement de l'adresse, par exemple pour des raisons d'obfuscation, il peut être calculé à partir de polynômes, etc .. il sera pratiquement impossible de trouver avec un outil logiciel et comprendre cela aide.

Mais ... pourquoi vous avez échoué avec winhex même dans un cas non-cryptique.

Vous n'avez posté aucune information sur votre plate-forme, alors supposons que ce soit x86-64. Alors la plupart des binaires sont PIC, donc le code référençant des données particulières le fait par l'intermédiaire du décalage relatif ajouté au courant rip (pointeur d'instruction). Comme lea rdx,[rip+1234] ; rdx = address of string "hello" .. puis +1234 octets au-delà de cette instruction, l'opcode est le premier octet 'h'. Donc, la création d'un outil, qui traiterait toutes les combinaisons possibles comme des décalages de déplacement et les ajouterait à l'adresse virtuelle actuelle, pourrait aider à trouver une référence à un point particulier du binaire.

Même si vous savez, vous êtes à la recherche pour le déplacement 1234, le x86 est peu endian, constant déplacement afin 32b 1234 == 0x4d2 est stocké dans la mémoire comme d2 04 00 00. Mais normalement, dans RE, un outil de désassemblage est également utilisé pour désassembler le code. Vous pouvez donc l'inspecter vous-même et voir comment cela fonctionne et où il accède à une mémoire particulière. Les désassembleurs ne sont pas parfaits (pour la même raison, comme je l'ai mentionné au début), mais les meilleurs ont des heuristiques raisonnablement ajustées pour détecter correctement le code commun et le désassembler de manière raisonnablement lisible (bien que quelqu'un ose utiliser plus difficile pour le désassembleur et ajoutez des mesures anti-débogage, vous devrez probablement revenir au bon vieux papier + crayon et simuler manuellement pour briser les défenses initiales pour le rendre débug-able). Cette réponse semble probablement assez sombre et négative, en réalité, vous rencontrerez généralement des binaires qui sont soit complètement non rusé, ou simplement faiblement obfusqués, et la plupart des outils professionnels de désassembleur produiront des résultats raisonnables pour les lire simplement comme asm source, aussi le débogueur devrait bien fonctionner avec la plupart des binaires. Bien que si ce code a été produit par un compilateur de langage de haut niveau, il y aura des milliers de lignes de code, avec des informations de débogage, donc il est bon d'avoir de l'expérience pour localiser le code. dans un délai raisonnable.

modifier:

Vous pouvez également utiliser le débogage de point d'arrêt accès mémoire sur certaines plates-formes, à savoir toute instruction de référencement « live » lors de l'exécution. Cela ne les montrera pas tous, sauf si vous forcez le code à parcourir toutes les combinaisons, mais si vous êtes intéressé par le code qui y accède dans un cas particulier, c'est suffisant.