.exe Datei vor unbefugter Verbreitung schützen / FTP-Verbindung sicher aufbauen

  • Moin zusammen,
    diese Frage ist jetzt nicht unbedingt AutoIt zugehörig, dennoch hoffe ich auf einige Lösungsvorschläge da es mit meinem AutoIt-Programm zusammenhängt.

    Folgendes:
    - Ein Programm (mit AutoIt geschrieben) enthält eine mit FileInstall() integrierte .exe
    - Diese .exe wird ja beim Programmstart entpackt (in einem Temp-Verzeichnis)
    - Mein Programm führt diese .exe für eine bestimmte Zeit aus.

    Ich möchte diese entpackte und ausgeführte .exe davor schützen einfach kopiert zu werden und ohne mein Programm ausgeführt werden zu können.

    Folgendes habe ich bereits hinzugefügt:
    - .exe in ein passwortgeschütztes Winrar-Archiv gepackt was erst durch FileInstall() ins Temp-Verzeichnis entpackt wird.
    - .exe wird erst aus diesem winrar-archiv entpackt sobald ausgeführt werden muss
    - die .exe erhält sofort das Attribut "versteckt"
    - nach Ausführung wird sie sofort wieder gelöscht

    Für den Anfang nicht schlecht, aber dennoch komplett unnütz! Sobald mein Programm die .exe ausführt erscheint sie ja als Prozess im Task-Manager, ein einfacher Rechtsklick => "Dateipfad öffnen" reicht um sofort zu wissen um welche Datei es sich handelt. Solange diese ausgeführt wird kann sie einfach wegkopiert werden.

    Kann man dies irgendwie unterbinden?

    2 Mal editiert, zuletzt von chrisbyRRC (1. Dezember 2013 um 15:04)

  • Nein ist wol die einzige Antwort. Du kannst schlichtweg nicht die Festplatte nutzen wenn die Datei nicht kopiert werden soll. Selbst wenn du es schaffen solltest diverse Fileattribute zu nutzen oder Windows global so zu manipulieren, dass Kopieroperationen kurzfrisitg nicht möglich sind, so wird die Methode sehr sicher keiner VM standhalten die einfach eingefroren wird sobald die exe entpackt wurde. Die Datei unsichtbar machen ist jedenfalls ein viel zu primitiver Ansatz. Wenn die integrierte exe selbst programmiet wurde würde ich dort ansetzen und entsprechende Prüfungen einbauen, die sicherstellen, dass der Parentprozess zur Ausführung berechtigt ist und natürlich auch während der Ausführung aktiv ist. Wenn es sich nicht um deine Software handelt hast du wohl Pech gehabt, da verstehe ich dann aber auch nicht so recht mit welchem Recht du diese Software einsetzt und warum diese vor dem Anwender versteckt werden muss.

    Deine Schwachstelle ist sowieso das Autoitscript. Es gibt genügend dekompiler mit deren Hilfe es dann ein leichtes wäre die pw geschützte rar Datei zu entpacken, weil nach dem Dekompilen sehr sicher dein PW der rar Datei sichtbar wird.

  • Nein, denn selbst, wenn du das irgendwie schaffen würdest, müsste man "nur" das AutoIt-Programm wieder in seine Einzelteile zerlegen um die Datei kopieren zu können.
    Ist das Programm selbst geschrieben? Wenn ja könntest du ja versuchen dort einige Sicherheitsmaßnahmen einzubauen. Es wird dadurch zwar nie 100% sicher, aber zumindest sicherer (und sicher genug für manche Anwender).

  • Hmm... das klingt ja gar nicht gut... :S

    Das mit dem Sicherheitsabfrage im 2.ten Programm kann und werde ich auch durchführen nur wirkt AutoIt irgendwie mal gar nicht sicher.
    Ich denke ich kann mir dann fast meine zweite Sicherheitsfrage schenken, aber dennoch vllt. irre ich ja:

    In einiger Zeit möchte ich ein Programm schreiben mit denen es Anwendern möglich sein soll kleine 1-3MB große Dateien auf einen Server hochladen zu können wo diese dann weiterverarbeitet werden. Nun gehts wieder los => um eine FTP-Verbindung aufbauen zu können muss ich ja die Zugangsdaten zum Server ins Script schreiben.  :thumbdown:


    Jemand ne Idee oder ist es hoffnungslos solche Programme mit AutoIt zu schreiben?  :huh:

  • Hmm... das klingt ja gar nicht gut... :S

    Das mit dem Sicherheitsabfrage im 2.ten Programm kann und werde ich auch durchführen nur wirkt AutoIt irgendwie mal gar nicht sicher.
    Ich denke ich kann mir dann fast meine zweite Sicherheitsfrage schenken, aber dennoch vllt. irre ich ja:

    In einiger Zeit möchte ich ein Programm schreiben mit denen es Anwendern möglich sein soll kleine 1-3MB große Dateien auf einen Server hochladen zu können wo diese dann weiterverarbeitet werden. Nun gehts wieder los => um eine FTP-Verbindung aufbauen zu können muss ich ja die Zugangsdaten zum Server ins Script schreiben.  :thumbdown:


    Jemand ne Idee oder ist es hoffnungslos solche Programme mit AutoIt zu schreiben?  :huh:


    Das hat wenig mit Autoit zu tun. Egal mit welcher Sprache du programmierst, es wird immer möglich sein Reverse Engineering zu betreiben. Zugangsdaten haben deswegen auch niemals etwas im Quellcode zu suchen. Das würde ohnehin Probleme bereiten wenn du aus welchen Gründen auch immer dazu gezwungen wirst die Zugangsdaten zu ändern.

    Ein Ansatz wäre es die Zugangsdaten separat zu verwalten und am besten für jeden Anwender eigene Daten zu vergeben. Diese könnten z.B. per Email weitergegeben werden. Der Anwender hinterlegt diese dann bei sich lokal in einer verschlüsselten ini Datei. Das minimiert das Risiko, dass dritte die Zugangsdaten erhalten. Wenn du auf Nummer sicher gehen willst verzichte komplett auf die Speicherung beim Anwender, dann muss er die Daten aber jedesmal eintippen.

    Vorteil: Du kannst einzelne Anwender jederzeit am Server sperren, sollte es zu Mißbrauch der zugehörigen Daten kommen.
    Nachteil: Je nach Nutzeranzahl hoher Verwaltungsaufwand.

  • howdy...

    mal kurz ein paar lösungsmöglichkeiten..

    du könntest z.b. das zu schützende programm als child des hauptprogramms starten und dann die streams auslesen lassen damit die programme untereinander kommunizieren können.. sodass das hauptprogramm dann z.b. ein nur dir bekanntes passwort überträgt oder sowas.. sollte kein richtiges passwort übertragen werden binnen 5 sekunden, schließt sich das prog wieder bzw. zeigt von anfang an erst garnix an

    auch könntest du es so lösen das du den kompletten binarycode des zu schützenden programms ins hauptprogramm stopfst und dann direkt aus dem arbeitsspeicher ausführen lässt.. allerdings wird es nicht viele sachkundige geben die dem ganzen braten vertrauen ;D

    die letzte möglichkeit die mir spontan einfällt wäre ein key-system wo du das programm per inetget(binarytostring($url)) überprüfen lässt ob ein bestimmter key gültig ist.. wobei da die frage ist wie du den key speicherst.. simple in einer ini hinterlegt kann er ja einfach kopiert werden.. also entweder verschlüsselt in eine extra datei.. oder mit in die exe eingearbeitet.. was aber bedeutet das pro "kunde" eine neue exe kompiliert werden muss.. den key kannst du zusätzlich an bestimmte systemparameter binden damit sie nich einfach kopiert wird.. zusätzlich kannst du per keykontrolle(die du ja in kombination mit den obrigen optionen verwenden kannst) jederzeit einen key sperren.. ist eigentlich nur ein klein wenig php und vlt.(my)sql wissen erforderlich

    mfg
    sgtigram

  • Hallo,
    etwas in Deine Richtung geht der Ansatz von Bugfix:
    Fremddateien "includen" (ohne FileInstall)
    ;)

    Wenn man weiß, dass die Datei irgendwo im Arbeitsspeicher liegt, dann kann man sie auch ganz einfach extrahieren.

    Dann wären wir wieder beim Thema Sicherheit im Bezug auf das Programm selbst, das hatten wir hier ja schon zu genüge.
    Hier mal der Link zu einer der Diskussionen.

  • das ist jetzt haarspalterei...

    man kann ein programm immer irgendwie knacken.. egal wie er es macht!
    aber ich habe ihn ein paar lösungen aufgezeigt womit das nicht jeder x-beliebe tun kann..

    sachkundige werden es immer schaffen