PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : Anfänger Frage: Realisation eines Software-Dongles



MALIBOO
17.02.2007, 19:29
Hallo,
ersteinmal muß ich dieses Forum loben =D>

Da ich in Punkto BASCOM AVR noch blutiger Anfänger bin, benötige ich eine kleine Starthilfe!

Zu meiner Problem:
Da ich mich mehr im Software-Bereich bewege und Visual Basic mein Steckenpferd ist, suche ich eine einfache Möglichkeit meine Software über ein Dongle an der seriellen Schnittstelle zu schützen. Hardwaretechnisch soll ein ATtiny2313 über einen MAX232 mit der seriellen Schnittstelle verbunden werden. Der ATtiny soll das vom PC gesendete Zeichen lesen, intern aus einer Tabelle diesem Zeichen einen anderen Wert zuordnen und diesen dann wieder zum PC zurückschicken. Die SW kennt die selbe Tabelle und schaltet alle Funktionen frei.

Hab zwar mit Bascom AVR schon "rumgespielt" aber irgendwie kom ich noch nicht mit allen Funktionen klar....

Über jede hilfreich Antwort oder einem Beispiel würde ich mich sehr freun'

Gruß
Ralf

dremler
17.02.2007, 20:06
hi ich bin zwar auch noch ein relativer anfänger aber ich denke ich kann zumindest ein paar theoretische denkanstöße geben....

aber erst musst du ein paar infos geben zb unter welchen betriebssystem läuft dein VB programm? da man unter xp anscheinen nicht mehr sauber daten über die schnittstellen schicken kann( das multitasking system funkt dazwischen....)

ich würde als grund prinzip folgendes nehmen:

einfach:

der pc also das VB programm sendet ein bestimmtes signal über die verschiedenen anschlüsse der schnittstelle....der µC erkennt diese und sendet ein anderes signal zurück. dein VB programm erkennt diese folge und weiß "ich darf hier laufen"

zb: du hast 3 leitungen zum senden und die erste ist 3 sek an die 2. nach 1 sek. eine sek lang an und die 3. leitung geht aller halbe sekunde an und aus....

nachteil: lässt sich einfach aufzeichen und knacken

schwer(zumindest für meine begriffe):

du entwickelst einen algorythmus uns sendest jedes mal eine zahl verschlüsselt über die 3 leitungen ......der µC sendet eine verschlüsselte zahl zurück und dein programm weiß "ich bin echt und darf laufen"

zb: programm sendet eine zahl ......der µC kann die daten entschlüsseln und kann zb die zahl "x5" rechnen und diese zurücksenden ....dein programm rechnet diese zahl nun zurück auf die ursprungszahl vergleicht beid und wenn sie gleich sind läuft alles.....(ist ein sehr einfaches beispiel wie ichs machen würde....

Rofo88
17.02.2007, 20:37
a man unter xp anscheinen nicht mehr sauber daten über die schnittstellen schicken kann

Klar kann man auch unter XP sauber auf die serielle Schnittstelle zugreifen. Was nicht geht ist direkt Hardwaremäßig auf die RS232 zuzugreifen, aber über diverse Apis geht das Softwaremäßig wunderbar.

@MALIBOO
Wo hängt es in Bascom. Werte empfangen über die serielle oder mit der Tabelle?

Schaue dir mal die LookUp-Funktion an.

MfG

MALIBOO
17.02.2007, 20:45
hmm...
also die Daten mit VB auf XP stellen kein Problem dar. Alles was ich sende kommt auch an. Sonst soll es ganz einfach geh'n.
Daten rein -> umwandeln -> Daten zurück an PC.
Was ich wissen möchte, könnte man nicht das Beispiel aus Bascom serin_out.bas entsprechend abändern?

dremler
17.02.2007, 20:51
bei xp gibt es aber das problem, dass das betriebssystem manschmal die übertragung unterbricht...selbst was sendet( zb überprüft ob ein drucke an der schnittstelle hängt) und dann weitersendet.....das stört den ganen datenverkehr...

serin_out.bas???
poste das bitte noch mal in einem code fenster....(den code selbst)

Pascal
17.02.2007, 20:58
bei xp gibt es aber das problem, dass das betriebssystem manschmal die übertragung unterbricht...selbst was sendet( zb überprüft ob ein drucke an der schnittstelle hängt) und dann weitersendet.....das stört den ganen datenverkehr...

Bist du dir da sicher? Ich hab davon noch nie was gehört und noch nie Probleme damit gehabt. Gibt es Drucker für die serielle Schnittstelle? Ich hab bisher nur welche für den Parallelport und halt das moderne Zeugs wie USB gesehen.

MALIBOO
17.02.2007, 21:05
Ich hab's etwas abgeändert, nur, das hier die gesendeten Daten nicht verändert werden.


' 10MHz Quarz
$crystal = 10000000

$regfile = "ATtiny2313.dat"

'Variable
Dim S As String * 10
Dim Mybaud As Long

Mybaud = 9600

Do
'Daten empfangen
Serin S , 0 , D , 2 , Mybaud , 1 , 8 , 1

'Daten senden
Serout S , 0 , D , 3 , Mybaud , 1 , 8 , 1

Wait 1
Loop

End

Geht das vom Prinzip?

Rofo88
17.02.2007, 21:09
@dremler
Wenn ich die Schnittstelle mit meinem Programm geöffnet habe kann da kein anderes Programm (auch ned XP) was machen.


@MALIBOO
das Dta müßte dann natürlich größer werden

If Ucsra.rxc = 1 Then 'Falls ein Byte im UART-Puffer...
Empfang = Udr 'Byte einlesen
Senden = Lookup(Empfang , Dta) 'Byte zum Senden aus Tabelle lesen
Udr=Senden


End If

Dta:

Data 1 , 2 , 3 , 4 , 5

Pascal
17.02.2007, 21:17
Ist diese Variante mit einer look-Tabelle nicht ziemlich unsicher? Den Datenverkehr kann man ja einfach abhören und dann müsste man das Programm nur oft genug senden lassen, sodass man möglichst alle Schlüsselpaare bekommt und schon kann man den dongle nachbauen.
Allerdings weiß ich nicht, wie realistisch das Szenario ist. Wie oft würde der dongle zum Einsatz kommen? Bei jedem Programmstart? Wie viele Schlüsselpaare willst du verwenden?

MALIBOO
17.02.2007, 21:21
Der Dongle soll kein 100% Schutz sein. Sicher kann man den ausspionieren, aber so interessant sind die Programme dann auch wieder nicht, das sich der Aufwand lohnt. Der Dongle soll nur billig zu realisieren sein.

Rofo88
17.02.2007, 21:24
@Pascal

Mit der unzureichenden Sicherheit hast Du recht. Ich würde vom PC ein paar mehr Bytes senden lassen und diese miteinander Verrechnen und dann erst in die Tabelle schauen. Sicher ist das immer noch nicht sonst würde heutzutage jede Software mit Dongle ausgeliefert, aber es erchwert den Diebstahl schon ein bissel.

Pascal
17.02.2007, 21:51
@ Rofo88: Die Idee, dass erst ein paar Werte miteinander verrechnet werden, ist sehr gut. Dadurch dürfte die Sicherheit doch beträchtlich steigen. Dann muss man ja zusätzlich noch rausfinden, wie die Werte verrechnet werden und das können ja durchaus einige Werte sein.
Und das beste daran ist, der Hardwareaufwand steigt dadurch ja nicht, sodass die Kosten gleich bleiben.

-tomas-
18.02.2007, 10:41
@MALIBOO
ohne jetzt tiefer in Dein Visual Basic Projekt einzusteigen:
preisgünstige Dongle zum Softwareschutz:
http://www.matrixlock.de/bestell_demo.htm
3xUSB Dongle (60Byte) zu 40EUR
... was willst Du denn da selber entwickeln, löten, Gehäuse basteln?
Außerdem ist die RS232 heutzutage nur auf wenigen Rechnern anzutreffen.
Von der Stromversorgung ganz zu schweigen.

MALIBOO
18.02.2007, 14:07
@tomas

Kurz mein Projekt:
BMW-Diagnosesoftware mit Interface - Software und Kommunikation (seriell) mit dem KFZ läuft. Im Interface soll gleichzeitig der Dongle integriert sein.

Gruß
Ralf

-tomas-
18.02.2007, 14:54
na wenn das so ist :-)

MALIBOO
18.02.2007, 18:29
Ich hab diesen Code mal mit der besagten Schaltung ausprobiert. Das vom PC kommende Zeichen wird an Pin 2 des µC geschickt, kommt aber nicht an Pin 3 an! Wo ist der Fehler? Geht das mit dem Code nicht?


' 10MHz Quarz
$crystal = 10000000

$regfile = "ATtiny2313.dat"

'Variable
Dim S As String * 10
Dim Mybaud As Long

Mybaud = 9600

Do
'Daten empfangen
Serin S , 0 , D , 2 , Mybaud , 1 , 8 , 1

'Daten senden
Serout S , 0 , D , 3 , Mybaud , 1 , 8 , 1

Wait 1
Loop

End

Gruß
Ralf

magic33
19.02.2007, 19:08
eigentlich wurde doch nach einen dongel gefragt

hier mal ein beispiel wie man das selber machen kann

tut alles was von ihm verlangt wird via bascom fusebits setzen und flash eeprom programmierung
alles im laufenden betrieb der chip ist via steckerleiste mit einem steckbord zu verbinden und kann somit voll isp genutzt werden Reset wird über lpt geswitcht

MALIBOO
20.02.2007, 19:16
Hab's immer noch nicht hinbekommen....
Vielleicht liegts ja an den Fusebits, weiss einfach nicht, wie ich meinen Programmer (GALEP IV) einstellen muß. Bin da etwas verwirrt. Beim GALEP kann man nicht überall 0 oder 1 einsetzen sondern nur abhaken. Null soll ja dann programmiert heißen, dann sollte logisch gesehen doch kein Haken auch programmiert heißen .....oder???

Wie muß ich die nun einstellen wenn ich extern mit 10MHz arbeiten möchte.

Sorry, aber erste "Geh-Versuche" O:)

magic33
22.02.2007, 17:33
nimm doch einfach baskom und so ein ding wiie in eins oben drüber 5euro bauteile oder bei schies mich 10 +versand

dann sind deine probleme für alle zeit in sachen avr 8bit risc gelöst