Text an UPX-Exe anhängen?

Anfängerfragen zum Programmieren mit PureBasic.
Benutzeravatar
Delle
Beiträge: 1130
Registriert: 10.05.2005 22:48

Text an UPX-Exe anhängen?

Beitrag von Delle »

Hallo,

ein Programm ist mit UPX gepackt... nun soll daran ein Text angehängt werden, welchen das Programm mit nutzen soll.

Text anhängen an sich kein Problem... aber geht das mit einer UPX-Exe überhaupt?

Oder muss das Programm sich selber dann erst nochmal einlesen um an den Text zu kommen?
PB 6.21 | Win 11
Benutzeravatar
ts-soft
Beiträge: 22292
Registriert: 08.09.2004 00:57
Computerausstattung: Mainboard: MSI 970A-G43
CPU: AMD FX-6300 Six-Core Processor
GraKa: GeForce GTX 750 Ti, 2 GB
Memory: 16 GB DDR3-1600 - Dual Channel
Wohnort: Berlin

Beitrag von ts-soft »

Nach dem upxen hängste den text + long mit länge ran, dann kannste
es nachher mit den fileoperationen wieder lesen. Gibts hier viele
Beispiele, einfach mal suchen :)
PureBasic 5.73 LTS | SpiderBasic 2.30 | Windows 10 Pro (x64) | Linux Mint 20.1 (x64)
Nutella hat nur sehr wenig Vitamine. Deswegen muss man davon relativ viel essen.
Bild
Benutzeravatar
Delle
Beiträge: 1130
Registriert: 10.05.2005 22:48

Beitrag von Delle »

Okay habe mal an eine .exe-Datei einen String sowie am Schluss den Long-Wert mit der Länge des Strings angehängt.

Wie liest man das jetzt wieder aus? Dateilänge minus 4?

Das liefert immer "0" zurück:

Code: Alles auswählen

programm$=ProgramFilename()
MessageRequester("",programm$,0)
OpenFile(0, programm$):FileSeek(0, Lof(0)-4):Zahl.l=ReadLong(0)
MessageRequester("",Str(Zahl.l),0)
CloseFile(0)
PB 6.21 | Win 11
DarkDragon
Beiträge: 6291
Registriert: 29.08.2004 08:37
Computerausstattung: Hoffentlich bald keine mehr
Kontaktdaten:

Beitrag von DarkDragon »

Delle hat geschrieben:Okay habe mal an eine .exe-Datei einen String sowie am Schluss den Long-Wert mit der Länge des Strings angehängt.

Wie liest man das jetzt wieder aus? Dateilänge minus 4?

Das liefert immer "0" zurück:

Code: Alles auswählen

programm$=ProgramFilename()
MessageRequester("",programm$,0)
OpenFile(0, programm$):FileSeek(0, Lof(0)-4):Zahl.l=ReadLong(0)
MessageRequester("",Str(Zahl.l),0)
CloseFile(0)
ReadFile, weil OpenFile fehlschlägt (Ein If hätte doch nicht geschadet, oder?). Außerdem musst du wirklich darauf achten, dass du es nach dem UPXen anhängst.
Angenommen es gäbe einen Algorithmus mit imaginärer Laufzeit O(i * n), dann gilt O((i * n)^2) = O(-1 * n^2) d.h. wenn man diesen Algorithmus verschachtelt ist er fertig, bevor er angefangen hat.
Benutzeravatar
Fluid Byte
Beiträge: 3110
Registriert: 27.09.2006 22:06
Wohnort: Berlin, Mitte

Beitrag von Fluid Byte »

Und was sollen wir machen? Raten? Exisitiert die Datei überhaupt? Wie schreibst in die .EXE rein?
Windows 10 Pro, 64-Bit / Outtakes | Derek
Benutzeravatar
nco2k
Beiträge: 892
Registriert: 08.09.2004 23:13

Beitrag von nco2k »

@Delle
1.) als c:\test.exe speichern

Code: Alles auswählen

If ReadFile(0, ProgramFilename())
  FileSize = Lof(0) - SizeOf(Long)
  FileSeek(0, FileSize)
  FileSize - ReadLong(0) - SizeOf(Byte)
  FileSeek(0, FileSize)
  String$ = ReadString(0, #PB_Ascii)
  CloseFile(0)
  MessageRequester("", String$)
EndIf : End
2.) upx verwenden

3.) test.exe modifizieren

Code: Alles auswählen

If OpenFile(0, "c:\test.exe")
  FileSeek(0, Lof(0))
  WriteString(0, "Test", #PB_Ascii)
  WriteByte(0, 0)
  WriteLong(0, StringByteLength("Test", #PB_Ascii))
  CloseFile(0)
EndIf : End
ich hab noch nach dem string ein nullbyte drangehängt, um auf nummer sicher zu gehen. ReadString() hat ja leider kein len param und ich hatte keine lust jetzt extra deswegen ReadData() zu verwenden. :D

ps: natürlich kannst du statt long, auch word oder byte verwenden, je nachdem wie lang der string sein soll.

c ya,
nco2k
~|__/
..o.o.. <--- This is Einkaufswagen. Copy Einkaufswagen into your signature to help him on his way to world domination.
Antworten