Kann man mit eigenen PB Prog. eigentlich kompilieren?
Kann man mit eigenen PB Prog. eigentlich kompilieren?
Das würde mich mal echt interessieren.
Beispiel:
Ich habe ein kleines Prog gecodet.
In dem wird man aufgefordert ein Passwort einzugeben. Man gibt das Passwort ein und klickt auf einen Button und anschliessend erstellt das Programm eine .exe Datei. Diese startet man und man muss das Passwort eingeben was man vorher definiert hat im ersten Programm. Ist das mit PB möglich?
Gruss
Beispiel:
Ich habe ein kleines Prog gecodet.
In dem wird man aufgefordert ein Passwort einzugeben. Man gibt das Passwort ein und klickt auf einen Button und anschliessend erstellt das Programm eine .exe Datei. Diese startet man und man muss das Passwort eingeben was man vorher definiert hat im ersten Programm. Ist das mit PB möglich?
Gruss
Re: Kann man mit eigenen PB Prog. eigentlich kompilieren?
Am einfachsten erstellst du eine Executable-Vorlage mit einem Passwort-Platzhalter. Wenn der Benutzer ein eigenes Passwort ausgesucht hat und gerne eine EXE-Datei haben möchte, dann kopierst du deine Executable-Vorlage, die du danach öffnest und nach deinem Passwort-Platzhalter suchst, den du durch das vom Benutzer ausgewählte Passwort ersetzen kannst.
Re: Kann man mit eigenen PB Prog. eigentlich kompilieren?
Leider kommt das nicht in Frage da diese Passwort abfragen manuell zu handlen viel zu viel aufwand wäre.
Ist es möglich wie ich es vorhabe? Denkanstöße?
Ist es möglich wie ich es vorhabe? Denkanstöße?
Re: Kann man mit eigenen PB Prog. eigentlich kompilieren?
Was meinst du damit genau? Warum ist das aufwändig?
Wenn du ohne Executable-Dateivorlage erstellen möchtest, dann musst du ein Compiler schreiben. Möglich ist alles, aber das ist doch noch aufwändiger, als eine einfache austauschbare Passwortabfrage innerhalb einer vorhandenen Executable-Datei, die du einmalig erstellt hast.
Verstehst du überhaupt, was ich damit meine?
Wenn du ohne Executable-Dateivorlage erstellen möchtest, dann musst du ein Compiler schreiben. Möglich ist alles, aber das ist doch noch aufwändiger, als eine einfache austauschbare Passwortabfrage innerhalb einer vorhandenen Executable-Datei, die du einmalig erstellt hast.
Verstehst du überhaupt, was ich damit meine?
Re: Kann man mit eigenen PB Prog. eigentlich kompilieren?
Kurz und knapp: Du darfst natürlich nicht das kommerzielle Produkt 'PureBasic' mit
Deinem Produkt ausliefern, höchstens Du vereinbarst mit Fantaisie Software eine
entsprechende Lizenzgebühr, so dass Du PureBasic mit ausliefern kannst.
Ansonsten einfach eigenen Compiler schreiben, dann gibt es das Problem nicht.
So eine kleine, sinnlose Passwortabfrage, wirst Du ja auch in ASM hinbekommen
und kannst vielleicht einen freien Assembler integrieren (FASM, NASM, usw.).
Deinem Produkt ausliefern, höchstens Du vereinbarst mit Fantaisie Software eine
entsprechende Lizenzgebühr, so dass Du PureBasic mit ausliefern kannst.
Ansonsten einfach eigenen Compiler schreiben, dann gibt es das Problem nicht.
So eine kleine, sinnlose Passwortabfrage, wirst Du ja auch in ASM hinbekommen
und kannst vielleicht einen freien Assembler integrieren (FASM, NASM, usw.).
cya,
...Danilo
"Ein Genie besteht zu 10% aus Inspiration und zu 90% aus Transpiration" - Max Planck
...Danilo
"Ein Genie besteht zu 10% aus Inspiration und zu 90% aus Transpiration" - Max Planck
- NicTheQuick
- Ein Admin
- Beiträge: 8807
- Registriert: 29.08.2004 20:20
- Computerausstattung: Ryzen 7 5800X, 64 GB DDR4-3200
Ubuntu 24.04.2 LTS
GeForce RTX 3080 Ti - Wohnort: Saarbrücken
Re: Kann man mit eigenen PB Prog. eigentlich kompilieren?
Erst mal eine Frage vorweg: Was für ein EXE-Programm soll das erste Programm denn erstellen? Ist das immer das selbe Programm, bloß mit anderem Passwort oder steckt da schon mehr dahinter?
Falls es ersteres ist, ist das genau so zu machen wie RSBasic das beschrieben hat.
Man hat zwei Programme: A und B
Programm B ist das eigentliche Programm, was mit einem Passwort geschützt werden soll.
Programm A ist das Programm, in dem man ein Passwort festlegen kann und das dann sozusagen Programm B ausgibt und vorher das definierte Passwort einbettet.
Am einfachsten ist es bei Programm B das Passwort als Hash (MD5, SHA1, ...) an die Binärdatei (EXE) anzuhängen. Wenn man das Programm B startet, dann liest es vom Ende seiner eigenen Programmdatei den Hash aus (ReadData/ReadString) und fragt dann ein Passwort beim Benutzer ab. Dieses eingegebene Passwort wird dann wieder geHASHt (so wie vorher) und mit dem Hash verglichen, der am Ende der Datei hing. Stimmen sie überein, geht es weiter, ansonsten kommt eine Fehlermeldung oder ähnliches.
Programm A beinhaltet Programm B selbst (IncludeBinary) und lässt ein Passwort festlegen, was es dann als Hash an Programm B hängt, wenn die EXE-Datei an irgendeine Stelle der Festplatte geschrieben werden soll.
Das war's eigentlich schon.
Falls es ersteres ist, ist das genau so zu machen wie RSBasic das beschrieben hat.
Man hat zwei Programme: A und B
Programm B ist das eigentliche Programm, was mit einem Passwort geschützt werden soll.
Programm A ist das Programm, in dem man ein Passwort festlegen kann und das dann sozusagen Programm B ausgibt und vorher das definierte Passwort einbettet.
Am einfachsten ist es bei Programm B das Passwort als Hash (MD5, SHA1, ...) an die Binärdatei (EXE) anzuhängen. Wenn man das Programm B startet, dann liest es vom Ende seiner eigenen Programmdatei den Hash aus (ReadData/ReadString) und fragt dann ein Passwort beim Benutzer ab. Dieses eingegebene Passwort wird dann wieder geHASHt (so wie vorher) und mit dem Hash verglichen, der am Ende der Datei hing. Stimmen sie überein, geht es weiter, ansonsten kommt eine Fehlermeldung oder ähnliches.
Programm A beinhaltet Programm B selbst (IncludeBinary) und lässt ein Passwort festlegen, was es dann als Hash an Programm B hängt, wenn die EXE-Datei an irgendeine Stelle der Festplatte geschrieben werden soll.
Das war's eigentlich schon.
Re: Kann man mit eigenen PB Prog. eigentlich kompilieren?
Programm A beinhaltet Programm B selbst (IncludeBinary) und lässt ein Passwort festlegen, was es dann als Hash an Programm B hängt, wenn die EXE-Datei an irgendeine Stelle der Festplatte geschrieben werden soll.
Erst mal eine Frage vorweg: Was für ein EXE-Programm soll das erste Programm denn erstellen? Ist das immer das selbe Programm, bloß mit anderem Passwort oder steckt da schon mehr dahinter?
Das ist genau das was ich suche. Allerdings habe ich kein Plan wie ich das am besten umsetze. Jemand einen Lösungsansatz?
- NicTheQuick
- Ein Admin
- Beiträge: 8807
- Registriert: 29.08.2004 20:20
- Computerausstattung: Ryzen 7 5800X, 64 GB DDR4-3200
Ubuntu 24.04.2 LTS
GeForce RTX 3080 Ti - Wohnort: Saarbrücken
Re: Kann man mit eigenen PB Prog. eigentlich kompilieren?
Hier mal ein schnell dahin gecodeter Lösungsvorschlag. Ich hab's sogar einmal getestet und es hat funktioniert. Aber eben unter Linux.
Programm A
Programm B
Programm A
Code: Alles auswählen
DataSection
Program_Start:
IncludeBinary "ProgrammB"
Program_End:
EndDataSection
;Berechnet den MD5-Hash eines Strings als Ascii und gibt den Hash als Ascii zurück
Procedure.i getHashAscii(password.s)
Protected *passwordAscii = AllocateMemory(Len(password) + 1)
;Wandle String in Ascii um
PokeS(*passwordAscii, password, -1, #PB_Ascii)
;Erstelle Hash von Ascii-String
Define.s hash.s = MD5Fingerprint(*passwordAscii, Len(password))
FreeMemory(*passwordAscii)
;Wandle Hash in Ascii-String
Define *hashAscii = AllocateMemory(Len(hash))
PokeS(*hashAscii, hash, Len(hash), #PB_Ascii)
ProcedureReturn *hashAscii
EndProcedure
Define.s password = InputRequester("Neues Passwort", "Geben sie ein Passwort ein:", "", #PB_InputRequester_Password)
If (password = "")
End
EndIf
Define.s file = SaveFileRequester("Wählen sie den Ort für das Executable", "AnderesProgramm", "Executable (*.exe)|*.exe|Alle Dateien (*.*)|*.*", 0)
If (file = "")
End
EndIf
If SelectedFilePattern() = 0
If (GetExtensionPart(file) <> "exe")
file + ".exe"
EndIf
EndIf
Define *hash = getHashAscii(password)
If CreateFile(0, file)
WriteData(0, ?Program_Start, ?Program_End - ?Program_Start)
WriteData(0, *hash, MemorySize(*hash))
CloseFile(0)
MessageRequester("Erfolgreich", "Programm erfolgreich erstellt.")
EndIf
FreeMemory(*hash)
Code: Alles auswählen
;Berechnet den MD5-Hash eines Strings als Ascii und gibt den Hash als Ascii zurück
Procedure.i getHashAscii(password.s)
Protected *passwordAscii = AllocateMemory(Len(password) + 1)
;Wandle String in Ascii um
PokeS(*passwordAscii, password, -1, #PB_Ascii)
;Erstelle Hash von Ascii-String
Define.s hash.s = MD5Fingerprint(*passwordAscii, Len(password))
FreeMemory(*passwordAscii)
;Wandle Hash in Ascii-String
Define *hashAscii = AllocateMemory(Len(hash))
PokeS(*hashAscii, hash, Len(hash), #PB_Ascii)
ProcedureReturn *hashAscii
EndProcedure
Define.s password = InputRequester("Passwort!", "Geben sie das Passwort um das Programm starten zu können:", "", #PB_InputRequester_Password)
If (password = "")
End
EndIf
Define *hash = getHashAscii(password)
Define.s fileName = ProgramFilename()
If (ReadFile(0, fileName))
FileSeek(0, Lof(0) - MemorySize(*hash))
Define *hashFile = AllocateMemory(MemorySize(*hash))
ReadData(0, *hashFile, MemorySize(*hashFile))
CloseFile(0)
If (CompareMemory(*hash, *hashFile, MemorySize(*hash)) = 0)
MessageRequester("Ohneeee", "Das war falsch! :(")
End
EndIf
EndIf
MessageRequester("Tadaa", "Das war richtig! :D")
Re: Kann man mit eigenen PB Prog. eigentlich kompilieren?
Werd ich mich mal mit beschäftigen.
Vielen Dank für deine Hilfe Nic! :-*
Edit: Funktioniert wunderbar
Vielen Dank für deine Hilfe Nic! :-*
Edit: Funktioniert wunderbar
