ืืื ืึท ืืืื ืคืื ืืขืจ ืืึทืืขืืขื ืืฉ 0x0A DC7831
ืืื ืืขื ืึทืจืืืงื ืืืจ ืืืขืื ืืึทืฉืจืืึทืื ืืื ืฆื ืืืืคื ืื ืืืื ืคืืจืืืืึทืจืข ืืื ืื ืขืืืืึทืืึธืจ, ืืึทืืืืึทืื ืื ืืขืจืึทืงืฉืึทื ืืื ืื ืืืืืืืขืจ ืืื ืืืจืืคืืจื ืึท ืงืืืื ืืื ืึทืืืฉ ืึทื ืึทืืืกืืก ืคืื ืื ืคืืจืืืืึทืจืข.
ืคึผืจืขืืืกืืึธืจื
ื ืืึทื ื ืฆืืึทื ืฆืืจืืง ืืื ืึท ืืึทืืึทืงืกื ืืืืึทื ืืืืึทื ืึทืืืขืง
ื ืคึผืึธืจ ืคืื ืืึธืจื ืฆืืจืืง ืืื ืืื ืืืขืจ ืืึทืืึธืจืึทืืึธืจืืข ืขืก ืืื ืืขืืืขื ืึท ื ืืื ืฆื ืคืึธืจืฉื ืื ืคืืจืืืืึทืจืข ืคืื โโืึท ืืืื. ืื ืคืืจืืืืึทืจืข ืืื ืงืึทืืคึผืจืขืกื ืืื ืึทื ืคึผืึทืงื ืืื ืึท ืืึธืึธืืืึธืึทืืขืจ. ืขืจ ืืึธื ืืึธืก ืืขืืึธื ืืืืฃ ืึท ืืืืขืจ ืงืึธืืคึผืืืฆืืจืื ืืืคื, ืขืืืขืืข ืืึธื ืืืืขืจืืขืจืืงื ืื ืืึทืื ืืื ืืึผืจืื. ืืื ืื ืคืืจืืืืึทืจืข ืืื ืืขืืึธืื ืึทืงืืืืืื ืื ืืขืจืึทืงืืื ืืื ืื ืคึผืขืจืืคืขืจืึทืืก. ืืื ืึทืืข ืืขื ืืืืฃ ืื MIPS ืืึทืจืฅ.
ืคึฟืึทืจ ืึธืืืขืงืืืื ืกืืืืช, ืื ืื ืืืฆื ืขืืืืึทืืึธืจืก ืืึธืื ื ืืฉื ืคึผืึทืกื ืืื ืื, ืึธืืขืจ ืืืจ ื ืึธื ืืขืืืืื ืฆื ืืืืคื ืื ืงืึธื. ืืขืจื ืึธื ืืืจ ืืึทืฉืืึธืกื ืฆื ืืึทืื ืืื ืืืขืจ ืืืืืขื ืข ืขืืืืึทืืึธืจ, ืืืึธืก ืืืึธืื ืืึธื ืื ืืื ืืืื ืืื ืืึธืื ืืื ืื ืึทื ืคึผืึทืง ืื ืืืืคึผื ืคืืจืืืืึทืจืข. ืืืจ ืืขืคืจืืืื ืขืก ืืื ืขืก ืืขืืจืืขื. ืืืจ ืืขืืึทื ืง, ืืืึธืก ืืืื ืืืจ ืืืืื ืคึผืขืจืืคืขืจืึทืืก ืฆื ืืืื ืืืจืืคืืจื ืื ืืืืคึผื ืคืืจืืืืึทืจืข. ืขืก ืืื ื ืืฉื ืฉืึทืื ืืืืขืจ ืคืื - ืืื ืขืก ืืืื ืืขืืจืืขื. ืืืจ ืืขืืึทื ืง ืืืืืขืจ ืืื ืืึทืฉืืึธืกื ืฆื ืืึทืื ืึท ืคืื-ืคืืขืืืฉื ืขืืืืึทืืึธืจ.
ืืขืจ ืจืขืืืืืึทื ืืื ืืขืืืขื ืึท ืงืึธืืคึผืืืืขืจ ืกืืกืืขื ืขืืืืึทืืึธืจ
ืคืืจืืืืก ืงืึธืคึผืืงืึทื?
ืขืก ืืื ืึท ืฉืคึผืื ืืื ืืืขืจืืขืจ.
- ืงืึทืคึผืืงืึทื (ืขื ืืืืฉ, ืกืืืกืืึทื ืืืื [หkษpษชkรฆt]) - ื ืึธืืืึทืื, ื ืึธืืืึทืื
- ืงืึทืฅ (ืขื ืืืืฉ, ื ืึธืืขื [หkรฆt]) - ืงืึทืฅ, ืงืึทืฅ - ืื ืืึทืืืืกืืข ืืืึทืข ืคืื โโโโืืืื ืขืจ ืคืื ืื ืงืจืืืืืขืจื ืคืื ืื ืคึผืจืืืขืงื
- ืืขืจ ืืจืืื "ืง" ืืื ืคึฟืื ืื ืงืึธืืืื ืคึผืจืึธืืจืึทืืืื ื ืฉืคึผืจืึทื
Copycat
ืืืขื ืงืจืืืืืื ื ืื ืขืืืืึทืืึธืจ, ืืืืขืจ ืกืคึผืขืฆืืคืืฉ ืฆืืื ืืขื ืขื ืืึทืฉืืืื:
- ืื ืคืืืืงืืื ืฆื ืืขืฉืืืื ื ืฉืึทืคึฟื ื ืืึท ืคึผืขืจืืคืขืจืึทืืก, ืืึทืืืฉืืื, ืคึผืจืึทืกืขืกืขืจ ืงืึธืจืขืก;
- ืื ืคืืืืงืืื ืฆื ืึทืกืขืืืึทื ืึท ืืืืจืืืึทื ืืืื ืคืื ืคืึทืจืฉืืื ืืึทืืืฉืืื;
- ืื ืคืืืืงืืื ืฆื ืืึธืื ืงืืื ืืืื ืขืจื ืืึทืื (ืคืืจืืืืึทืจืข) ืืื ืืขืจ ืืึผืจืื ืคืื ืึท ืืืืจืืืึทื ืืืื;
- ืคืืืืงืืื ืฆื ืึทืจืืขืื ืืื ืกื ืึทืคึผืฉืึทืฅ (ืกื ืึทืคึผืฉืึทืฅ ืคืื ืื ืกืืกืืขื ืฉืืึทื);
- ืื ืคืืืืงืืื ืฆื ืื ืืขืจืึทืงื ืืื ืื ืขืืืืึทืืึธืจ ืืืจื ืื ืืขืืืื-ืืื ืืขืืืืืขืจ;
- ืคืืึทื ืืึธืืขืจื ืฉืคึผืจืึทื ืคึฟืึทืจ ืึทื ืืืืืงืืื ื.
ืืื ืึท ืจืขืืืืืึทื, Kotlin ืืื ืืืืกืืขืจืืืืืื ืคึฟืึทืจ ืืืคึผืืึทืืขื ืืืืฉืึทื, ืื ืืืืึธืืืก ืึทืจืงืึทืืขืงืืฉืขืจ (ืืึธืก ืืื ืืืขื ืืึทืืืฉืืื ืืืขืจืืขืื ืืื ืืขืืขืจ ืื ืืขืจืข ืืืจื ืืืืจืืืึทื ืืึทืื ืืืกืขืก), JSON ืืื ืื ืืืื ืืึทืฉืจืืึทืืื ื ืคึฟืึธืจืืึทื, ืืื GDB RSP ืืื ืืขืจ ืคึผืจืึธืืึธืงืึธื ืคึฟืึทืจ ืื ืืขืจืึทืงืฉืึทื ืืื ืื ืืืืืืืขืจ.
ืื ืืืืืงืืื ื ืืื ืืขืืื ืืขื ืืืืฃ ืคึฟืึทืจ ืึท ืืืกื ืืืืขืจ ืฆืืืื ืืึธืจ ืืื ืืื ืึทืงืืืืืื ืึธื ืืึธืื ื. ืืขืฉืึทืก ืืขื ืฆืืื, MIPS, x86, V850ES, ARM ืืื PowerPC ืคึผืจืึทืกืขืกืขืจ ืงืึธืจืขืก ืืขื ืขื ืืืคึผืืึทืืขื ืึทื.
ืืขืจ ืคืจืืืขืงื ืืืืงืกื ืืื ืขืก ืืื ืฆืืื ืขืก ืฆื ืคืืจืฉืืขืื ืคืืจื ืืจืืืื ืฆืืืืจ. ืืืจ ืืืขืื ืืึทืื ืึท ืืืืืืื ืืึทืฉืจืืึทืืื ื ืคืื ืื ืคึผืจืืืขืงื ืฉืคึผืขืืขืจ, ืึธืืขืจ ืืืฆื ืืืจ ืืืขืื ืคืึธืงืืก ืืืืฃ ื ืืฆื Kopycat.
ืคึฟืึทืจ ืื ืืขืจืกื ืืืืขืืืืืืง, ืึท ืคึผืจืึธืืึธ ืืืขืจืกืืข ืคืื โโืื ืขืืืืึทืืึธืจ ืงืขื ืขื ืืืื ืืึทืื ืืึธืืืื ืคึฟืื
ืจืืื ืึธ ืืื ืื ืขืืืืึทืืึธืจ
ืืึธืืืจ ืฆืืจืืงืจืืคื ืึทื ืคืจืืขืจ ืคึฟืึทืจ ืื SMARTRHINO-2018 ืืืฆืื ื, ืึท ืคึผืจืึธืืข ืืืื "ืจืืื ืึธืกืขืจืึธืก" ืืื ืืขืืืขื ืืืฉืืคื ืคึฟืึทืจ ืืขืจื ืขื ืคืึทืจืงืขืจื ืื ืืฉืขื ืืขืจืืข ืกืงืืื. ืืขืจ ืคึผืจืึธืฆืขืก ืคืื ืกืืึทืืืง ืคืืจืืืืึทืจืข ืึทื ืึทืืืกืืก ืืื ืืืกืงืจืืืื ืืื
ืืืฆื ืืึธืืืจ ืคึผืจืืืืจื ืฆื ืืืืื "ืกืคึผืืงืขืจื" ืืื ืืืืคื ืื ืคืืจืืืืึทืจืข ืืื ืื ืขืืืืึทืืึธืจ.
ืืืจ ืืืขืื ืืึทืจืคึฟื:
1) Java 1.8
2) ืคึผืืืืึธื ืืื ืืึธืืืืข
ืคึฟืึทืจ ืืืื ืืึธืื:
1)
2)
ืคึฟืึทืจ ืืื ืืงืก:
1) ืกืึธืงืึทื
ืืืจ ืงืขื ืขื ื ืืฆื Eclipse, IDA Pro ืึธืืขืจ radare2 ืืื ืึท GDB ืงืืืขื ื.
ืืื ืืื ืขืก ืึทืจืืขื?
ืืื ืกืืจ ืฆื ืืืจืืคืืจื ืคืืจืืืืึทืจืข ืืื ืื ืขืืืืึทืืึธืจ, ืขืก ืืื ื ืืืืืง ืฆื "ืึทืกืขืืืึทื" ืึท ืืืืจืืืึทื ืืืื, ืืืึธืก ืืื ืึทื ืึทื ืึทืืึธื ืคืื ืึท ืคืึทืงืืืฉ ืืืื.
ืื ืคืึทืงืืืฉ ืืืื ("ืจืืื ืึธ") ืงืขื ืขื ืืืื ืืขืืืืื ืืื ืื ืืืึธืง ืืืึทืืจืึทืืข:
ืืขืจ ืขืืืืึทืืึธืจ ืืื ืึท ืืึทืืืฉืึทืืขืจ ืกืืจืืงืืืจ ืืื ืื ืืขืฆื ืืืืจืืืึทื ืืืื ืงืขื ืขื ืืืื ืืืกืงืจืืืื ืืื ืึท 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"]
]
}
ืืึทืฆืึธืื ืืคืืขืจืงืืึทืืงืืึทื ืฆื ืื ืคึผืึทืจืึทืืขืืขืจ ืคืืจืืืืึทืจืข ืืื ืืขืจ ืึธืคึผืืืืืื ื params ืืื ืืขืจ ื ืึธืืขื ืคืื ืึท ืืขืงืข ืืืึธืก ืงืขื ืขื ืืืื ืืึธืืืื ืืื ืึท ืืืืจืืืึทื ืืืื ืืื ืคืืจืืืืึทืจืข.
ืื ืืืืจืืืึทื ืืืื ืืื ืืืื ืื ืืขืจืึทืงืฉืึทื ืืื ืื ืืืืคึผื ืึธืคึผืขืจืืืืื ื ืกืืกืืขื ืงืขื ืขื ืืืื ืจืขืคึผืจืืืขื ืืื ืืืจื ืื ืคืืืืขื ืืข ืืืึทืืจืึทืืข:
ืื ืงืจืึทื ื ืืขืกื ืืืึทืฉืคึผืื ืคืื ืื ืขืืืืึทืืึธืจ ืื ืืืึทืืืื ืื ืืขืจืึทืงืฉืึทื ืืื ืื COM ืคึผืึธืจืฅ ืคืื ืื ืืืืคึผื ืึทืก (ืืืืึทื UART ืืื UART ืคึฟืึทืจ ืื ืืืืขืืึธืึธืื ืืึธืืืืข). ืื ืงืขื ืขื ืืืื ืคืึทืงืืืฉ ืคึผืึธืจืฅ ืฆื ืืืึธืก ืืขืืืืกืขืก ืืขื ืขื ืงืึธื ื ืขืงืืขื ืึธืืขืจ ืืืืจืืืึทื ืงืึทื ืคึผืึธืจืฅ (ืคึฟืึทืจ ืืขื ืืืจ ื ืึธืจ ืืึทืจืคึฟื com0com/socat).
ืขืก ืืขื ืขื ืืขืจืืืืึทื ืฆืืืื ืืืืคึผื ืืืขืื ืฆื ืื ืืขืจืึทืงื ืืื ืื ืขืืืืึทืืึธืจ ืคึฟืื ืื ืึทืจืืืก:
- GDB RSP ืคึผืจืึธืืึธืงืึธื (ืืืื, ืื ืืืฉืืจืื ืืืึธืก ืฉืืืฆื ืืขื ืคึผืจืึธืืึธืงืึธื ืืขื ืขื Eclipse / IDA / radare2);
- ืื ืขืจืืขื ืขืืืืึทืืึธืจ ืืึทืคึฟืขืื ืฉืืจื (Argparse ืึธืืขืจ Python).
ืืืืจืืืึทื ืงืึทื ืคึผืึธืจืฅ
ืืื ืกืืจ ืฆื ืื ืืขืจืึทืงื ืืื ืื UART ืคืื ืึท ืืืืจืืืึทื ืืืื ืืืืฃ ืื ืืืืข ืืึทืฉืื ืืืจื ืึท ืืืึธืงืืึทื, ืืืจ ืืึทืจืคึฟื ืฆื ืฉืึทืคึฟื ืึท ืคึผืึธืจ ืคืื ืคึฟืึทืจืืื ืื ืืืืจืืืึทื ืงืึทื ืคึผืึธืจืฅ. ืืื ืืื ืืืขืจ ืคืึทื, ืืืื ืคึผืึธืจื ืืื ืืขื ืืฆื ืืืจื ืื ืขืืืืึทืืึธืจ, ืืื ืื ืจืืข ืืืจื ืึท ืืืึธืงืืึทื ืคึผืจืึธืืจืึทื (PuTTY ืึธืืขืจ ืคืึทืจืฉืืขืื):
ื ืืฆื com0com
ืืืืจืืืขื ืงืึทื ืคึผืึธืจืฅ ืืขื ืขื ืงืึทื ืคืืืืขืจื ืืื ืื ืกืขืืึทืคึผ ื ืืฆื ืคืื ืื com0com ืงืื (ืงืึทื ืกืึธืื ืืืขืจืกืืข - C: ืคึผืจืึธืืจืึทื ืืขืงืขืก (x86) com0comsetupั.exe, ืึธืืขืจ GUI ืืืขืจืกืืข - C: ืคึผืจืึธืืจืึทื ืคืืืขืก (ืงืก86) com0comsetupg.exe):
ืงืืง ืื ืืึธืงืกืขืก ืืขืื ืืึทืคืขืจ ืึธืืืืขืจืจืื ืคึฟืึทืจ ืึทืืข ืืืฉืืคื ืืืืจืืืึทื ืคึผืึธืจืฅ, ืึทื ืืขืจืฉ ืืขืจ ืขืืืืึทืืึธืจ ืืืขื ืืืึทืจืื ืคึฟืึทืจ ืึท ืขื ืืคืขืจ ืคืื ืื COM ืคึผืึธืจื.
ื ืืฆื ืกืึธืงืึทื
ืืืืฃ UNIX ืกืืกืืขืืขื, ืืืืจืืืึทื ืงืึทื ืคึผืึธืจืฅ ืืขื ืขื ืืืืืึธืืึทืืืฉ ืืืฉืืคื ืืืจื ืื ืขืืืืึทืืึธืจ ื ืืฆื ืื ืกืึธืงืึทื ื ืืฆื ืฆื ืืึธื ืืึธืก, ื ืึธืจ ืกืคึผืขืฆืืคืืฆืืจื ืื ืคึผืจืขืคืืงืก ืืื ืื ืคึผืึธืจื ื ืึธืืขื ืืืขื ืืืจ ืึธื ืืืืื ืืขื ืขืืืืึทืืึธืจ socat:
.
ืืื ืขืจืืขืืขืจ ืืึทืคึฟืขืื ืฉืืจื ืฆืืืื ื (Argparse ืึธืืขืจ Python)
ืืื ื Kopycat ืืื ืึท ืงืึทื ืกืึธืื ืึทืคึผืืึทืงืืืฉืึทื, ืืขืจ ืขืืืืึทืืึธืจ ืืื ืฆืืืื ืืึทืคึฟืขืื ืฉืืจื ืฆืืืื ื ืึธืคึผืฆืืขืก ืคึฟืึทืจ ืื ืืขืจืึทืงืืื ื ืืื ืืืึทื ืึทืืืืฉืขืงืฅ ืืื ืืืขืจืืึทืืึทืื: Argparse ืืื Python.
Argparse ืืื ืึท CLI ืืขืืืื ืืื Kopycat ืืื ืืื ืฉืืขื ืืืง ืื ืืืฆื ืคึฟืึทืจ ืึทืืขืืขื.
ืึทื ืึธืืืขืจื ืึทืืืื CLI ืืื ืื ืคึผืืืืึธื ืืืขืจืืขืฆืขืจ. ืฆื ื ืืฆื ืขืก, ืืืจ ืืึทืจืคึฟื ืฆื ืื ืกืืึทืืืจื ืื Jep Python ืืึธืืืืข ืืื ืงืึทื ืคืืืืขืจ ืื ืขืืืืึทืืึธืจ ืฆื ืึทืจืืขืื ืืื Python (ืื ืคึผืืืืึธื ืืืขืจืืขืฆืขืจ ืืื ืกืืึทืืืจื ืืืืฃ ืื ืืึทื ืืฆืขืจ ืก ืืืืคึผื ืกืืกืืขื ืืืขื ืืืื ืืขืืืืื ื).
ืื ืกืืึธืืื ื ืื Python ืืึธืืืืข Jep
ืืื ืืขืจ ืืื ืืงืก ืืืฉืขืคึผ ืงืขื ืขื ืืืื ืืื ืกืืึทืืืจื ืืืจื ืคึผืืคึผ:
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.
ืืื ืื ืขืืืืึทืืึธืจ ืคึผืขืงื ืืขืงืข ืคึฟืึทืจ ืืืื ืกืืกืืขื (copycat.bat - ืคึฟืึทืจ Windows, copycat - ืคึฟืึทืจ ืืื ืืงืก) ืฆื ืืขืจ ืจืฉืืื ืคืื ืคึผืึทืจืึทืืขืืขืจืก DEFAULT_JVM_OPTS
ืืืืื ืึทื ื ืึธื ืคึผืึทืจืึทืืขืืขืจ Djava.library.path
- ืขืก ืืืื ืึทื ืืืึทืืื ืืขื ืืจื ืฆื ืื ืืื ืกืืึทืืืจื ืืืฉืขืคึผ ืืึธืืืืข.
ืืขืจ ืจืขืืืืืึทื ืคึฟืึทืจ Windows ืืึธื ืืืื ืึท ืฉืืจื ืืื ืืึธืก:
set DEFAULT_JVM_OPTS="-XX:MaxMetaspaceSize=256m" "-XX:+UseParallelGC" "-XX:SurvivorRatio=6" "-XX:-UseGCOverheadLimit" "-Djava.library.path=C:/Python27/Lib/site-packages/jep"
ืืึธื ืืฉืื ื ืงืึธืคึผืืงืึทื
ืืขืจ ืขืืืืึทืืึธืจ ืืื ืึท ืงืึทื ืกืึธืื JVM ืึทืคึผืืึทืงืืืฉืึทื. ืืขืจ ืงืึทืืขืจ ืืื ืืืจืืืขืงืึธืื ืืืจื ืื ืึธืคึผืขืจืืืืื ื ืกืืกืืขื ืืึทืคึฟืขืื ืฉืืจื ืฉืจืืคื (ืฉ / ืงืื).
ืืึทืคึฟืขืื ืฆื ืืืืคื ืืื ืืขืจ Windows:
binkopycat -g 23946 -n rhino -l user -y library -p firmware=firmwarerhino_pass.bin,tty_dbg=COM26,tty_bt=COM28
ืืึทืคึฟืขืื ืฆื ืืืืคื ืืื ืืขืจ ืืื ืืงืก ื ืืฆื ืื ืกืึธืงืึทื ื ืืฆื:
./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 ืืขื ืขื ืืืืจืืืึทื ืงืึทื ืคึผืึธืจืฅ.
ืืื ืึท ืจืขืืืืืึทื, ืึท ืคึผืื ืืืขื ืืืขื ืืืื ืืขืืืืื 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
ืฆื ืคืึทืจืคึผืึธืฉืขืืขืจื ืืขืกืืื ื, ืืืจ ื ืืฆื ืื ืจืืื ืึธ ืคืืจืืืืึทืจืข ืืื ืื ืืงืืจ ืืขืงืข ืคึฟืึทืจ ืึทื ืึทืืืกืืก ืืื IDA ืืื ืื ืคืึธืจืขื
ืืืจ ืงืขื ื ืืืื ื ืืฆื ืื ืืืืคึผื ืคืืจืืืืึทืจืข ืึธื ืืขืืึท ืืื ืคึฟืึธืจืืึทืฆืืข.
ื ืึธื ืืึธื ืืฉืื ื Kopycat ืืื IDA Pro, ืืื ืื ืืขืืืืืขืจ ืืขื ืื ืืืื ืฆื ืื ื ืืืขืจ "ืืึทืฉืืืืขื ืืืืืืืขืจ ..."ืืื ืืืืกืงืืืึทืื"ืืืืึทื ืืื ืืืืืืืขืจ". ืืืืึทืืขืจ, ืฉืืขืื ืื ืงืฉืจ: ืืขื ืื ืืขืืืืืขืจ - ืคึผืจืึธืฆืขืก ืึธืคึผืฆืืขืก ...
ืฉืืขืื ืื ืืืึทืืืขืก:
- ืึทืคึผืคึผืืืงืึทืืืึธื - ืงืืื ืืืขืจื
- ืืึธืกืื ืึทืืข: 127.0.0.1 (ืึธืืขืจ ืื IP ืึทืืจืขืก ืคืื ืื ืืืืึทื ืืึทืฉืื ืืื Kopycat ืืื ืคืืืกื ืืืง)
- ืคึผืึธืจื: ืงืกื ืืืงืก
ืืืฆื ืื ืืืืึทืืื ื ืงื ืขืคึผื ืืื ืืืจืขืืืืื (F9 ืฉืืืกื):
ืืื ืขืก ืฆื ืคืึทืจืืื ืื ืฆื ืื ืืขืืืืืขืจ ืืึธืืืืข ืืื ืื ืขืืืืึทืืึธืจ. IDA ืืืื ืืื ืืืืึทืืื ื ืืึธืืข, ื ืึธื ืคึฟืขื ืฆืืขืจ ืืืขืจื ืืืจืขืืืืื: ืืื ืคึฟืึธืจืืึทืฆืืข ืืืขืื ืจืขืืืฉืืกืืขืจื, ืืืขืื ืืขื ืึธื ืืืืื.
ืืืฆื ืืืจ ืงืขื ืขื ื ืืฆื ืึทืืข ืื ื ืึธืจืืึทื ืคึฟืขืึดืงืืืื ืคืื ืื ืืืืืืืขืจ:
- ืฉืจืื-ืืืจื-ืฉืจืื ืืืจืืคืืจืื ื ืคืื ืื ืกืืจืึทืงืฉืึทื ื (ืฉืจืื ืืื ะธ ืืจืขืื ืืืืขืจ - ืฉืืืกืืขื F7 ืืื F8 ืจืืกืคึผืขืงืืืืืื);
- ืกืืึทืจืืื ื ืืื ืคึผืึธืืืื ื ืืืจืืคืืจืื ื;
- ืงืจืืืืืื ื ืืจืืืงืคึผืึธืื ืฅ ืคึฟืึทืจ ืืืืืข ืงืึธื ืืื ืืึทืื (F2 ืฉืืืกื).
ืงืึทื ืขืงืืื ื ืฆื ืึท ืืืืืืืขืจ ืืื ื ืืฉื ืืืื ืขื ืคืืืกื ืืืง ืื ืคืืจืืืืึทืจืข ืงืึธื. ืื ืงืจืึทื ื ืืืจืืคืืจืื ื ืฉืืขืืข ืืืื ืืืื ืื ืึทืืจืขืก 0x08006A74
- ืึธื ืืืื ืคืื ืคึฟืื ืงืฆืืข Reset_Handler. ืืืื ืืืจ ืืขืืืืข ืึทืจืึธืคึผ ืื ืืืกืืื ื, ืืืจ ืงืขื ืขื ืืขื ืื ืคืื ืงืฆืืข ืจืืคื ืืืืคึผื. ืืืจ ืงืขื ืขื ืฉืืขืื ืืขื ืืืืคึฟืขืจ ืืืืฃ ืืขื ืฉืืจื (ืึทืืจืขืก 0x08006ABE
) ืืื ืืืจืืคืืจื ืื ืึธืคึผืขืจืึทืฆืืข ืืืืคื ืืื ืืืืคึฟืขืจ (ืฉืืืกื F4).
ืืขืจื ืึธื ืืืจ ืงืขื ื ืืจืืงื F7 ืฆื ืึทืจืืึทื ืื ืคืื ืงืฆืืข ืืืืคึผื.
ืืืื ืืืจ ืืืืคื ืื ืืึทืคึฟืขื ืคืึธืจืืขืฆื ืคึผืจืึธืฆืขืก (F9 ืฉืืืกื), ืืื ืื "ืืืืข ืืืึทืจืื" ืคึฟืขื ืฆืืขืจ ืืืขื ืืขืจืฉืืึทื ืขื ืืื ืึท ืืืื ืงื ืขืคึผื ืืคืืขื ืืขื:
ืืืขื ืืืจ ืืจืืงื ืืคืืขื ืืขื ืื ืืืจืืคืืจืื ื ืคืื ืื ืคืืจืืืืึทืจืข ืงืึธื ืืื ืกืืกืคึผืขื ืืขื ืืื ืงืขื ืขื ืืืื ืคืืจืืืืื ืคึฟืื ืืขืจ ืืขืืืืงืขืจ ืึทืืจืขืก ืืื ืื ืงืึธื ืืื ืขืก ืืื ืื ืืขืจืึทืคึผืืื.
ืืืื ืืืจ ืคืึธืจืืขืฆื ืฆื ืืืจืืคืืจื ืืขื ืงืึธื, ืืืจ ืืืขื ืืขื ืื ืคืืืืขื ืืข ืฉืืจืืช ืืื ืื ืืขืจืืื ืึทืืก ืคืืจืืื ืื ืฆื ืื ืืืืจืืืึทื ืงืึทื ืคึผืึธืจืฅ:
ืื ืืืึทืืืึทื ืคืื ืื "ืฉืืึทื ืืืืคึผืึทืก" ืฉืืจื ืื ืืืงืืืฅ ืึทื ืื ืืืืจืืืึทื ืืืืขืืึธืึธืื ืืึธืืืืข ืืื ืกืืืืืฉื ืฆื ืื ืืึธืืข ืคืื โโืจืืกืืืืื ื ืืึทืื ืคืื ืื ืืึทื ืืฆืขืจ 'ืก ืงืึทื ืคึผืึธืจื.
ืืืฆื ืืื ืื ืืืืขืืึธืึธืื ืืืึธืงืืึทื (COM29 ืืื ืื ืืืื) ืืืจ ืงืขื ืขื ืึทืจืืึทื ืงืึทืืึทื ืื ืืื ืืืื ืืื ืื ืจืืื ืึธ ืคึผืจืึธืืึธืงืึธื. ืคึฟืึทืจ ืืืึทืฉืคึผืื, ืื "MEOW" ืืึทืคึฟืขื ืืืขื ืฆืืจืืงืงืืืขื ืื ืฉืืจืืงื "ืืืจ-ืืืจ" ืฆื ืื ืืืืขืืึธืึธืื ืืืึธืงืืึทื:
ื ืึธืืืึทืื ืืืจ ื ืืฉื ืืึธืจ
ืืืขื ืืืจ ืืืืขื ืึทื ืขืืืืึทืืึธืจ, ืืืจ ืงืขื ืขื ืงืืืึทืื ืื ืืืจืื ืคืื ืืขืืึทื / ืขืืืึทืืืืฉืึทื ืคืื ืึท ืืึทืืื ืืขืจ ืืืื. ืคึฟืึทืจ ืืืึทืฉืคึผืื, ืื ืืืืขืืึธืึธืื ืืึธืืืืข ืงืขื ืขื ืืืื ืขืืืึทืืืืืื ืืื ืคืึทืจืฉืืืขื ืข ืืืขืื:
- ืื ืืืื ืืื ืืึธืจ ืขืืืึทืืืืืื ืืื ืึท ืคืื ืืึทื ื ืคืื ืงืึทืืึทื ืื;
- AT ืงืึทืืึทื ืื ืืขื ืขื ืขืืืึทืืืืืื, ืืื ืื ืืึทืื ืืืึทื ืืื ืืืงืืืขื ืคึฟืื ืื COM ืคึผืึธืจื ืคืื ืื ืืืืคึผื ืกืืกืืขื;
- ืื ืืืืจืืืึทื ืืืื ืืื ืืึทื ืฅ ืืึทืื ืจืืืขืจืขืงืฉืึทื ืฆื ืื ืคืึทืงืืืฉ ืืืื;
- ืืื ืึท ืคึผืฉืื ืฉืืื ืืืึธืก ืฉืืขื ืืืง ืงืขืจื "ืืื".
ืื ืงืจืึทื ื ืืืขืจืกืืข ืคืื โโืื ืขืืืืึทืืึธืจ ื ืืฆื ืื ืจืืข ืฆืืืึทื ื - ืื ืืืืจืืืึทื ืืืืขืืึธืึธืื ืืึธืืืืข ืคึผืขืจืคืึธืจืื ืงืึทื ืคืืืืขืจืืืฉืึทื, ื ืึธื ืืืึธืก ืขืก ืกืืืืืฉืื ืฆื ืื ืืึธืืข ืคืื โโ"ืคึผืจืึธืงืกืืื ื" ืืึทืื ืคึฟืื ืื COM ืคึผืึธืจื ืคืื ืื ืืืืคึผื ืกืืกืืขื ืฆื ืื UART ืคึผืึธืจื ืคืื ืื ืขืืืืึทืืึธืจ.
ืืื ืก ืืึทืืจืึทืืื ืื ืืขืืืขืืงืืื ืคืื ืคึผืฉืื ืื ืกืืจืึทืืขื ืืืืฉืึทื ืคืื ืื ืงืึธื ืืื ืคืึทื ืขืืืขืืข ืืืื ืคืื ืื ืคึผืขืจืืคืขืจืืข ืืื ื ืืฉื ืืืคึผืืึทืืขื ืึทื. ืคึฟืึทืจ ืืืึทืฉืคึผืื, ืืืื ืึท ืืืึทืืขืจ ืคืึทืจืึทื ืืืืึธืจืืืขื ืคึฟืึทืจ ืงืึทื ืืจืึธืืืื ื ืืึทืื ืึทืจืืืขืจืคืืจื ืฆื ืืืึท ืืื ื ืืฉื ืืืฉืืคื (ืื ืืฉืขืง ืืื ืืืจืืืขืงืึธืื ืืื ืื ืคืื ืงืฆืืข ws2812b_wait, ืจืึทืกืคึผืึธืืึธืืืฉืขื ื ืื ืคึฟืึทืจ ืึทืืจืขืกื 0x08006840
), ืืขืืึธืื ืื ืคืืจืืืืึทืจืข ืืืขื ืฉืืขื ืืืง ืืืึทืจืื ืคึฟืึทืจ ืื ืคืึธื ืฆื ืืืื ืืึทืฉืืขืืืง ืคืึทืจื ืืืขืืืืื ืืืึท 0x200004C4
ืืืึธืก ืืืืืื ืื ืึทืงืืึทืคึผืึทื ืกื ืคืื ืื DMA ืืึทืื ืฉืืจื:
ืืืจ ืงืขื ืขื ืืึทืงืืืขื ืึทืจืื ืืขื ืกืืืืึทืฆืืข ืืืจื ืืึทื ืืืึทืื ืืึทืฉืืขืืืง ืื ืคืึธื ืคืึทืจื ืืืขื ืืื ื ืึธื ืื ืกืืึธืืื ื ืขืก. ืืื IDA Pro, ืืืจ ืงืขื ืขื ืืึทืื ืึท ืคึผืืืืึธื ืคึฟืื ืงืฆืืข ืืื ืจืืคื ืขืก ืืื ืึท ืืจืืืงืคึผืืื ื, ืืื ืฉืืขืื ืื ืืจืืืงืคึผืืื ื ืืื ืืื ืื ืงืึธื ื ืึธื ืฉืจืืืื ืื ืืืขืจื 1 ืฆื ืื ืคืึธื ืคืึทืจื ืืืขื.
ืืจืืืงืคึผืืื ื ืืึทื ืืืขืจ
ืขืจืฉืืขืจ, ืืึธืื ืืื ืื ืฉืึทืคึฟื ืึท ืคึผืืืืึธื ืคืื ืงืฆืืข ืืื IDA. ืืขื ืื ืืขืงืข - ืกืงืจืืคึผื ืืึทืคึฟืขื ...
ืืืื ืึท ื ืืึทืข ืกื ืืคึผืึทื ืืื ืืขืจ ืจืฉืืื ืืืืฃ ืื ืืื ืงืก, ืืขืื ืขืก ืึท ื ืึธืืขื (ืืืฉื, ืืคึผื),
ืืื ืื ืืขืงืกื ืคืขืื ืืืืฃ ืื ืจืขืื, ืึทืจืืึทื ืื ืคึฟืื ืงืฆืืข ืงืึธื:
def skip_dma():
print "Skipping wait ws2812..."
value = Byte(0x200004C4)
if value == 1:
PatchDbgByte(0x200004C4, 0)
return False
ื ืึธื ืืขื, ืืื ืืืืคื ืืื ื ืึธืขื ื ืื ืฉืจืืคื ืคึฟืขื ืฆืืขืจ.
ืืืฆื ืืึธืื ืืื ืื ืืืื ืฆื ืื ืงืึธื ืืื 0x0800688A
, ืฉืืขืื ืึท ืืจืืืงืคึผืืื ื (F2 ืฉืืืกื), ืจืขืืึทืืืจื ืขืก (ืงืึธื ืืขืงืกื ืืขื ืื ืจืขืืึทืืืจื ืื ืืจืขืื ืคืื ื...), ืืึธื ื ืื ืคืึทืจืืขืกื ืฆื ืฉืืขืื ืื ืฉืจืืคื ืืืคึผ ืฆื ืคึผืืืืึธื:
ืืืื ืื ืงืจืึทื ื ืคืึธื ืืืขืจื ืคืึทืจื ืืืขื ืืงืืืึทืื 1, ืืืจ ืืึธื ืืืกืคืืจื ืื ืคึฟืื ืงืฆืืข skip_dma ืืื ืื ืฉืจืืคื ืฉืืจื:
ืืืื ืืืจ ืืืืคื ืื ืคืืจืืืืึทืจืข ืคึฟืึทืจ ืืืจืืคืืจืื ื, ืืืจ ืงืขื ืขื ืืขื ืื ืืจืืืขืจืื ื ืคืื ืื ืืจืืืงืคึผืืื ื ืืึทื ืืืขืจ ืงืึธื ืืื ืื IDA ืคึฟืขื ืฆืืขืจ ืจืขืืืืืึทื ืืืจื ืฉืืจื Skipping wait ws2812...
. ืืืฆื ืื ืคืืจืืืืึทืจืข ืืืขื ื ืืฉื ืืืึทืจืื ืคึฟืึทืจ ืื ืคืึธื ืฆื ืืืื ืืึทืฉืืขืืืง ืคืึทืจื ืืืขื.
ืื ืืขืจืึทืงืฉืึทื ืืื ืื ืขืืืืึทืืึธืจ
ืขืืืึทืืืืฉืึทื ืคึฟืึทืจ ืื ืฆืืืื ืคืื ืขืืืึทืืืืฉืึทื ืืื ืึทื ืืืืงืื ืฆื ืคืึทืจืฉืึทืคื ืคืจืืื ืืื ืคืจืืื. ืขืก ืืื ืคืื ืืขืจ ืืฉืืงืึทืืืข ืืืื ืื ืขืืืืึทืืึธืจ ืืขืืคึผืก ืื ืคืึธืจืฉืขืจ ืฆื ืืขื ืื ืืึทืื ืืื ืืึผืจืื ืึธืืขืจ ืคืึทืจืืืืื ืื ืื ืืขืจืึทืงืฉืึทื ืคืื ืคึฟืขืืขื.
ืืืจ ืืืขืื ืืืืึทืื ืืืจ ืืื ืฆื ืืื ืึทืืืงืึทืืื ืคืึทืจืืืืื ืื ืืขืจืึทืงืฉืึทื ืฆืืืืฉื RTOS ืืึทืกืงืก. ืืืจ ืืึธื ืขืจืฉืืขืจ ืคึผืืืืข ืื ืืืจืืคืืจืื ื ืคืื ืื ืงืึธื ืืืื ืขืก ืืื ืคืืืกื ืืืง. ืืืื ืืืจ ืืืื ืฆื ืื ืคืื ืงืฆืืข bluetooth_task_entry ืฆื ืื ืคึผืจืึทืกืขืกืื ื ืฆืืืืึทื ืคืื ืื "LED" ืืึทืคึฟืขื (ืึทืืจืขืก 0x080057B8
), ืืขืืึธืื ืืืจ ืงืขื ืขื ืืขื ืืืึธืก ืืื ืขืจืฉืืขืจ ืืืฉืืคื ืืื ืืขืืึธืื ืืขืฉืืงื ืฆื ืื ืกืืกืืขื ืจืื ledControlQueueHandle ืขืืืขืืข ืึธื ืืึธื.
ืืืจ ืืึธื ืฉืืขืื ืึท ืืจืืืงืคึผืืื ื ืฆื ืึทืงืกืขืก ืื ืืืึทืืขืืืืืง ledControlQueueHandle, ืจืึทืกืคึผืึธืืึธืืืฉืขื ื ืื ืคึฟืึทืจ ืึทืืจืขืกื 0x20000624
ืืื ืคืึธืจืืขืฆื ืขืงืกืึทืงืืืืื ื ืื ืงืึธื:
ืืื ืึท ืจืขืืืืืึทื, ืื ืืึทืืื ืืืขื ืขืจืฉืืขืจ ืคืึทืื ืืื ืึทืืจืขืก 0x080057CA
ืืืืืขืจ ืืืจ ืจืืคื ืื ืคึฟืื ืงืฆืืข osMailAlloc, ืืขืืึธืื ืืืึท ืื ืึทืืจืขืก 0x08005806
ืืืืืขืจ ืืืจ ืจืืคื ืื ืคึฟืื ืงืฆืืข osMailPut, ืืขืืึธืื ื ืึธื ืึท ืืฉืขืช - ืฆื ืื ืึทืืจืขืก 0x08005BD4
(ืืืืืขืจ ืจืืคื ืื ืคึฟืื ืงืฆืืข osMailGet), ืืืึธืก ืืขืืขืจื ืฆื ืืขืจ ืคึฟืื ืงืฆืืข leds_task_entry (ืืขืคืืจื-ืึทืจืืขื), ืืืึธืก ืืื, ืื ืืึทืกืงืก ืกืืืืืฉื, ืืื ืืืฆื ืื ืืขืคืืจื-ืึทืจืืขื ืืืงืืืขื ืงืึธื ืืจืึธื.
ืืื ืืขื ืคึผืฉืื ืืืขื ืืืจ ืงืขื ืขื ืืึทืฉืืืืขื ืืื RTOS ืืึทืกืงืก ืื ืืขืจืึทืงื ืืื ืืขืืขืจ ืื ืืขืจืขืจ.
ืคืื ืงืืจืก, ืืื ืคืึทืงื, ืื ืื ืืขืจืึทืงืฉืึทื ืคืื ืืึทืกืงืก ืงืขื ืขื ืืืื ืืขืจ ืงืึธืืคึผืืืฆืืจื, ืึธืืขืจ ื ืืฆื ืึทื ืขืืืืึทืืึธืจ, ืืจืึทืงืื ื ืืขื ืื ืืขืจืึทืงืฉืึทื ืืืขืจื ืืืืื ืืงืขืจ ืืึทืืึธืจืืึทืก.
ืงืึทืืขืจ ืืื Radare2
ืืืจ ืงืขื ื ื ืืฉื ืืืื ืึธืจืืจื ืึทืืึท ืึท ืื ืืืืขืจืกืึทื ืืขืฆืืึทื ืืื Radare2.
ืฆื ืคืึทืจืืื ืื ืฆื ืื ืขืืืืึทืืึธืจ ื ืืฆื r2, ืื ืืึทืคึฟืขื ืืืขื ืงืืงื ืืื ืืึธืก:
radare2 -A -a arm -b 16 -d gdb://localhost:23946 rhino_fw42k6.elf
ืงืึทืืขืจ ืื ืืืฆื ืืืฆื (dc
) ืืื ืคึผืืืืข ืืืจืืคืืจืื ื (Ctrl + C).
ืฆืื ืืึทืืืืขืจื, ืืื ืืขื ืืึธืืขื ื, r2 ืืื ืคึผืจืึธืืืขืืก ืืืขื ืืจืืขืื ืืื ืื ืืึทืื ืืืึทืจื ืืื ืกืขืจืืืขืจ ืืื ืืึผืจืื ืืืืกืืืื ืืืืึทื ืคืื ืืขื, ืืจืืืงืคึผืึธืื ืฅ ืืื ืกืืขืคึผืก ืืึธื ื ืื ืึทืจืืขื (ืงืึธืืึทื ื ds
). ืืืจ ืืึธืคื ืึทื ืืึธืก ืืืขื ืืืื ืคืึทืจืคืขืกืืืงื ืืึทืื.
ืคืืืกื ืืืง ืืื Eclipse
ืืืื ืขืจ ืคืื ืื ืึธืคึผืฆืืขืก ืคึฟืึทืจ ื ืืฆื ืื ืขืืืืึทืืึธืจ ืืื ืฆื ืืืืึทืืื ื ืื ืคืืจืืืืึทืจืข ืคืื โโืื ืืืื ืืืึธืก ืืื ืืขืืืขืืึธืคึผืขื. ืคึฟืึทืจ ืงืืขืจืืื, ืืืจ ืืืขืื ืืืื ื ืืฆื ืื ืจืืื ืึธ ืคืืจืืืืึทืจืข. ืืืจ ืงืขื ืขื ืืจืืคืงืืคืืข ืื ืคืืจืืืืึทืจืข ืงืืืืื
ืืืจ ืืืขืื ื ืืฆื 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 ืืื ืืฆืขืจ ืืืื ืืขืฉืืืื. 2 ืืื ืืฆืขืจ ืืืื ืืื ืืคืืขืืืืื.
ืืืึธืก ืืืืืืืืืจื ืืึธื ืืืจ ื ืืฆื ืฆื ืขืืืึทืืืื ืืขืืืืจื ืงืึธื?
-
QEMU
-
ืืื ืืึธืจื ืืึธืืึธืจ
-
ืคึผืจืึธืืขืืก
-
ืขืคึผืขืก ืึทื ืืขืจืฉ (ืฉืจืืืื ืืื ืื ืืึทืืขืจืงืื ืืขื)
6 ืืื ืืฆืขืจ ืืืื ืืขืฉืืืื. 2 ืืื ืืฆืขืจ ืืืื ืืื ืืคืืขืืืืื.
ืืืึธืก ืืืึธืื ืืืจ ืืื ืฆื ืคึฟืึทืจืืขืกืขืจื ืื ืขืืืืึทืืึธืจ ืืืจ ื ืืฆื?
-
ืืื ืืืืื ืืืืงืืึทื
-
ืืื ืืืืื ืื ืคืื ืกืขืืึทืคึผ / ืงืึทืืขืจ
-
ืืื ืืืืื ืืขืจ ืึธืคึผืฆืืขืก ืคึฟืึทืจ ืื ืืขืจืึทืงืืื ื ืืื ืื ืขืืืืึทืืึธืจ (ืึทืคึผื, ืืืงืก)
-
ืืื ืืื ืฆืืคืจืืื ืืื ืึทืืฅ
-
ืขืคึผืขืก ืึทื ืืขืจืฉ (ืฉืจืืืื ืืื ืื ืืึทืืขืจืงืื ืืขื)
8 ืืื ืืฆืขืจ ืืืื ืืขืฉืืืื. 1 ืืื ืืฆืขืจ ืืื ืืื ืืคืืขืืืืื.
ืืงืืจ: www.habr.com