Je reçois le code ASM suivant à partir d'un simple programme C obfusqué qui m'a été attribué.Modifier les instructions asm dans un binaire ELF
0x00000000004006a0 <+147>: lea -0x20(%rbp),%rax
0x00000000004006a4 <+151>: mov %rdx,%rsi
0x00000000004006a7 <+154>: mov %rax,%rdi
0x00000000004006aa <+157>: callq 0x400713 <SECRET> <======
0x00000000004006af <+162>: movl $0x0,-0x24(%rbp)
0x00000000004006b6 <+169>: jmp 0x4006d8 <main+203>
0x00000000004006b8 <+171>: mov -0x24(%rbp),%eax
L'objectif est de trouver et enlever qui provoque une erreur de segmentation fonction (patcher le binaire du programme). J'ai trouvé quelle fonction est à l'origine du segfault, mais je ne sais pas comment corriger le binaire.
Mon problème est de savoir comment le patch
0x00000000004006aa <+157>: callq 0x400713 <SECRET>
pour que je l'appelle habitude la fonction SECRET.
Si j'utilise gdb
pour ignorer/sauter SECRET en modifiant le compteur de programme tout en effectuant un seul pas à l'exécution, le programme termine l'exécution et me donne la sortie que je veux.
Ce que je veux est une copie modifiée en permanence du fichier binaire exécutable qui saute toujours sans utiliser de débogueur.
est-il un moyen de l'ignorer ou de sauter que lorsque j'exécute le programme sans gdb –
Sauter dans GDB ne compte pas comme résoudre votre affectation, mais oui, gdb peut sauter où vous voulez. Vérifiez le manuel de gdb. Vous pouvez même écraser l'instruction 'call' avec des NOP pendant cette session de débogage. Si c'est quelque chose comme une assignation de bombe-laboratoire binaire, vous êtes censé lui donner une entrée différente afin que l'exécution n'atteigne jamais ce bloc. –
Oui, je peux le faire avec le compteur de programme, mais je cherche un moyen de modifier le binaire et supprimer cet appel de fonction et enregistrer le fichier corrigé. –