ααΆααααααα½αααααΆαααααα»α 0x0A DC7831
αα αααα»αα’αααααααα ααΎαααΉααααααΆααα’αααΈααααααααΎαααΆααααααα·ααΈααααααα§ααααααα αααα»ααααααα·ααΈααααΆααααΆα αααα αΆαα’ααααααααααΆαα½αα§αααααααααΆααααα α»α αα·αααααΎααΆααα·ααΆαααΆαααααααΌα αα½ααααααααα·ααΈααααααα
αααααα»αααααααααα·ααΆααααα
ααΆαααΈααΌαααΆαααΆααααα αΎααα αααα»αααΆα‘αΆαααααΈααααΆα
ααΈαααΈααααΆααα»ααα αααα»ααααααΈααα·αααααααααααΎαααΆααααααΌαααΆαααΎααααΈαααΎαα’ααααααααααα·ααΈααααααααα§ααααααα½αα αααααα·ααΈααααααααααΌαααΆααααα αΆαα αα·ααααααΆααΆαα½ααααααα·ααΈα αΆααααααΎαααααααααα ααΆααβααααΎβαααβαααβαααα»αβαα·ααΈβααβαααα»αααααΆα αααβααααΌαβαα·ααααααβαααα»αβα’αααα αα αΆαβα αααΎαβααα α αΎααααααα·ααΈαααααααααα½αααΆαααααΆααααααΆαα’αααααααααααΆααααααααΆαα½αααααΏααα»αααααΌαααα α αΎαααΆααα’ααααααα ααΎααααΌα MIPS α
αααααΆααα ααα»ααααααααα αααααα·ααΈααααΆααααΆααααααΆααα·αααααΉαααΎααα ααα»ααααααΎααα ααα ααααααΎαααΆαααΌαα αααααΆαααα ααΎαααΆααααααα α α·ααααααααΎααααααα·ααΈααααΆααααΆαααααΆαααααα½αααααααΎα αααααΉαααααΎα’αααααααΆ αα·αα’αα»ααααΆαα±ααααΎααααααΆαααααα·ααΈααααααααααΆααα ααΎαααΆαααΆαααααααΆα αΎαααΆααααΎαααΆαα ααΎαααΆααα·αααΆααΎααΆαα’αααΈααΎαα‘αΎαααααα·αααΎααΎαααααααααααΏααα»αααααΌαααααΎααααΈααααΎαααΆααααααα·ααΈααααααααααΆααα ααΆαα·αααΊα αΆααααααΆαααα - α αΎαααΆααααααΎαααΆααααααα ααΎααα·αααααααα α αΎααααααα α α·ααααααααΎααααααα·ααΈααααΆααααΆααααααααααα
ααααααααΊαααααα·ααΈααααΆααααΆααααααααααα»αααααΌααα
α ααα»α’αααΈ Kopycat?
ααΆαααΆαααααα ααΎααΆαααα
- copycat (ααΆααΆα’ααααααα noun [ΛkΙpΙͺkΓ¦t]) - α’αααααααΆααααΆα, α’αααααααΆααααΆα
- ααααΆ (ααΆααΆα’ααααααα noun [ΛkΓ¦t]) - cat, cat - ααααααααααααααα’ααααααααΎααααααα
- α’αααα "K" ααΊααααΈααΆααΆααααααααααα·ααΈ Kotlin
ααααΆα αααα
αα ααααααααΎααααααα·ααΈααααΆααααΆα ααααα ααΆααααΆααααααΌαααΆααααααα
- αααααααΆααααα»αααΆααααααΎαααααΏααα»αααααΌαααααααΈ αααΌαα»α ααααΌααα½αααααΆα
- αααααααΆααααα»αααΆααααααΌααααα»αα§ααααααα·αααα·αααΈαααΌαα»αααααααα
- αααααααΆααααα»αααΆααααα»ααα·αααααααααααΈα (αααααα·ααΈαααααα) αα αααα»αα’αααα αα αΆαααααα§ααααααα·αααα·αα
- αααααααΆααααα»αααΆαααααΎααΆαααΆαα½αααΌααα (ααΌαααααααααΆαααΆααααααααα);
- αααααααΆααααα»αααΆαααααΎα’ααααααααααΆαα½ααααααα·ααΈααααΆααααΆαααΆααααα§αααααααααΆααααα α»ααααααααΆααααααΆαα½α;
- ααΆααΆααααΎαααα’αααααΆααααΆαα’αα·ααααααα
ααΆαααααα Kotlin ααααΌαααΆαααααΎαααΎααααααΆααααΆαα’αα»αααα ααααΆααααααααα‘αΆααααα»α (αααααΊααΆαααααααααΌαα»αααααΆααααααααααΆαα αα·ααα ααααΆααααα‘αΆααααα»ααα·αααααααα·αααα·α) JSON ααΆαααααααα·αααααΆα§ααααα αα·α GDB RSP ααΆαα·ααΈααΆααααααΆααα’ααααααααααΆαα½αα§αααααααααΆααααα α»αα
ααΆαα’αα·ααααααααΆααααααααα»αααααααααΆαααΈαααααΆα α αΎααααα»αααααΎαααΆααααΆααααααα αααα»αα’αα‘α»ααααααα ααααΌαααααΎαααΆα MIPS, x86, V850ES, ARM αα·α PowerPC ααααΌαααΆαα’αα»ααααα
ααααααααααααα»αααΈαα ααααΎα α αΎαααααααααααΌααααα αΆαααΆαααααΆααΆααααααΆααααααΌααααΌααΆαα ααΎαααΉαααααΎααΆααα·αααααΆαααα’α·αα’αααΈαααααααα αααααααα ααα»αααααααααΆαααααααα ααΎαααΉααααααααΎααΆαααααΎααααΆαα Kopycat α
αααααΆααα’αααααααα·αα
ααα’ααααααααααα»α ααααααααααααααΆααααααααα·ααΈααααΆααααΆαα’αΆα
ααΆαααααΆαααΈ
Rhino αα αααα»ααααααα·ααΈααααΆααααΆα
α
αΌαααΎαα
αΆαααΆαα»αααααααααΆααααααα·ααΈα SMARTRHINO-2018 α§αααααααΆααααα "αααΆα" ααααΌαααΆααααααΎαα‘αΎααααααΆααααΆαααααααααααΆααα·ααααααααααα
αααΆαα ααααΎαααΆαααααΆααα·ααΆααααααα·ααΈαααααααα·αα·ααααααααΌαααΆααα·αααααΆαα
αααα»α
α₯α‘αΌααααααΌαααααΆααΆααααααα "ααΆαααα·α" α αΎαααααΎαααΆααααααα·ααΈαααααααα αααα»ααααααα·ααΈααααΆααααΆαα
ααΎαααΉαααααΌαααΆα:
1) Java 1.8
2) Python αα·ααααΌαα»α
αααααΆααααΈαααΌα
1)
2)
αααααΆααααΈαα»α
α
1) socat
α’αααα’αΆα ααααΎ Eclipse, IDA Pro α¬ radare2 ααΆαααΆαααΈαααααα GDB α
ααΎααΆααααΎαααΆααααΆαααΌα ααααα ?
ααΎααααΈα’αα»αααααααααα·ααΈαααααααααα»ααααααα·ααΈααααΆααααΆα ααΆα αΆαααΆα ααααα»αααΆα "αααααΌααααα»α" α§ααααααα·αααα·α αααααΆ analogue ααα§ααααααα·αα
α§ααααααα·α ("αααΆα") α’αΆα ααααΌαααΆααααα αΆααα αααα»αααααΆααααΆααααα»αα
αααααα·ααΈααααΆααααΆαααΆααα ααΆαααααααααααΌαα»α α αΎαα§ααααααα·αααα·αα α»ααααααα’αΆα ααααΌαααΆααα·αααααΆαα αααα»αα―αααΆα JSON α
JSON 105 αααααΆαα
{
"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"]
]
}
ααα α·ααααα»αααΆααααΎαααΆαααΆαααααα αααααα·ααΈαααααα ααααα αααΆαααΆαααΈα ααΊααΆαααααα―αααΆααααα’αΆα αααα»ααα αααα»αα§ααααααα·αααα·αααΆαααααα·ααΈααααααα
α§ααααααα·αααα·α αα·αα’ααααααααααααααΆααΆαα½αααααααααααααα·ααααα·ααΆαα ααααα’αΆα ααααΌαααΆαααααΆααααααααΆααααΆαααΆααααααα
ααΆαααΆααααααα αα α»αααααααααααααα·ααΈααααΆααααΆαααΆαααααααααΉαα’ααααααααααΆαα½αα ααα COM αα OS α αααα (ααααΆααααα α»α UART αα·α UART αααααΆαααααΌαα»ααααααΌααΌα) α ααΆαααααα’αΆα ααΆα ααααα·αααααΆαααααα§αααααααααΌαααΆαααααΆαα α¬α ααα COM αα·αααα·α (αααααΆααααΆα’αααααααΆααααααααΌαααΆα com0com/socat).
αα αα α»ααααααααΆααα·ααΈααααΆααααΈαααΎααααΈααααΎα’ααααααααααΆαα½ααααααα·ααΈααααΆααααΆαααΈααΆααααα α
- αα·ααΈααΆα GDB RSP (ααααα ααΆαα§ααααααααααΆαααααα·ααΈααΆααααααΊ Eclipse / IDA / radare2);
- αααααΆααααΆααααααααΆαααααα·ααΈααααΆααααΆαααΆααααα»α (Argparse α¬ Python) α
α ααα COM αα·αααα·α
ααΎααααΈααααΎα’ααααααααααΆαα½α UART ααα§ααααααα·αααα·ααα ααΎαααΆαααΈαααΌαααααΆαααΆααααααααΆααΈα α’αααααααΌααααααΎαα ααα COM αα·αααα·ααα½αααΌα αααα»αααααΈααααααΎα α ααααα½αααααΌαααΆαααααΎααααααααα·ααΈααααΆααααΆα α αΎαααΈααΈαααααααααα·ααΈααααΆααΈα (PuTTY α¬α’αααααα)α
ααΆαααααΎααααΆαα com0com
α ααα COM αα·αααα·αααααΌαααΆαααααααα ααΆαααααααααααααααΎα§αααααααα‘αΎαααΈα§ααααα com0com (αααααα»αααΌα - C: α―αααΆααααααα·ααΈ (x86)com0comsetupΡ.exe, α¬αααα GUI - C: α―αααΆααααααα·ααΈ (x86)com0comsetupg.exe):
αα·αα·ααααααα’αα ααΎαααααΎαααΆαααΎαααα·ααααααα’αΆαααα αααααΆααα ααααα·αααα·ααααααΆααααααΎαααΆααα’αα ααΎαα·αααΌα αααααα αααααα·ααΈααααΆααααΆαααΉααααα αΆαααΆαααααΎαααααΈα ααα COM α
ααΆαααααΎααααΆαα socat
αα
ααΎααααααααααΌααΈα α
ααα COM αα·αααα·αααααΌαααΆααααααΎααααααααααααααααα·ααααααααα·ααΈααααΆααααΆααααααααΎα§αααααααααΎααααΆαα socat ααΎααααΈααααΎααΌα
αααααααΆαααααααααΆαααα»ααααααα
αααα»ααααααα
ααααα
αααα
αΆααααααΎααααααα·ααΈααααΆααααΆα socat:
.
α ααα»α αααααΆαααααααΆααααΆααααααααΆααΆααααα»α (Argparse α¬ Python)
αααααΆα Kopycat ααΊααΆαααααα·ααΈαα»αααΌα αααααα·ααΈααααΆααααΆαααααααααααΎαα ααα»α αααααΆαααααααΆααααΆααααααααΆααΈααααααΆααα’ααααααααααΆαα½αααααα» αα·αα’αααααααααΆα Argparse αα·α Python α
Argparse ααΊααΆ CLI αααααααΌαααΆααααααΎαα‘αΎααα αααα»α Kopycat α αΎααααααααΆααααααΆααααα»ααααααααααααΆα
CLI αααα½αααΊα’ααααααααα Python α ααΎααααΈααααΎααΆ α’αααααααΌαααα‘αΎααααΌαα»α Jep Python α αΎαααααααα ααΆαααααααααααααα·ααΈααααΆααααΆαααΎααααΈααααΎααΆαααΆαα½α Python (α’ααααααααα Python αααααΆαααα‘αΎααα ααΎααααααααααααΆααααααα’αααααααΎααΉαααααΌαααΆαααααΎ) α
ααΆαααα‘αΎα Python module Jep
αα ααααα Linux Jep α’αΆα ααααΌαααΆαααα‘αΎαααΆαααα pip:
pip install jep
ααΎααααΈααα‘αΎα Jep αα
ααΎ Windows ααααΌαα’αααααααΌαααααα‘αΎα Windows SDK αα·α Microsoft Visual Studio αααααααΌαααααΆα ααΎαααΆαααααΎα±ααααΆααΆααααααΆααααα½ααααααΆααα’ααα αα·α
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.
αα
αααα»αα―αααΆα emulator batch αααααΆααααααααααααααα’ααα (copycat.bat - αααααΆαα Windows, ααααΆα
αααα - αααααΆααααΈαα»α
) αα
αααααΈαααΆαααΆαααααα DEFAULT_JVM_OPTS
αααααααααΆαααΆαααααααααααα Djava.library.path
- ααΆααααΌαααααΆαααααΌααα
ααΆαααααΌαα»α 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) α
ααΆααααααααΆααΎααααΈααααΎαααΆααα αααααααΈαααΌ
binkopycat -g 23946 -n rhino -l user -y library -p firmware=firmwarerhino_pass.bin,tty_dbg=COM26,tty_bt=COM28
ααΆααααααααΆααΎααααΈααααΎαααΆααα αααααααΈαα»α αααααααΎα§αααααααααΎααααΆαα socatα
./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
- α ααα TCP αααααΉαααΎααααααΆααααΆαα αΌαααααΎαααΆαααΈααα GDB α-n rhino
- ααααααααααΌαα»αααααααααααααΆαα (α§ααααααααααΆααααα»α);-l user
- ααααααααααΆαααααΎααααΈααααααααααΌαα»αααα-y library
- ααααΌαααΎααααΈααααααααααΌαα»ααααααΆααα αααα»αα§ααααααfirmwarerhino_pass.bin
- ααααΌααα ααΆααα―αααΆααααααα·ααΈαααααα;- COM26 αα·α COM28 ααΊααΆα ααα COM αα·αααα·αα
ααΆαααααα αααα’αααααα
αΌααα½αααΉαααααΌαααΆααααα αΆα Python >
(α¬ 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
ααΎααααΈααααα½αααΆαααΆααααα ααΎαααααΎαααααα·ααΈαααααα Rhino ααΆα―αααΆαααααααααααΆααααΆααα·ααΆααααα»α IDA αααα»ααααααα
α’αααααα’αΆα ααααΎαααααα·ααΈααααααα αααααααααααΆαααααααΆαααααΆα
αααααΆααααΈααΎαααααΎαααΆα Kopycat αα αααα»α IDA Pro αα αααα»ααααΊαα»α Debugger ααΌαα αΌααα ααΆααααΆαα» "ααααΌαβαααααα·ααΈβααααΆααβααα α»α..."α αΎαααααΎαααΎα"α§αααααααααΆααααα α»α GDB ααΈα ααααΆα"α αααααΆαααααααααααΆααααααΆααα αααΊαα»α αααααα·ααΈααααΆααααα α»α - αααααΎαααααΎαααΆα...
ααααααααααα
- αααααα·ααΈ - αααααααΆαα½αα
- ααααααααΆαααΈαα 127.0.0.1 (α¬α’αΆααααααΆα IP αααααααΆαααΈαααΈα ααααΆα ααα Kopycat αααα»αααααΎαααΆα)
- α ααα: 23946
α₯α‘αΌαααααααΌαα»αααααΆααααα α»αα’αΆα ααααΎααΆα (ααααΆααα α»α F9)α
α α»α ααΆααΎααααΈααααΆαααα αααΌαα»αααααΆααααα α»ααα αααα»ααααααα·ααΈααααΆααααΆαα IDA α αΌααα αααα»αααααααααΆααααα α»α αααα’α½α ααααααα’αΆα ααααΆαα ααααααΆαα’αααΈααΆαα α»αααααα α’αααΈαααα
α₯α‘αΌαααα ααΎαα’αΆα ααααΎαααααααααααααΆαααΆααα’αααααααααα·ααΈααααΆααααα α»αα
- ααΆαα’αα»ααααααΆαααααΆαααΆααα αΆα α (αααβααα αΆαβα αΌαβαα βαααα»α ΠΈ αααααα αΆααα αα»α - ααααΆααα α»α F7 αα·α F8 αααααααΆ);
- α αΆααααααΎααα·αααα’αΆαααΆαα’αα»αααα;
- αααααΎαα ααα»α ααααααααααΆααααΆααααΌα αα·ααα·αααααα (ααααΆααα α»α F2) α
ααΆαααααΆαααα
α§αααααααααΆααααα α»ααα·αααΆααααααΆααααΎαααΆαααΌααααααα·ααΈαααααααααααα ααΈααΆααααααα·ααααα·αα
αα
α»ααααααααααΌαααααΆα’αΆααααααΆα 0x08006A74
- ααΆαα
αΆααααααΎααααα»αααΆα Reset_Handler. ααααα·αααΎα’ααααααΌαα
α»ααααααααΆαα
α»ααααααΈ α’αααα’αΆα
ααΎαααΆαα α
αα»αααΆα ααααΆαα. α’αααα’αΆα
ααΆααααααααααααα·α
αα
ααΎαααααΆααααα (α’αΆααααααΆα 0x08006ABE
) αα·αα’αα»ααααααααα·ααααα·ααΆα ααααα αΌααααααααααααααα·α
(αααααΉα F4) α
αααααΆααααα’αααα’αΆα α α»α F7 ααΎααααΈαααα αΌααα»αααΆα ααααΆαα.
ααΆααααααααΆ Esli vypolnit ααααααααΎαααΆα (ααααΆααα α»α F9) αααααΆαααααααα’α½α "ααΌααααα αΆα" ααΉααααα αΆαααααααΌαα»ααααα½α ααα’αΆα:
αα αααα’αααα α»α ααα’αΆα ααΆαααααα·ααααα·ααΌααααααα·ααΈααααααααααΌαααΆαααα’αΆα α αΎαα’αΆα ααααααΈα’αΆααααααΆαααΌα ααααΆαα αααα»αααΌααααααΆααααΌαααΆαααααΆαα
ααααα·αααΎα’αααααααααααα·ααααα·ααΌα α’αααααΉαααΎααααααΆααααΆαααααααα αααα»αααααΆααΈααααααααΆαααα α ααα COM αα·αααα·αα
ααααααΆααααααααΆαα "ααααΌαααΆααααα" αααα αΆαααΆαααΌαα»ααααααΌααΌααα·αααα·αααΆαααααΌααα ααααααα½ααα·ααααααααΈα ααα COM ααααα’αααααααΎα
α₯α‘αΌαααααα αααα»αααααΆααΈααααααΌααΌα (COM29 αααα»αααΌαααΆα) α’αααα’αΆα αααα αΌαααΆααααααααΆαααα’αα»αααααΆααα·ααΈααΆα Rhino α α§ααΆα ααα ααΆααααααααΆ "MEOW" ααΉααααα‘ααααααα’αααα "mur-mur" αα ααααΆααΈααααααΌααΌαα
ααααΎααααΆααααΆααααα»ααα·αααΆαααααα»αααα
αα ααααααααΎααααααα·ααΈααααΆααααΆα α’αααα’αΆα ααααΎαααΎαααααα·ααααα’α·α/ααΆαααααΆααααΆαα§αααααααΆααααΆαααα½αα α§ααΆα ααα αααΌαα»ααααααΌααΌαα’αΆα ααααΌαααΆαααααΆααααΆαααΆααα·ααΈααααααααααΆα
- α§ααααααααααααΌαααΆαααααΆααααΆααααΆαααααααααΆαα½αααΉααααα»αααααααααααΆααααααααΆ;
- ααΆααααααααΆ AT ααααΌαααΆαααααΆααααΆα α αΎαααααααΈααα·ααααααααααΌαααΆαααα½αααΈα ααα COM ααααααααααααα
- α§ααααααα·αααα·ααααααααΌαααΆααααααΌααα·αααααααααααααα ααΆααα§ααααααα·αα
- ααΆβααΎαβααααααΆβαααβαααααβαααα‘αα "ααααααα"α
αααααα αα α»αααααααααααααα·ααΈααααΆααααΆαααααΎαα·ααΈααΆαααααααΈααΈα - αααΌαα»ααααααΌααΌααα·αααα·αα’αα»ααααααΆαααααααα ααΆαααααααα αααααΆααααΈαααααΆααααΌααα αααα "ααααΌααααΈ" αα·ααααααααΈα ααα COM αααααααααααααα α ααα UART αααααααα·ααΈααααΆααααΆαα
α
αΌαααΎααα·α
αΆαααΆααΈααααααΆαααα§αααααααΆααααααααΌααααα»αααααΈααααααααααααααααα·ααΆααααα·αααααΌαααΆαα’αα»ααααα α§ααΆα ααα ααααα·αααΎαααααα·ααΈααααααααααααααα½ααα»αααααΌααααα»αααΆααααααααααααΆαααααααα·αααααααα
DMA αα·αααααΌαααΆααααααΎααα (ααΆααααα½ααα·αα·αααααααΌαααΆαα’αα»αααααα
αααα»ααα»αααΆα ws2812b_αααα
αΆα, raspolojennoy po adresu 0x08006840
) αααααΆαααααααααα·ααΈααααααααΉααααα
αΆαααΆαα·α
αα
αααααΆαααααααααΌαααΆααααααα‘αΎααα·α ααααααΆαβααΈβααΆααβαα
0x200004C4
ααααααα αΆαααΈααΆαααΆααααΆαααααααααα·αααααα DMAα
ααΎαα’αΆα ααα½αααΆααα»ααα·αααααΆαααΆαααααααααααααααα‘αΎααα·αααααα αααα ααααΆαααααααΆααααΈααα‘αΎαααΆα αα αααα»α IDA Pro α’αααα’αΆα αααααΎααα»αααΆα Python α αΎαα α ααΆαα αααα»α breakpoint α αΎαααΆαα breakpoint αααα½αααΆαα αααα»α code αααααΆααααΈαααααααααα 1 αα ααΆαα flag αααα.
α§ααααααααααααΆαα ααα»α ααααα
ααΆααααΌα α αΌαααΎααααααΎααα»αααΆα Python αα αααα»α IDAα αααΊαα»α α―αααΆα - ααΆααααααααΆααααααΈα...
ααααααβα’αααααβααααΈβααααΈβαα½αβαααα»αβαααααΈβαα
βααΆαβααααα αααααβαααααβααΆ (α§ααΆα ααα αααΈα αααΈα ααΈ),
αα
αααα»αααΆαα’ααααααα
ααΆαααααΆα αααα
αΌαααΌααα»αααΆαα
def skip_dma():
print "Skipping wait ws2812..."
value = Byte(0x200004C4)
if value == 1:
PatchDbgByte(0x200004C4, 0)
return False
αααααΆααααΈαααα α»α ααα α αΎααα·ααααα’α½α ααααααΈαα
α₯α‘αΌαβααΎαβα
αΌαβαα
βααΆααβαααβααΌα 0x0800688A
αααααα
ααα»α
ααα (ααααΆααα
α»α
F2) ααααααα½αααΆ (αααΊαα»αααα·αα ααααααα½αα
ααα»α
ααα...) αα»αααααα
αααααααααααααααααΈααα
Pythonα
ααααα·αααΎαααααααααα αα α»αααααα αααα ααααΎααΉα 1 αααααΆααααα’ααααα½αααααααα·ααααα·αα»αααΆα αααα_dma αα αααα»ααααααΆααααααααΈαα
ααααα·αααΎα’αααααααΎαααΆααααααα·ααΈαααααααααααΆααααΆαααααα·ααααα· α’αααα’αΆα
ααΎαααΆααααααΌααααααα·ααΈαααααααααα
ααα»α
ααααα
αααα»ααααα’α½α
IDA αα·ααααα ααΆααααααΆαα Skipping wait ws2812...
. α₯α‘αΌαααααααααα·ααΈααααααααΉααα·ααααα
αΆαα±αααααααααΌαααΆααααααα‘αΎααα·αααα αααα.
α’ααααααααααΆαα½ααααααα·ααΈααααΆααααΆα
ααΆαααααΎααααΆααααΆααααααΆααααΆααααααααααααΆαααααΎααααΆααααΆαααααααΆαα·αααααα±ααααΆαααΆαααΈαααΆα αα·αααΈαααΆααααααα ααΆαα½αα±ααα αΆααα’αΆααααααααΆαααααα ααα ααααα·αααΎαααααα·ααΈααααΆααααΆααα½αα±ααα’αααααααΆαααααΆαααΎαααΎααα·αααααααα αααα»αααα· α¬αααααΎαα’αααααααααααααααααα‘αΆαα
ααΎαααΉααααα αΆαα’αααααΈαααααααααΎαα’αααααααααααΆαααααααααΆααα·α
αα
ααΆα RTOS α ααααΌαα’ααααα½αααααα’αΆαααΆαααααα·ααααα·ααααΌαααααα·αααΎααΆαααα»αααααΎαααΆαα ααααα·αααΎα’αααα
αΌααα
ααΆαααα»αααΆα bluetooth_task_entry αα
ααΆααΆααααΎαααΆαααααΆααααααααΆ "LED" (α’αΆααααααΆα 0x080057B8
) αααααΆααααα’αααα’αΆα
ααΎαα’αααΈαααααααΌαααΆααααααΎαααααΌαα αΎααααααΆααααααααΎαα
αα½ααααααααα ledControlQueueHandle ααΆαααααα
α’ααααα½ααααααααα
ααα»α
αααααΎααααΈα
αΌαααααΎα’ααα ledControlQueueHandle, raspolojennoy po adresu 0x20000624
α αΎαααααααααΎαααΆαααΌαα
ααΆααααααααΆααααααΉαααΎαα‘αΎαααααΌααα
α’αΆααααααΆα 0x080057CA
αα»ααααα α
αα»αααΆα osMailAllocαααααΆαααααα
α’αΆααααααΆα 0x08005806
αα»ααααα α
αα»αααΆα osMailPutαααααΆαααααα½αααααα»α - αα
α’αΆααααααΆα 0x08005BD4
(αα»ααααα α
αα»αααΆα osMailGet) αααααΆαααααα·αααα·αααααα»αααΆα leds_task_entry (LED-task) αααααΊ ααΆααα·α
αα
ααΆαααααΌα α αΎαα₯α‘αΌαααα LED-task ααΆαααα½αααΆααααααααααα
ααΆαααααααΆααααααα α’αααα’αΆα αααααΎαααααααααα·α αα ααΆα RTOS ααΆααααααααΆαα αα·ααα ααα
ααΆααΆααα·αααΆαα α’αααααααααααα·α αα ααΆαα’αΆα ααΆαααΆααααα»αααααΆαααΆα ααα»ααααααΆαααααΎαααααα·ααΈααααΆααααΆα ααΆαααΆαααΆαα’αααααααααααααΆαααααα·ααΆαα
ααΎαααααΎαααΆαααΆαα½α Radare2
α’ααααα·αα’αΆα αααααΎααααααΎαα ααααα§ααααααααααΌα ααΆ Radare2 αααααα
ααΎααααΈααααΆαααα αααααα·ααΈααααΆααααΆααααααααΎ r2 ααΆααααααααΆααΉαααΎααα ααΌα αααα
radare2 -A -a arm -b 16 -d gdb://localhost:23946 rhino_fw42k6.elf
ααΎαααααΎαααΆαα₯α‘αΌαααα (dc
) αα·αααα’αΆαααΆαααααα·ααααα· (Ctrl+C)α
ααΆα’αα»αα αα
αααααα r2 ααΆααααα αΆαα
αααααααΎααΆαααΆαα½α hardware gdb server αα·α memory layout αααααΆααααααα αΆααα α
ααα»α
ααααα αα·αααα αΆααα·αααααΎαααΆα (ααΆααααααααΆ ds
) ααΎααααααΉαααΆααΆααΉαααααΌαααΆααα½ααα»ααααα»ααααααΆααααααα
αααααΆαα½α Eclipse
αααααΎααα½ααααα»αα
αααααααααΎααααααΆααααααΎαααααα·ααΈααααΆααααΆαααΊααΎααααΈααααΆααααα α»ααααααα·ααΈααααααααααα§αααααααααααα»αααααΌαααΆααααααΎαα αααααΆααααΆαα
αααΆααααΆαα ααΎαααααΉαααααΎαααααα·ααΈαααααα Rhino αααααα α’αααα’αΆα
ααΆαααααααααααααα·ααΈαααααα
ααΎαααΉαααααΎ Eclipse ααΈαααα»αααΆ IDE
ααΎααααΈα±αααααααα·ααΈααααΆααααΆαα’αΆα
αααα»ααααααα·ααΈαααααααααα
ααααααααααααΆαααα
αααα»α Eclipse α’αααααααΌααααααααααΆαααΆαααααα firmware=null
αα
ααΆααααΆααααααααΆα
αΆααααααΎααααααα·ααΈααααΆααααΆαα
binkopycat -g 23946 -n rhino -l user -y modules -p firmware=null,tty_dbg=COM26,tty_bt=COM28
αααα αααΆαααααααα ααΆααααααααααααΆααααα α»α
αα αααα»α Eclipse ααΌαααααΎαααΎααααΊαα»α ααααΎαααΆα - ααΆαααααααα ααΆααααααααααααΆααααα α»α... αα αααα»ααααα’α½α αααααΎα, αα αααα»αααααα ααΆαααααΆααααα α»ααααααααΉα GDB α’αααααααΌαααααααααΆαααααααα ααΆααααααααααααΈ αααααΆαααααα ααΎααααΆαα "αα" αααααΆαααααααααα αα α»αααααα αα·ααααααα·ααΈαααααΆααααααΆααααα α»αα
αα
ααΎααααΆαα "ααααΆααααα α»α" α’αααααααΌααααααΆααααΆααααααααΆ GDBα
${openstm32_compiler_path}arm-none-eabi-gdb
α αΎααααα αΌααααΆαααΆαααααααααααΆααααααΆαααα αααΆαααΈααα GDB (αααΆαααΈα αα·αα ααα)α
αα ααΎααααΆαα "α αΆααααααΎα" α’αααααααΌααααααααΆαααααΆαααΆααααααααΌα ααΆαααααα:
- ααΎααααα’ααααΈα αααα»αααΌαααΆα (ααΌα ααααααΌαααΆααααααα·ααΈαααααααααααΆααα½αααααα»αααααΆααααΌαααΆααααα»ααα αααα»ααααααα·ααΈααααΆααααΆα);
- ααΎααααα’ααααΈα αααα»ααα·αα·ααααααααΆ;
- ααααααααΆααααααααΆααΎαααααΎαααΆαα
set $pc = *0x08000004
(αααααααΆαα α»αααααααα»αααααΌααααα αααααααΈα’αααα αα αΆααα α’αΆααααααΆα0x08000004
- α’αΆααααααΆαααααΌαααΆααααααΆαα»ααα ααΈααα ResetHandler).
ααα α·ααααα»αααΆααααααα·αααΎα’ααααα·αα ααααΆαααα―αααΆααααααα·ααΈααααααααΈ Eclipse ααααααααΎα αααα»αααΌαααΆα ΠΈ ααααΎαααΆαααΆααααααααΆ αα·αα αΆαααΆα αα ααα’α»ααααα αΆαααα
αααααΆααααΈα α»α Debug α’αααα’αΆα ααααΎααΆααααα»αααααααααΆααααα α»αα
- ααΆαααααα·ααααα·αααααΌαααΆααα αΆα α
- α’ααααααααααΆαα½αα
ααα»α
ααα
ααΆαααααααααΆαα. ααΌαααααααΆαααΆα α ααΊα... α ααααααααα... α αΎαα’αααααααΌαααααααα ααΆαα½ααα½αααα α§ααΆα αααααααα·αααΎαα αααα αΆααααααΎααααααα·ααΈααααΆααααα α»αααΆα "ααααΆαααααααααααΆαα "0x0" ααα α‘αΎααααααΆααααααααα·ααααα·ααΆααααααααΆααα αΆα (F5) α
αααα½αα±ααααΆαααααα·ααααΆααα½α
ααΆαααααΆααααΆαααΌαααΎαααΊααΆααΏααα½αα±ααα αΆααα’αΆααααααααΆααα αααααΆααα’αααα’αα·ααααααα§ααααα ααΆα’αΆα ααααΆααααα α»ααααααα·ααΈαααααααααααααΆαα§ααααααα·αα αααααΆααα’αααααααΆαααααΆα ααΆααΊααΆα±ααΆααα½αααΎααααΈααααΎααΆααα·ααΆαααΌαααΆααααα ααααα·ααααααα’αΆα ααααΎαα ααΆαααΌααααΈααααΆαα½αα§ααααααααααα
ααΎαα αααααααα±ααα’αααα―ααααααΌαα§ααααααααααΆααααα½α ααΆαααααααα αα·ααα·αα αααΆααααα αααΎααααα»αααΆααααα α αα·αααααΎαααΆαα
ααααααα αααα»αααα·αααααα’αααΈαααα·αααααααααα’ααααααααααΎα§αααααααααΆααααΆααααααααΉαα ααΎαααΌαα’ααααΎαα’αααα±αααα·ααΆααααΆ α αΎαααΉαααΈαααΆααααα»αααΆαααααΎααααα½αα
ααΆαααα’αααααααΎααααΆαααααααΆαα
α»ααααααααα»ααααααααα’αΆα
α
αΌααα½ααααα»αααΆααααααααα·αααα
ααΎα’αααααααΎαααααα·ααΈααααΆααααΆαααΎααααΈα’αααΈ?
-
αααα»ααααααΎααααααα·ααΈαααααα (ααααΆααααα α»α)
-
αααα»ααααα»αααααΆαααααΆααααααα·ααΈαααααα
-
αααα»αααΎαααααΎαααΆαα αααα (Dendi, Sega, PSP)
-
α’αααΈαααααααα (ααααααα αααα»αααα·ααααα)
α’αααααααΎααααΆαα 7 ααΆααααΆαααααααααα α’αααααααΎααααΆαα α¦α£ ααΆααααααΌαααΆαα αΆαααΆααα
ααΎα’αααααααΎαααααα·ααΈα’αααΈααΎααααΈααααΆααααΆαααΌαααΎα?
-
αααααΌ
-
αααΆαααΈα Unicorn
-
Proteus
-
α’αααΈαααααααα (ααααααα αααα»αααα·ααααα)
α’αααααααΎααααΆαα 6 ααΆααααΆαααααααααα α’αααααααΎααααΆαα α¦α£ ααΆααααααΌαααΆαα αΆαααΆααα
ααΎα’αααα αααααααα’α’αααΈαα αααα»ααααααα·ααΈααααΆααααΆααααα’ααααααα»αααααΎ?
-
αααα»αα ααααΆαααααΏα
-
αααα»αα ααααΆαααΆαααΆααααα½αααααΆαααα‘αΎα/ααΎαααααΎαααΆα
-
αααα»αα ααααΆααααααΎαααααααααααααααΆααααΆαααααΎα’ααααααααααΆαα½ααααααα·ααΈααααΆααααΆα (API, hooks)
-
αααα»ααααααΆαα α·αααααΉαα’αααΈαααΆααα’ααα
-
α’αααΈαααααααα (ααααααα αααα»αααα·ααααα)
α’αααααααΎααααΆαα 8 ααΆααααΆαααααααααα α’αααααααΎααααΆαα 1 ααΆααααααΌαααΆαα αΆαααΆααα
ααααα: www.habr.com