RETracker是用Python编写的Polyend Tracker的反向工程框架。它基于应用于供应商的股票固件的非官方补丁。这些补丁通过替换跟踪器的现有但未使用的USB RawHID处理程序来引入自定义USB处理程序。
在跟踪器的垫子上观看文本滚动器的视频
RETracker's自定义USB处理程序向PolyEnd Tracker介绍了可以通过USB从计算机控制的Polyend Tracker的新的非官方功能。这些新功能之一是一个自定义和工作的单向文件传输功能,因为Polyend Tracker的官方文件传输功能被损坏,因此通过引入固件v1.4.0,通过polyend删除了官方文件传输功能。

修补后,固件的新功能包括以下内容:
这些功能是通过在主机上组装独立于位置的代码,将其传输到跟踪器并让新的USB处理程序执行新鲜植入的代码,将其动态添加到Polyend Tracker中的坚实基础。有几个可用的Intial演示可以动态传输到设备。
除此之外,内存读取/写作功能允许USB主机通过创建十六进制或以ARM或拇指模式拆卸代码来检查Tracker's内存。
最后,新的文件传输函数允许任意文件,例如固件更新或NES ROM被复制到跟踪器,而无需经历预期的过程,即在Tracker和计算机之间将SD卡交换。目前,支持的唯一方向是从USB主机到Tracker's SD卡。
快乐黑客!
首先,在Python 3安装之外,Ractracker需要安装许多依赖项。请检查它们,并确保在继续之前安装了所有内容。
一旦安装了所有依赖项,就可以通过运行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
例子:
# 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
一旦成功构建了固件,应将其复制到跟踪器的"/firmware/"文件夹中的SD卡根部。固件图像的文件名必须从PolyendTracker_开始,并以.ptf或其他方式结束,跟踪器找不到它。固件闪烁过程是直截了当的,与普通过程没有区别。
在设备上
config按钮Firmware菜单Firmware update子菜单Polyend Tracker固件Achtung !!!
预计在闪烁修补固件时,UI的行为会有所不同。这可能是由于
fwtool.py创建的intelhex格式的差异,但尚未研究(仅仅是因为它仍然导致成功闪烁的固件)。请耐心地等待更新完成,直到设备重新启动为止。如果某些问题仍然出了问题,请咨询《
Polyend Tracker用户手册》,该手册说明了如何输入emergency update procedure的步骤。NB:我自己在开发过程中经历了许多失败的更新过程,并且使用
emergency update procedure还没有一个问题来恢复良好的固件。但是,我不建议在对跟踪器的SD卡(项目,样本等)进行备份之前使用RETracker。
Ractracker当前支持固件版本1.5.0中的Polyend Tracker 。有一个用于固件1.6.0的私有版本,该版本尚未向公众发布,因为Polyend完全删除了用于在固件1.5.0上实现reacracker的代码,这使得将它们移至1.6.0固件更加困难。
polyend Tracker固件图像以Intelhex格式发货。 fwtool.py将固件转换为其普通二进制格式,该格式包含所有固件的代码和数据。然后,它根据Tracker/strackware.py中的信息将补丁程序应用于转换的二进制文件,然后再将文件再次转换回Intelhex格式。从那里开始,可以通过将其插入计算机运行Racracker.py的USB端口来传达Polyend Tracker 。
该项目的主要工作马可能是retracker.py ,它为用户提供了命令行接口。
# 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
示例:
# 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|
尽管一些更常见的命令行选项允许编写,阅读和十六进制的内存,但更令人兴奋的功能可能是-e和-a选项。它们允许在设备上执行代码。
-e选项允许现有的固件代码直接分支到直接或使用-w选项将其写入设备内存后的自定义代码。 address参数的最低位传递给retracker.py命令行实用程序指定是否使用拇指模式(0:ARM模式,1:拇指模式)。
-a命令行参数接受所谓的Polyps ,它是python模块,其中包含汇编例程和特定于版本的偏移量和数据的形式的Polyend Tracker的补丁。
使用-a命令行选项加载任何这些模块都会导致其汇编例程
例子:
# 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
这不仅允许进行自定义代码和功能的方便开发,而且不需要将新固件刷新到Tracker上以测试新功能(但在最坏情况下是重新启动)。
请查看息肉/文件夹中的可用模块,该模块包含一些初始演示,这些演示会淡入Tracker's屏幕,或者以文本滚动器帆布为单位。
据信, Polyend Tracker基于µC,类似于Teensy 3.6,其中可在此处提供数据表和其他技术信息。请务必查看MK66FX手册中的内存图,以免在转储内存时陷入设备崩溃。
Tracker固件图像为Intelhex格式,可以使用fwtool.py拆开包装,也可以通过支持Intelhex格式的拆卸器直接加载,例如IDA Pro Disssassembler以及Ghidra或Ghidra或Binary Ninja等其他人。选择的处理器模块是ARM / LITTLE-ENDIAN。固件应在地址0上加载。地址/偏移4是带有重置向量处理程序的指针的重置向量(开始在此拆卸)。大多数(如果不是全部)代码以拇指模式运行。我发现地址为0x70100000及以上是可靠的地址,可以将Polyp播种并从那里运行代码。
如果您想尝试一下固件开发,请抓住Arduino和Teensyduino插件的副本,构建一些示例,然后将结果的.hex文件刷到跟踪器(请务必选择Teensy 3.6 ,然后选择所得的.hex文件将.hex命名为类似于PolyendTracker_teensy.ptf )。使用跟踪器的紧急更新过程,可以随时返回到原始的Polyend Tracker固件,因为它位于单独的芯片上,该芯片不会受到固件更新的影响/覆盖。

可在此处找到后退Wiki。
请参加讨论,并向所有人介绍您与Racracker的经历以及如何使用!
作者对该项目可能会对您的多发性跟踪器造成的任何损害不承担任何责任。通过使用Ractracker或派生的任何信息,您同意您使用此项目的任何代码,数据和其他信息自行风险。