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
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
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.
> 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...
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?
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 =)
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
>>>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.
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.
...
>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.
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.
...
>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! :)