App - Système

samedi 1er août 2020, 14:38  #1
App - Système - ARM passage en Thumb par POP, LDM et LDR
StashOfCode
  • 16 posts

Hello,

Je me renseigne sur la manière de basculer en mode Thumb, notamment pour éviter un filtre de 0x2f qui pourrait empêcher d’utiliser un BX ou un BLX dont les opcodes en contiennent.

La lecture du manuel de l’architecture ARM (v5) permet d’identifier des moyens qui ne sont pas très clairement recensés, et qui semblent intéressants : LDR (section A4.1.23,), LDM (section A4.1.20) et POP (section A7.1.49). Leur doc précise clairement qu’elles fonctionnent comme BX et BLX de ce point de vue : il suffit de charger une adresse impaire dans PC pour provoquer la bascule en mode Thumb. Il suffit de se reporter à leurs algorithmes pour avoir confirmation.

Pourquoi ces techniques ne sont pas utilisées dans les shellcodes ?

Aussi, j’ai remarqué que GDB ne bascule pas en Thumb lorsque je lui fais exécuter pas à pas un POP d’une adresse impaire dans PC, histoire de renvoyer l’exécution sur un shellcode en Thumb qui se trouve dans le tas (et non dans la pile). C’est d’autant plus étrange qu’après le POP, GDB signale que le bit T est bien positionné dans CPSR, mais continue de désassembler en ARM et non en Thumb. Si quelqu’un a une idée...