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?
>Kann ja auch sein, daß[...]
nein, das ausgelesene hexfile hat exakt die werte, die ein
kopiergeschuetzter atmel ausspuckt...
Frag doch den coder. Für ein paar k€ wird er die bestimmt den Quellcode geben.
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 =)
>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,.. 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! :)
Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.