Les membres ayant 30 points peuvent parler sur les canaux annonces, projets et hs du chat.
La shoutbox n'est pas chargée par défaut pour des raisons de performances. Cliquez pour charger.

Forum Casio - Autres questions


Index du Forum » Autres questions » Reverse-Engineering CASIO via IDA pro
Lailouezzz Hors ligne Membre Points: 91 Défis: 0 Message

Reverse-Engineering CASIO via IDA pro

Posté le 26/11/2019 19:28

Bonjour,


J'ai un problème avec IDA pro c'est à dire que j'aimerais avoir le résultat de :

Sur ce screenshot on voit que IDA pro a détécté automatiquement les subroutines ("; sub_8002E430")
Donc forcement c'est simple de voir toutes les subroutines à partir du casiowin entry

SAUF que moi quand je paramètre IDA pro et que je lance la découverte de code à 0x80010008 voilà ce que IDA m'affiche :

On voit que la subroutine 0x80010080 n'est pas reconnu (unk_80010080) donc je suis obligé de jump à 0x80010080 et de taper P ce qui me donne :

Je dois faire ça pour TOUTES les subroutines mais quand il y en a plus de 10000 bon voilà quoi

Quelqu'un aurait une solution ?

EDIT : je vous joint le firmware que j'essaye de déassembler : https://anonfiles.com/DaF8TaBen8/OS_205_SH4_E_bin
C'est le firmware Graph 75+e que j'ai déjà flashé sur ma Graph 35+e


Lephenixnoir Hors ligne Administrateur Points: 24226 Défis: 170 Message

Citer : Posté le 27/11/2019 17:28 | #


Oublie pas de spécfier --toolchain selon tes besoins.

Edit : Pour fxos tu n'as pas besoin du cross-compilateur, du reste.
Mon graphe (11 Avril): ((Rogue Life || HH2) ; PythonExtra ; serial gint ; Boson X ; passe gint 3 ; ...) || (shoutbox v5 ; v5)
Lailouezzz Hors ligne Membre Points: 91 Défis: 0 Message

Citer : Posté le 27/11/2019 17:29 | #


Lephenixnoir a écrit :
Oublie pas de spécfier --toolchain selon tes besoins.

Pas faux j'ai fait un peu ça à l'arrache du coup

Ajouté le 27/11/2019 à 17:33 :
Lephenixnoir a écrit :
Edit : Pour fxos tu n'as pas besoin du cross-compilateur, du reste.


Justement là je test fxSDK mais j'ai eu des problèmes avec le template de projet (sh3eb-elf-gcc était utilisé alors que avec la nouvelle méthode de compilation du cross compilateur c'est sh-elf-gcc et apres -m3 ou -m4-nofpu)
l'un des commits en question

Ajouté le 27/11/2019 à 17:39 :
Et encore autre chose quand je tape make uninstall dans le dossier pour déinstaller fxSDK les commandes ne s'executent pas elles s'affichent juste sur la console
rm -f /home/lailouez/.local/bin/{fxsdk,fxg1a,fxos,fxconv,fxconv.py}
rm -rf /home/lailouez/.local/share/fxsdk


Ajouté le 27/11/2019 à 18:04 :
Je viens de FIX le uninstall (le commit) je ne sais pas pourquoi ça marche pas avec les {} x)
Lephenixnoir Hors ligne Administrateur Points: 24226 Défis: 170 Message

Citer : Posté le 27/11/2019 20:41 | #


Le fait que les commandes s'affichent dans la console c'est normal, et ça prouve qu'elles sont bien exécutées.

Tu es sûr sur le fait que ça marche pas ? Tu as quoi comme shell ? o_o

Je testerai, promis ; j'ai pas mon install sous la main pour le moment donc je délaie un peu.
Mon graphe (11 Avril): ((Rogue Life || HH2) ; PythonExtra ; serial gint ; Boson X ; passe gint 3 ; ...) || (shoutbox v5 ; v5)
Lailouezzz Hors ligne Membre Points: 91 Défis: 0 Message

Citer : Posté le 27/11/2019 22:13 | #


Lephenixnoir a écrit :
Le fait que les commandes s'affichent dans la console c'est normal, et ça prouve qu'elles sont bien exécutées.

Tu es sûr sur le fait que ça marche pas ? Tu as quoi comme shell ? o_o

Je testerai, promis ; j'ai pas mon install sous la main pour le moment donc je délaie un peu.

Shell de base debian, moi aussi ça m'a fait drôle de remarquer ce bug
Lephenixnoir Hors ligne Administrateur Points: 24226 Défis: 170 Message

Citer : Posté le 27/11/2019 22:27 | #


Bizarre. Je testerai, et si j'arrive à reproduire (ou tout simplement dans le doute ou par compatibilité avec les configurations exotiques de shells) je séparerai.
Mon graphe (11 Avril): ((Rogue Life || HH2) ; PythonExtra ; serial gint ; Boson X ; passe gint 3 ; ...) || (shoutbox v5 ; v5)
Breizh_craft Hors ligne Modérateur Points: 1159 Défis: 7 Message

Citer : Posté le 27/11/2019 22:30 | #


Le shell de base de Debian c'est Dash, pas Bash. Dash a moins de fonctionnalités…
Breizh.pm – Un adminsys qui aime les galettes.
Lephenixnoir Hors ligne Administrateur Points: 24226 Défis: 170 Message

Citer : Posté le 27/11/2019 22:31 | #


Breizh_craft a écrit :
Le shell de base de Debian c'est Dash, pas Bash. Dash a moins de fonctionnalités…

Merci pour l'info. J'ai modifié le Makefile en local.

Ajouté le 28/11/2019 à 20:16 :
Bon du coup j'ai commencé à regarder fxos plus en détail et je vois pas mal de façons de le rendre plus puissant. J'ai vraiment envie de passer un peu de temps dessus.

L'outil qui peut l'amener au niveau d'IDA Pro sur les analyses automatiques serait un interpréteur abstrait. Avec ça, on passe vraiment au niveau supérieur, modulo quelques hypothèses raisonnables sur la gueule du code compilé. Quelques trucs qu'on peut faire avec, c'est...

• Trouver des constantes dans le code et dans les appels de fonctions
• Donc déterminer automatiquement quels messages sont affichés à l'écran
• Détecter le nombre de paramètres d'une fonction et leur taille
• Reconnaître des boucles de taille constante
• Faire des call graphs décents même en présence de jmp @r1 (il faut connaître la valeur de r1)
• etc etc.

Je tiendrai le sujet du fxSDK à jour.
Mon graphe (11 Avril): ((Rogue Life || HH2) ; PythonExtra ; serial gint ; Boson X ; passe gint 3 ; ...) || (shoutbox v5 ; v5)
Lailouezzz Hors ligne Membre Points: 91 Défis: 0 Message

Citer : Posté le 28/11/2019 20:49 | #


Lephenixnoir a écrit :
L'outil qui peut l'amener au niveau d'IDA Pro sur les analyses automatiques serait un interpréteur abstrait. Avec ça, on passe vraiment au niveau supérieur, modulo quelques hypothèses raisonnables sur la gueule du code compilé. Quelques trucs qu'on peut faire avec, c'est...

• Trouver des constantes dans le code et dans les appels de fonctions
• Donc déterminer automatiquement quels messages sont affichés à l'écran
• Détecter le nombre de paramètres d'une fonction et leur taille
• Reconnaître des boucles de taille constante
• Faire des call graphs décents même en présence de jmp @r1 (il faut connaître la valeur de r1)
• etc etc.

Je tiendrai le sujet du fxSDK à jour.

C'est ce que je voulais que IDA fasse ^^.
C'est un bon projet en tout cas, et largement réalisable je pense.

Ajouté le 01/12/2019 à 18:19 :
Bonjour,


Depuis ma migration définitive sous debian, j'utilise ghidra, je ne vous cache pas que c'est un outil vraiment très puissant (je suis étonné moi même).
En le paramétrant bien, le code est découvert automatiquement, et ghidra désassemble en C voici un exemple avec la fonction memcpy (syscall 0x2AA) :


à droite la fonction bien désassemblé en C (bien sûr c'est moi qui ai modifié les noms de variables)
Bref parfait pour désassembler.
Lephenixnoir Hors ligne Administrateur Points: 24226 Défis: 170 Message

Citer : Posté le 01/12/2019 18:21 | #


Hmm... bizarre. Tant que ça te plaît.
Mon graphe (11 Avril): ((Rogue Life || HH2) ; PythonExtra ; serial gint ; Boson X ; passe gint 3 ; ...) || (shoutbox v5 ; v5)
Lailouezzz Hors ligne Membre Points: 91 Défis: 0 Message

Citer : Posté le 01/12/2019 18:23 | #


Lephenixnoir a écrit :
Hmm... bizarre. Tant que ça te plaît.

Franchement c'est vraiment très bien, il y a le code désassemblé en SH4 au milieu et si on veut on peut analyser du code en C
Yatis Hors ligne Membre Points: 580 Défis: 0 Message

Citer : Posté le 01/12/2019 18:54 | #


Il convertie tout en C ? C'est pas drôle x)
Lephenixnoir Hors ligne Administrateur Points: 24226 Défis: 170 Message

Citer : Posté le 01/12/2019 19:10 | #


C'est con mais... je suis d'accord, c'est "pas drôle"...

Bon localement ça doit vraiment aider à déchiffrer le flot de contrôle. C'est vrai que la partie dure du RE c'est pas tellement ça.
Mon graphe (11 Avril): ((Rogue Life || HH2) ; PythonExtra ; serial gint ; Boson X ; passe gint 3 ; ...) || (shoutbox v5 ; v5)
Lailouezzz Hors ligne Membre Points: 91 Défis: 0 Message

Citer : Posté le 01/12/2019 19:17 | #


Lephenixnoir a écrit :
C'est con mais... je suis d'accord, c'est "pas drôle"...

Bon localement ça doit vraiment aider à déchiffrer le flot de contrôle. C'est vrai que la partie dure du RE c'est pas tellement ça.

Oui c'est clairement de la triche mais bon quand on voit les résultats x).
J'ai remarqué grace à ça que le memset utilise une technique assez bizarre x)
Yatis Hors ligne Membre Points: 580 Défis: 0 Message

Citer : Posté le 01/12/2019 19:52 | #


J'ai remarqué grace à ça que le memset utilise une technique assez bizarre x)

Alors oui, Casio fait très souvent des trucs bizarres. D'ailleurs, je me demande comment ghidra se débrouille pour convertir en C du code qui a été optimiser par GCC. Pour le cas de Casio, ils utilisent un compilateur assez... merdique qui fait, de temps en temps, des choses non conventionnelles comme appeler des fonctions via des registres comme r6. Je ne sais pas si ghidra te préviens s’il se passe des choses bizarres mais fait gaffe !

Oui c'est clairement de la triche mais bon quand on voit les résultats x).

Chacun a son propre avis mais je trouve que ce qui est le plus important quand on fait de la RE ce n'est pas la finalité mais c'est le fait d'apprendre / comprendre certaine technique de rétro-ingénierie. Pour moi c'est un jeu d'esprit, ça permet d'être dans un état "d'exploration", intrigué par tout ce qu'on trouve et toujours prêt à découvrir une nouvelle horreur de Casio, ou un petit truc sympathique que personne n'avait exploité avant
Lephenixnoir Hors ligne Administrateur Points: 24226 Défis: 170 Message

Citer : Posté le 01/12/2019 19:59 | #


Le code de Casio n'est définitivement pas compilé par GCC. L'assembleur qu'on a est très "gentil" ; il n'est pas vraiment optimisé. Je peux décoder des segments de 10-15 lignes à vue sans problèmes, et c'est pas vraiment envisageable avec le code bien tordu que GCC peut sortir parfois.

Ah, et si tu parles de la photo alors ce n'est pas du code d'add-in mais bien du code de l'OS (regarde les adresses).

Perso j'aime cultiver ma capacité à déssasembler vite et bien. Maintenant je m'intéresse à étendre fxos pour me faire une base de données de documentation...
Mon graphe (11 Avril): ((Rogue Life || HH2) ; PythonExtra ; serial gint ; Boson X ; passe gint 3 ; ...) || (shoutbox v5 ; v5)
Lailouezzz Hors ligne Membre Points: 91 Défis: 0 Message

Citer : Posté le 01/12/2019 20:37 | #


Yatis a écrit :
Alors oui, Casio fait très souvent des trucs bizarres. D'ailleurs, je me demande comment ghidra se débrouille pour convertir en C du code qui a été optimiser par GCC. Pour le cas de Casio, ils utilisent un compilateur assez... merdique qui fait, de temps en temps, des choses non conventionnelles comme appeler des fonctions via des registres comme r6. Je ne sais pas si ghidra te préviens s’il se passe des choses bizarres mais fait gaffe !

Oui j'ai des choses que je règle à la main sur ghidra.
Je m'aide du code C mais je regarde principalement le code SH4.
Un truc bizarre que j'ai déjà vue :
mov        #-0x7c,r2
extu.b     r2,r2




Ajouté le 01/12/2019 à 20:37 :
Yatis a écrit :
Chacun a son propre avis mais je trouve que ce qui est le plus important quand on fait de la RE ce n'est pas la finalité mais c'est le fait d'apprendre / comprendre certaine technique de rétro-ingénierie. Pour moi c'est un jeu d'esprit, ça permet d'être dans un état "d'exploration", intrigué par tout ce qu'on trouve et toujours prêt à découvrir une nouvelle horreur de Casio, ou un petit truc sympathique que personne n'avait exploité avant

Je suis d'aaccord
Lephenixnoir Hors ligne Administrateur Points: 24226 Défis: 170 Message

Citer : Posté le 01/12/2019 21:04 | #


Lailouezzz a écrit :
Un truc bizarre que j'ai déjà vue :
mov        #-0x7c,r2
extu.b     r2,r2

Ça n'a rien de bizarre ? C'est la façon la plus rapide d'obtenir r2=132.
Mon graphe (11 Avril): ((Rogue Life || HH2) ; PythonExtra ; serial gint ; Boson X ; passe gint 3 ; ...) || (shoutbox v5 ; v5)
Lailouezzz Hors ligne Membre Points: 91 Défis: 0 Message

Citer : Posté le 01/12/2019 21:23 | #


Lephenixnoir a écrit :
Lailouezzz a écrit :
Un truc bizarre que j'ai déjà vue :
mov        #-0x7c,r2
extu.b     r2,r2

Ça n'a rien de bizarre ? C'est la façon la plus rapide d'obtenir r2=132.

Ah bon ? Pourquoi on fait pas un mov 132, r2 ?
Lephenixnoir Hors ligne Administrateur Points: 24226 Défis: 170 Message

Citer : Posté le 01/12/2019 21:41 | #


Si je te dis que le jeu d'instructions est 16 bits ?

Et si j'ajoute pc-rel ?
Mon graphe (11 Avril): ((Rogue Life || HH2) ; PythonExtra ; serial gint ; Boson X ; passe gint 3 ; ...) || (shoutbox v5 ; v5)
Lailouezzz Hors ligne Membre Points: 91 Défis: 0 Message

Citer : Posté le 01/12/2019 21:44 | #


Lephenixnoir a écrit :
Si je te dis que le jeu d'instructions est 16 bits ?

Et si j'ajoute pc-rel ?

AAAH donc sinon on devrait utiliser un mov PC-REL après pourquoi je ne sais pas ?
Lephenixnoir Hors ligne Administrateur Points: 24226 Défis: 170 Message

Citer : Posté le 01/12/2019 21:53 | #


Les instructions faisant 16 bits, il n'est pas raisonnable d'accorder plus de 8 bits à un opérande immédiat. Donc mov #imm, rn est une instruction pour #imm écrit sur 8 bits (signé).

Là il se trouve que 132 tient sur 8 bits en non signé donc on arrive à éviter le pc-rel.
Mon graphe (11 Avril): ((Rogue Life || HH2) ; PythonExtra ; serial gint ; Boson X ; passe gint 3 ; ...) || (shoutbox v5 ; v5)

LienAjouter une imageAjouter une vidéoAjouter un lien vers un profilAjouter du codeCiterAjouter un spoiler(texte affichable/masquable par un clic)Ajouter une barre de progressionItaliqueGrasSoulignéAfficher du texte barréCentréJustifiéPlus petitPlus grandPlus de smileys !
Cliquez pour épingler Cliquez pour détacher Cliquez pour fermer
Alignement de l'image: Redimensionnement de l'image (en pixel):
Afficher la liste des membres
:bow: :cool: :good: :love: ^^
:omg: :fusil: :aie: :argh: :mdr:
:boulet2: :thx: :champ: :whistle: :bounce:
valider
 :)  ;)  :D  :p
 :lol:  8)  :(  :@
 0_0  :oops:  :grr:  :E
 :O  :sry:  :mmm:  :waza:
 :'(  :here:  ^^  >:)

Σ π θ ± α β γ δ Δ σ λ
Veuillez donner la réponse en chiffre
Vous devez activer le Javascript dans votre navigateur pour pouvoir valider ce formulaire.

Si vous n'avez pas volontairement désactivé cette fonctionnalité de votre navigateur, il s'agit probablement d'un bug : contactez l'équipe de Planète Casio.

Planète Casio v4.3 © créé par Neuronix et Muelsaco 2004 - 2024 | Il y a 75 connectés | Nous contacter | Qui sommes-nous ? | Licences et remerciements

Planète Casio est un site communautaire non affilié à Casio. Toute reproduction de Planète Casio, même partielle, est interdite.
Les programmes et autres publications présentes sur Planète Casio restent la propriété de leurs auteurs et peuvent être soumis à des licences ou copyrights.
CASIO est une marque déposée par CASIO Computer Co., Ltd