RETracker 는 Python으로 작성된 Polyend 트래커의 역 엔지니어링 프레임 워크입니다. 공급 업체의 주식 펌웨어에 적용되는 비공식 패치를 기반으로합니다. 이 패치는 추적기의 기존이지만 사용되지 않은 USB Rawhid 처리기를 교체하여 맞춤 USB 핸들러를 소개합니다.
트래커 패드에서 텍스트 스크롤러 비디오보기
RETracker's Custom USB 처리기는 USB를 통해 컴퓨터에서 제어 할 수있는 Polyend Tracker 에 새로운 비공식 기능을 도입합니다. 이러한 새로운 기능 중 하나는 폴리 엔드 트래커의 공식 파일 전송 기능이 끊어져 펌웨어 v1.4.0의 도입으로 폴리 엔드에 의해 제거 되었기 때문에 사용자 정의 및 작업 단방향 파일 전송 기능입니다.

일단 패치되면 펌웨어의 새로운 기능은 다음과 같습니다.
이러한 기능은 호스트에서 위치 독립 코드를 조립하고 추적기로 전송하고 새 USB 핸들러가 새로 이식 된 코드를 실행하도록하여 Polyend Tracker 에 동적으로 추가 기능을 추가하기위한 견고한 기반입니다. 장치로 동적으로 전송할 수있는 몇 가지 강력한 데모가 있습니다.
또한 메모리 읽기/쓰기 기능을 통해 USB 호스트는 육각 덤프를 만들거나 암 또는 썸 모드에서 코드를 분해하여 Tracker's 메모리를 검사 할 수 있습니다.
마지막으로, 새 파일 전송 기능을 사용하면 Tracker 와 컴퓨터 사이에 SD 카드를 교환하는 의도 된 프로세스를 거치지 않고 펌웨어 업데이트 또는 NES ROM과 같은 임의의 파일을 추적기에 복사 할 수 있습니다. 그러나 현재 지원되는 유일한 방향은 USB 호스트 에서 Tracker's SD 카드 에 이르기까지 입니다.
행복한 해킹!
우선, Python 3 설치 외에도 Retracker는 여러 가지 종속성을 설치해야합니다. 확인하고 계속하기 전에 모든 설치를해야합니다.
모든 종속성이 설치되면 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
펌웨어가 성공적으로 구축되면 SD 카드 루트의 트래커의 "/firmware/" 폴더에 복사해야합니다. 펌웨어 이미지의 파일 이름은 PolyendTracker_ 로 시작하고 .ptf 또는 다른 방법으로 끝나야합니다. 추적기는 찾을 수 없습니다. 펌웨어 플래시 절차는 간단하며 일반적인 프로세스와 다르지 않습니다.
장치에서
config 버튼을 누릅니다Firmware 메뉴로 이동하십시오Firmware update 하위 메뉴를 입력하십시오Polyend Tracker 로 플래시하려는 펌웨어를 선택하십시오.achtung !!!
패치 된 펌웨어를 플래시 할 때 UI가 다르게 행동 할 것으로 예상됩니다. 이것은 아마도
fwtool.py생성 한 IntelHex 형식의 차이로 인한 것일 수 있습니다.장치가 재부팅 될 때까지 업데이트가 완료 될 때까지 참을성있게 기다리십시오. 문제가 여전히 잘못 된 경우,
emergency update procedure입력하는 방법에 대한 단계를 설명하는Polyend Tracker사용자 설명서에 문의하십시오.NB : 개발 중에 수많은 실패한 업데이트 절차를 겪었으며
emergency update procedure사용하여 우수한 펌웨어를 복원하는 데 단일 문제가 없었습니다. 그러나 트래커의 SD 카드 (프로젝트, 샘플, ...)를 백업하기 전에RETracker사용하지 않는 것이 좋습니다.
Retracker는 현재 펌웨어 버전 1.5.0에서 Polyend Tracker 지원합니다. Polyend가 펌웨어 1.5.0에서 리트래커의 패치를 구현하는 데 사용 된 코드를 완전히 제거한 이후로 펌웨어 1.6.0의 개인 버전이 존재하여 1.6.0 펌웨어로 포팅하기가 더 어려워졌습니다.
폴리 엔드 트래커 펌웨어 이미지는 IntelHex 형식으로 배송됩니다. fwtool.py는 펌웨어를 모든 펌웨어의 코드 및 데이터를 보유하는 일반 바이너리 형식으로 펌웨어를 변환합니다. 그런 다음 파일을 IntelHex 형식으로 다시 변환하기 전에 Tracker/Failware.py에있는 정보에 따라 변환 된 바이너리에 패치를 적용합니다. 거기에서 Polyend Tracker 컴퓨터를 실행하는 Retracker.py의 USB 포트에 연결하여 통신 할 수 있습니다.
이 프로젝트의 주요 작업은 아마도 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|
보다 일반적인 명령 줄 옵션 중 일부는 메모리를 작성, 읽기 및 16 진수 이상하게 할 수 있지만 더 흥미로운 기능은 아마도 -e 및 -a 옵션 일 것입니다. 장치에서 코드를 실행할 수 있습니다.
-e 옵션을 사용하면 기존 펌웨어 코드가 -w 옵션을 사용하여 장치의 메모리에 작성한 후 직접 분기되거나 사용자 정의 코드를 분기 할 수 있습니다. retracker.py 명령 줄 유틸리티로 전달 된 가장 낮은 address 인수는 Thumb Mode (0 : Arm Mode, 1 : Thumb Mode)를 사용할지 여부를 지정합니다.
-a 명령 줄 인수는 소위 Polyps 수용하며, 이는 어셈블리 루틴 및 버전 별 오프셋 및 데이터 형태로 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 에 새 펌웨어를 플래시 할 필요는 없습니다 (최악의 경우 재부팅).
Polyp/ Folder의 사용 가능한 모듈을 살펴보십시오. 여기에는 Tracker's 화면을 끊임없이 바꾸거나 텍스트 스크롤러 캔버스로 패드를 용도로 변경하는 초기 데모가 포함되어 있습니다.
Polyend Tracker 는 데이터 시트 및 기타 기술 정보가 여기에서 사용할 수있는 Teensy 3.6과 유사한 µC를 기반으로하는 것으로 여겨집니다. 메모리를 덤프 할 때 장치 충돌이 발생하지 않도록 메모리 맵의 MK66FX 매뉴얼을 확인하십시오.
Tracker 펌웨어 이미지는 IntelHex 형식으로되어 있으며 fwtool.py를 사용하여 포장을 풀거나 IDA Pro Disassembler와 같은 IntelHex 형식을 지원하는 DisassemBlers 및 Ghidra 또는 Binary Ninja와 같은 다른 사람들이 직접로드 할 수 있습니다. 선택할 프로세서 모듈은 ARM / Little-Endian입니다. 펌웨어는 주소 0에로드되어야합니다. 주소/오프셋 4는 재설정 벡터 핸들러에 대한 포인터가있는 재설정 벡터입니다 (여기서 분해 시작). 대부분의 코드가 썸 모드에서 실행되는 것은 아니지만 대부분. 나는 주소 0x70100000 이상을 발견하여 Polyp 심고 코드를 실행할 수있는 안정적인 주소라는 것을 발견했습니다.
펌웨어 개발을 제공하려면 Arduino와 Teensyduino Addon의 사본을 가져 와서 예제 중 일부를 만들고 결과 .hex 파일을 트래커에 플래시하십시오 ( Teensy 3.6 선택하고 ruidting .hex 파일을 PolyendTracker_teensy.ptf 와 같은 것으로 바꾸십시오). 원래의 Polyend Tracker 펌웨어로 돌아가는 것은 펌웨어 업데이트에 의해 영향을받지 않거나 덮어 쓰지 않는 별도의 칩에 상주하기 때문에 트래커의 비상 업데이트 절차를 사용하면 언제든지 가능합니다.

리트래커 위키는 여기에서 찾을 수 있습니다.
토론에 참여하고 모든 사람에게 리트래커에 대한 경험과 사용 방법에 대해 이야기하십시오!
저자는이 프로젝트가 폴리 엔드 트래커에 발생할 수있는 손상에 대해 책임을지지 않습니다. Retracker 또는 파생 된 정보를 사용하면이 프로젝트의 코드, 데이터 및 기타 정보를 자신의 위험에 따라 사용하고 있다는 데 동의합니다.