Quelqu'un pourrait-il donner un aperçu du code assembleur suivant:Comprendre le code Assemblée
Plus d'informations:
Le bootloader est en fait une petite bootloader 16bit qui décodent en utilisant le déchiffrement Xor, un plus gros, un bootloader linux situé dans les secteurs 3 à 34. (1 secteur vaut 512 octets dans ce disque)
Le tout est un système de protection pour un exec fonctionnant sous Linux embarqué. La version où la protection a été supprimée a déjà été déchiffrée par le bootloader linux (nous avons pu l'inverser en utilisant IDA) donc nous supposons que la clé xor doit être faite uniquement avec zéro dans la version sans la protection. Si nous regardons le décalage 0x800 à 0x8FF dans la version avec la protection enlevée, il n'est pas rempli de zéro, donc cela ne peut pas être la clé sinon cette version ne pourrait pas être chargée, elle xortrait des données et ne chargerait rien.
les secteurs 3-> 34 sont chiffrés en version originale et en clair dans notre version (protection supprimée) mais le code MBR (petit prebootloader) est identique dans les deux versions.
Est-il possible qu'un petit détail dans le code d'assemblage du MBR modifie légèrement l'emplacement de la clé xor?
Ceci est simplement un exercice que je fais pour mieux comprendre les chargeurs de code d'assemblage et j'ai trouvé que celui-ci était plutôt difficile à passer. Je vous remercie pour votre contribution jusqu'à présent!
Si vous clarifiez, peut-être que nous pouvons vous aider, j'ai écrit des chargeurs de démarrage, mais je ne pense pas que nous ayons assez de données. Vous devriez expliquer qu'il y a deux tampons XORed ensemble. Le tampon de destination passe de ES: 0000 à ES: 3FFF. La source (peut-être c'est ce que vous appelez la clé) va de DS: 0800 à ... peut-être DS: 08BF, utilisé circulairement ... Nous ne savons pas de quels secteurs ils proviennent, puisque nous ne voyons pas le début de la Code MBR. – migle
Depuis que le message est appelé "assembly de compréhension ...", vous voyez SI est défini sur 800h, puis incrémenté de LODSW par 2, puis AND SI, 0ffbfh fait une opération "reste de division", qui conserve la "clé" le tampon étant balayé circulairement. Wherease le tampon de destination, disons, le texte chiffré, est celui qui est à ES: 0000-3FFF. – migle
Merci, j'ai ajouté le MBR complet ci-dessus maintenant – Unity