[VB] Unerlaubte Dateien/bester Kopierschutz ?

TSHM

Lt. Commander
Registriert
Mai 2004
Beiträge
1.370
Ich habe ein komisches Phänomen unter Visual Basic vorgefallen.
Ich habe mit Visual Basic eine Datei erstellt, die es eigentlich nicht geben dürfte, da sie unerlaubte Zeichen enthält. Aber auch nur in einem entsprechenden Zusammenhang.

Und wieso komme ich dann auf "bester Kopierschutz"?
Ganz einfach: Wenn ich den Source-Code bei mir ausgebe, funktionierts bei mir - aber nur bei mir. Wenn mein Kollege den Source-Code ausgibt, funktionierts bei ihn - aber auch nur bei ihm. Selbst wenn das System genau identisch ist, funktionierts nur bei dem Computer, bei dem es ausgegeben wurde.

Zuerst dachte ich wieder an einen Visual Basic fehler, denn ich hatte vor Jahren mit VB 4 einmal eine Uhr programmiert, die unter NT mit der richtigen Geschwindigkeit, aber unter XP um ein drittel langsamer ging.

Doch als ich den Code noch einmal in Einzelschritten durchging, fand ich die Ursache heraus.

VB hatte schon viele komische Dinge gemacht - aber so was ist mir noch nie passiert. Wie geht sowas überhaupt? Schließlich meldet er anderswo, wenn ich falsche Dateinamen angebe, eine Fehlermeldung, hier aber nicht.

-Matthias

P.S.: Die entsprechende Codestelle reiche ich nach.
 
AW: Unerlaubte Dateien/bester Kopierschutz ?

welche Version nutzt du bei VB?
Die sechser oder die .net
 
AW: Unerlaubte Dateien/bester Kopierschutz ?

Die Version 6 Pro.
Die Codestelle:
Code:
    On Error Resume Next
        MkDir "Reports\"
    On Error GoTo 0
    
    gstrPath = "Reports\" + strTopic + "[B][COLOR="Red"]:[/COLOR][/B] " + Str(Date) + Chr(9) + Mid(Str(Time), 1, 2) + "[B][COLOR="Red"]|[/COLOR][/B]" + Mid(Str(Time), 4, 2) + "[B][COLOR="Red"]|[/COLOR][/B]" + Mid(Str(Time), 7, 2) + ".txt"
        Open gstrPath For Random As #1
        Close
        
        Open gstrPath For Output As #1
        [...]
        Close
Wie dabei der Dateiname ausieht, könnt ihr euch denken :lol:
 
AW: Unerlaubte Dateien/bester Kopierschutz ?

Hallo TSHM,

also wenn ich ehrlich bin, habe ich nur verstanden das Du eine Datei mit einem ungültigen Dateinamen erzeugst.

Was aber jetzt geht und was nicht geht ist mir nicht klar?
Was meinst Du mit Sourcecode ausgeben?

Und eine Datei mit Sonderzeichen würde ich mir mal zutrauen sie zu öffnen.
Als Kopierschutz würde ich das nur als relativ geringe Hürde ansehen.
Der einfachste Weg wäre z.B. mit einem Diskeditor den Namen der Datei direkt in einen gültigen Namen zu ändern.

MfG

Arnd
 
Zuletzt bearbeitet:
AW: Unerlaubte Dateien/bester Kopierschutz ?

Du fügst einen Doppelpunkt in den String mit Pfad und Dateinamen ein. Das führt dazu, dass für eine existierende Datei ein zusätzlicher Dateistream angelegt wird (mit dem Namen, der nach dem Doppelpunkt folgt). Das ist eine ganz normale Eigenschaft des NTFS5 Dateisystems. Wenn man die Datei jetzt auf ein Dateisystem kopiert, dass diese zusätzlichen Streams nicht enthalten kann, gehen die Informationen einfach verloren. Passiert z.B. beim Kopieren auf ein FAT System, beim Transport über FTP berücksichtigt das bestimmt auch sogut wie kein Programm und die Dateisysteme auf Linux/UNIX-Platformen haben dafür meines Wissens nach auch keine Entsprechung. Damit ist der Effekt eigentlich schon entmystifiert und es ist hoffentlich auch klar, wie man die Dateien trotzdem kopieren kann ;)
 
AW: Unerlaubte Dateien/bester Kopierschutz ?

@Arnd: Ich wandle den Quellcode in eine Anwendung (exe) um.
Was aber jetzt geht und was nicht geht ist mir nicht klar?
Nochmal: Wenn ich die Anwendung bei mir erzeuge, funktioniert sie bei mir - nur bei mir, selbst wenn ein anderer Computer genau der gleiche wie meiner ist.
Wenn ich die Anwendung bei einem Kollegen erzeuge, funktioniert sie auch nur bei ihm.
/EDIT 2: Das mit dem Ändern geht auch nicht, da die Datei sofort nachdem sie erstellt wird verwendet (Siehe Code - Zuerst wird mit Random erstellt und dann sofort mit Output zugegriffen) wird. Und genau in diesem Moment tritt der Fehler auf.

@7H3 N4C3R: Und was ist dann mit "|" ? Ist ja auch ein Unerlaubtes Zeichen.
Wenn man die Datei jetzt auf ein Dateisystem kopiert, dass diese zusätzlichen Streams nicht enthalten kann, gehen die Informationen einfach verloren.
Es funktioniert ja auch nicht, wenn ich es von den genau Identischen Rechner kopiere. Wenn die Anwendung auf dem andereren Rechner mit NTFS5 gestartet wird, müsste sie genauso die Dateistreams anlegen. Ist aber nicht der Fall.
/EDIT: Die Daten werden ja schließlich von Programm erzeugt (Siehe Code Open ... for Random as #1), und nicht nur ausgelesen (Open ... for Output as #1)
 
Zuletzt bearbeitet:
AW: Unerlaubte Dateien/bester Kopierschutz ?

TSHM schrieb:
Und was ist dann mit "|" ? Ist ja auch ein Unerlaubtes Zeichen.
Kann sehr gut sein, dass nach dem : diese Regel nicht mehr zutrifft. Weiß ich jetzt aber nicht 100%ig, das müsste ich selbst erst nachschauen.

Wie hast Du denn die Dateien auf einen anderen Rechner transferiert? Ich wüsste jetzt nicht, ob schon beim Kopieren über SMB ("Netzwerkfreigabe") diese Informationen verloren gehen. Würde mich aber nicht wundern wenn.


Ansonsten muss ich Arnd zustimmen, dass ich verwirrt bin, was du überhaupt meinst.

Was meinst Du denn mit "Sourcecode ausgeben"?


P.S. : Rettet dem Dativ! ;)
 
Zuletzt bearbeitet:
AW: Unerlaubte Dateien/bester Kopierschutz ?

Ok, also nochmal von vorne.

Du hast eine Anwendung, die du kompilierst (=Quellcode ausgeben). Wenn Du dieses auf Deinem Rechner machst und auch sofort startest läuft diese Anwendung problemlos.

Diese Anwendung erzeugt eine Datei und macht etwas mit diesem Inhalt.
Dies funktioniert nur wenn es auf Deinem Rechner kompiliert wurde bzw nur auf dem Rechner auf dem es kompiliert wurde.

Das ist eigentlich nicht möglich. Da dein Programm es nicht unterscheiden kann ob es auf diesem Rechner kompiliert wurde. Was aber sein kann, ist das es auf einem Rechner auf dem keine Entwicklungsumgebung installiert ist nicht läuft. Dann fehlen diverse DLLs oder Runtimes. Sprich die Fehlerursache ist wohl eine andere.

Die Idee mit den NTFS Streams ist ein guter Ansatz.

Wenn Du jetzt auf deinem Rechner das Exe das erste Mal startest, wird die Datei erzeugt mitsamt Inhalt. Der Inhalt landet aber in einem NTFS Stream.

Wenn jetzt die Anwendung samt Datei auf einen Rechner kopiert wird, der kein NTFS hat oder dabei ein Medium benutzt wird (z.B. USB Stick), der nicht mit NTFS formatiert ist. Dann wird der Inhalt der Datei bzw der NTFS Stream nicht kopiert.

Die Anwendung auf dem neuen Rechner legt die Datei jetzt nicht neu an da der Dateiname ja existiert.
Leiderweise fehlt aber der Inhalt, bzw kann der NTFS Stream nicht geöffnet werden, also läuft das Programm nicht.

Ist das plausibel? Falls nicht beschreibe mal en Detail genau was Du machst und was geht und was nicht.

MfG

Arnd
 
Zuletzt bearbeitet:
AW: Unerlaubte Dateien/bester Kopierschutz ?

Das ist eigentlich nicht möglich. Da dein Programm es nicht unterscheiden kann ob es auf diesem Rechner kompiliert wurde. Was aber sein kann, ist das es auf einem Rechner auf dem keine Entwicklungsumgebung installiert ist nicht läuft. Dann fehlen diverse DLLs oder Runtimes. Sprich die Fehlerursache ist wohl eine andere.
Doch das ist genau der Fall. Deswegen ist es ja so komisch!
Ich habe es zum Beispiel im EDV Raum probiert. Alle haben exakt die gleiche Hard- und Software. Ich kompiliere auf zwei Rechnern. Auf den Rechnern selbst funktionierts, auf den jeweils anderen nicht, obwohl sie beide die gleichen Dateien haben, sie haben ja schließlich beide kompiliert :freak: :lol:

/EDIT:
Wie hast Du denn die Dateien auf einen anderen Rechner transferiert
Verschieden. Ich habe die exe über USB-Stick und Netzwerk kopiert. Aber eben nur die exe. Die Dateien werden ja erst später erstellt, oder nicht?
/EDIT2: Naja, ich weiß nicht immer genau, wie ichs nennen soll, kompilieren, ausgeben ... Einfach gesagt, ich mache den Source-Code zu einer exe.
 
Zuletzt bearbeitet:
AW: Unerlaubte Dateien/bester Kopierschutz ?

Hallo TSHM,

Sourcecode wird z.B. auf den Drucker ausgegeben, das erstellen einer exe Datei wird im allgemeinen Sprachgebrauch compilieren oder übersetzen genannt.

Und zu Deinem Problem wenn Du nicht etwas näher erläuterst was mit dieser Datei gemacht wird, wann sie erstellt wird und was davon abhängt, kann ich eigentlich nur raten wo das Problem liegt. Und das ist nicht sonderlich effektiv.

Lass Dir mal das mit den NTFS Streams durch den Kopf gehen ob da das Problem liegen kann.

MfG

Arnd
 
Zurück
Oben