J'essaie de comprendre un exemple du livre "Practical Malware Analysis" de Michael Sikorski. Il y a un exemple sur les techniques anti-désassemblage que je ne comprends pas. Il dit qu'une technique courante consiste à créer deux instructions conditionnelles à savoir sauter si zéro (JZ) et sauter sinon zéro (JNZ) qui, considérées ensemble, ne sont en réalité qu'une seule instruction inconditionnelle (c'est clair pour moi). Voici les graphiques des deux résultats possibles créés par le désassembleur.x86 Assembler deux instructions de saut avec la même cible
La citation suivante se réfère à la figure 1:
Dans cet exemple, l'instruction qui suit immédiatement les deux instructions de saut conditionnel semble être une instruction d'appel à (appel), en commençant par l'octet 0xE8. Ce n'est pas le cas, cependant, que les deux instructions de saut conditionnel indiquent en fait 1 octet au-delà de l'octet 0xE8
Qu'est-ce que ça veut dire et pourquoi est l'emplacement de saut loc_4011C4 + 1 (où vient le +1 de) ? et dans la figure 2 c'est loc_4011C5? Quelqu'un peut-il fournir une explication plus détaillée?
La cible de saut est de 1 octet dans l'instruction d'appel. Pourquoi? Parce que c'est ainsi que le programmeur l'a écrit, sans doute à des fins d'obscurcissement. La figure 2 montre l'instruction réelle qui sera exécutée. C4 + 1 = C5 – Jester