Posté le 06/08/2017 10:54
Planète Casio v4.3 © créé par Neuronix et Muelsaco 2004 - 2024 | Il y a 131 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
Citer : Posté le 06/08/2017 12:40 | #
Bonjour
Déjà, faudrait savoir si t'as réellement réalisé un buffer overflow avec ta technique ninja, ou si t'as simplement cassé la limite standard de 256 bytes.
Ensuite, si t'arrives à overflow à l'infini jusqu'au stack, et à overwrite tout pile sur l'adresse de retour de la sous-routine sans toucher aux variables locales, alors bingo.
La mémoire principale commence à l'adresse 0x88030000. Le stack commence à 0x88020000, et faisant 8kiB les données s'empilent à partir de 0x88023FFF en descendant. Ça, c'est sûr pour les add-in, mais normalement l'app PRGM devrait le gérer de la même manière
Le plus compliqué sera surtout de faire un overflow digne de ce nom, je suis pas trop confiant à propos du fait que le système t'indique une str de 316 bytes. Même si c'est hors-limites, ça veut sûrement dire qu'il arrive à la gérer sans bavures.
Sinon, si tu gères, il devrait "suffire" de descendre dans les adresses pour atteindre le stack (y'a 48kiB de heap à franchir attention ).
Voilà, en tout cas ça envoie du rêve ce genre de bidouilles, glhf ^~^
Citer : Posté le 06/08/2017 12:55 | #
Par définition c'est un buffer overflow, vu que le buffer standard est de 256 octets (comme j'ai dit sur mon post de casiopeia, j'ai testé la limite de 316 octets uniquement pour StrRight, et y'a des fonctions qui bugent et d'autres qui bugent pas). J'imagine que pour les autres fonctions c'est des limites différentes.
Il gère pas la str de 316 bytes sans bavure vu que StrRotate (et d'autres) font des erreurs système.
Pour la mémoire principale c'est intéressant. Il faudrait savoir à quel offset exactement est placé un programme, sachant qu'il y a des trucs planqués si je me souviens bien. Mais il me faudrait le code (en C si possible) de la fonction StrRight (ou une autre) pour que je sache où exactement est le pointeur de retour.
Il faudrait essayer, après le string de 316 octets, de mettre le pointeur vers 0x88030000 (peut être que ça empêcherait l'interruption) ou, mieux, de le mettre sur un syscall qui affiche une popup par exemple.
Après il faudrait aussi savoir la différence entre les 2 erreurs que je vois : "ADDRESS(W)" suivi de 2 pointeurs (comme une tlb error) et "INTERRUPT". Lephé tu as peut être déjà eu ce genre d'erreur avec gint, non?
Je continuerai à expérimenter sur ça après les CPC (j'ai mal choisi le moment aussi )
Ecrivez vos programmes basic sur PC avec BIDE
Citer : Posté le 06/08/2017 15:09 | #
Le pointeur de retour est dans le registre pr, et nulle part ailleurs. En général le changement de stack frame fait qu'il arrive sur la pile, mais tu ne peux pas savoir où précisément.
L'erreur ADDRESS(W) c'est un accès illégal en écriture à une zone de la mémoire, mais existante (ie. mappée). C'est peut-être une TLB protection violation, car aucune zone n'est interdite au mode privilégié du processeur, donc les accès en P1-P4 ne sont pas des erreurs.
L'erreur INTERRUPT est peut-être une EBR. En tous cas, ça sent pas bon.
Bon alors, pour les détails. Je ne sais pas si tu as remarqué FMC_, mais la mémoire principale est après la pile de l'add-in, donc aucune chance de faire un overflow dans ce sens-là. Ceci car elle ne s'étend pas vers l'avant (t'as quand même pas écrit un assembleur et jamais vu sts.l pr, @-r15 ? ). Son adresse initiale est celle du tas puis elle s'étend vers les adresses décroissantes, toujours.
On est donc déjà mal barrés, et il y a *plein* de problèmes à résoudre pour ça. Commence par voir ce que tu arrives à faire avec les Str et on verra ensuite si ça permet bien d'exécuter du code, et où le prend, le code en question.
Citer : Posté le 25/08/2021 12:21 | #
Personne n'est chaud pour tenter le défi d'exécuter du code arbitraire avec un programme basic ? Perso j'ai pas les compétences
Ecrivez vos programmes basic sur PC avec BIDE
Citer : Posté le 25/08/2021 12:49 | #
Pourquoi faire ? On peut déjà tout faire en C.Basic
Citer : Posté le 25/08/2021 12:51 | #
Pour les addins sur les graph 25 et autres caltos où on peut pas installer d'addins (à moins que je suis trop vieux et que sur toutes les calculettes récentes on peut en installer ?)
Ecrivez vos programmes basic sur PC avec BIDE
Citer : Posté le 25/08/2021 12:55 | #
Le problème avec la Graph 25 c'est pas juste que les add-ins sont bloqués, c'est que le matériel est insuffisant. Il n'y a pas la place pour mettre une mémoire de stockage d'une taille décente !