RETracker est un cadre d'ingénierie inverse pour le tracker Polyend écrit en Python. Il est basé sur des correctifs non officiels qui sont appliqués au firmware des actions du fournisseur. Ces correctifs introduisent un gestionnaire USB personnalisé en remplaçant le gestionnaire USB RawHid existant mais inutilisé du tracker.
Regardez une vidéo d'un défilement de texte sur les pads du tracker
Le gestionnaire USB personnalisé RETracker's présente de nouvelles fonctionnalités non officielles du Polyend Tracker qui peut être contrôlé à partir d'un ordinateur via USB. L'une de ces nouvelles fonctionnalités est une fonctionnalité de transfert de fichiers unidirectionnels personnalisée et qui fonctionne, car la fonctionnalité officielle de transfert de fichiers du suivi de Polyend a été rompue et a donc été supprimée par PolyEnd avec l'introduction du firmware v1.4.0.

Une fois corrigé, les nouvelles fonctionnalités du firmware constituent ce qui suit:
Ces fonctionnalités sont une base solide pour ajouter d'autres fonctions dynamiquement au Polyend Tracker , en assemblant le code de position-indépendance de l'hôte, en le transférant au tracker et en faisant exécuter le nouveau gestionnaire USB le code fraîchement implanté. Il existe quelques démos intimes disponibles qui peuvent être transférées dynamiquement à l'appareil.
Ajoutant à cela, les fonctions de lecture / écriture de la mémoire permettent à l'hôte USB d'inspecter la mémoire Tracker's en créant des calembours hexagonaux ou en démontant le code en mode bras ou pouce.
Enfin, la nouvelle fonction de transfert de fichiers permet à des fichiers arbitraires, tels que les mises à jour du micrologiciel ou les ROM NES à copier sur le tracker, sans avoir à passer par le processus prévu pour échanger la carte SD entre le Tracker et un ordinateur. Actuellement, la seule direction prise en charge provient cependant de l'hôte USB de la carte SD Tracker's .
Joyeux piratage!
Tout d'abord, en plus d'une installation Python 3, Retracker nécessite l'installation d'un certain nombre de dépendances. Veuillez les vérifier et assurez-vous que vous les avez tous installés avant de continuer.
Une fois toutes les dépendances installées, un micrologiciel patché peut être créé en exécutant fwtool.py.
# python fwtool.py
usage: fwtool.py [-h] [-b | -u | -p] infile outfile
positional arguments:
infile name/path of input file
outfile name/path of output file
optional arguments:
-h, --help show this help message and exit
-b, --build apply RETracker patches to Tracker firmware
-u, --unpack unpack Tracker firmware (.ptf) to binary format
-p, --pack create Tracker firmware (.ptf) from binary
Exemple:
# python fwtool.py -b ..PolyendTracker_1.5.0.ptf ..PolyendTracker_1.5.0_retracker.ptf
Opening ..PolyendTracker_1.5.0.ptf
MD5: ce894299bc35996186528364951c901e
Found 1 patch
Assembling patch #1
Description: "Memory dumping/patching/code execution/file transfer via USB"
Decoding input file
Applying patch
Creating output file: ..PolyendTracker_1.5.0_retracker.ptf
Done
Une fois qu'un firmware est construit avec succès, il doit être copié dans le dossier "/firmware/" du tracker sur la racine de sa carte SD. Le nom de fichier de l'image du micrologiciel doit commencer par PolyendTracker_ et se terminer avec .ptf ou autrement, le tracker ne le trouvera pas. La procédure de clignotement du firmware est simple et ne diffère pas du processus ordinaire.
Sur l'appareil
configFirmwareFirmware updatePolyend TrackerAchtung !!!
Il est prévu pour l'interface utilisateur de se comporter différemment lors du clignotement d'un firmware corrigé. Cela est probablement dû aux différences dans le format Intelhex que
fwtool.pycrée, qui n'a pas encore été examiné (tout simplement parce qu'elle conduit toujours à un firmware flashé avec succès).Veuillez attendre patiemment que la mise à jour se termine jusqu'à ce que le redémarrage de l'appareil. Dans le cas où quelque chose s'est mal passé, veuillez consulter le Manuel d'utilisation
Polyend Tracker, qui explique les étapes sur la façon de saisir laemergency update procedure.NB: J'ai suivi de nombreuses procédures de mise à jour ratées pendant le développement moi-même et je n'ai pas eu un seul problème avec la restauration d'un bon micrologiciel en utilisant la
emergency update procedure. Cependant, je ne recommanderais pas d'utiliserRETrackeravant d'avoir fait des sauvegardes de la carte SD du tracker (projets, échantillons, ...).
Retracker prend actuellement en charge Polyend Tracker dans le micrologiciel version 1.5.0. Il existe une version privée pour le firmware 1.6.0 qui n'a pas été publiée au public depuis que PolyEnd a entièrement supprimé le code qui a été utilisé pour implémenter les correctifs de Retracker sur le firmware 1.5.0, ce qui les a rendues plus difficiles au firmware 1.6.0.
Les images du micrologiciel Polyend Tracker sont expédiées au format Intelhex. FWTool.py convertit le firmware en son format binaire simple, qui contient tous les code et données du micrologiciel. Il applique ensuite des correctifs au binaire converti en fonction des informations trouvées dans tracker / firmware.py avant de convertir à nouveau le fichier au format Intelhex. À partir de là, le Polyend Tracker peut être communiqué en le branchant dans un port USB d'un ordinateur exécutant Retracker.py.
Le cheval de bataille principal de ce projet est probablement retracker.py , qui fournit une interface de ligne de commande à l'utilisateur.
# python retracker.py -h
usage: retracker.py [-h] [-b] [-c] [-r ADDRESS SIZE FILE] [-w ADDRESS DATA] [-x ADDRESS SIZE] [-d ADDRESS SIZE]
[-a POLYP] [--polypargs POLYPARGS [POLYPARGS ...]] [-e ADDRESS] [-t SRC_FILENAME DST_FILENAME]
optional arguments:
-h, --help show this help message and exit
-b break
-c continue
-r ADDRESS SIZE FILE, --readmem ADDRESS SIZE FILE
Save memory to local file
-w ADDRESS DATA, --writemem ADDRESS DATA
Write hex-encoded data to memory ADDRESS
-x ADDRESS SIZE, --hexdump ADDRESS SIZE
Create hex-dump of memory
-d ADDRESS SIZE, --disassemble ADDRESS SIZE
Disassemble code at ADDRESS (ARM/Thumb aware)
-a POLYP, --assemble POLYP
Assemble and execute POLYP patchfile
--polypargs POLYPARGS [POLYPARGS ...]
Optional arguments that can be passed to a POLYP
-e ADDRESS, --exec ADDRESS
Execute code at ADDRESS (ARM/Thumb aware)
-t SRC_FILENAME DST_FILENAME, --transfer SRC_FILENAME DST_FILENAME
Transfer SRC_FILENAME to Tracker's DST_FILENAME
Examples:
Dump memory to file: retracker.py -r 70100000 4f0 dump.bin
Write data to memory: retracker.py -w 70100000 "41 EC FA414142c0"
Hex-dump: retracker.py -x 0 ffff
Disassemble: retracker.py -d 3c01 c000
Assemble and run Polyp: retracker.py -a polyp.scroller --polypargs "hi there!"
Run code in Thumb mode: retracker.py -e 70100001
Run code in ARM mode: retracker.py -e 70100000
Transfer file to Tracker: retracker.py -t PolyendTracker_1.5.0.ptf Firmware/PolyendTracker_cstm.ptf
Exemples:
# python retracker.py -d 0002B99d 100
Connected to Polyend Tracker
Detected fw patch v0.3.0 on Tracker firmware v1.5.0
Disassembling 0002B99C-0002BA9C in Thumb mode
0x0002B99C: push {r4}
0x0002B99E: ldr r4, [pc, #0x6c]
0x0002B9A0: umull ip, r4, r4, r1
0x0002B9A4: lsrs r4, r4, #3
0x0002B9A6: add.w r1, r1, r4, lsl #2
0x0002B9AA: uxtb r1, r1
0x0002B9AC: cmp r3, #0x1f
0x0002B9AE: ite ls
0x0002B9B0: addls r4, r0, r3
0x0002B9B2: addhi.w r4, r0, #0x1f
0x0002B9B6: adds r3, r0, r1
0x0002B9B8: ldrb r4, [r4, #5]
0x0002B9BA: strb.w r4, [r3, #0xc8]
0x0002B9BE: cbz r2, #0x2b9e4
0x0002B9C0: add.w r2, r0, r1, lsr #3
# python retracker.py -x 0002B99d 100
Connected to Polyend Tracker
Detected fw patch v0.3.0 on Tracker firmware v1.5.0
Dumping 0002B99D-0002BA9D
0002b99d b4 1b 4c a4 fb 01 c4 e4 08 01 eb 84 01 c9 b2 1f |..L.............|
0002b9ad 2b 94 bf c4 18 00 f1 1f 04 43 18 64 79 83 f8 c8 |+........C.dy...|
0002b9bd 40 8a b1 00 eb d1 02 01 23 92 f8 b6 40 01 f0 07 |@.......#...@...|
0002b9cd 01 03 fa 01 f1 21 43 82 f8 b6 10 01 23 5d f8 04 |.....!C.....#]..|
0002b9dd 4b 80 f8 b5 30 70 47 00 eb d1 04 01 22 94 f8 b6 |K...0pG....."...|
0002b9ed 30 01 f0 07 01 02 fa 01 f1 23 ea 01 01 84 f8 b6 |0........#......|
0002b9fd 10 01 23 5d f8 04 4b 80 f8 b5 30 70 47 00 bf ab |..#]..K...0pG...|
0002ba0d aa aa aa 00 eb 01 0c 8c f8 c8 30 82 b1 00 eb d1 |..........0.....|
0002ba1d 02 01 23 92 f8 b6 c0 01 f0 07 01 03 fa 01 f1 41 |..#............A|
0002ba2d ea 0c 01 01 23 82 f8 b6 10 80 f8 b5 30 70 47 00 |....#.......0pG.|
0002ba3d eb d1 0c 01 22 9c f8 b6 30 01 f0 07 01 02 fa 01 |...."...0.......|
0002ba4d f1 23 ea 01 01 01 23 8c f8 b6 10 80 f8 b5 30 70 |.#....#.......0p|
0002ba5d 47 00 bf 0f 49 00 23 30 b5 01 f1 3f 05 1c 46 4f |G...I.#0...?..FO|
0002ba6d f0 01 0e 01 e0 11 f8 01 3f c2 18 00 eb d3 0c 82 |........?.......|
0002ba7d f8 c8 40 9c f8 b6 20 03 f0 07 03 0e fa 03 f3 22 |..@... ........"|
0002ba8d ea 03 03 a9 42 8c f8 b6 30 ec d1 80 f8 b5 e0 30 |....B...0......0|
Alors que certaines des options de ligne de commande les plus courantes permettent d'écrire la mémoire, de lire et de percuter hexadécimal, les fonctionnalités les plus excitantes sont probablement les options -e et -a . Ils permettent d'exécuter le code sur l'appareil.
L'option -e permet de brancher le code du firmware existant à dire directement, ou un code personnalisé après l'avoir écrit dans la mémoire de l'appareil à l'aide de l'option -w . Le bit le plus bas d'un argument address transmis à l'utilitaire de ligne de commande retracker.py spécifie si vous utilisez ou non le mode du pouce (mode 0: ARM, 1: mode de pouce).
L'argument de la ligne de commande -a accepte Polyps appelés, qui sont des modules Python contenant des correctifs pour le Polyend Tracker sous la forme de routines d'assemblage et de compensations et de données spécifiques à la version.
Le chargement de l'un de ces modules à l'aide de l'option de ligne de commande -a provoque leurs routines d'assemblage
Exemple:
# python retracker.py -a polyp.scroller
Connected to Polyend Tracker
Detected fw patch v0.3.0 on Tracker firmware v1.5.0
Assembling patch #1
Description: "Text scroller on the Tracker's pads"
Target address: 70100000
Mode: thumb
Patching memory
Running code...
Done
Cela ne permet pas seulement un développement pratique et accéléré de code et de fonctionnalités personnalisés, mais il ne nécessite pas non plus que le nouveau firmware est flashé sur le Tracker pour tester de nouvelles fonctionnalités (mais un redémarrage dans le pire des cas).
Veuillez consulter les modules disponibles dans le dossier Polyp /, qui contient quelques démonstrations initiales qui fondent l'écran Tracker's à l'intérieur et à l'extérieur ou à réutiliser ses coussinets sous forme de toile à débit de texte.
Le Polyend Tracker serait basé sur un µC similaire à l'adolescent 3.6 dont les fiches techniques et autres informations technologiques sont disponibles ici. Assurez-vous de consulter le manuel MK66FX pour une carte de mémoire afin d'éviter de courir dans les accidents du périphérique lors du vidage de la mémoire.
L'image du firmware de Tracker est au format Intelhex et peut être déballé à l'aide de fwtool.py ou chargé directement par des démonsmbelers prenant en charge le format Intelhex, tels que le désassembleur IDA Pro et probablement d'autres tels que Ghidra ou Ninja binaire. Le module de processeur à choisir est ARM / Little-Endian. Le firmware doit être chargé à l'adresse 0. Adresse / Offset 4 est le vecteur de réinitialisation avec un pointeur vers le gestionnaire de vecteur de réinitialisation (commencez à y démonter). La plupart, sinon la totalité de son code, s'exécute en mode pouce. J'ai trouvé l'adresse 0x70100000 et plus pour être une adresse fiable pour planter un Polyp et exécuter son code à partir de là.
Si vous souhaitez essayer le développement du firmware, prenez une copie à la fois d'Arduino et de l'addon Teensyduino, créez certains des exemples et flashez les fichiers .hex résultants sur le tracker (assurez-vous de choisir Teensy 3.6 et renommer le fichier .hex résultant dans quelque chose comme PolyendTracker_teensy.ptf ). Pour revenir à un firmware d'origine Polyend Tracker sera possible à chaque fois en utilisant la procédure de mise à jour d'urgence du tracker, car il réside sur une puce séparée qui n'est pas affectée / écrasée par les mises à jour du micrologiciel.

Le Wiki Retracker peut être trouvé ici.
Veuillez participer à des discussions et parlez à tout le monde de votre expérience avec Retracker et comment vous l'utilisez!
L'auteur ne prend aucune responsabilité pour un dommage que ce projet peut causer à votre tracker Polyend. En utilisant Retracker ou toute information dérivée, vous acceptez que vous utilisez l'un des code, données et autres informations de ce projet à vos propres risques.