{"id":1648,"date":"2023-07-14T22:14:47","date_gmt":"2023-07-14T21:14:47","guid":{"rendered":"https:\/\/www.sp3yor.net\/?p=1648"},"modified":"2023-07-15T10:17:16","modified_gmt":"2023-07-15T09:17:16","slug":"inzynieria-wsteczna-avr-czesc-druga","status":"publish","type":"post","link":"https:\/\/www.sp3yor.net\/?p=1648","title":{"rendered":"In\u017cynieria wsteczna AVR, cz\u0119\u015b\u0107 druga"},"content":{"rendered":"\n<p>Beacony na 3 cm i 23 cm nauczy\u0142y si\u0119 ju\u017c piszcze\u0107 nowym znakiem i lokatorem, na placu boju pozosta\u0142a tylko radiolatarnia na pasmo 13 cm (2,3 GHz). W trakcie dzisiejszego spotkania w klubie, z Pavlem SP3MC przyst\u0105pili\u015bmy do dzia\u0142ania.<\/p>\n\n\n\n<p>Sprawa by\u0142a, a przynajmniej wydawa\u0142a si\u0119 by\u0107 bardziej skomplikowana &#8211; mikrokontroler w tym beaconie sterowa\u0142 syntezerem cz\u0119stotliwo\u015bci na uk\u0142adzie LMX2320, a nie tylko &#8222;kluczowa\u0142&#8221; stopie\u0144 mocy.<\/p>\n\n\n\n<p>Pocz\u0105tek by\u0142 standardowy &#8211; identyfikacja po\u0142\u0105cze\u0144 pomi\u0119dzy pinami attiny2313 a z\u0142\u0105czem goldpin, wpinka programatorem USBasp, odczyt flasha za pomoc\u0105 avrdude.<\/p>\n\n\n\n<p>Pierwszy, oczywisty rzut oka niestety nie ujawni\u0142 \u017cadnych string\u00f3w w dumpie. Wytoczyli\u015bmy wi\u0119c ci\u0119\u017csz\u0105 artyleri\u0119 w postaci <code>avr-objdump<\/code> i Ghidry.<\/p>\n\n\n\n<figure class=\"wp-block-image size-large\"><a href=\"https:\/\/www.sp3yor.net\/wp-content\/uploads\/2023\/07\/photo_5877435214844771840_y.jpg\"><img loading=\"lazy\" decoding=\"async\" width=\"768\" height=\"1024\" src=\"https:\/\/www.sp3yor.net\/wp-content\/uploads\/2023\/07\/photo_5877435214844771840_y-768x1024.jpg\" alt=\"\" class=\"wp-image-1650\" srcset=\"https:\/\/www.sp3yor.net\/wp-content\/uploads\/2023\/07\/photo_5877435214844771840_y-768x1024.jpg 768w, https:\/\/www.sp3yor.net\/wp-content\/uploads\/2023\/07\/photo_5877435214844771840_y-225x300.jpg 225w, https:\/\/www.sp3yor.net\/wp-content\/uploads\/2023\/07\/photo_5877435214844771840_y.jpg 960w\" sizes=\"auto, (max-width: 768px) 100vw, 768px\" \/><\/a><\/figure>\n\n\n\n<p>Wa\u017cn\u0105 rzecz\u0105 by\u0142o dla nas ustalenie czy kluczowanie CW odbywa si\u0119 za pomoc\u0105 sterowania syntez\u0105, czy te\u017c jest realizowane na ko\u0144c\u00f3wce mocy. Rzut oka na PCB uwidoczni\u0142 id\u0105cy do sekcji PA przew\u00f3d oznaczony jako &#8222;PTT&#8221;. Za pomoc\u0105 woltomierza ustawionego w tryb pomiaru przej\u015bcia (beeep) szybko ustalili\u015bmy, \u017ce kluczowanie jest realizowane w &#8222;analogowy&#8221; spos\u00f3b. Uf!<\/p>\n\n\n\n<figure class=\"wp-block-image size-large\"><a href=\"https:\/\/www.sp3yor.net\/wp-content\/uploads\/2023\/07\/image.png\"><img loading=\"lazy\" decoding=\"async\" width=\"542\" height=\"1024\" src=\"https:\/\/www.sp3yor.net\/wp-content\/uploads\/2023\/07\/image-542x1024.png\" alt=\"\" class=\"wp-image-1649\" srcset=\"https:\/\/www.sp3yor.net\/wp-content\/uploads\/2023\/07\/image-542x1024.png 542w, https:\/\/www.sp3yor.net\/wp-content\/uploads\/2023\/07\/image-159x300.png 159w, https:\/\/www.sp3yor.net\/wp-content\/uploads\/2023\/07\/image.png 555w\" sizes=\"auto, (max-width: 542px) 100vw, 542px\" \/><\/a><\/figure>\n\n\n\n<p>Analizuj\u0105c zdeasemblowany kod, przez d\u0142u\u017csz\u0105 chwil\u0119 gapili\u015bmy si\u0119 na t\u0105 sekcj\u0119. Je\u015bli co\u015b mia\u0142o realizowa\u0107 nadawanie, to musia\u0142 by\u0107 ten fragment, ale w \u017caden prosty i logiczny spos\u00f3b nie mogli\u015bmy prze\u0142o\u017cy\u0107 tych instrukcji na CW.<\/p>\n\n\n\n<p>Ma\u0142ym prze\u0142omem (z perspektywy czasu a\u017c ci\u0119\u017cko uwierzy\u0107 \u017ce nie wpadli\u015bmy na to od razu) by\u0142o odkrycie, \u017ce ca\u0142a pierwsza sekcja (<code>0x142 - 0x16c<\/code>) powtarza si\u0119 dok\u0142adnie od adresu <code>0x172<\/code>. Z pewno\u015bci\u0105 jest to fragment odpowiedzialny za nadawanie znaku, a dwie identyczne sekcje <code>rcall<\/code> ni\u017cej &#8211; lokatora.<\/p>\n\n\n\n<p>Pozosta\u0142o rozebra\u0107 wi\u0119c fragment nadaj\u0105cy znak na cz\u0119\u015bci pierwsze. Wo\u0142anych jest 21 funkcji, co jak bardzo dobrze zauwa\u017cyl Pavel, zgadza si\u0119 z ilo\u015bci\u0105 symboli (kropek i kresek) w telegraficznej reprezentacji ci\u0105gu &#8222;SR3YOR&#8221;. Tak czy siak, telegrafia ma dwa symbole, a wo\u0142ane s\u0105 cztery funkcje&#8230;<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>0x228 (A)   .\n0x228 (A)   .\n0x254 (B)   .\n0x228 (A)   .\n0x23e (C)   _\n0x254 (B)   .\n0x228 (A)   .\n0x228 (A)   .\n0x228 (A)   .\n0x23e (C)   _\n0x26a (D)   _\n0x23e (C)   _\n0x228 (A)   .\n0x23e (C)   _\n0x26a (D)   _\n0x23e (C)   _\n0x23e (C)   _\n0x26a (D)   _\n0x228 (A)   .\n0x23e (C)   _\n0x254 (B)   .<\/code><\/pre>\n\n\n\n<p>Po rozpisaniu kropek i kresek obok wywo\u0142a\u0144 funkcji szybko staje si\u0119 widoczne, \u017ce funkcja &#8222;A&#8221; (<code>0x228<\/code>) nadaje kropk\u0119, a &#8222;B&#8221; (<code>0x254<\/code>) kropk\u0119 i przerw\u0119 pomi\u0119dzy literami, analogicznie dzia\u0142aj\u0105 funkcje &#8222;C&#8221; i &#8222;D&#8221; dla kresek.<\/p>\n\n\n\n<p>Bogatsi o t\u0105 wiedz\u0119 (i zaskoczeni pomys\u0142owo\u015bci\u0105 autora kodu) przyst\u0105pili\u015bmy do modyfikacji kodu za pomoc\u0105 hexedytora. Nale\u017ca\u0142o zmieni\u0107 warto\u015bci skok\u00f3w dla instrukcji <code>rcall<\/code>, tak aby litery w lokatorze uk\u0142ada\u0142y si\u0119 w now\u0105 warto\u015b\u0107. Nie jest to czynno\u015b\u0107 odkrywcza, a wskaz\u00f3wki dostarczane przez <code>avr-objdump<\/code> wystarcz\u0105 aby szybko wyliczy\u0107 nowe warto\u015bci. Przyk\u0142adowo, sp\u00f3jrzmy na instrukcj\u0119:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code> 15c:   65 d0           rcall   .+202           ;  0x228<\/code><\/pre>\n\n\n\n<p>Znajduje si\u0119 ona w pami\u0119ci pod adresem <code>15c<\/code>, sk\u0105d skaczemy pod adres <code>0x228<\/code>, czyli:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>&gt;&gt;&gt; hex((0x228 - 0x15c)\/\/2)\n'0x66'<\/code><\/pre>\n\n\n\n<p>Uzyskan\u0105 warto\u015b\u0107 <code>0x66<\/code> nale\u017cy pomniejszy\u0107 o jeden i uzyskujemy nasz\u0105 po\u017c\u0105dan\u0105 instrukcj\u0119 maszynow\u0105: <code>65 d0<\/code>.<\/p>\n\n\n\n<p>Chc\u0105c skoczy\u0107 spod tego samego adresu (<code>15c<\/code>) w inne miejsce, np. <code>26a<\/code>, nale\u017cy obliczy\u0107 offset, tak samo jak wy\u017cej:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>&gt;&gt;&gt; hex((0x26a - 0x15c)\/\/2-1)\n'0x86'<\/code><\/pre>\n\n\n\n<p>Zamieniamy wi\u0119c <code>65 d0<\/code> na <code>86 d0<\/code> i pi\u0119knie &#8211; wywo\u0142anie funkcji nadaj\u0105cej kropk\u0119 zamieni\u0142o si\u0119 w wywo\u0142anie funkcji kreska-z-pauz\u0105. Przy edycji plik\u00f3w HEX nale\u017cy pami\u0119ta\u0107 o przeliczeniu checksum na ko\u0144cu ka\u017cdej linii. Po zaprogramowaniu procesora zmienionym wsadem zacz\u0105\u0142 on, oczywi\u015bcie, nadawa\u0107 nowy lokator.<\/p>\n\n\n\n<p>\/de SQ3SWF<\/p>\n","protected":false},"excerpt":{"rendered":"<p>Beacony na 3 cm i 23 cm nauczy\u0142y si\u0119 ju\u017c piszcze\u0107 nowym znakiem i lokatorem, na placu boju pozosta\u0142a tylko radiolatarnia na pasmo 13 cm (2,3 GHz). W trakcie dzisiejszego spotkania w klubie, z Pavlem SP3MC przyst\u0105pili\u015bmy do dzia\u0142ania. Sprawa &hellip; <a href=\"https:\/\/www.sp3yor.net\/?p=1648\">Czytaj dalej <span class=\"meta-nav\">&rarr;<\/span><\/a><\/p>\n","protected":false},"author":3,"featured_media":0,"comment_status":"closed","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"ngg_post_thumbnail":0,"footnotes":""},"categories":[1],"tags":[],"class_list":["post-1648","post","type-post","status-publish","format-standard","hentry","category-bez-kategorii"],"_links":{"self":[{"href":"https:\/\/www.sp3yor.net\/index.php?rest_route=\/wp\/v2\/posts\/1648","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/www.sp3yor.net\/index.php?rest_route=\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/www.sp3yor.net\/index.php?rest_route=\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/www.sp3yor.net\/index.php?rest_route=\/wp\/v2\/users\/3"}],"replies":[{"embeddable":true,"href":"https:\/\/www.sp3yor.net\/index.php?rest_route=%2Fwp%2Fv2%2Fcomments&post=1648"}],"version-history":[{"count":3,"href":"https:\/\/www.sp3yor.net\/index.php?rest_route=\/wp\/v2\/posts\/1648\/revisions"}],"predecessor-version":[{"id":1660,"href":"https:\/\/www.sp3yor.net\/index.php?rest_route=\/wp\/v2\/posts\/1648\/revisions\/1660"}],"wp:attachment":[{"href":"https:\/\/www.sp3yor.net\/index.php?rest_route=%2Fwp%2Fv2%2Fmedia&parent=1648"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.sp3yor.net\/index.php?rest_route=%2Fwp%2Fv2%2Fcategories&post=1648"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.sp3yor.net\/index.php?rest_route=%2Fwp%2Fv2%2Ftags&post=1648"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}