2016-01-30 5 views
1

alors je suis les suivantes (à titre d'exemple):Comment changer le décalage de la mémoire qword dans Hopper Assembler v3?

0x00000001000022c4 db "Apple", 0 
0x0000000100002347 db "Ducks", 0 

Dans une procédure, il fait référence à Apple en tant que tel:

lea rcx, qword [ds:0x1000022c4] ; "Apple" 

J'aime cette chaîne à dire Ducks et j'ai donc essayé de modifier les instructions de montage en disant:

lea rcx, qword [ds:0x100002347] 

Cependant, quand je l'applique dit quelque chose comme:

lea rcx, qword [ds:0x2ace] 

Pourquoi le fait-il? J'ai été en mesure de le réparer en allant dans l'éditeur hexadécimal trouver la valeur hexadécimale, regarder combien le décalage était éteint et le corriger. Mais il sentait vraiment la somme cumber.

Répondre

1

Le désassembleur Hopper V3 est un excellent outil pour faire de l'ingénierie inverse. J'ai le même probléme. Voici ma solution. Mon arc de démonstration est x86_64:

00000001000174a6   mov  rsi, qword [ds:0x1004b3040] ; @selector(setAlignment:) 

Quand vous voyez cela, il est signifie pas que vous pouvez modifier l'adresse (0x1004b3040) à ce que vous voulez. Exactement le montage code est:

00000001000174a6 movq 0x49bb93(%rip), %rsi ## Objc selector ref: setAlignment: 

Cela signifie que vous devez convertir l'adresse cible « 0x49bb93 » La formule est 0x1004b3040 - 00000001000174a6 - 7 = 0x49bb93

Donc, si vous souhaitez modifier l'adresse à 100.002.347 ' Canards, vous devriez suivre cette formule et trouver la longueur des octets de votre instruction, mon est '7'

Dans ma démo, je voudrais modifier le @selector (setAlignment :) @selector (setHidden :), Je dois donc le convertir avec la formule ci-dessous: 0x1004b2238 - 0x10 00174a6 - 7 = 0x49ad8b

Donc, modifiez le code hexadécimal avec 48 8b 35 8b et 49 00, appuyez sur 'command + shift + H' pour afficher l'éditeur hexadécimal dans Hopper.

vient ici quelques photos de démonstration:

Before my work

After my work

Mon anglais est pas très bon, alors bienvenue à répondre.