Kann man mit eigenen PB Prog. eigentlich kompilieren?

Für allgemeine Fragen zur Programmierung mit PureBasic.
Distarb
Beiträge: 36
Registriert: 30.03.2005 16:32

Kann man mit eigenen PB Prog. eigentlich kompilieren?

Beitrag von Distarb »

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
Benutzeravatar
RSBasic
Admin
Beiträge: 8047
Registriert: 05.10.2006 18:55
Wohnort: Gernsbach
Kontaktdaten:

Re: Kann man mit eigenen PB Prog. eigentlich kompilieren?

Beitrag von RSBasic »

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.
Aus privaten Gründen habe ich leider nicht mehr so viel Zeit wie früher. Bitte habt Verständnis dafür.
Bild
Bild
Distarb
Beiträge: 36
Registriert: 30.03.2005 16:32

Re: Kann man mit eigenen PB Prog. eigentlich kompilieren?

Beitrag von Distarb »

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?
Benutzeravatar
RSBasic
Admin
Beiträge: 8047
Registriert: 05.10.2006 18:55
Wohnort: Gernsbach
Kontaktdaten:

Re: Kann man mit eigenen PB Prog. eigentlich kompilieren?

Beitrag von RSBasic »

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?
Aus privaten Gründen habe ich leider nicht mehr so viel Zeit wie früher. Bitte habt Verständnis dafür.
Bild
Bild
Benutzeravatar
Danilo
-= Anfänger =-
Beiträge: 2284
Registriert: 29.08.2004 03:07

Re: Kann man mit eigenen PB Prog. eigentlich kompilieren?

Beitrag von Danilo »

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.).
cya,
...Danilo
"Ein Genie besteht zu 10% aus Inspiration und zu 90% aus Transpiration" - Max Planck
Benutzeravatar
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?

Beitrag von NicTheQuick »

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.
Distarb
Beiträge: 36
Registriert: 30.03.2005 16:32

Re: Kann man mit eigenen PB Prog. eigentlich kompilieren?

Beitrag von Distarb »

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?
Benutzeravatar
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?

Beitrag von NicTheQuick »

Hier mal ein schnell dahin gecodeter Lösungsvorschlag. Ich hab's sogar einmal getestet und es hat funktioniert. Aber eben unter Linux.

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)
Programm B

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")
Distarb
Beiträge: 36
Registriert: 30.03.2005 16:32

Re: Kann man mit eigenen PB Prog. eigentlich kompilieren?

Beitrag von Distarb »

Werd ich mich mal mit beschäftigen.
Vielen Dank für deine Hilfe Nic! :-*

Edit: Funktioniert wunderbar :)
Antworten