Autor Beitrag
avoid
ontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic star
Beiträge: 230
Erhaltene Danke: 4

MSDos, WinXP32, Win764, Win10, Android, Debian
msl (mIRC edit), html & php & Java (DreamweaverMX), Basic (picaxe PE6), C (Arduino IDE), C# (vs2010,2015,2017,2019,Unity,Android Studio)
BeitragVerfasst: Sa 30.11.13 11:08 
ich suche ein Tool das dafür sorgen kann das sich eine schon lauffähige exe ausführen aber nicht kopieren lässt.

da leserechte dafür sorgen das man Dateien nicht nur ausführen sondern auch kopieren kann,
müsste es doch sicher irgend ein Tool geben mit dem man eine exe in einer Art Container Kopierschützen kann.

Es ist mir wichtig das die kopiergeschützte aber ausführbare Datei später ohne Installation von Treibern
oder anderer Software von einem USB-Stick aus arbeiten kann.

hat da jemand einen Tipp wie ich das hin bekommen kann?
p. s. nein die exe kann ich nicht verändern um den Kopierschutz zu integrieren.

Gruß,
avoid

_________________
Gute Fragen sind wie ein wissenschaftliches Experiment. Sie setzen eine Menge Wissen bereits voraus.
bitcoin:1J5dgQQp8eUy8wkUxyztBUVCkCpo5MQEQs?label=Danke
avoid Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic star
Beiträge: 230
Erhaltene Danke: 4

MSDos, WinXP32, Win764, Win10, Android, Debian
msl (mIRC edit), html & php & Java (DreamweaverMX), Basic (picaxe PE6), C (Arduino IDE), C# (vs2010,2015,2017,2019,Unity,Android Studio)
BeitragVerfasst: Sa 30.11.13 12:29 
ich hab mal versucht mir selbst was zusammen zu coden.
ich habe eine exe als Resource geladen und diese dann aus meiner Anwendung extrahiert und gestartet.

ausblenden C#-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
19:
20:
21:
22:
23:
string filetempPath = Path.Combine(System.IO.Path.GetTempPath(), "irpt.exe");
if (!string.IsNullOrEmpty(filetempPath) && File.Exists(filetempPath))
{
    try
    {
        File.Delete(filetempPath);
        using (FileStream fsDst = new FileStream(filetempPath, FileMode.CreateNew, FileAccess.Write))
        {
            byte[] bytes = global::ShellExecute.Properties.Resources.RFID_test2;
            fsDst.Write(bytes, 0, bytes.Length);
        }
    }
    catch { }
}
else
{
    using (FileStream fsDst = new FileStream(filetempPath, FileMode.CreateNew, FileAccess.Write))
    {
        byte[] bytes = global::ShellExecute.Properties.Resources.RFID_test2;
        fsDst.Write(bytes, 0, bytes.Length);
    }
}
System.Diagnostics.Process.Start(filetempPath);

leider hab ich damit aber noch keinen Kopierschutz der eigentlichen Datei weil diese dann auf dem Rechner liegt.
auch wenn ich in meiner Anwendung nun Passwortabfrage für den Start oder eine Fixierung auf einen Ursprungs Pfad Realisieren könnte.

ich werde auf jeden fall mal dafür sorgen das sich mein Programm nach dem Starten der Extrahierten exe versteckt.
zusätzlich werde ich wohl das aufgerufene Programm überwachen (ob es noch gestartet ist)
und wenn es beendet wird die extrahierte Datei wieder löschen.
nach dem löschen beendet sich dann mein Programm selbst.

kommt mir aber wie eine Bastellösung vor, geht doch sicher auch anders.

_________________
Gute Fragen sind wie ein wissenschaftliches Experiment. Sie setzen eine Menge Wissen bereits voraus.
bitcoin:1J5dgQQp8eUy8wkUxyztBUVCkCpo5MQEQs?label=Danke
jaenicke
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 19315
Erhaltene Danke: 1747

W11 x64 (Chrome, Edge)
Delphi 11 Pro, Oxygene, C# (VS 2022), JS/HTML, Java (NB), PHP, Lazarus
BeitragVerfasst: Sa 30.11.13 16:50 
An eine solche .exe kommt man immer verhältnismäßig einfach heran. Das liegt in der Natur der Sache. Das Betriebssystem muss die .exe ja zum Ausführen in den Speicher lesen.

Mit Tricks kann man so eine .exe selbst in den Speicher laden und muss sie nicht auf die Festplatte legen:
www.michael-puff.de/...te/Nico/inmemexe.zip
Das geht aber nicht bei allen Programmen.

Wirklich sicher ist das aber nie. Denn man muss ja nur eine 1:1 Kopie des Sticks machen, wenn es keine zusätzlichen Maßnahmen gibt...

Wenn es etwas kosten darf, wäre eine Lösung mit USB-Dongle viel sinnvoller. Ohne die .exe zu verändern lässt sich das aber nicht integrieren.


Zuletzt bearbeitet von jaenicke am Sa 30.11.13 16:51, insgesamt 1-mal bearbeitet
Ralf Jansen
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 4708
Erhaltene Danke: 991


VS2010 Pro, VS2012 Pro, VS2013 Pro, VS2015 Pro, Delphi 7 Pro
BeitragVerfasst: Sa 30.11.13 16:50 
Du versuchst gegen das System zu arbeiten also kann es nur eine Bastellösung sein. Gibt also keinen Grund sich zu wundern :wink:

Um das Programm auszuführen muss es vom Datenträger bewegt werden. Letztlich macht es keinen Unterschied ob das Ziel dieser Bewegung der Speicher oder ein anderer Datenträger ist. Wenn die Executable da nicht irgendwie mitspielt sondern als die ganz normale kopierschutzfreie Anwendung irgendwann Speicher landet wird man die auch wieder auf eine anderen Datenträger bekommen. Solange du die Exe unverändert lassen willst ist das wohl eine Sackgasse. Ausgenommen die ganz schweren Geschütze wie eine virtuelle Appliance da wäre es aber einfacher und günstiger die Executable zu überarbeiten und mit einem Standardkopierschutz vom Markt auszustatten.
Ralf Jansen
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 4708
Erhaltene Danke: 991


VS2010 Pro, VS2012 Pro, VS2013 Pro, VS2015 Pro, Delphi 7 Pro
BeitragVerfasst: Sa 30.11.13 17:08 
Zitat:
Mit Tricks kann man so eine .exe selbst in den Speicher laden und muss sie nicht auf die Festplatte legen:


Falls die Executable managed Code ist .Net kann von Haus aus Assemblies aus Streams laden. Es muß kein Filestream sein. Wird daraus dann aber auch kein nennenswerter Kopierschutz wenn ich mir das Ding einfach aus der Resource des Starter klaube oder direkt aus dem Speicher.
avoid Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic star
Beiträge: 230
Erhaltene Danke: 4

MSDos, WinXP32, Win764, Win10, Android, Debian
msl (mIRC edit), html & php & Java (DreamweaverMX), Basic (picaxe PE6), C (Arduino IDE), C# (vs2010,2015,2017,2019,Unity,Android Studio)
BeitragVerfasst: Sa 30.11.13 17:37 
die Idee, die exe aus dem Ram zu starten anstelle von der Festplatte klingt nach einem guten weg.
den link von jaenicke kann ich aber nicht öffnen, mein Kaspersky jammert dann verständlicherweise wegen Trojaner.
bzw. es sollte schon ein weg sein, der gängig ist und darum nicht gleich von Antiviren Software als gefährlich angesehen wird.

der Schutz muss nicht Bombensicher sein.
ich muss jemandem einen USB-Stick mit einem Lizensierten Programm kurzzeitig überlassen.
an dem Programm kann ich natürlich nicht einfach was ändern weil nicht von mir erstellt.
doch ich möchte verhindern das es Raubkopiert und mir meine Lizenz dadurch evtl. gesperrt wird.
darum versuch ich gerade ein Container Tool dafür zu stricken.

die Person die mit dem Programm auf dem Stick arbeiten soll,
ist meines Wissens nach ein Otto Normalanwender.
Ich möchte nur das einfache Kopieren vom Stick unterbinden bzw.
dafür sorgen dass das Programm nur vom Stick aus zu starten geht.

hoffe jetzt hab ich das Szenario treffend genug beschrieben.

_________________
Gute Fragen sind wie ein wissenschaftliches Experiment. Sie setzen eine Menge Wissen bereits voraus.
bitcoin:1J5dgQQp8eUy8wkUxyztBUVCkCpo5MQEQs?label=Danke
Ralf Jansen
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 4708
Erhaltene Danke: 991


VS2010 Pro, VS2012 Pro, VS2013 Pro, VS2015 Pro, Delphi 7 Pro
BeitragVerfasst: Sa 30.11.13 18:05 
Zitat:
ich muss jemandem einen USB-Stick mit einem Lizensierten Programm kurzzeitig überlassen.
an dem Programm kann ich natürlich nicht einfach was ändern weil nicht von mir erstellt.
doch ich möchte verhindern das es Raubkopiert und mir meine Lizenz dadurch evtl. gesperrt wird.


Es gibt Software deren Lizenz Ihren Verleih erlaubt?
avoid Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic star
Beiträge: 230
Erhaltene Danke: 4

MSDos, WinXP32, Win764, Win10, Android, Debian
msl (mIRC edit), html & php & Java (DreamweaverMX), Basic (picaxe PE6), C (Arduino IDE), C# (vs2010,2015,2017,2019,Unity,Android Studio)
BeitragVerfasst: Sa 30.11.13 18:09 
es gibt Software die nicht an einen Nutzer gebunden ist,
aber nicht von mehreren Personen zugleich verwendet werden darf.
ja.

was spielt das für eine rolle?
denn das ist hier nicht das Thema.

_________________
Gute Fragen sind wie ein wissenschaftliches Experiment. Sie setzen eine Menge Wissen bereits voraus.
bitcoin:1J5dgQQp8eUy8wkUxyztBUVCkCpo5MQEQs?label=Danke
Ralf Jansen
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 4708
Erhaltene Danke: 991


VS2010 Pro, VS2012 Pro, VS2013 Pro, VS2015 Pro, Delphi 7 Pro
BeitragVerfasst: Sa 30.11.13 18:18 
Zitat:
was spielt das für eine rolle?


Keine. Aber hier herrscht ja kein On-Topic Terror und ich bin neugierig.
jaenicke
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 19315
Erhaltene Danke: 1747

W11 x64 (Chrome, Edge)
Delphi 11 Pro, Oxygene, C# (VS 2022), JS/HTML, Java (NB), PHP, Lazarus
BeitragVerfasst: Sa 30.11.13 19:43 
user profile iconavoid hat folgendes geschrieben Zum zitierten Posting springen:
den link von jaenicke kann ich aber nicht öffnen, mein Kaspersky jammert dann verständlicherweise wegen Trojaner.
bzw. es sollte schon ein weg sein, der gängig ist und darum nicht gleich von Antiviren Software als gefährlich angesehen wird.
Den gibt es nicht. :nixweiss:
Gängig ist so ein Vorgehen nun einmal nicht.

Wenn es nur ein geringer Schutz sein muss, reicht ja auch das Entpacken nach Temp und danach zu löschen. Dort findet ein normaler Nutzer das Tool ja ohnehin nicht. Und wenn du noch einen Hook auf die Dateizugriffsfunktionen der API setzt, kannst du die meisten Zugriffe normaler Nutzer verhindern.

Ich selbst würde einfach schauen wo die Exe liegt und den PC hart ausschalten, schon kannst du nix mehr schützen bei so einem Vorgehen.
Greenberet
ontopic starontopic starontopic starontopic starontopic starontopic starofftopic starofftopic star
Beiträge: 339
Erhaltene Danke: 20

Win 10
C# (VS 2012), C++ (VS 2012/GCC), PAWN(Notepad++), Java(NetBeans)
BeitragVerfasst: So 01.12.13 13:57 
Kopieren verhindern geht leider nicht so einfach. Was du allerdings machen kannst ist das ausführen verhindern.

Am besten du nimmst einen bestimmten USBSTICK und überprüfst ob die Seriennummer des Gerätes wo die EXE läuft (also der des USBSticks bzw. Festplatte) mit der gespeicherten(deines USBSticks) übereinstimmt.

Wenn ja -> führe Programm aus
Wenn Nein -> beende das Programm mit Fehler "DU böser böser Exe-Dieb".


Wie man die Seriennummer eines Gerätes ausfindig macht siehst du hier:
stackoverflow.com/qu...usb-stick-in-c-sharp
Ralf Jansen
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 4708
Erhaltene Danke: 991


VS2010 Pro, VS2012 Pro, VS2013 Pro, VS2015 Pro, Delphi 7 Pro
BeitragVerfasst: So 01.12.13 14:01 
Zitat:
Wenn ja -> führe Programm aus
Wenn Nein -> beende das Programm mit Fehler "DU böser böser Exe-Dieb".


Du übersiehst gerade die Prämisse die Exe nicht zu verändern :wink:
jaenicke
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 19315
Erhaltene Danke: 1747

W11 x64 (Chrome, Edge)
Delphi 11 Pro, Oxygene, C# (VS 2022), JS/HTML, Java (NB), PHP, Lazarus
BeitragVerfasst: So 01.12.13 14:01 
Davon abgesehen kann man die Seriennummer auch sehr einfach selbst setzen.
avoid Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic star
Beiträge: 230
Erhaltene Danke: 4

MSDos, WinXP32, Win764, Win10, Android, Debian
msl (mIRC edit), html & php & Java (DreamweaverMX), Basic (picaxe PE6), C (Arduino IDE), C# (vs2010,2015,2017,2019,Unity,Android Studio)
BeitragVerfasst: So 01.12.13 20:09 
ich denke mal die Prüfung der Seriennummer des Gerätes in Kombination mit dem extrahieren in Temp
und nach dem beenden wieder löschen sollte genügen.

mal angenommen ich wollte die integrierte Anwendung nicht erst extrahieren,
könnte ich die fremde exe als (Binary Resources) mit Process.Start()
als Parent in meiner Anwendung laden wie ich es hier gemacht habe?
www.entwickler-ecke....ewtopic.php?t=111064
oder kann Process.Start() keine Resources Starten?

damit könnte ich es mir sparen mich in den MemoryStream ein zu lesen,
wenn der überhaupt der richtige weg währe.

leider klappt das auslesen der USB-Stick Seriennummer nicht wirklich.
ich bekomme zwar bei meiner USB-HDD die Seriennummer raus aber nicht von USB-Sticks.
als hätten die keine, obwohl ich sie im Windows sehen kann.

ich habe als Beispiel diesen code verwendet:
ausblenden C#-Quelltext
1:
2:
3:
4:
5:
6:
ManagementObjectSearcher theSearcher = new ManagementObjectSearcher("SELECT * FROM Win32_DiskDrive WHERE InterfaceType='USB'");
foreach (ManagementObject currentObject in theSearcher.Get())
{
    ManagementObject theSerialNumberObjectQuery = new ManagementObject("Win32_PhysicalMedia.Tag='" + currentObject["DeviceID"] + "'");
    label1.Text += "\n - " + theSerialNumberObjectQuery["SerialNumber"].ToString();
}

_________________
Gute Fragen sind wie ein wissenschaftliches Experiment. Sie setzen eine Menge Wissen bereits voraus.
bitcoin:1J5dgQQp8eUy8wkUxyztBUVCkCpo5MQEQs?label=Danke
jaenicke
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 19315
Erhaltene Danke: 1747

W11 x64 (Chrome, Edge)
Delphi 11 Pro, Oxygene, C# (VS 2022), JS/HTML, Java (NB), PHP, Lazarus
BeitragVerfasst: So 01.12.13 21:43 
user profile iconavoid hat folgendes geschrieben Zum zitierten Posting springen:
oder kann Process.Start() keine Resources Starten?
Standardmäßig kann man eine Anwendung ausschließlich aus einer Datei heraus starten. Alles andere muss man selbst tricksen, indem man die ausführbare Datei in den Speicher lädt, ein paar Vorbereitungen trifft und den Einsprungpunkt der ausführbaren Datei anspringt (Kurzfassung).
Palladin007
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 1282
Erhaltene Danke: 182

Windows 11 x64 Pro
C# (Visual Studio Preview)
BeitragVerfasst: So 01.12.13 22:16 
Wie du verhindern kannst, dass die originale Datei kopiert wird, kann ich dir nicht sagen. Höchstens würde ich versuchen, was die Anderen gesagt haben und entweder aus dem RAM laden, oder es gibt eine Möglichkeit, die exe ausführbar in eine Anwendung hinein zu kompilieren.
Wenn diese Person aber ein typische Otto-Normal-Nutzer ist, sollte es aus reichen, die exe in den Speicher zu laden und von dort zu starten. Wie das geht, weiß ich aber nicht.


Zusätzlich kannst du in deiner eigenen Anwendung Schutzmaßnahmen einfügen, die verhindern, dass er sie unrechtmäßig nutzt.
Wenn lokale Maßnahmen (Seriennummer, etc.) nicht ausreichen, dann könntest du doch hin gehen und auf einem Server abfragen, ob die lizenzierte Anwendung gestartet werden darf.
Meine Idee wäre, dass jeden Tag nur eine Instanz am laufen sein darf, also dass auf dem Server hinterlegt ist, wenn eine Instanz am laufen ist.
Außerdem kannst du dann gleichzeitig noch die MAC-Adresse (oder andere Hardware-IDs) von dem Rechner mit geben, dass ab dem ersten Start diese Anwendung nur noch auf diesem einen Rechner gestartet werden darf. Entweder auf einen Tag gerechnet, oder eben dauerhaft.
Und was du auch noch einbauen kannst: Wenn die Anwendung keinen passenden Server findet, startet sie das Programm gar nicht. Wenn doch, fragt sie erst einmal nach ob du das Startet überhaupt erlaubst. Du kannst bei Bedarf also einfach verbieten, dass die Anwendung überhaupt geht, indem du den Server schlicht vom Netz nimmst.

So kannst du sicher gehen, dass er die Anwendung nur dann nutzt, wenn du es erlaubst.
jaenicke
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 19315
Erhaltene Danke: 1747

W11 x64 (Chrome, Edge)
Delphi 11 Pro, Oxygene, C# (VS 2022), JS/HTML, Java (NB), PHP, Lazarus
BeitragVerfasst: So 01.12.13 22:51 
user profile iconPalladin007 hat folgendes geschrieben Zum zitierten Posting springen:
Wenn lokale Maßnahmen (Seriennummer, etc.) nicht ausreichen, dann könntest du doch hin gehen und auf einem Server abfragen, ob die lizenzierte Anwendung gestartet werden darf.
Da die Exe nicht verändert werden darf, wird das kaum gehen.
Palladin007
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 1282
Erhaltene Danke: 182

Windows 11 x64 Pro
C# (Visual Studio Preview)
BeitragVerfasst: So 01.12.13 23:25 
Ja, eine Anwendung, die das prüft und die exe startet, muss er trotzdem erstellen.

Aber wenn er dann die Anwendung hat, die die lizenzierte exe sicher beherbergt und dann bei Bedarf startet, muss er auch dafür sorgen, dass diese nicht unrechtmäßig gestartet werden kann.
Das an den Stick via Seriennummer zu binden ist unsicher und meiner Meinung nach auch unpraktisch, daher die Idee, das über das Internet zu regeln.
Ralf Jansen
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 4708
Erhaltene Danke: 991


VS2010 Pro, VS2012 Pro, VS2013 Pro, VS2015 Pro, Delphi 7 Pro
BeitragVerfasst: So 01.12.13 23:55 
Zitat:
Das an den Stick via Seriennummer zu binden ist unsicher und meiner Meinung nach auch unpraktisch, daher die Idee, das über das Internet zu regeln.


Ich fasse mal meine Vorstellung über das was avoid vorhat gerade zusammen.
Eine einzelne Anwendung für einen einzelnen User vorübergehend bereitstellen und das kleine Risiko verhindern das er die Executable weiterverteilt. Und du findest es praktischer dafür mal eben einen Serverdienst irgendwo zu hosten gegen den dann ein Starter prüft :gruebel:
Palladin007
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 1282
Erhaltene Danke: 182

Windows 11 x64 Pro
C# (Visual Studio Preview)
BeitragVerfasst: Mo 02.12.13 15:49 
Nagut ... praktisch ... nicht so ganz :D

Aber sicher wäre es. Kann ja auch avoid entscheiden, mir ging es nur darum, die Idee in den Raum zu werfen, als Möglichkeit, die eventuell helfen könnte. Schließlich lesen das hier ja auch andere Leute.


Trotzdem bleibt die Frage:

Ist es nicht irgendwie über Umwege möglich, eine exe ausführbar in eine Anwendung hinein zu kompilieren, dass sie nicht erst irgendwo (Festplatte oder RAM) abgelegt werden muss, um sie starten zu können?

Würde mich auch interessieren, ob das geht.

Oder gibt es eine Möglichkeit, in die bestehende Anwendung am Anfang etwas vor zuhängen, was dann vor dem Start der eigentlichen Anwendung ausgeführt wird? Für avoid wäre das wahrscheinlich unpraktisch, weil das schwer nach typischen Virus-Verhalten klingt, aber die Idee finde ich trotzdem interessant.