2æ16æ¥ã®äŒè°0x0A DC7831 DEF CONããžãããŽãŽããã§ããã€ããªã³ãŒããšãã¥ã¬ãŒã·ã§ã³ã®åºæ¬ååãšç¬èªã®éçºïŒããŒããŠã§ã¢ãã©ãããã©ãŒã Kopycatã®ãšãã¥ã¬ãŒã¿ãŒïŒã«é¢ããã¬ããŒããçºè¡šããŸããã
ãã®èšäºã§ã¯ããšãã¥ã¬ãŒã¿ãŒã§ã®ããã€ã¹ãã¡ãŒã ãŠã§ã¢ã®èµ·åã«ã€ããŠèª¬æãããããã¬ãŒãšã®å¯Ÿè©±ã瀺ãããã¡ãŒã ãŠã§ã¢ã®å°ããªåçåæãå®è¡ããŸãã
èæ¯
æãé ãã®éæ²³ã§
æ°å¹Žåãç§ãã¡ã®ç 究宀ã§ã¯ãããã€ã¹ã®ãã¡ãŒã ãŠã§ã¢ã調æ»ããå¿
èŠããããŸããã ãã¡ãŒã ãŠã§ã¢ã¯å§çž®ãããããŒãããŒããŒã«ãã£ãŠè§£åãããŸããã 圌ã¯éåžžã«æ··ä¹±ããæ¹æ³ã§ãããè¡ããã¡ã¢ãªå
ã®ããŒã¿ãæ°åã·ããããŸããã ã¯ãããããŠãã¡ãŒã ãŠã§ã¢èªäœãåšèŸºæ©åšãšç©æ¥µçã«å¯Ÿè©±ããŸããã ãããŠãããããã¹ãŠãMIPSã³ã¢ã«ãããŸãã
客芳çãªçç±ãããæ¢åã®ãšãã¥ã¬ãŒã¿ãŒã¯ç§ãã¡ã«åããªãã£ãããããã§ãã³ãŒããå®è¡ãããã£ãã ãã®åŸãç§ãã¡ã¯ç¬èªã®ãšãã¥ã¬ãŒã¿ãŒãäœæããããšã«ããŸãããããã«ãããæå°éã«ãªããã¡ã€ã³ãã¡ãŒã ãŠã§ã¢ãå±éã§ããããã«ãªããŸãã è©ŠããŸãã-å€æããŸããã ã¡ã€ã³ãã¡ãŒã ãŠã§ã¢ãå®è¡ããããã«åšèŸºæ©åšãè¿œå ãããã©ããªããèããŸããã ããã»ã©çããããŸããã§ãã ç§ãã¡ã¯ããäžåºŠèããæ¬æ Œçãªãšãã¥ã¬ãŒã¿ãäœãããšã«ããŸããã
ãã®çµæãã³ã³ãã¥ãŒãã£ã³ã°ã·ã¹ãã Kopycatã®ãšãã¥ã¬ãŒã¿ãŒãã§ããŸãã ã

Kopycatãéžã¶çç±èšèã®éã³ããããŸãã
- copycat ïŒè±èªãnã[ËkÉpɪkÊt]ïŒ-copycatãæš¡å£è
- ç« ïŒè±èªãnã[ËkÊt]ïŒ-ç«ãç«-ãããžã§ã¯ãã®äœæè
ã®1人ã®ãæ°ã«å
¥ãã®åç©
- æåãKã-Kotlinããã°ã©ãã³ã°èšèªãã
ã³ããã£ãã
ãšãã¥ã¬ãŒã¿ãŒãäœæãããšãã«ã絶察ã«å
·äœçãªç®æšãèšå®ãããŸããã
- æ°ããåšèŸºæ©åšãã¢ãžã¥ãŒã«ãããã»ããµã³ã¢ãè¿
éã«äœæããæ©èœã
- ããŸããŸãªã¢ãžã¥ãŒã«ããä»®æ³ããã€ã¹ãçµã¿ç«ãŠãæ©èœã
- ãã€ããªããŒã¿ïŒãã¡ãŒã ãŠã§ã¢ïŒãä»®æ³ããã€ã¹ã®ã¡ã¢ãªã«ããŒãããæ©èœã
- ã¹ãããã·ã§ããïŒã·ã¹ãã ã®ç¶æ
ã®ã¹ãããã·ã§ããïŒãæäœããæ©èœã
- çµã¿èŸŒã¿ãããã¬ãŒãä»ããŠãšãã¥ã¬ãŒã¿ãŒãšå¯Ÿè©±ããæ©èœã
- éçºããçŽ æµãªçŸä»£èšèªã
ãã®çµæãå®è£
ããã¹ã¢ãŒããã¯ãã£ïŒä»®æ³ããŒã¿ãã¹ãä»ããŠã¢ãžã¥ãŒã«ãçžäºã«éä¿¡ããå ŽåïŒãããã€ã¹èšè¿°åœ¢åŒãšããŠJSONããããã¬ãŒãšå¯Ÿè©±ããããã®ãããã³ã«ãšããŠGDB RSPã«KotlinãéžæãããŸããã
éçºã¯2幎匱åããè¡ãããŠãããç©æ¥µçã«é²è¡äžã§ãã ãã®éãMIPSãx86ãV850ESãARMãPowerPCããã»ããµã³ã¢ãå®è£
ãããŸããã
ãããžã§ã¯ãã¯æé·ããŠãããäžè¬ã®äººã
ã«çŽ¹ä»ããæãæ¥ãŸããã ãããžã§ã¯ãã®è©³çŽ°ãªèª¬æã¯åŸã§è¡ããŸãããããã§ã¯Kopycatã®äœ¿çšã«çŠç¹ãåœãŠãŸãã
æãçæ°ãªäººã®ããã«ããšãã¥ã¬ãŒã¿ã®ããã¢ãŒã·ã§ã³çã¯ããããããŠã³ããŒãã§ããŸã ã
ãšãã¥ã¬ãŒã¿ãŒã®Rhino
以åã®SMARTRHINO-2018äŒè°ã§ããªããŒã¹ãšã³ãžãã¢ãªã³ã°ã¹ãã«ã®ãã¬ãŒãã³ã°çšã«ãã¹ãããã€ã¹ãRhinocerosããäœæãããããšãæãåºããŠãã ããã éçãã¡ãŒã ãŠã§ã¢åæã®ããã»ã¹ã«ã€ããŠã¯ã ãã®èšäºã§èª¬æããŸããã
ã§ã¯ããã¹ããŒã«ãŒããè¿œå ããŠããšãã¥ã¬ãŒã¿ãŒã§ãã¡ãŒã ãŠã§ã¢ãå®è¡ããŠã¿ãŸãããã
å¿
èŠãªãã®ïŒ
1ïŒJava 1.8
2ïŒPythonããã³ãšãã¥ã¬ãŒã¿ãŒå
ã§Pythonã䜿çšããããã®Jepã¢ãžã¥ãŒã«ã WindowsçšJepã¢ãžã¥ãŒã«ã®WHLã¢ã»ã³ããªã¯ããããããŠã³ããŒãã§ããŸã ã
Windowsã®å ŽåïŒ
1ïŒ com0com
2ïŒ PuTTY
Linuxã®å ŽåïŒ
1ïŒsocat
EclipseãIDA Proãradare2ãGDBã¯ã©ã€ã¢ã³ããšããŠäœ¿çšã§ããŸãã
ã©ã®ããã«æ©èœããŸããïŒ
ãšãã¥ã¬ãŒã¿ã§ãã¡ãŒã ãŠã§ã¢ãå®è¡ããã«ã¯ãå®éã®ããã€ã¹ã«é¡äŒŒããä»®æ³ããã€ã¹ããã¢ã»ã³ãã«ãããå¿
èŠããããŸãã
å®éã®ããã€ã¹ïŒãrhinoãïŒã¯ãããã¯å³ã§è¡šç€ºã§ããŸãã
ãšãã¥ã¬ãŒã¿ãŒã¯ã¢ãžã¥ãŒã«æ§é ã«ãªã£ãŠãããæçµçãªä»®æ³ããã€ã¹ã¯JSONãã¡ã€ã«ã«èšè¿°ã§ããŸãã
105è¡ã®JSON{ "top": true, // Plugin name should be the same as file name (or full path from library start) "plugin": "rhino", // Directory where plugin places "library": "user", // Plugin parameters (constructor parameters if jar-plugin version) "params": [ { "name": "tty_dbg", "type": "String"}, { "name": "tty_bt", "type": "String"}, { "name": "firmware", "type": "String", "default": "NUL"} ], // Plugin outer ports "ports": [ ], // Plugin internal buses "buses": [ { "name": "mem", "size": "BUS30" }, { "name": "nand", "size": "4" }, { "name": "gpio", "size": "BUS32" } ], // Plugin internal components "modules": [ { "name": "u1_stm32", "plugin": "STM32F042", "library": "mcu", "params": { "firmware:String": "params.firmware" } }, { "name": "usart_debug", "plugin": "UartSerialTerminal", "library": "terminals", "params": { "tty": "params.tty_dbg" } }, { "name": "term_bt", "plugin": "UartSerialTerminal", "library": "terminals", "params": { "tty": "params.tty_bt" } }, { "name": "bluetooth", "plugin": "BT", "library": "mcu" }, { "name": "led_0", "plugin": "LED", "library": "mcu" }, { "name": "led_1", "plugin": "LED", "library": "mcu" }, { "name": "led_2", "plugin": "LED", "library": "mcu" }, { "name": "led_3", "plugin": "LED", "library": "mcu" }, { "name": "led_4", "plugin": "LED", "library": "mcu" }, { "name": "led_5", "plugin": "LED", "library": "mcu" }, { "name": "led_6", "plugin": "LED", "library": "mcu" }, { "name": "led_7", "plugin": "LED", "library": "mcu" }, { "name": "led_8", "plugin": "LED", "library": "mcu" }, { "name": "led_9", "plugin": "LED", "library": "mcu" }, { "name": "led_10", "plugin": "LED", "library": "mcu" }, { "name": "led_11", "plugin": "LED", "library": "mcu" }, { "name": "led_12", "plugin": "LED", "library": "mcu" }, { "name": "led_13", "plugin": "LED", "library": "mcu" }, { "name": "led_14", "plugin": "LED", "library": "mcu" }, { "name": "led_15", "plugin": "LED", "library": "mcu" } ], // Plugin connection between components "connections": [ [ "u1_stm32.ports.usart1_m", "usart_debug.ports.term_s"], [ "u1_stm32.ports.usart1_s", "usart_debug.ports.term_m"], [ "u1_stm32.ports.usart2_m", "bluetooth.ports.usart_m"], [ "u1_stm32.ports.usart2_s", "bluetooth.ports.usart_s"], [ "bluetooth.ports.bt_s", "term_bt.ports.term_m"], [ "bluetooth.ports.bt_m", "term_bt.ports.term_s"], [ "led_0.ports.pin", "u1_stm32.buses.pin_output_a", "0x00"], [ "led_1.ports.pin", "u1_stm32.buses.pin_output_a", "0x01"], [ "led_2.ports.pin", "u1_stm32.buses.pin_output_a", "0x02"], [ "led_3.ports.pin", "u1_stm32.buses.pin_output_a", "0x03"], [ "led_4.ports.pin", "u1_stm32.buses.pin_output_a", "0x04"], [ "led_5.ports.pin", "u1_stm32.buses.pin_output_a", "0x05"], [ "led_6.ports.pin", "u1_stm32.buses.pin_output_a", "0x06"], [ "led_7.ports.pin", "u1_stm32.buses.pin_output_a", "0x07"], [ "led_8.ports.pin", "u1_stm32.buses.pin_output_a", "0x08"], [ "led_9.ports.pin", "u1_stm32.buses.pin_output_a", "0x09"], [ "led_10.ports.pin", "u1_stm32.buses.pin_output_a", "0x0A"], [ "led_11.ports.pin", "u1_stm32.buses.pin_output_a", "0x0B"], [ "led_12.ports.pin", "u1_stm32.buses.pin_output_a", "0x0C"], [ "led_13.ports.pin", "u1_stm32.buses.pin_output_a", "0x0D"], [ "led_14.ports.pin", "u1_stm32.buses.pin_output_a", "0x0E"], [ "led_15.ports.pin", "u1_stm32.buses.pin_output_a", "0x0F"] ] }
paramsã»ã¯ã·ã§ã³ã®ãã¡ãŒã ãŠã§ã¢ãã©ã¡ãŒã¿ãŒã«æ³šæããŠãã ãããããã¯ããã¡ãŒã ãŠã§ã¢ãšããŠä»®æ³ããã€ã¹ã«ããŠã³ããŒãã§ãããã¡ã€ã«ã®ååã§ãã
ä»®æ³ããã€ã¹ãšã¡ã€ã³ãªãã¬ãŒãã£ã³ã°ã·ã¹ãã ãšã®çžäºäœçšã¯ã次ã®ããã«è¡šãããšãã§ããŸãã
ãšãã¥ã¬ãŒã¿ã®çŸåšã®ãã¹ãã€ã³ã¹ã¿ã³ã¹ã«ã¯ãã¡ã€ã³OSã®COMããŒããšã®å¯Ÿè©±ãå«ãŸããŸãïŒãããã°UARTããã³Bluetoothã¢ãžã¥ãŒã«ã®UARTïŒã ããã€ã¹ãæ¥ç¶ãããŠããå®éã®ããŒããŸãã¯ä»®æ³COMããŒãïŒãã®ããã«å¿
èŠãªã®ã¯com0com / socatã ãã§ãïŒ ã
çŸåšãå€éšãããšãã¥ã¬ãŒã¿ãšå¯Ÿè©±ããäž»ãªæ¹æ³ã¯2ã€ãããŸãã
- GDB RSPãããã³ã«ïŒããããããã®ãããã³ã«ããµããŒããããŒã«-Eclipse / IDA / radare2ïŒ;
- ãšãã¥ã¬ãŒã¿å
éšã³ãã³ãã©ã€ã³ïŒArgparseãŸãã¯PythonïŒã
ã¿ãŒããã«ãä»ããŠããŒã«ã«ãã·ã³äžã®ä»®æ³ããã€ã¹ã®UARTãšå¯Ÿè©±ããã«ã¯ãæ¥ç¶ãããä»®æ³COMããŒããããã€ãäœæããå¿
èŠããããŸãã ãã®å Žåã1ã€ã®ããŒãã¯ãšãã¥ã¬ãŒã¿ãŒã䜿çšãã2çªç®ã®ããŒãã¯ã¿ãŒããã«ããã°ã©ã ïŒPuTTYãŸãã¯ç»é¢ïŒã䜿çšããŸãã
com0comã䜿çšãã
ä»®æ³COMããŒãã¯ãcom0comãããã®ã»ããã¢ãããŠãŒãã£ãªãã£ã§æ§æãããŸãïŒã³ã³ãœãŒã«ããŒãžã§ã³ã¯CïŒ\ Program FilesïŒx86ïŒ\ com0com \setup.exeããŸãã¯GUIããŒãžã§ã³ã¯CïŒ\ Program FilesïŒx86ïŒ\ com0com \ setupg.exe ïŒ ïŒ
äœæããããã¹ãŠã®ä»®æ³ããŒãã®ãããã¡ãŒãªãŒããŒã©ã³ãæå¹ã«ãããã§ãã¯ããã¯ã¹ããªã³ã«ããŸããããããªããšããšãã¥ã¬ãŒã¿ãŒãCOMããŒãããã®å¿çãåŸ
æ©ããŸãã
socatã䜿çšãã
UNIXã·ã¹ãã ã§ã¯ããšãã¥ã¬ãŒã¿ã«ãã£ãŠsocatãŠãŒãã£ãªãã£ã䜿çšããŠä»®æ³COMããŒããèªåçã«äœæãããŸãããã®ããããšãã¥ã¬ãŒã¿ã®èµ·åæã«ããŒãåã«socat:
ãã¬ãã£ãã¯ã¹ãæå®ããã ãã§ååã§ãã
å
éšã³ãã³ãã©ã€ã³ã€ã³ã¿ãŒãã§ã€ã¹ïŒArgparseãŸãã¯PythonïŒ
Kopycatã¯ã³ã³ãœãŒã«ã¢ããªã±ãŒã·ã§ã³ã§ããããããšãã¥ã¬ãŒã¿ãŒã¯ã³ãã³ãã©ã€ã³ã€ã³ã¿ãŒãã§ã€ã¹ã«ãªããžã§ã¯ããšå€æ°ãšå¯Ÿè©±ããããã®2ã€ã®ãªãã·ã§ã³ãæäŸããŸãïŒArgparseãšPythonã
Argparseã¯Kopycatã«çµã¿èŸŒãŸããCLIã§ããã誰ã§ããã€ã§ãå©çšã§ããŸãã
å¥ã®CLIã¯Pythonã€ã³ã¿ãŒããªã¿ãŒã§ãã ããã䜿çšããã«ã¯ãJep Pythonã¢ãžã¥ãŒã«ãã€ã³ã¹ããŒã«ããPythonã§åäœããããã«ãšãã¥ã¬ãŒã¿ãŒãæ§æããå¿
èŠããããŸãïŒãŠãŒã¶ãŒã®ã¡ã€ã³ã·ã¹ãã ã«ã€ã³ã¹ããŒã«ãããŠããPythonã€ã³ã¿ãŒããªã¿ãŒã䜿çšãããŸãïŒã
Python Jepã¢ãžã¥ãŒã«ã®ã€ã³ã¹ããŒã«
Linuxã§ã¯ãJepã¯pipãä»ããŠã€ã³ã¹ããŒã«ã§ããŸãã
pip install jep
JepãWindowsã«ã€ã³ã¹ããŒã«ããã«ã¯ãæåã«Windows SDKãšå¯Ÿå¿ããMicrosoft Visual Studioãã€ã³ã¹ããŒã«ããå¿
èŠããããŸãã ã¿ã¹ã¯ãå°ãç°¡ç¥åããçŸåšã®ããŒãžã§ã³ã®Python for Windows ã® JEPã®WHLã¢ã»ã³ããªãäœæãããããã¢ãžã¥ãŒã«ããã¡ã€ã«ããã€ã³ã¹ããŒã«ã§ããŸãã
pip install jep-3.8.2-cp27-cp27m-win_amd64.whl
Jepã®ã€ã³ã¹ããŒã«ã確èªããã«ã¯ãã³ãã³ãã©ã€ã³ãå®è¡ããå¿
èŠããããŸãã
python -c "import jep"
å¿çãšããŠãã¡ãã»ãŒãžãåä¿¡ããå¿
èŠããããŸãã
ImportError: Jep is not supported in standalone Python, it must be embedded in Java.
ã·ã¹ãã ã®ãšãã¥ã¬ãŒã¿ããããã¡ã€ã«ïŒWindowsã®å Žåã¯kopycat.bat ãLinuxã®å Žåã¯kopycat ïŒã§ãè¿œå ã®ãã©ã¡ãŒã¿ãŒDjava.library.path
ãDEFAULT_JVM_OPTS
ãã©ã¡ãŒã¿ãŒã®ãªã¹ãã«è¿œå ããŸããã€ã³ã¹ããŒã«æžã¿ã®Jepã¢ãžã¥ãŒã«ãžã®ãã¹ãå«ãŸããŠããå¿
èŠããããŸãã
ãã®çµæãWindowsã®å Žåã次ã®ãããªè¡ãååŸããå¿
èŠããããŸãã
set DEFAULT_JVM_OPTS="-XX:MaxMetaspaceSize=256m" "-XX:+UseParallelGC" "-XX:SurvivorRatio=6" "-XX:-UseGCOverheadLimit" "-Djava.library.path=C:/Python27/Lib/site-packages/jep"
Kopycatã®èµ·å
ãšãã¥ã¬ãŒã¿ãŒã¯ã³ã³ãœãŒã«JVMã¢ããªã±ãŒã·ã§ã³ã§ãã èµ·åã¯ããªãã¬ãŒãã£ã³ã°ã·ã¹ãã ã®ã³ãã³ãã©ã€ã³ã¹ã¯ãªããïŒsh / cmdïŒãä»ããŠå®è¡ãããŸãã
Windowsã§å®è¡ããã³ãã³ãïŒ
bin\kopycat -g 23946 -n rhino -l user -y library -p firmware=firmware\rhino_pass.bin,tty_dbg=COM26,tty_bt=COM28
socatãŠãŒãã£ãªãã£ã䜿çšããŠLinuxã§å®è¡ããã³ãã³ãïŒ
./bin/kopycat -g 23946 -n rhino -l user -y library -p firmware=./firmware/rhino_pass.bin,tty_dbg=socat:./COM26,tty_bt=socat:./COM28
-g 23646
-GDBãµãŒããŒãžã®ã¢ã¯ã»ã¹çšã«éãããTCPããŒãã-n rhino
ã·ã¹ãã ïŒããã€ã¹ã¢ã»ã³ããªïŒã®ã¡ã€ã³ã¢ãžã¥ãŒã«ã®ååã-l user
ã¡ã€ã³ã¢ãžã¥ãŒã«ãæ€çŽ¢ããã©ã€ãã©ãªã®ååã-y library
ããã€ã¹ã«å«ãŸããã¢ãžã¥ãŒã«ãæ€çŽ¢ãããã¹ãfirmware\rhino_pass.bin
ãã¡ãŒã ãŠã§ã¢ãã¡ã€ã«ãžã®ãã¹ã- COM26ããã³COM28ã¯ä»®æ³COMããŒãã§ãã
çµæã¯Python >
ïŒãŸãã¯Argparse >
ïŒ Argparse >
ïŒ
18:07:59 INFO [eFactoryBuilder.create ]: Module top successfully created as top 18:07:59 INFO [ Module.initializeAndRes]: Setup core to top.u1_stm32.cortexm0.arm for top 18:07:59 INFO [ Module.initializeAndRes]: Setup debugger to top.u1_stm32.dbg for top 18:07:59 WARN [ Module.initializeAndRes]: Tracer wasn't found in top... 18:07:59 INFO [ Module.initializeAndRes]: Initializing ports and buses... 18:07:59 WARN [ Module.initializePortsA]: ATTENTION: Some ports has warning use printModulesPortsWarnings to see it... 18:07:59 FINE [ ARMv6CPU.reset ]: Set entry point address to 08006A75 18:07:59 INFO [ Module.initializeAndRes]: Module top is successfully initialized and reset as a top cell! 18:07:59 INFO [ Kopycat.open ]: Starting virtualization of board top[rhino] with arm[ARMv6Core] 18:07:59 INFO [ GDBServer.debuggerModule ]: Set new debugger module top.u1_stm32.dbg for GDB_SERVER(port=23946,alive=true) Python >
IDA Proãšã®çžäºäœçš
ãã¹ããç°¡çŽ åããããã«ãIDAã§ã®åæã®ãœãŒã¹ãã¡ã€ã«ãšããŠãRhinoãã¡ãŒã ãŠã§ã¢ãELFãã¡ã€ã«ãšããŠäœ¿çšããŸã ïŒã¡ã¿æ
å ±ã¯ããã«ä¿åãããŸãïŒã
ã¡ã¿æ
å ±ãªãã§ã¡ã€ã³ãã¡ãŒã ãŠã§ã¢ã䜿çšããããšãã§ããŸãã
IDA Proã§Kopycatãèµ·åããåŸã[ãããã¬]ã¡ãã¥ãŒã®[ãããã¬ãŒã®åãæ¿ã... ]é
ç®ã«ç§»åãã[ ãªã¢ãŒãGDBãããã¬ãŒ]ãéžæããŸãã 次ã«ãæ¥ç¶ãæ§æããŸãïŒ ãããã¬ãŒã¡ãã¥ãŒ-ããã»ã¹ãªãã·ã§ã³...
å€ãèšå®ããŸãã
- ã¢ããªã±ãŒã·ã§ã³-ä»»æã®å€
- ãã¹ãåïŒ127.0.0.1ïŒãŸãã¯Kopycatãå®è¡ãããŠãããªã¢ãŒããã·ã³ã®IPã¢ãã¬ã¹ïŒ
- ããŒãïŒ23946
ãããã°éå§ãã¿ã³ãå©çšå¯èœã«ãªããŸããïŒF9ããŒïŒïŒ
ã¯ãªãã¯ããŠãã ãã-ãšãã¥ã¬ãŒã¿ãŒã®ãããã¬ãŒã¢ãžã¥ãŒã«ã«æ¥ç¶ããŸãã IDAã¯ãããã°ã¢ãŒãã«ãªããè¿œå ã®ãŠã£ã³ããŠã䜿çšå¯èœã«ãªããŸããã¬ãžã¹ã¿ã«é¢ããæ
å ±ãã¹ã¿ãã¯ã«é¢ããæ
å ±ã§ãã
ããã§ããããã¬ãŒãæäœãããã¹ãŠã®æšæºæ©èœã䜿çšã§ããŸãã
- åœä»€ã®æ®µéçãªå®è¡ïŒ ã¹ãããã€ã³ãšã¹ããããªãŒã㌠-ããããããŒF7ãšF8ïŒ;
- å®è¡ãéå§ããã³äžæåæ¢ããŸãã
- ã³ãŒããšããŒã¿ã®äž¡æ¹ã«ãã¬ãŒã¯ãã€ã³ããäœæããŸãïŒF2ããŒïŒã
ãããã¬ã«æ¥ç¶ããããšã¯ããã¡ãŒã ãŠã§ã¢ã³ãŒããéå§ããããšãæå³ããŸããã çŸåšã®å®è¡äœçœ®ã¯ãã¢ãã¬ã¹0x08006A74
- Reset_Handleré¢æ°ã®éå§äœçœ®ã§ãªããã°ãªããŸããã äžã®ãªã¹ããäžã«ã¹ã¯ããŒã«ãããšã ã¡ã€ã³é¢æ°ã®åŒã³åºãã確èªã§ããŸãã ãã®è¡ïŒã¢ãã¬ã¹0x08006ABE
ïŒã«ã«ãŒãœã«ã眮ãã ã«ãŒãœã«æäœãŸã§å®è¡ ïŒF4ããŒïŒãå®è¡ã§ããŸã ã

次ã«ãF7ãæŒããŠã¡ã€ã³æ©èœãéå§ã§ããŸãã
ããã»ã¹ã®ç¶ç¶ã³ãã³ãïŒF9ããŒïŒãå®è¡ãããšãããåŸ
ã¡ãã ããããŠã£ã³ããŠã衚瀺ããã äžæåæ¢ãã¿ã³ã1ã€è¡šç€ºãããŸãã
SuspendãæŒããšããã¡ãŒã ãŠã§ã¢ã³ãŒãã®å®è¡ãäžæãããäžæãããã³ãŒãã®åãã¢ãã¬ã¹ããç¶è¡ã§ããŸãã
ã³ãŒãã®å®è¡ãç¶è¡ãããšãä»®æ³COMããŒãã«æ¥ç¶ããã端æ«ã§æ¬¡ã®è¡ã衚瀺ãããŸãã


æååãstate bypassãã®ååšã¯ãä»®æ³Bluetoothã¢ãžã¥ãŒã«ããŠãŒã¶ãŒã®COMããŒãããããŒã¿ãåä¿¡ããã¢ãŒãã«åãæ¿ãã£ãããšã瀺ããŸãã
Bluetoothã¿ãŒããã«ïŒå³-COM29ïŒã§ã¯ãRhinoãããã³ã«ã«åŸã£ãŠã³ãã³ããå
¥åã§ããŸãã ããšãã°ãæååãmur-murãã¯ãBluetooth端æ«ã®ãMEOWãã³ãã³ãã«æ»ããŸãã

å®å
šã«ãšãã¥ã¬ãŒãããªã
ãšãã¥ã¬ãŒã¿ãæ§ç¯ãããšããããã€ã¹ã®è©³çŽ°åºŠ/ãšãã¥ã¬ãŒã·ã§ã³ãéžæã§ããŸãã ãã®ãããããšãã°ãBluetoothã¢ãžã¥ãŒã«ã¯ããŸããŸãªæ¹æ³ã§ãšãã¥ã¬ãŒãã§ããŸãã
- ã³ãã³ãäžåŒãåããå®å
šã«ãšãã¥ã¬ãŒããããããã€ã¹ã
- ATã³ãã³ãã¯ãšãã¥ã¬ãŒããããããŒã¿ã¹ããªãŒã ã¯ã¡ã€ã³ã·ã¹ãã ã®COMããŒãããåä¿¡ãããŸãã
- ä»®æ³ããã€ã¹ã¯ãå®éã®ããã€ã¹ãžã®ããŒã¿ã®å®å
šãªãªãã€ã¬ã¯ããæäŸããŸãã
- åžžã«ãOKããè¿ãåçŽãªã¹ã¿ããšããŠã
ãšãã¥ã¬ãŒã¿ã®çŸåšã®ããŒãžã§ã³ã§ã¯ã2çªç®ã®ã¢ãããŒãã䜿çšãããŸããä»®æ³Bluetoothã¢ãžã¥ãŒã«ã¯æ§æãå®è¡ãããã®åŸãã¡ã€ã³ã·ã¹ãã ã®COMããŒããããšãã¥ã¬ãŒã¿UARTããŒãã«ããŒã¿ã®ããããã·ãã¢ãŒãã«åãæ¿ããŸãã
åšèŸºã®äžéšãå®è£
ãããŠããªãå Žåãã³ãŒãã®åçŽãªã€ã³ã¹ãã«ã¡ã³ããŒã·ã§ã³ã®å¯èœæ§ãèæ
®ããŠãã ããã ããšãã°ãDMAã§ã®ããŒã¿è»¢éãå¶åŸ¡ããã¿ã€ããŒãäœæãããŠããªãå ŽåïŒæ€èšŒã¯0x08006840ã«ããws2812b_waité¢æ°ã§å®è¡ãã0x08006840
ïŒããã¡ãŒã ãŠã§ã¢ã¯åžžã«0x200004C4
ã«ãã0x200004C4
ãDMAããŒã¿ã©ã€ã³ããªã»ããããã®ã0x200004C4
ãŸãïŒ

ãããåé¿ããã«ã¯ã ããžãŒãã©ã°ãèšå®åŸããã«æåã§ãªã»ããããŸãã IDA Proã§ã¯ãPythoné¢æ°ãäœæãããã¬ãŒã¯ãã€ã³ãã§åŒã³åºãããšãã§ããŸãããã¬ãŒã¯ãã€ã³ãèªäœã¯ã busyãã©ã°ã«å€1ãæžã蟌ãã åŸã«ã³ãŒãã«èšå®ãããŸãã
ãã¬ãŒã¯ãã€ã³ããã³ãã©ãŒ
æåã«ãIDAã§Pythoné¢æ°ãäœæããŸãã [ãã¡ã€ã« ]ã¡ãã¥ãŒ-ã¹ã¯ãªããã³ãã³ã...
å·ŠåŽã®ãªã¹ãã«æ°ããã¹ãããããè¿œå ããååïŒããšãã°ã BPT ïŒãä»ããŠã
å³åŽã®ããã¹ãããã¯ã¹ã«æ©èœã³ãŒããå
¥åããŸãã
def skip_dma(): print "Skipping wait ws2812..." value = Byte(0x200004C4) if value == 1: PatchDbgByte(0x200004C4, 0) return False
ãã®åŸã[ å®è¡ ]ãã¯ãªãã¯ããŠãã¹ã¯ãªãããŠã£ã³ããŠãéããŸãã
0x0800688A
ã®ã³ãŒãã«0x0800688A
ããã¬ãŒã¯ãã€ã³ãïŒF2ããŒïŒãèšå®ããç·šéïŒ ãã¬ãŒã¯ãã€ã³ãã®ç·šé...ã³ã³ããã¹ãã¡ãã¥ãŒïŒããã¹ã¯ãªããã¿ã€ãã®èšå®ãå¿ããªãã§ãã ãã0x0800688A
ïŒ
busyãã©ã°ã®çŸåšã®å€ã1ã®å Žåã skip_dmaé¢æ°ã¯ã¹ã¯ãªããè¡ã§å®è¡ããå¿
èŠããããŸãã

ãã¡ãŒã ãŠã§ã¢ãå®è¡ããå Žåããã¬ãŒã¯ãã€ã³ããã³ãã©ãŒã³ãŒãã¯ãIDAã®åºåãŠã£ã³ããŠã®Skipping wait ws2812...
è¡ã«è¡šç€ºããSkipping wait ws2812...
ããã§ããã¡ãŒã ãŠã§ã¢ã¯ããžãŒãã©ã°ã®ãªã»ãããåŸ
ããªããªããŸãã
ãšãã¥ã¬ãŒã¿ãŒã®çžäºäœçš
ãšãã¥ã¬ãŒã·ã§ã³ã®ããã®ãšãã¥ã¬ãŒã·ã§ã³ã¯ãåã³ãšåã³ãããããããšã¯ã»ãšãã©ãããŸããã ãšãã¥ã¬ãŒã¿ããç 究è
ãã¡ã¢ãªå
ã®ããŒã¿ã確èªãããããããŒã®çžäºäœçšã確ç«ãããããã®ã«åœ¹ç«ã€å Žåã¯ãã¯ããã«èå³æ·±ãã§ãã
RTOSã¿ã¹ã¯ã®çžäºäœçšãåçã«ç¢ºç«ããæ¹æ³ã瀺ããŸãã ãŸããå®è¡äžã®ã³ãŒãã®å®è¡ãäžæåæ¢ããŸãã ãLEDãã³ãã³ãåŠçãã©ã³ãïŒã¢ãã¬ã¹0x080057B8
ïŒã§bluetooth_task_entryé¢æ°ã«åãæ¿ãããšãæåã«äœæããããã®ã確èªã§ããã¡ãã»ãŒãžãledControlQueueHandleã·ã¹ãã ãã¥ãŒã«éä¿¡ãããŸãã

0x20000624ã«ããledControlQueueHandleå€æ°ã«ã¢ã¯ã»ã¹ããããã«ãã¬ãŒã¯ãã€ã³ããèšå®ããã³ãŒãã®å®è¡ãç¶è¡ããå¿
èŠããããŸãã
ãã®çµæã osMailAllocé¢æ°ãåŒã³åºãåã«ã¢ãã¬ã¹0x080057CA
åæ¢ãã osMailPuté¢æ°ãåŒã³åºãåã«ã¢ãã¬ã¹0x080057CA
åæ¢ãã次ã«leds_task_entryé¢æ°ïŒLEDã¿ã¹ã¯ïŒã«å±ããã¢ãã¬ã¹0x08005BD4
ïŒ osMailGeté¢æ°ãåŒã³åºãåïŒã§åæ¢ããŸããã¿ã¹ã¯ã®åãæ¿ããçºçããã³ã³ãããŒã«ãLEDã¿ã¹ã¯ãåä¿¡ããŸããã

ãã®ãããªç°¡åãªæ¹æ³ã§ãRTOSã¿ã¹ã¯ãçžäºã«ããåãããæ¹æ³ã確ç«ã§ããŸãã
ãã¡ãããå®éã«ã¯ãã¿ã¹ã¯ã®çžäºäœçšã¯ããè€éã«ãªãå¯èœæ§ããããŸããããšãã¥ã¬ãŒã¿ã䜿çšããŠãã®çžäºäœçšã远跡ããããšã¯ããã»ã©é£ãããããŸããã
ããã§ã¯ããšãã¥ã¬ãŒã¿ãŒã®èµ·åãšIDA Proãšã®å¯Ÿè©±ã®çããããªãèŠãããšãã§ããŸãã
Radare2ã§èµ·å
Radare2ãªã©ã®æ±çšããŒã«ã¯ç¡èŠã§ããŸããã
r2ã䜿çšããŠãšãã¥ã¬ãŒã¿ã«æ¥ç¶ããã«ã¯ãã³ãã³ãã¯æ¬¡ã®ããã«ãªããŸãã
radare2 -A -a arm -b 16 -d gdb://localhost:23946 rhino_fw42k6.elf
éå§ïŒ dc
ïŒããã³å®è¡ã®äžæåæ¢ïŒCtrl + CïŒãå©çšå¯èœã«ãªããŸããã
æ®å¿µãªãããçŸåšr2ã§ã¯ãããŒããŠã§ã¢gdbãµãŒããŒãšã¡ã¢ãªããŒã¯ã¢ããã§äœæ¥ãããšãã«åé¡ããããŸããããã«ããããã¬ãŒã¯ãã€ã³ããšã¹ãããïŒ ds
ã³ãã³ãïŒãæ©èœããŸããã ãããè¿ãå°æ¥ä¿®æ£ãããããšãé¡ã£ãŠããŸãã
Eclipseã§èµ·åãã
ãšãã¥ã¬ãŒã¿ã䜿çšããããã®ãªãã·ã§ã³ã®1ã€ã¯ãéçºäžã®ããã€ã¹ã®ãã¡ãŒã ãŠã§ã¢ã®ãããã°ã§ãã æ確ã«ããããã«ãRhinoãã¡ãŒã ãŠã§ã¢ã䜿çšããŸãã ãããããã¡ãŒã ãŠã§ã¢ãœãŒã¹ãããŠã³ããŒãã§ããŸãã
STM32ã¹ã€ãŒãçšã®System Workbenchã® EclipseãIDEãšããŠäœ¿çšããŸãã
Eclipseã§çŽæ¥ã¢ã»ã³ãã«ããããã¡ãŒã ãŠã§ã¢ããšãã¥ã¬ãŒã¿ãŒã«ããŒãããã«ã¯ã firmware=null
èµ·åã³ãã³ãã«firmware=null
ãã©ã¡ãŒã¿ãŒãè¿œå ããå¿
èŠãããfirmware=null
ã
bin\kopycat -g 23946 -n rhino -l user -y library -p firmware=null,tty_dbg=COM26,tty_bt=COM28
ãããã°æ§æ
Eclipseã§ã[ Run-Debug Configurations ... ]ã¡ãã¥ãŒãéžæããŸããéãããŠã£ã³ããŠã®[ GDB Hardware Debugging]ã»ã¯ã·ã§ã³ã§ãæ°ããæ§æãè¿œå ãã[Main]ã¿ãã§ãããã°ããçŸåšã®ãããžã§ã¯ããšã¢ããªã±ãŒã·ã§ã³ãæå®ããå¿
èŠããããŸãã

[ãããã¬]ã¿ãã§ãGDBã³ãã³ããæå®ããå¿
èŠããããŸãã
${openstm32_compiler_path}\arm-none-eabi-gdb
ãŸããGDBãµãŒããŒã«æ¥ç¶ããããã®ãã©ã¡ãŒã¿ãŒïŒãã¹ããšããŒãïŒãå
¥åããŸãã

[ã¹ã¿ãŒãã¢ãã]ã¿ãã§æ¬¡ã®ãã©ã¡ãŒã¿ãŒãæå®ããå¿
èŠããããŸãã
- [ ã€ã¡ãŒãžã®ããŒã]ãã§ãã¯ããã¯ã¹ãæå¹ã«ããŸãïŒçµã¿ç«ãŠããããã¡ãŒã ãŠã§ã¢ã€ã¡ãŒãžããšãã¥ã¬ãŒã¿ãŒã«ããŒããããããã«ïŒã
- [ ã·ã³ãã«ã®ããŒã]ãã§ãã¯ããŒã¯ãæå¹ã«ããŸãã
- éå§ã³ãã³ããè¿œå ããŸãïŒ
set $pc = *0x08000004
ïŒã¡ã¢ãªããå€ãã¢ãã¬ã¹0x08000004
PCã¬ãžã¹ã¿ã«èšå®ããŸã0x08000004
ã®ã¢ãã¬ã¹ã¯0x08000004
ã«ä¿åãããŸãïŒã
Eclipseãããã¡ãŒã ãŠã§ã¢ãã¡ã€ã«ãããŠã³ããŒãããªãå Žåã¯ã Load imageããã³Run commandsãã©ã¡ãŒã¿ãŒãæå®ããå¿
èŠããªãããšã«æ³šæããŠãã ãã ã

[ãããã°]ãã¯ãªãã¯ãããšããããã°ã¢ãŒãã§äœæ¥ã§ããŸãã
- 段éçãªã³ãŒãå®è¡

- ãã¬ãŒã¯ãã€ã³ããšã®çžäºäœçš

ã泚æ Eclipseã«ã¯ãããŒã...ããã€ãã®æ©èœããããŸã...ãããŠããªãã¯ããããšäžç·ã«æ®ãããªããã°ãªããŸããã ããšãã°ããããã¬ãŒã®èµ·åæã«ãNo source available forã0x0ãããšããã¡ãã»ãŒãžã衚瀺ãããå Žåã¯ãStepã³ãã³ãïŒF5ïŒãå®è¡ããŸã
çµè«ã®ä»£ããã«
ãã€ãã£ãã³ãŒãã®ãšãã¥ã¬ãŒã·ã§ã³ã¯éåžžã«èå³æ·±ããã®ã§ãã ããã€ã¹éçºè
ã«ãšã£ãŠãå®éã®ããã€ã¹ãªãã§ãã¡ãŒã ãŠã§ã¢ããããã°ããããšãå¯èœã«ãªããŸãã ç 究è
åã-åçã³ãŒãåæãå®è¡ããæ©èœãããã¯ãããã€ã¹ã䜿çšããŠãåžžã«å¯èœãšã¯éããŸããã
䟿å©ã§é©åºŠã«ã·ã³ãã«ã§ãèšå®ãšèµ·åã«å€ãã®æéãšåŽåããããªãã£ãããŒã«ãå°é家ã«æäŸããããšèããŠããŸãã
ããŒããŠã§ã¢ãšãã¥ã¬ãŒã¿ã䜿çšããçµéšã«ã€ããŠã®ã³ã¡ã³ããæžããŠãã ããã ç§ãã¡ã¯ããªããè°è«ã«æåŸ
ãã質åã«åãã§ãçãããŸãã