Seite 1 von 1
Text an UPX-Exe anhängen?
Verfasst: 18.03.2008 19:57
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?
Verfasst: 18.03.2008 20:07
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

Verfasst: 12.05.2008 18:34
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)
Verfasst: 12.05.2008 19:11
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.
Verfasst: 12.05.2008 19:15
von Fluid Byte
Und was sollen wir machen? Raten? Exisitiert die Datei überhaupt? Wie schreibst in die .EXE rein?
Verfasst: 12.05.2008 19:17
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.
ps: natürlich kannst du statt long, auch word oder byte verwenden, je nachdem wie lang der string sein soll.
c ya,
nco2k