RETracker ist ein Reverse Engineering -Rahmen für den in Python geschriebenen Polyend -Tracker. Es basiert auf inoffiziellen Patches, die auf die Aktienfirmware des Verkäufers angewendet werden. Diese Patches führen einen benutzerdefinierten USB -Handler ein, indem er den vorhandenen, aber nicht verwendeten USB -Rawhid -Handler des Trackers ersetzt.
Sehen Sie sich ein Video eines Text -Scrollers auf den Pads des Tracker an
Der benutzerdefinierte USB-Handler RETracker's führt dem Polyend Tracker neue, nicht offizielle Funktionen vor, die über USB von einem Computer gesteuert werden können. Eine dieser neuen Funktionen ist eine benutzerdefinierte und funktionierende, unidirektionale Dateiübertragungsfunktionalität, da die offizielle Dateiübertragungsfunktionalität des Polyend -Trackers unterbrochen wurde und daher durch Polyend mit der Einführung von Firmware v1.4.0 entfernt wurde.

Nach dem Patch sind die neuen Funktionen der Firmware Folgendes aus:
Diese Funktionen sind eine solide Basis, um den Polyend Tracker dynamisch weiter hinzuzufügen, indem sie den positionsigen Code auf dem Host zusammenstellen, ihn an den Tracker übertragen und den neuen USB-Handler den frisch implantierten Code ausführen lassen. Es stehen einige intiale Demos zur Verfügung, die dynamisch auf das Gerät übertragen werden können.
Hinzu kommt, dass der Speicherlesen-/Schreibfunktionen dem USB-Host den Speicher Tracker's durch Erstellen von Hex-Dumps oder durch Zerlegung des Codes im Arm- oder Daumenmodus ermöglichen.
Schließlich ermöglicht die neue Dateiübertragungsfunktion, dass beliebige Dateien wie Firmware -Updates oder NES -ROMs in den Tracker kopiert werden, ohne den beabsichtigten Prozess des Austauschs der SD -Karte zwischen dem Tracker und einem Computer durchlaufen zu müssen. Derzeit ist die einzige unterstützte Richtung vom USB -Host zur SD -Karte Tracker's .
Frohe Hacking!
Zunächst muss auf einer Python 3 -Installation Retracker eine Reihe von Abhängigkeiten installiert werden. Bitte überprüfen Sie sie und stellen Sie sicher, dass Sie sie alle installiert haben, bevor Sie fortfahren.
Sobald alle Abhängigkeiten installiert sind, kann durch Ausführen von fwtool.py eine gepatchte Firmware erstellt werden.
# 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
Beispiel:
# 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
Sobald eine Firmware erfolgreich erstellt wurde, sollte sie in den Ordner des Tracker "/firmware/" auf der Stammin seiner SD -Karte kopiert werden. Der Dateiname des Firmware -Bildes muss mit PolyendTracker_ beginnen und mit .ptf oder auf andere Weise enden, der Tracker findet ihn nicht. Das Firmware -Blitzvorgang ist einfach und unterscheidet sich nicht vom normalen Prozess.
Auf dem Gerät
configFirmware -MenüFirmware update einPolyend Tracker blinken möchtenAchtung !!!
Es wird erwartet, dass sich die Benutzeroberfläche beim Flashen einer Patch -Firmware anders verhalten. Dies ist wahrscheinlich auf Unterschiede im Intelhex -Format zurückzuführen, das
fwtool.pyerstellt, was noch nicht untersucht wurde (einfach weil es immer noch zu einer erfolgreich flassten Firmware führt).Bitte warten Sie geduldig, bis das Update fertig ist, bis das Gerät neu startet. Falls immer noch etwas schief ging, wenden Sie sich bitte an das
Polyend Tracker-Benutzerhandbuch, in dem die Schritte zum Eingeben desemergency update procedureerläutert werden.NB: Ich habe während der Entwicklung selbst zahlreiche fehlgeschlagene Update -Verfahren durchlaufen und hatte kein einziges Problem bei der Wiederherstellung einer guten Firmware mithilfe des
emergency update procedure. Ich würde jedoch nicht empfehlen,RETrackerzu verwenden, bevor ich Backups auf der SD -Karte des Trackers (Projekte, Muster, ...) erstellt habe.
Retracker unterstützt derzeit Polyend Tracker in der Firmware -Version 1.5.0. Es gibt eine private Version für Firmware 1.6.0, die seit dem Entfernen von Polyend den Code, der zur Implementierung der Patches für Retracker auf Firmware 1.5.0 verwendet wurde, nicht mehr veröffentlicht wurde, wodurch die Portion für die Firmware 1.6.0 schwieriger wurde.
Polyend Tracker -Firmware -Bilder im Intelhex -Format versandt. fwtool.py konvertiert die Firmware in das einfache Binärformat, das alle Code und Daten der Firmware enthält. Anschließend wendet es Patches auf die konvertierte Binärdehnung gemäß den Informationen in Tracker/firmware.py an, bevor die Datei erneut in das Intelhex -Format konvertiert wird. Von da an kann der Polyend Tracker kommuniziert werden, indem er an einen USB -Anschluss eines Computers angeschlossen wird.
Das Hauptarbeitspferd dieses Projekts ist wahrscheinlich retracker.py , das dem Benutzer eine Befehlszeilenschnittstelle bietet.
# 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
Beispiele:
# 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|
Während einige der häufigsten Befehlszeilenoptionen ermöglichen, das Gedächtnis zu schreiben, zu lesen und zu hex -dumpen, sind die aufregenderen Funktionen wahrscheinlich die Optionen -e und -a . Sie ermöglichen es, Code auf dem Gerät auszuführen.
Mit der Option -e ermöglicht es den vorhandenen Firmware -Code, direkt zu verzweigen, oder den benutzerdefinierten Code, nachdem er ihn mit der Option -w in den Speicher des Geräts geschrieben hat. Das niedrigste Bit eines address , das an den Befehlszeilen -Dienstprogramm retracker.py übergeben wurde, gibt an, ob der Daumenmodus verwendet werden soll (0: Armmodus, 1: Daumenmodus).
Das Argument -a -Befehlszeilen akzeptiert sogenannte Polyps , bei denen es sich um Python -Module handelt, die Patches für den Polyend Tracker in Form von Montageroutinen und Versionsspezifischen Offsets und Daten enthalten.
Das Laden eines dieser Module mit der Option -a -Befehlszeilenoption führt zu den Montageroutinen
Beispiel:
# 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
Dies ermöglicht nicht nur eine bequeme und verfrorene Entwicklung von benutzerdefinierten Code und Funktionen, sondern muss auch keine neue Firmware zum Testen neuer Funktionen (sondern ein Neustart im schlimmsten Fall) auf den Tracker erfordern.
Bitte sehen Sie sich die verfügbaren Module im Polyp/ Ordner an, der einige anfängliche Demos enthält, die den Bildschirm Tracker's ein- und ausblenden oder seine Pads als Text-Scroller-Leinwand umgeben.
Es wird angenommen, dass der Polyend Tracker auf einem µC basiert, der dem Teensy 3.6 ähnelt, von dem Datenblätter und andere technische Informationen hier verfügbar sind. Schauen Sie sich unbedingt das MK66FX -Handbuch für eine Speicherkarte an, um zu vermeiden, dass Sie beim Dumping -Speicher in Geräteabstürze laufen.
Das Tracker -Firmware -Image befindet sich im Intelhex -Format und kann mit fwtool.py ausgepackt oder direkt von DisassemBlern geladen werden, die das Intelhex -Format unterstützen, wie das Ida Pro Disassembler und wahrscheinlich andere wie Ghidra oder binär Ninja. Das zu wählene Prozessormodul ist Arm / Little-Endian. Die Firmware sollte unter der Adresse 0 geladen werden. Adresse/Offset 4 ist der Reset -Vektor mit einem Zeiger auf den Reset -Vektor -Handler (starten Sie dort). Die meisten, wenn nicht der gesamte Code läuft im Daumenmodus. Ich habe festgestellt, dass die Adresse 0x70100000 und höher eine zuverlässige Adresse ist, um einen Polyp in den Code zu pflanzen und seinen Code auszuführen.
Wenn Sie die Firmware -Entwicklung ausprobieren möchten, holen Sie sich eine Kopie von Arduino und dem Teensyduino -Addon, erstellen Sie einige der Beispiele und flashen Sie die resultierenden .hex -Dateien auf dem Tracker (stellen Sie sicher, dass Sie Teensy 3.6 auswählen und die PolyendTracker_teensy.ptf .hex -Datei umbenennen. Wenn Sie auf ein originales Polyend Tracker -Firmware zurückkehren, können Sie jederzeit mit dem Notfall -Update -Verfahren des Trackers in einem separaten Chip befindet, der nicht von Firmware -Updates betroffen/überschrieben wird.

Das Retracker -Wiki finden Sie hier.
Bitte nehmen Sie an Diskussionen teil und erzählen Sie allen Ihre Erfahrungen mit Retracker und wie Sie es verwenden!
Der Autor übernimmt keine Verantwortung für Schäden, die dieses Projekt für Ihren Polyend -Tracker verursachen kann. Durch die Verwendung von Retracker oder abgeleiteten Informationen erklären Sie sich damit einverstanden, dass Sie einen der Code, Daten und andere Informationen dieses Projekts auf eigenes Risiko verwenden.