Elektroda.pl
Elektroda.pl
X
Proszę, dodaj wyjątek www.elektroda.pl do Adblock.
Dzięki temu, że oglądasz reklamy, wspierasz portal i użytkowników.

iNTEL hex atmega 2560 16au - Edycja HEX

t-naw 12 Wrz 2013 19:38 2646 14
  • #1 12 Wrz 2013 19:38
    t-naw
    Poziom 14  

    Posiadam pewien Panel LED wyświetla on między innymi różne napisy siedzi w nim Atmega2560 AU1.

    Wsady do tego panelu są w formacie intel HEX.

    Chciał bym edytować napisy, przekonwertowałem wsad na binarkę, potem znalazłem sumy które mnie interesują i pozmieniałem po wgraniu, Panel nie rusza.

    Przy zamianie dwóch bitów miejscami panel rusza i pokazuje pozamieniane litery.

    Dodam że liczyłem sumy kontrolne i wszystko było ok.

    Być może jest tam jeszcze jakaś suma ogólna.
    W załączniku plik w formacie intel HEX
    Jakieś pomysły?

    0 14
  • #2 12 Wrz 2013 20:05
    BlueDraco
    Specjalista - Mikrokontrolery

    Zapewne cały obraz ma sumę kontrolną w postaci sumy albo xor.

    0
  • #3 12 Wrz 2013 20:06
    t-naw
    Poziom 14  

    A orientuje się ktoś co to jest ta pierwsza linijka?

    0
  • #4 12 Wrz 2013 22:10
    piotrva
    Moderator Mikrokontrolery

    A ja obstawiam, że podczas zmieniania zmieniłeś po prostu długość napisów.
    Otóż program po kompilacji zawiera skoki - jeśli przesuniesz coś za napisem choćby o jeden bajt to potem skok np. do jakiejś funkcji/obsługi przerwania nie "trafi" w jej początek i wszystko się posypie. Stąd robiąc takie modyfikacje musisz zachować dokładnie długość oryginalnego napisu - innej modyfikacji nie znając świetnie assemblera i nie poddając programu deasemblacji nie zrobisz.
    Pierwsza linijka pliku hex to odpowiednie polecenie - wszystko masz nawet na wiki w opisie tego formatu http://en.wikipedia.org/wiki/Intel_HEX

    0
  • #5 12 Wrz 2013 23:47
    t-naw
    Poziom 14  

    Nie zmieniłem długości znaków.
    Próbowałem nawet zmienić jedną literę i ... klapa.

    0
  • #6 12 Wrz 2013 23:52
    piotrva
    Moderator Mikrokontrolery

    Długości znaków nie da się zmienić :D
    Co najwyżej ich ilość/długość ciągu.
    Jeśli nie zmieniłeś ilości liter (ale zastąpiłeś np. A literką B) i nie działa to znaczy, że (jak pisał kol. @BlueDarco) gdzieś liczona jest suma kontrolna (albo cały wsad, albo łańcuchy znakowe). Wtedy raczej mało co zdziałasz :D

    0
  • #7 13 Wrz 2013 01:03
    dioda1000
    Poziom 27  

    Wklej wsad który wgrywałeś.

    Ten co działał. "Przy zamianie dwóch bitów miejscami panel rusza i pokazuje pozamieniane litery. " - podaj adres gdzie zmienione bity.

    I ten co po zamianie litery nie działa -podaj adres gdzie zmienione litery.

    0
  • #8 13 Wrz 2013 17:06
    t-naw
    Poziom 14  

    piotrva napisał:
    Długości znaków nie da się zmienić


    Wiem Przejęzyczenie:)

    dioda1000 napisał:
    Wklej wsad który wgrywałeś.

    Ten co działał. "Przy zamianie dwóch bitów miejscami panel rusza i pokazuje pozamieniane litery. " - podaj adres gdzie zmienione bity.

    I ten co po zamianie litery nie działa -podaj adres gdzie zmienione litery.


    Wrzucam trzy pliki:

    -oryginał

    -zamienione
    - plik w którym zamieniłem 2 bity jest to linijka 886 niżej ją wklejam spacją oddzieliłem zamienione miejscami bity
    :10374000544552202000 5245 524F52204C4F4720A2

    -zmienione
    - również linijka 886 i jak widać suma kontrolna policzona
    :10374000544552202000 5445535431 204C4F4720BB

    Rozszerzenia zmienione na bin bo innych forum nie chce przyjąć.

    0
  • #9 13 Wrz 2013 20:29
    dioda1000
    Poziom 27  

    T E R - - - E R R O R - L O G -
    T E R - - - T E S T 1 - L O G -
    T E R - - - R E R O R - L O G -

    t-naw napisał:
    Jakieś pomysły?

    Nie będzie lekko.
    Pozostaje Ci 'disassemble atmega 2560'

    poz.dioda
    ps.pliki które nie mają prowizji nie są liczone 'Downloads'.

    0
  • #11 14 Wrz 2013 10:01
    t-naw
    Poziom 14  

    dioda1000 napisał:
    Nie będzie lekko.
    Pozostaje Ci 'disassemble atmega 2560'


    Jakiego disassemblera najlepie do tego użyć?

    0
  • #12 14 Wrz 2013 11:33
    tmf
    Moderator Mikrokontrolery Projektowanie

    Chociażby tego, który masz w Atmel Studio. Pytanie na ile znasz asembler? Wiesz chociaż w czym był napisany kod źródłowy? To był Bascom, C, czy czysty asembler? Przejrzyj kod startowy, jeśli gdzieś testowane są jakieś sumy, CRC itd. to raczej na początku kodu. Przede wszystkim podejrzane są o to fragmenty kodu zawierajace w długich pętlach instrukcje LPM/ELPM (zależy jak długi jest wsad). Ale to i tak kilka minut-kilka godzin dla fachowca, lub zadanie awykonalne dla osoby bez doświadczenia. Z drugiej strony jeśli zmiana pojedynczych bitów przechodzi, a bajtów już nie to raczej problem leży po twojej stronie - bo jeśli kod jest zabezpieczony np. CRC to zmiana nawet jednego bita by powodowała jego wysypanie się. Inaczej marne by to było zabezpieczenie.
    Powstaje też pytanie o legalność tego typu działań. O ile disasemblacja do nauki jest legalna, o tyle zmiana czejegos kodu już nie.

    0
  • #13 14 Wrz 2013 11:42
    t-naw
    Poziom 14  

    tmf napisał:
    Chociażby tego, który masz w Atmel Studio. Pytanie na ile znasz asembler? Wiesz chociaż w czym był napisany kod źródłowy? To był Bascom, C, czy czysty asembler? Przejrzyj kod startowy, jeśli gdzieś testowane są jakieś sumy, CRC itd. to raczej na początku kodu. Przede wszystkim podejrzane są o to fragmenty kodu zawierajace w długich pętlach instrukcje LPM/ELPM (zależy jak długi jest wsad). Ale to i tak kilka minut-kilka godzin dla fachowca, lub zadanie awykonalne dla osoby bez doświadczenia. Z drugiej strony jeśli zmiana pojedynczych bitów przechodzi, a bajtów już nie to raczej problem leży po twojej stronie - bo jeśli kod jest zabezpieczony np. CRC to zmiana nawet jednego bita by powodowała jego wysypanie się. Inaczej marne by to było zabezpieczenie.
    Powstaje też pytanie o legalność tego typu działań. O ile disasemblacja do nauki jest legalna, o tyle zmiana czejegos kodu już nie.


    Nie wiem w czym to było napisane, znam tylko mierne podstawy, ale próbować sobie mogę, albo nauczę się czegoś ciekawego, albo żeby więcej się za takie rzeczy nie zabierać i nie tracić czasu :).

    Wydaje mi się że to jest raczej marne zabezpieczenie i wiem też że zrobienie tego jest możliwe, raczej gdzieś tuy siedzi suma 8bit.

    Wszystko robię w warunkach domowych i nie mam zamiaru tego wykorzystywać dalej, .

    0
  • #14 14 Wrz 2013 14:02
    tmf
    Moderator Mikrokontrolery Projektowanie

    No to odpal atmel studio, wczytaj tego hexa, odpal symulator i pobaw się w śledzenie kodu. Jeśli to kompilat C to na początku będzie inicjalizacja zmiennych globalnych czyli kopiowanie z flash do SRAM. To można olać. Kolejny taki blok powinien być odpowiedzialny za liczenie jakiegoś zabezpieczenia kodu - szukaj jak pisałem LPM/ELPM. Przejrzyj też plik binarny, jeśli jest w nim jakaś dziura a po niej 1-4 bajtów to najpewniej jest to właśnie suma/CRC czy co tam programista wymyślił. Jak nie poszedł na łatwiznę i umieścił sumę gdzieś w kodzie to śledzenie wykonania programu pomoże. Z drugiej strony, jeśli panel "nie rusza" cokolwiek to znaczy, to odpal symulator, daj mu się powykonywać i go przerwij. Powinien utknąć w jakiejś pętli - wtedy można wstecznie prześledzić wywołania, np. analizując ramkę stosu. Generalnie jak pisałem - jeśli znasz asembler to znalezienie tego kodu zajmie góra godzinkę.

    0
  • #15 14 Wrz 2013 17:28
    t-naw
    Poziom 14  

    tmf napisał:
    jeśli jest w nim jakaś dziura a po niej 1-4 bajtów to najpewniej jest to właśnie suma/CRC czy co tam programista wymyślił


    Wydaje mi się że na końcu pliku jest jakaś suma
    :10EFF000FFFFFFFFFFFFFFFFFFFFFFFFFFFFDC2F14

    DC 2F
    jak liczę sumę kontrolną całego pliku w hex workshop to wychodzi 2f ale jak zmienie to np na FF to suma wychodzi FF, nie rozumiem tego

    Dodano po 23 [minuty]:

    hehe to jjuż chyba nie ma sensu atmel studio mnie przerasta:)

    Jak się nie umie "odpalić symulatora" to z czym do ludu:)

    0