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或派生的任何信息,您同意您使用此項目的任何代碼,數據和其他信息自行風險。