www.mikrocontroller.net

Forum: Mikrocontroller und Digitale Elektronik Kopierschutz bei ATmega8?


Autor: sm4ck (Gast)
Datum:
Angehängte Dateien:

Bewertung
0 lesenswert
nicht lesenswert
Hallo,

ich habe folgendes Problem. Ich versuche verzweifelt einen ATmega8 
auszulesen. Ich wollte eigentlich nur den µC kopieren. Nur funktioniert 
der µC mit der kopierten sofware nicht. Gibt es für die AVR´s einen 
kopierschutz oder sonstiges? kann man den umgehen?
Als Anhang die Ausgelesene Software! (Sieht irgendwie komisch aus)

gruß sm4ck

Autor: Frank (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
ja es gibt einen Ausleseschutz. Steht aber alles im Datenblatt. Wenn der 
Schutz gesetzt ist wird das sicherlich seinen Grund haben und der Schutz 
lässt sich mit vertretbarem Aufwand nicht umgehen. Den Chip komplett 
löschen sollte aber gehen, dann hättest du 2 Chips auf Denen keine 
Software läuft...

bye

Frank

Autor: nop(); (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Ja, die Welt hat n'paar Spielverderber, die nicht die paar Zeilen Code 
rausruecken wollen. Was stellen die sich denn vor ? Muss man denn nun 
selbst Code schreiben ? Echt muehsam.

Autor: Winfried (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Das gehört mit zu einen guten Spiel, selber zu coden ;-)

Autor: Frank (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
it's happy reengineering Time!!!

Autor: Bernd T. (bastelmensch)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
> Gibt es für die AVR´s einen kopierschutz oder sonstiges?
> kann man den umgehen?

Es gibt einen Ausleseschutz. Und da es kein Medium gibt wie bei 
PC-Software, sondern der Chip das Programm in seinem Flash hat, kannst 
Du da eigentlich nichts machen. Ausser natürlich die Sache selber 
programmieren...

Autor: Gast (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Kann ja auch sein, daß der Eprom bestimmte voreingestellte Werte hat, 
die Das Programm abfragt (Wird der Eprom auch mit ausgelesen?). Oder daß 
der originale mit anderer Taktfrequenz arbeitet oder mit anderen 
Fuse-Einstellungen. Warum willst Du den Chip "kopieren"? Programmiere 
ihn einfach so, wie Du den ersten programmiert hast. Wenn Du das nicht 
selbst warst, wende Dich an den, der es getan hat. Wo ist das Problem? 
Blöd wenn man nicht einfach alles klauen kann? Oder nur die 
Projektunterlagen / die Dokumentation verschlumpert? Alter Programmierer 
gestorben?

Autor: fnah (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
>Kann ja auch sein, daß[...]
nein, das ausgelesene hexfile hat exakt die werte, die ein 
kopiergeschuetzter atmel ausspuckt...

Autor: Gast (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Frag doch den coder. Für ein paar k€ wird er die bestimmt den Quellcode 
geben.

Autor: Kai Scheddin (zeusosc)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Also ich habe mich mal gerade mal a bissl im datasheet umgeguckt,..
wenn lb2=0 also active gilt der ausleseschutz, lb1=0 dann gilt der 
schreibschutz,.. vlt hast du glück und es ist lb2=0 und lb1=1 (der im 
datenblatt aus sicherheitsgründen nicht erwähnte lock bit modus 4),..

wenn das der fall ist könnteste mit einem eigenen programmer die ganze 
sache austricksen,..
es wird ein sprungbefehl in addresse 0x0000 geschrieben, und zwar
ist die syntax:
JMP k         0 ≤ k < 4M              PC <- k                  Unchanged
der 32-bit Opcode:
1001 010k kkkk 110k kkkk  kkkk kkkk kkkk

welcher anscheinend auch auf 22bit addressen ausgelegt ist,...
naja gut,..
da wir einen 16bit controller vor uns haben wird der opcode wohl
1001 0100 0000 1100 kkkk kkkk kkkk kkkk aussehen,...

was dann wohl 940c (oder je nach programm auch 0c94) ist,. dahinter 
kommt eine addresse ende des speicherbereiches,... also sagen wir mal 
0x2000 - größe des schädlichen codes,... wie ich das in errinerung habe 
eine usart initialisierung + lpm kostet nicht mehr als 500bytes
=>940c 1e0c
und dann natürlich noch den schädlichen code an der stelle 1e0c,...
aber das alles geht nur wenn
LB1=1,... und du einen eigenen programmer schreibst der den code nur an 
der spezifischen stelle einfügt,..


grüüüüße =)

Autor: fnah (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
>es wird ein sprungbefehl in addresse 0x0000 geschrieben[...]
doof nur, wenn da schon was anderes als 0xff steht wuerde...

Autor: fnah (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
hmpf, "stehen wuerde"

Autor: Kai Scheddin (zeusosc)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
ja,.. das tut es auch meistens,.. aber ich denke mal das sich der rest 
ausm context zurückbilden lässt,.. man hat dan jedenfalls rund 7,5kb an 
daten,.. wenn der orginalsource kleiner ist als 7,5kb hat man sogar 
soviel glück das man wahrscheinlich die stack init nur neu schreiben 
muss was ja ziemlich leicht gehen sollte,...

ich werde mir mal am we zwei mega8 besorgen und das mal ausprobieren,...

grüüüßße

Autor: fnah (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
>>>es wird ein sprungbefehl in addresse 0x0000 geschrieben[...]
>>doof nur, wenn da schon was anderes als 0xff steht wuerde...
>ja,.. das tut es auch meistens,..
ich meine den inhalt von adresse 0x0000, nicht den inhalt der letzten 
500bytes. dort ist die wahrscheinlichkeit ja recht hoch, dass 0xff drin 
steht.

Autor: Hannes Lux (hannes)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Kai Scheddin wrote:
> ja,.. das tut es auch meistens,.. aber ich denke mal das sich der rest
> ausm context zurückbilden lässt,.. man hat dan jedenfalls rund 7,5kb an
> daten,.. wenn der orginalsource kleiner ist als 7,5kb hat man sogar
> soviel glück das man wahrscheinlich die stack init nur neu schreiben
> muss was ja ziemlich leicht gehen sollte,...

Ab Adresse 0 liegt aber bei einem ernstzunehmenden Programm nicht die 
Stack-Init, sondern die Interrupt-Sprungtabelle. ;-)

>
> ich werde mir mal am we zwei mega8 besorgen und das mal ausprobieren,...
>
> grüüüßße

Noch schütze ich meine Programme nicht gegen Auslesen, aber ich kann es 
sehr gut verstehen, dass manch Einer etwas dagegen hat, wenn sein 
geistiges Eigentum von Raubkopierern gestohlen wird. Es hat einfach mit 
"Anstand" zu tun, sich seine Controllerprogramme selbst zu schreiben 
oder dort zu kaufen, wo man das Original her hat.

...

Autor: fnah (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
>Ab Adresse 0 liegt aber bei einem ernstzunehmenden Programm nicht die
>Stack-Init, sondern die Interrupt-Sprungtabelle. ;-)
an adresse 0 sollte der reset-vector stehen. das ist auch genau das, was 
er ueberschreiben will...
der witz ist nur, dass da halt schon der reset-vector steht und es 
sich um _flash_-speicher handelt. man muesste vorher wenigstens die 
erste page loeschen, was aber von aussen nicht geht, oder halt ganz 
normal nen chip-erase-kommando absetzen, damit man beliebigen inhalt da 
hin schreiben kann. danach ist die ganze aktion aber eh hinfaellig.

Autor: Hannes Lux (hannes)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
fnah wrote:
>>Ab Adresse 0 liegt aber bei einem ernstzunehmenden Programm nicht die
>>Stack-Init, sondern die Interrupt-Sprungtabelle. ;-)
> an adresse 0 sollte der reset-vector stehen. das ist auch genau das, was
> er ueberschreiben will...

Klar steht "AN" Adresse 0 der Reset-Sprung, deshalb schrieb ich ja "AB" 
Adresse 0... Und den Reset-Sprung zähle ich mit zur 
Interrupt-Sprungtabelle, so kleinlich sehe ich das nicht. Denn wenn ich 
es kleinlich sehe, dann verstehe ich (in diesem Zusammenhang) unter 
einem Vektor die nakte Adresse des Sprungziels (wie beim Z80 oder 6502) 
und nicht den kompletten Sprungbefehl (wie beim AVR). ;-)

> der witz ist nur, dass da halt schon der reset-vector steht und es
> sich um _flash_-speicher handelt. man muesste vorher wenigstens die
> erste page loeschen, was aber von aussen nicht geht, oder halt ganz
> normal nen chip-erase-kommando absetzen, damit man beliebigen inhalt da
> hin schreiben kann. danach ist die ganze aktion aber eh hinfaellig.

Lass sie machen, ich finde es jedenfalls gut, dass man AVRs recht 
wirksam vor dem Auslesen des Programms durch Nachbau-Bastler schützen 
kann.

...

Autor: fnah (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
>Klar steht "AN" Adresse 0 der Reset-Sprung, deshalb schrieb ich ja "AB"
>Adresse 0...
ich hatte auch nicht angezweifelt, dass du nicht weisst, was da 
normalerweise steht. wollte das nur noch mal fuer die allgemeinheit 
klarstellen, was er vorhat. war bloed ausgedrueckt.

>Lass sie machen, [...]
eigentlich wollte ich das kleine detail ueber den flashspeicher auch 
nicht direkt verraten. sonst haette ich es nicht von anfang an zwischen 
den zeilen formuliert. egal, happy reengineering! :)

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.