Srónbheannach taobh istigh de cat - reáchtáil an firmware san aithriseoir Kopycat

Srónbheannach taobh istigh de cat - reáchtáil an firmware san aithriseoir Kopycat

Mar chuid den chruinniú 0x0A DC7831 DEF CON Nizhny Novgorod Ar 16 Feabhra, chuireamar tuarascáil i láthair ar bhunphrionsabail aithrise cód dénártha agus ar ár bhforbairt féin - aithriseoir ardán crua-earraí Cóipchat.

San Airteagal seo déanfaimid cur síos ar conas firmware an fheiste a rith san aithriseoir, idirghníomhú leis an dífhabhtóir a léiriú, agus anailís bheag dinimiciúil a dhéanamh ar an bhfirmware.

réamhstair

Is fada ó shin i réaltra i bhfad ar shiúl

Cúpla bliain ó shin inár saotharlann bhí gá le fiosrúchán a dhéanamh ar fhirmware feiste. Rinneadh an firmware a chomhbhrú agus a dhíphacáil le tosaitheoir. Rinne sé é seo ar bhealach an-chasta, ag aistriú na sonraí sa chuimhne arís agus arís eile. Agus ansin rinne an firmware féin idirghníomhú go gníomhach leis na forimeallaigh. Agus seo go léir ar chroílár MIPS.

Ar chúiseanna oibiachtúla, ní raibh na haithriseoirí a bhí ar fáil oiriúnach dúinn, ach bhí muid fós ag iarraidh an cód a rith. Ansin shocraigh muid ár n-aithriseoir féin a dhéanamh, rud a dhéanfadh an t-íosmhéid agus a ligfeadh dúinn an príomhfhirmware a dhíphacáil. Rinneamar iarracht é agus d'oibrigh sé. Shíl muid, cad má chuirimid forimeallach a dhéanamh freisin ar an firmware is mó. Níor ghortaigh sé go mór - agus d'oibrigh sé amach freisin. Rinneamar machnamh arís agus shocraigh muid aithriseoir iomlán a dhéanamh.

Aithriseoir córais ríomhaireachta a bhí mar thoradh air Cóipchat.

Srónbheannach taobh istigh de cat - reáchtáil an firmware san aithriseoir Kopycat
Cén fáth Kopycat?

Tá dráma ar fhocail.

  1. copycat (Béarla, ainmfhocal [ˈkɒpɪkæt]) - aithriseoir, aithriseoir
  2. conas (Béarla, ainmfhocal [ˈkæt]) - cat, cat - an t-ainmhí is fearr leat ag duine de chruthaitheoirí an tionscadail
  3. Is as teanga ríomhchlárúcháin Kotlin an litir “K”.

Cóipchat

Agus an aithriseoir á chruthú, socraíodh spriocanna an-sonracha:

  • an cumas forimeallaigh, modúil, croíleacáin phróiseálaithe nua a chruthú go tapa;
  • an cumas gléas fíorúil a chur le chéile ó mhodúil éagsúla;
  • an cumas aon sonraí dénártha (firmware) a luchtú isteach i gcuimhne feiste fíorúil;
  • cumas oibriú le seatanna (pictiúir de staid an chórais);
  • an cumas idirghníomhú leis an aithriseoir tríd an dífhabhtóir ionsuite;
  • nuatheanga deas le forbairt.

Mar thoradh air sin, roghnaíodh Kotlin le cur i bhfeidhm, an ailtireacht bus (is é seo nuair a dhéanann modúil cumarsáid lena chéile trí bhusanna sonraí fíorúla), JSON mar fhormáid tuairiscithe an fheiste, agus GDB RSP mar an prótacal le haghaidh idirghníomhú leis an dífhabhtóir.

Tá an fhorbairt ag dul ar aghaidh le beagán le cois dhá bhliain agus tá sé ag leanúint ar aghaidh go gníomhach. Le linn an ama seo, cuireadh cores próiseálaí MIPS, x86, V850ES, ARM, agus PowerPC i bhfeidhm.

Tá an tionscadal ag fás agus tá sé in am é a chur i láthair an phobail i gcoitinne. Déanfaimid cur síos mionsonraithe ar an tionscadal níos déanaí, ach faoi láthair díreoimid ar Kopycat a úsáid.

Don duine is mífhoighneach, is féidir leagan promo den aithriseoir a íoslódáil ó nasc.

Srónbheannach ar an aithriseoir

Meabhraímid gur cruthaíodh feiste tástála “Srónbheannach” níos luaithe don chomhdháil SMARTRHINO-2018 chun scileanna innealtóireachta droim ar ais a mhúineadh. Rinneadh cur síos ar an bpróiseas anailíse firmware statach i an t-alt seo.

Anois déanaimis iarracht “cainteoirí” a chur leis agus an firmware a rith san aithriseoir.

Ní mór dúinn:
1) Java 1.8
2) Python agus modúl jíp Python a úsáid taobh istigh den aithriseoir. Is féidir leat an modúl WHL Jep do Windows a thógáil íoslódáil anseo.

Do Windows:
1) com0com
2) putty

Le haghaidh Linux:
1) socat

Is féidir leat Eclipse, IDA Pro nó radare2 a úsáid mar chliant GDB.

Conas a oibríonn sé?

D'fhonn an firmware a dhéanamh san aithriseoir, is gá gléas fíorúil a "chéile", arb é analóg de ghléas fíor é.

Is féidir an fhíorghléas (“srónbheannach”) a thaispeáint sa bhlocléaráid:

Srónbheannach taobh istigh de cat - reáchtáil an firmware san aithriseoir Kopycat

Tá struchtúr modúlach ag an aithriseoir agus is féidir cur síos a dhéanamh ar an bhfeiste fíorúil deiridh i gcomhad JSON.

JSON 105 líne

{
  "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"]
  ]
}

Tabhair aird ar an bparaiméadar firmware alt paraimh Is é an t-ainm comhaid is féidir a luchtú isteach i gléas fíorúil mar firmware.

Is féidir an gléas fíorúil agus a idirghníomhaíocht leis an bpríomhchóras oibriúcháin a léiriú leis an léaráid seo a leanas:

Srónbheannach taobh istigh de cat - reáchtáil an firmware san aithriseoir Kopycat

Is éard atá i gceist le sampla tástála reatha an aithriseoir ná idirghníomhú le calafoirt COM an phríomhOS (dífhabhtú UART agus UART don mhodúl Bluetooth). Is féidir iad seo a bheith ina gcalafoirt fhíora a bhfuil gléasanna nasctha leo nó ina gcalafoirt COM fhíorúla (do seo ní gá duit ach com0com/socat).

Tá dhá phríomhbhealach ann faoi láthair chun idirghníomhú leis an aithriseoir ón taobh amuigh:

  • prótacal GDB RSP (dá réir sin, is iad na huirlisí a thacaíonn leis an bprótacal seo ná Eclipse / IDA / radare2);
  • líne ordaithe aithriseoir inmheánach (Argparse nó Python).

Calafoirt COM fíorúil

Chun idirghníomhú le UART feiste fíorúil ar an meaisín áitiúil trí teirminéal, ní mór duit a chruthú péire de na calafoirt COM fíorúla a bhaineann leo. Inár gcás, úsáideann an aithriseoir port amháin, agus an dara ceann ag clár teirminéil (PuTTY nó scáileán):

Srónbheannach taobh istigh de cat - reáchtáil an firmware san aithriseoir Kopycat

Ag baint úsáide as com0com

Tá calafoirt COM fíorúla cumraithe ag baint úsáide as an bhfóntas socraithe ón trealamh com0com (leagan consól - C: Comhaid Cláir (x86) com0comsetupс.exe, nó leagan GUI - C: Comhaid Cláir (x86) com0comsetupg.exe):

Srónbheannach taobh istigh de cat - reáchtáil an firmware san aithriseoir Kopycat

Seiceáil na boscaí cumasú róchaiteachas maoláin i gcás gach calafort fíorúil cruthaithe, nó fanfaidh an aithriseoir le freagra ón gcalafort COM.

Ag baint úsáide as socat

Ar chórais UNIX, cruthaítear calafoirt COM fíorúla go huathoibríoch ag an aithriseoir ag baint úsáide as an bhfóntas socat; socat:.

Comhéadan líne ceannais inmheánach (Argparse nó Python)

Ós rud é gur feidhmchlár consól é Kopycat, soláthraíonn an aithriseoir dhá rogha comhéadan líne ordaithe chun idirghníomhú lena chuid cuspóirí agus athróga: Argparse agus Python.

Is CLI é Argparse a tógadh isteach i Kopycat agus tá sé ar fáil do gach duine i gcónaí.

CLI eile is ea an ateangaire Python. Chun é a úsáid, ní mór duit an modúl Jep Python a shuiteáil agus an aithriseoir a chumrú chun oibriú le Python (úsáidfear an ateangaire Python atá suiteáilte ar phríomhchóras an úsáideora).

Suiteáil an modúl Python Jep

Faoi Linux Is féidir Jep a shuiteáil trí pip:

pip install jep

Chun Jep a shuiteáil ar Windows, ní mór duit an SDK Windows agus an Microsoft Visual Studio comhfhreagrach a shuiteáil ar dtús. Táimid tar éis é a dhéanamh beagán níos éasca duit agus Tógann WHL JEP le haghaidh leaganacha reatha Python do Windows, ionas gur féidir an modúl a shuiteáil ón gcomhad:

pip install jep-3.8.2-cp27-cp27m-win_amd64.whl

Chun suiteáil Jep a sheiceáil, ní mór duit a reáchtáil ar an líne ordaithe:

python -c "import jep"

Ba cheart an teachtaireacht seo a leanas a fháil mar fhreagra:

ImportError: Jep is not supported in standalone Python, it must be embedded in Java.

Sa bhaiscchomhad aithriseoir do do chóras (cóipcat.bat - le haghaidh Windows, cóipchait - le haghaidh Linux) chuig an liosta paraiméadair DEFAULT_JVM_OPTS cuir paraiméadar breise leis Djava.library.path — caithfidh go bhfuil an cosán go dtí an modúl Jep suiteáilte ann.

Ba cheart go mbeadh an toradh do Windows mar líne mar seo:

set DEFAULT_JVM_OPTS="-XX:MaxMetaspaceSize=256m" "-XX:+UseParallelGC" "-XX:SurvivorRatio=6" "-XX:-UseGCOverheadLimit" "-Djava.library.path=C:/Python27/Lib/site-packages/jep"

Ag seoladh Kopycat

Is feidhmchlár consól JVM é an aithriseoir. Déantar an seoladh trí script líne ordaithe an chórais oibriúcháin (sh/cmd).

Ordú le rith faoi Windows:

binkopycat -g 23946 -n rhino -l user -y library -p firmware=firmwarerhino_pass.bin,tty_dbg=COM26,tty_bt=COM28

Ordú le rith faoi Linux ag baint úsáide as an bhfóntas 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 — calafort TCP a bheidh ar oscailt le haghaidh rochtana ar an bhfreastalaí GDB;
  • -n rhino — ainm mhodúil an phríomhchórais (feiste chóimeáilte);
  • -l user — ainm na leabharlainne chun an príomh-mhodúl a chuardach;
  • -y library — cosán chun modúil a chuimsítear sa ghléas a chuardach;
  • firmwarerhino_pass.bin - cosán go dtí an comhad firmware;
  • Is calafoirt fíorúla COM iad COM26 agus COM28.

Mar thoradh air sin, taispeánfar leid Python > (Nó 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 >

Idirghníomhú le IDA Pro

Chun an tástáil a shimpliú, bainimid úsáid as firmware an srónbheannach mar bhunchomhad le haghaidh anailíse san fhoirm san IDA Comhad ELF (Stóráiltear meiteaisnéis ann).

Is féidir leat an príomh-firmware a úsáid freisin gan faisnéis meta.

Tar éis duit Kopycat a sheoladh in IDA Pro, sa roghchlár Debugger téigh go dtí an mhír “Athraigh dífhabhtóir…" agus roghnaigh "Dífhabhtóir GDB cianda“. Ar aghaidh, socraigh an nasc: roghchlár Dífhabhtóir - Roghanna próiseála…

Socraigh na luachanna:

  • Iarratas - aon luach
  • Ainm an ósta: 127.0.0.1 (nó seoladh IP an chianmheaisín ina bhfuil Kopycat ag rith)
  • Port: 23946

Srónbheannach taobh istigh de cat - reáchtáil an firmware san aithriseoir Kopycat

Anois tá an cnaipe dífhabhtaithe ar fáil (eochair F9):

Srónbheannach taobh istigh de cat - reáchtáil an firmware san aithriseoir Kopycat

Cliceáil é chun ceangal leis an modúl dífhabhtóra san aithriseoir. Téann an IDA i mód dífhabhtaithe, cuirtear fuinneoga breise ar fáil: faisnéis faoi chláir, faoin stack.

Anois is féidir linn na gnéithe caighdeánacha go léir den dífhabhtóir a úsáid:

  • forghníomhú céim ar chéim treoracha (Céim isteach и Céim ar aghaidh — eochracha F7 agus F8, faoi seach);
  • cur i gcrích a thosú agus a chur ar sos;
  • ag cruthú brisphointí do chód agus do shonraí (eochair F2).

Ní chiallaíonn nascadh le dífhabhtóir an cód firmware a rith. Ní mór an seoladh a bheith sa suíomh forghníomhaithe reatha 0x08006A74 — tús na feidhme Athshocraigh_Láimhseálaí. Má scrollaíonn tú síos an liostú, is féidir leat an glao feidhme a fheiceáil príomh-. Is féidir leat an cúrsóir a chur ar an líne seo (seoladh 0x08006ABE) agus an oibríocht a dhéanamh Rith go dtí an cúrsóir (eochair F4).

Srónbheannach taobh istigh de cat - reáchtáil an firmware san aithriseoir Kopycat

Ansin, is féidir leat F7 a bhrú chun an fheidhm a chur isteach príomh-.

Má ritheann tú an t-ordú Leanúint ar aghaidh leis an bpróiseas (F9 eochair), ansin beidh an fhuinneog "Fan le do thoil" le feiceáil le cnaipe amháin fionraí:

Srónbheannach taobh istigh de cat - reáchtáil an firmware san aithriseoir Kopycat

Nuair a bhrúnn tú fionraí tá forghníomhú an chóid firmware ar fionraí agus is féidir leanúint ar aghaidh ón seoladh céanna sa chód inar cuireadh isteach é.

Má leanann tú ar aghaidh leis an gcód a fhorghníomhú, feicfidh tú na línte seo a leanas sna teirminéil atá nasctha leis na calafoirt COM fíorúla:

Srónbheannach taobh istigh de cat - reáchtáil an firmware san aithriseoir Kopycat

Srónbheannach taobh istigh de cat - reáchtáil an firmware san aithriseoir Kopycat

Léiríonn láithreacht na líne “seachbhóthar stáit” go bhfuil an modúl fíorúil Bluetooth tar éis aistriú go dtí an modh glactha sonraí ó phort COM an úsáideora.

Anois sa chríochfort Bluetooth (COM29 sa phictiúr) is féidir leat orduithe a chur isteach de réir phrótacal Rhino. Mar shampla, cuirfidh an t-ordú “MEOW” an teaghrán “mur-mur” ar ais chuig an teirminéal Bluetooth:

Srónbheannach taobh istigh de cat - reáchtáil an firmware san aithriseoir Kopycat

Ná aithris dom go hiomlán

Agus aithriseoir á thógáil agat, is féidir leat leibhéal mionsonraí/aithrise gléas ar leith a roghnú. Mar shampla, is féidir an modúl Bluetooth a aithris ar bhealaí éagsúla:

  • tá an gléas aithrise go hiomlán le sraith iomlán na n-orduithe;
  • Déantar aithris ar orduithe AT, agus faightear an sruth sonraí ó phort COM an phríomhchórais;
  • soláthraíonn an gléas fíorúil atreorú sonraí iomlán chuig an bhfeiste fíor;
  • mar stub simplí a fhilleann i gcónaí "OK".

Úsáideann an leagan reatha den aithriseoir an dara cur chuige - déanann an modúl fíorúil Bluetooth cumraíocht, agus ina dhiaidh sin aistríonn sé go dtí an modh "seachfhreastalaí" sonraí ó chalafort COM an phríomhchórais go dtí port UART an aithriseoir.

Srónbheannach taobh istigh de cat - reáchtáil an firmware san aithriseoir Kopycat

Déanaimis machnamh ar an bhféidearthacht go ndéanfaí ionstraimíocht shimplí ar an gcód i gcás nach gcuirtear cuid éigin den imeall i bhfeidhm. Mar shampla, murar cruthaíodh an t-amadóir atá freagrach as aistriú sonraí chuig DMA a rialú (déantar an tseiceáil san fheidhm ws2812b_fan, raspolojennoy po adresu 0x08006840), ansin fanfaidh an firmware i gcónaí go ndéanfar an bhratach a athshocrú gnóthachlonnaithe ag 0x200004C4a thaispeánann áitíocht na líne sonraí DMA:

Srónbheannach taobh istigh de cat - reáchtáil an firmware san aithriseoir Kopycat

Is féidir linn teacht timpeall ar an gcás seo tríd an mbratach a athshocrú de láimh gnóthach díreach tar éis é a shuiteáil. In IDA Pro, is féidir leat feidhm Python a chruthú agus é a ghlaoch mar bhriseadh, agus an brisphointe féin a chur sa chód tar éis an luach 1 a scríobh chuig an mbratach gnóthach.

Láimhseálaí brisphointe

Ar dtús, cruthaimis feidhm Python san IDA. Roghchlár Comhad - Ordú Script...

Cuir blúire nua leis an liosta ar chlé, tabhair ainm dó (mar shampla, BPT),
Sa réimse téacs ar dheis, cuir isteach an cód feidhme:

def skip_dma():
    print "Skipping wait ws2812..."
    value = Byte(0x200004C4)
    if value == 1:
        PatchDbgByte(0x200004C4, 0)
return False

Srónbheannach taobh istigh de cat - reáchtáil an firmware san aithriseoir Kopycat

Tar éis sin, cliceáil Rith agus dún an fhuinneog scripte.

Anois, a ligean ar dul go dtí an cód ag 0x0800688A, socraigh brisphointe (eochair F2), cuir in eagar é (roghchlár comhthéacs Cuir brisphointe in eagar...), ná déan dearmad an cineál script a shocrú go Python:

Srónbheannach taobh istigh de cat - reáchtáil an firmware san aithriseoir Kopycat
Srónbheannach taobh istigh de cat - reáchtáil an firmware san aithriseoir Kopycat

Má tá an luach bratach reatha gnóthach ionann 1, ansin ba chóir duit a fhorghníomhú an fheidhm scip_dma sa líne scripte:

Srónbheannach taobh istigh de cat - reáchtáil an firmware san aithriseoir Kopycat

Má ritheann tú an firmware le cur i gcrích, feicfidh tú truicear an chóid láimhseálaí briseadhphointe i bhfuinneog an IDA Aschur de réir líne Skipping wait ws2812.... Anois ní bheidh an firmware ag fanacht leis an bhratach a athshocrú gnóthach.

Idirghníomhaíocht leis an aithriseoir

Ní dócha go mbeidh aithris ar mhaithe le haithris ina chúis le lúcháir agus áthas. Tá sé i bhfad níos suimiúla má chabhraíonn an aithriseoir leis an taighdeoir na sonraí a fheiceáil mar chuimhne nó idirghníomhú snáitheanna a bhunú.

Taispeánfaimid duit conas idirghníomhaíocht idir tascanna RTOS a bhunú go dinimiciúil. Ba cheart duit forghníomhú an chóid a chur ar sos ar dtús má tá sé ag rith. Má théann tú chuig an fheidhm bluetooth_task_iontráil chuig an mbrainse próiseála den ordú “LED” (seoladh 0x080057B8), ansin is féidir leat a fheiceáil cad a cruthaíodh ar dtús agus ansin a sheoladh chuig an scuaine chórais ledControlQueueHandle teachtaireacht éigin.

Srónbheannach taobh istigh de cat - reáchtáil an firmware san aithriseoir Kopycat

Ba cheart duit brisphointe a shocrú chun rochtain a fháil ar an athróg ledControlQueueHandle, raspolojennoy po adresu 0x20000624 agus leanúint ar aghaidh ag feidhmiú an chóid:

Srónbheannach taobh istigh de cat - reáchtáil an firmware san aithriseoir Kopycat

Mar thoradh air sin, tarlóidh an stad ar dtús ag seoladh 0x080057CA roimh ghlaoch ar an bhfeidhm osMailAlloc, ansin ag an seoladh 0x08005806 roimh ghlaoch ar an bhfeidhm osMailPut, ansin tar éis tamaill - chuig an seoladh 0x08005BD4 (roimh glaoch ar an bhfeidhm osMailGet), a bhaineann leis an bhfeidhm leds_task_iontráil (Tasc-LED), is é sin, na tascanna athraigh, agus anois an LED-tasc a fuarthas rialú.

Srónbheannach taobh istigh de cat - reáchtáil an firmware san aithriseoir Kopycat

Ar an mbealach simplí seo is féidir leat a fháil amach conas a idirghníomhaíonn tascanna RTOS lena chéile.

Ar ndóigh, i ndáiríre, is féidir leis an idirghníomhú tascanna a bheith níos casta, ach ag baint úsáide as aithriseoir, a rianú idirghníomhaíocht seo éiríonn níos lú laborious.

Anseo Is féidir leat féachaint ar fhíseán gairid den aithriseoir ag seoladh agus ag idirghníomhú le IDA Pro.

Seoladh le Radare2

Ní féidir leat neamhaird a dhéanamh ar uirlis uilíoch mar Radare2.

Chun ceangal leis an aithriseoir ag baint úsáide as r2, bheadh ​​an t-ordú cuma mar seo:

radare2 -A -a arm -b 16 -d gdb://localhost:23946 rhino_fw42k6.elf

Seoladh ar fáil anois (dc) agus cuir an forghníomhú ar sos (Ctrl+C).

Ar an drochuair, i láthair na huaire, tá fadhbanna ag r2 agus iad ag obair leis an bhfreastalaí gdb crua-earraí agus leagan amach cuimhne mar gheall air seo, ní oibríonn bristephointí agus Céimeanna (ordú ds). Tá súil againn go mbeidh sé seo socraithe go luath.

Rith le Eclipse

Ceann de na roghanna chun an aithriseoir a úsáid ná firmware an ghléis atá á fhorbairt a dhífhabhtú. Ar mhaithe le soiléireacht, úsáidfimid an firmware Rhino freisin. Is féidir leat na foinsí firmware a íoslódáil dá bhrí sin.

Bainfimid úsáid as Eclipse as an tacar mar IDE Binse Oibre Córais le haghaidh STM32.

Chun go bhféadfaidh an aithriseoir firmware a tiomsaíodh go díreach in Eclipse a luchtú, ní mór duit an paraiméadar a chur leis firmware=null chuig ordú seolta an aithriseoir:

binkopycat -g 23946 -n rhino -l user -y modules -p firmware=null,tty_dbg=COM26,tty_bt=COM28

Cumraíocht dífhabhtaithe a shocrú

In Eclipse, roghnaigh an roghchlár Rith - Cumraíochtaí Dífhabhtaithe... Sa fhuinneog a osclaíonn, sa rannóg Dífhabhtaithe Crua-earraí GDB ní mór duit cumraíocht nua a chur leis, ansin ar an gcluaisín "Príomh" sonraigh an tionscadal reatha agus an t-iarratas le haghaidh dífhabhtaithe:

Srónbheannach taobh istigh de cat - reáchtáil an firmware san aithriseoir Kopycat

Ar an táb “Debugger” ní mór duit an t-ordú GDB a shonrú:
${openstm32_compiler_path}arm-none-eabi-gdb

Agus cuir isteach freisin na paraiméadair chun nascadh leis an bhfreastalaí GDB (óstach agus port):

Srónbheannach taobh istigh de cat - reáchtáil an firmware san aithriseoir Kopycat

Ar an táb "Tosaithe", ní mór duit na paraiméadair seo a leanas a shonrú:

  • ticbhosca a chumasú Luchtaigh íomhá (ionas go mbeidh an íomhá firmware cóimeáilte luchtaithe isteach san aithriseoir);
  • ticbhosca a chumasú Siombailí luchtaithe;
  • cuir ordú seolta leis: set $pc = *0x08000004 (socraigh clár an ríomhaire chuig an luach ón gcuimhne ag an seoladh 0x08000004 - tá an seoladh stóráilte ann Athshocraigh Láimhseálaí).

Tabhair aird, más rud é nach bhfuil tú ag iarraidh an comhad firmware a íoslódáil ó Eclipse, ansin na roghanna Luchtaigh íomhá и Rith orduithe ní gá a chur in iúl.

Srónbheannach taobh istigh de cat - reáchtáil an firmware san aithriseoir Kopycat

Tar éis duit Debug a chliceáil, is féidir leat oibriú i mód dífhabhtóra:

  • céim ar chéim forghníomhú cód
    Srónbheannach taobh istigh de cat - reáchtáil an firmware san aithriseoir Kopycat
  • idirghníomhú le brisphointí
    Srónbheannach taobh istigh de cat - reáchtáil an firmware san aithriseoir Kopycat

Tabhair faoi deara. Tá roinnt aisteach ag Eclipse, hmm... agus caithfidh tú maireachtáil leo. Mar shampla, má tá an teachtaireacht "Níl aon fhoinse ar fáil le haghaidh "0x0" le feiceáil agus tú ag tosú ar an dífhabhtóir", ansin rith an t-ordú Céim (F5)

Srónbheannach taobh istigh de cat - reáchtáil an firmware san aithriseoir Kopycat

In ionad a thabhairt i gcrích

Is rud an-suimiúil é aithris a dhéanamh ar chód dúchais. Is féidir le forbróir gléas an firmware a dhífhabhtú gan feiste fíor. Do thaighdeoir, is deis é anailís chód dinimiciúil a dhéanamh, rud nach féidir i gcónaí fiú le feiste.

Ba mhaith linn uirlis a sholáthar do speisialtóirí atá áisiúil, measartha simplí agus nach dtógann go leor iarracht agus am é a bhunú agus a rith.

Scríobh isteach na tuairimí faoi do thaithí ag baint úsáide as aithriseoir crua-earraí. Tugaimid cuireadh duit a phlé agus beimid sásta ceisteanna a fhreagairt.

Ní féidir ach le húsáideoirí cláraithe páirt a ghlacadh sa suirbhé. Sínigh isteach, le do thoil.

Cad chuige a bhfuil an aithriseoir á úsáid agat?

  • Forbraím (debug) firmware

  • Tá mé ag déanamh taighde firmware

  • Seolaim cluichí (Dendi, Sega, PSP)

  • rud éigin eile (scríobh sna tuairimí)

Vótáil 7 úsáideoir. Staon 2 úsáideoir.

Cén bogearraí a úsáideann tú chun aithris a dhéanamh ar an gcód dúchais?

  • QEMU

  • Inneall aonbheannaigh

  • Proteus

  • rud éigin eile (scríobh sna tuairimí)

Vótáil 6 úsáideoir. Staon 2 úsáideoir.

Cad ba mhaith leat a fheabhsú san aithriseoir atá in úsáid agat?

  • Ba mhaith liom luas

  • Ba mhaith liom éascaíocht a shocrú / a sheoladh

  • Ba mhaith liom tuilleadh roghanna chun idirghníomhú leis an aithriseoir (API, crúcaí)

  • Tá mé sásta le gach rud

  • rud éigin eile (scríobh sna tuairimí)

Vótáil 8 úsáideoir. Staon úsáideoir amháin.

Foinse: will.com

Add a comment