Calculatrice Mode Examen
Auteur : mo_hand
Zine : Rafale #20
Salut,
Pour ceux qui vont passer un examen en 2018 vous êtes censés savoir qu’il faut
désormais une calculatrice compatible « Mode examen ».
Le mode examen d’une calculette c’est quoi ?
Un mode dans lequel :
- La calculette inhibe la mémoire, donc impossible d’accéder aux petites
notes...
- Une petite Led doit clignoter pour montrer aux surveillants que le mode est
bien activé.
- Et pas possible de sortir du mode examen sans connecter la calculette sur
un PC.
J’ai trouvé une TI-nspire-cas sur leboncoin pour 50€.
Après quelques recherches sur le net je trouve ceci
https://tiplanet.org/forum/viewtopic.php?f=57&t=18920&hilit=controlx&lang=fr
Les mecs ont bien bossés c’est très complet.
Un résumé très rapide :
C’est un tuto permettant de faire un dual boot et d’installer un linux embarqué,
il y a un programme « ndless » (open source) qui permet d'exécuter des
programmes ecrit en c++/ASM sur la calculette alors que d’origine cela n’est pas
possible.
Les mecs expliquent comment lancer cet exécutable à chaque reboot de la machine
(pas évident…).
Donc pour ceux que ça intéresse, quelques mots clés :
ndless
nsPartManagic
nboot
controlX
J’ai testé, ça fonctionne bien… Mais voilà, lorsque l’on rentre en mode examen,
le hack ne fonctionne plus... Pas possible d’accéder à mes notes Sad
C’est ma calculette, je l’ai acheté, j’estime avoir le droit d’en faire ce que
je veux. Mais je publie ça pour montrer l’hypocrisie et l’incompétence des
politiques qui ne font que de restreindre les libertés et prendre les gens pour
des cons.
Donc je continue mon investigation...
Après analyse :
La calculatrice tourne sous un Linux embarqué, il y a un connecteur à l’arrière
avec un RX et un TX, donc un port série (en TTL).
Je branche mon pc sur le port et là on voit tout le process d’un Uboot. Je
résume car j’ai passé 2 jours et trop long à expliquer.
ef il y a de quoi faire.
Il s’avère qu’en fait la calculatrice est sous linux, avec 2 utilisateurs
évidement ces utilisateurs n’ont pas de droits en lecture l’un sur l’autre. Et
un petit script se lance à chaque démarrage pour effacer la partition de
l’utilisateur en mode examen /exammode/usr/. (Bizarre l’arborescence ../usr/…)
En parallèle à ça il y un petit wiki permettant de créer un SDK pour compiler
pour la calculatrice.
https://hackspire.org/index.php/C_and_assembly_development_introduction (Sous
linux nspire-tools nom_du_fichier_en_c.c pour créer un makefile puis make pour
compiler...)
En regardant le code source de « ndless » il y a un fichier « stage1.cpp » qu’il
faut modifier et compiler, dans lequel il y a :
if (!res_fp)
{
syscall_local<e_disp_str, void>("ndless_resources not found.", &x, 0);
return 0;
}
A remplacer par:
const char *res_path_normal = "/documents/ndless/ndless_resources.tns";
if (!res_fp)
{
res_fp = syscall_local<e_fopen, NUC_FILE*>(res_path_normal, "rb");
if (!res_fp)
{
syscall_local<e_disp_str, void>("ndless_resources not found.", &x, 0);
return 0;
}
syscall_local<e_stat, int>(res_path_normal, &res_stat);
}
else
{
syscall_local<e_stat, int>(res_path_exam, &res_stat);
}
Puis dans le dossier « startup »
Il faut compiler et insérer l’exécutable suivant (je précise que le source n’est
pas de moi, je ne trouve pas l’auteur, mais le code est difficile à trouver) :
#include <os.h>
#define SRC_DIR "\\documents\\MyLib\\"
#define DST_DIR "\\exammode\\usr\\Press-to-Test\\"
#define BUF_SIZE 256
int is_ptt(void)
{
char buffer[BUF_SIZE] = {'\0'};
NU_Current_Dir("A:", buffer);
return strcmp(buffer, "\\documents\\");
}
int copy_file(const char *src, const char *dst)
{
FILE *in = fopen(src, "rb"), *out;
int c;
if (!in)
return -1;
out = fopen(dst, "wb");
if (!out)
{
fclose(in);
return -1;
}
while ((c = fgetc(in)) != EOF)
{
fputc(c, out);
}
fclose(in);
fclose(out);
return 0;
}
void copy_files(void)
{
struct dstat file;
NU_Get_First(&file, SRC_DIR "*.*");
do {
char src[BUF_SIZE] = {'\0'};
char dst[BUF_SIZE] = {'\0'};
sprintf(src, SRC_DIR "%s", file.filepath);
sprintf(dst, DST_DIR "%s", file.filepath);
copy_file(src, dst);
} while (NU_Get_Next(&file) == 0);
NU_Done(&file);
}
int main(void)
{
if (is_ptt())
{
copy_files();
}
return EXIT_SUCCESS;
}
Et la lorsque la calculatrice passe en mode examen, elle copie le dossier «
Mylib » dans un dossier accessible en mode examen à chaque démarrage de la
calculatrice...https://youtu.be/wb8C4jSpPxAEt là c’est la porte ouverte à toutes
les fenêtres!
|