mikrocontroller.net

Forum: Mikrocontroller und Digitale Elektronik ohne Bootloader keine main


Autor: Hartmut O. (hardy63)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo,

ist es möglich beim ATMega ( z.B. AT1284P ) den Startcode, sprich die 
main nicht auszuführen, wenn der Code nicht per Bootloader in den 
Controller eingespielt wurde. Wenn sich kein Bootloader auf dem 
Controller befindet oder der Code per ISP / JTAG aufgespielt wurde, wird 
die Anwendung nicht ausgeführt. Wenn es soetwas gibt: wie und wo wird 
soetwas programmiert???

Gruß
Hardy63

Autor: David P. (chavotronic)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Klar gibt es sowas. Wurde dir doch im Mikrokopter Forum bereits gesagt..

Autor: Hartmut O. (hardy63)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Genau das ist ja mein Problem: statt mir vorher das kleingedruckte 
durchzulesen habe ich einfach drauf losgebastelt und einen eigenen 
Controller ohne Bootloader verbaut. Nun suche ich eine Möglichkeit für 
mich, doch noch einen lauffähigen Code auf das Teil zu bekommen ... eben 
ohne Loader.

Autor: David P. (chavotronic)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hast du Holger oder Ingo mal angeschrieben?

Autor: Karl Heinz (kbuchegg) (Moderator)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Deine Frage macht keinen Sinn.

Wenn ein Programm frisch in den µC eingespielt wird, egal ob man dazu 
den Bootloader benutzt oder ob das über ISP geschieht, wird nach dem 
C-system-eigenen Startup Code immer main() ausgeführt.

Ob Bootloader oder ISP macht keinen Unterschied. Das sind nur 
unterschiedliche Transportmechanismen (zumindest bei einem der üblichen 
Bootloader) wie ein Programm in den µC kommt.

Was anderes ist es, wenn der Bootloader kein Bootloader im eigentlichen 
Sinne ist, sondern mehr eine komplette Laufzeitumgebung die schon mehr 
in Richtung Betriebssystem geht.

Dann muss man eben in einen nagelneuen µC erst mal den Bootloader per 
ISP einspielen und die Fusebits entsprechend richtig stellen, damit er 
auch ausgeführt wird.

Autor: Hardy63 (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo,
danke für die schnellen Antworten.

@chavotronic

hab ich gemacht ... und vorhin auch eine positve Antwort bekommen. Ich 
soll das Board mal einschicken und die werden sehen, was sie machen 
können.
Ich dachte schon, ich kann das Teil in die Tonne treten... hoffentlich 
klappt es.
Um es auch klar zu stellen: mir liegt es fern, irgendwie an ihrem code 
umherzupfuschen oder irgendwelche anderen Sachen zu machen. Hatte nur 
Panik, alles umsonst zusammengepappt zu haben.

@kbuchegg

das mit dem ISP und Bootloader ist mir schon irgendwie klar ... 
einschalten - ein paar Sekunden warten ob Daten gesendet werden, wenn ja 
empfangen und speichern, wenn nein, startup zur main()

Hab mich nun rein interessenhalber auch ein bischen mit dieser Materie 
auseinander gesetzt. Das mit dem als Bootloader getarnten 
"Mini-Betriebssystem" leuchtet mir ein, dass soetwas klappen könnte. Was 
ich nicht raffe ist, wie der nachfolgende Code an seiner Ausführung 
gehindert werden kann - vor allem wenn kein weiterer Code in der 
bootloader section vorhanden ist. ist chon merkwürdig.

Gruß
Hardy

Autor: David P. (chavotronic)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Ich erkläre das Problem mal genauer:
Es soll eine Art Kopierschutz sein. Die Firmware eines Mikrocontrollers 
soll nur auf bestimmten Platinen laufen (Hex Files sind frei verfügbar), 
und das Hauptprogramm sucht scheinbar nach einem bestimmten Bootloader 
bzw. sucht nach einem bestimmten Wert in einem bestimmten Adressbereich 
des Flash Speichers. Der Bootloader (nicht frei verfügbar)ist also 
sozusagen ein Dongle.

Autor: Detlev T. (detlevt)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Was heißt hier "die Hex-Files sind frei verfügbar"? Ich vermute einmal, 
es geht um Updates, die man irgendwo herunterlädt.

Ich sehe da nur die Möglichkeit, dass man die HEX-Files verschlüsselt 
und diese dann nur vom Bootloader entschlüsselt werden können. Das Flash 
muss man dann natürlich per Fuse gegen auslesen schützen.

Ein Hex-File im "Klartext" kann man eigentlich immer disassemblieren und 
patchen und so eine Dongle-Abfrage umgehen.

Autor: David P. (chavotronic)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
> Ich sehe da nur die Möglichkeit, dass man die HEX-Files verschlüsselt
> und diese dann nur vom Bootloader entschlüsselt werden können.

Das wirds wohl sein.

Autor: Andreas Schweigstill (Firma: Schweigstill IT) (schweigstill) Benutzerseite
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Detlev T. schrieb:
> Ich sehe da nur die Möglichkeit, dass man die HEX-Files verschlüsselt
> und diese dann nur vom Bootloader entschlüsselt werden können. Das Flash
> muss man dann natürlich per Fuse gegen auslesen schützen.
>
> Ein Hex-File im "Klartext" kann man eigentlich immer disassemblieren und
> patchen und so eine Dongle-Abfrage umgehen.

Das ist so nicht ganz korrekt. Auf der einen Seite kann eine Datei zwar 
verschlüsselt, aber dennoch veränderlich sein. Unter gewissen 
Voraussetzungen kann man dadurch durch Ausprobieren bestimmter 
Änderungen an einer Datei eine gewünschte Reaktion auslösen.

Im Gegensatz hierzu steht die kryptografische Signatur. Hierbei kann das 
Programm unverschlüsselt bleiben. Sogar der Bootloader, der die Prüfung 
der Signatur durchführt, kann jedem Dritten im Quelltext oder in 
kompilierter Form vorgelegt werden. Dennoch ist es Dritten nicht, 
veränderte Programme in das Gerät bzw. den Microcontroller einzubringen.

Der Trick besteht nämlich darin, ein kryptografisches Schlüsselpaar 
(z.B. RSA) zu erzeugen. Man berechnet einen starken Hashwert (z.B. 
SHA-x) über den Update-Inhalt und verschlüsselt diesen mit Hilfe des 
geheimen Schlüssels des o.a. Schlüsselpaares. Im Bootloader selbst 
hinterlegt man den öffentlichen Schlüssel. Der Bootloader berechnet dann 
selbst den Hashwert über den angebotenen Update-Inhalt und vergleicht 
diesen mit dem mit Hilfe des öffentlichen Schlüssels entschlüsselten 
Hashwertes, der sich im Header oder Anhang des Update-Inhalt befindet. 
Stimmen beide Hashwerte überein, gilt der Update-Inhalt als zulässig. 
Ansonsten wird er abgelehnt.

Solch ein Verfahren ist sehr einfach zu implementieren und genügt auch 
sehr hohen Sicherheitsanforderungen.

Die meisten AVRs sind jedoch zu schwach auf der Brust, um die 
erforderliche Zwischenspeicherung des Update-Inhaltes durchführen zu 
können. Die SHA- und RSA-Routinen benötigen auch noch etwas Platz und 
Rechenleistung.

Antwort schreiben

Die Angabe einer E-Mail-Adresse ist freiwillig. Wenn Sie automatisch per E-Mail über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.

Wichtige Regeln - erst lesen, dann posten!

  • Groß- und Kleinschreibung verwenden
  • Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang

Formatierung (mehr Informationen...)

  • [c]C-Code[/c]
  • [avrasm]AVR-Assembler-Code[/avrasm]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel
  • Verweis auf anderen Beitrag einfügen: Rechtsklick auf Beitragstitel,
    "Adresse kopieren", und in den Text einfügen




Bild automatisch verkleinern, falls nötig
Bitte das JPG-Format nur für Fotos und Scans verwenden!
Zeichnungen und Screenshots im PNG- oder
GIF-Format hochladen. Siehe Bildformate.
Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt.
Bitte hier nur auf die ursprüngliche Frage antworten,
für neue Fragen einen neuen Beitrag erstellen.

Mit dem Abschicken bestätigst du, die Nutzungsbedingungen anzuerkennen.