Seite 1 von 2

Kompressionsalgorithmus (x86 = x64)

Verfasst: 27.04.2010 21:47
von Mok
Hallo.
Da laut diesem Thread das Ergebnis eines CreatePack() unter x64 ein anderes ist als in x86, ich aber ein universelles Programm schreiben möchte, wollte ich euch Fragen, ob ihr einen anderen - möglichst effizienten - Packer-Algorithmus kennt.
Eigentlich könnte ich ja PureZIP von gnozal verwenden, aber ZIP kann so gut wie jeder öffnen, der will (das Archiv sollte nur vom Programm selbst geöffnet werden können), außerdem ist ZIP nicht gerade bekannt für seine extreme Kompressionsleistung.

Grüße, Mok


PS: Ist es eigentlich eine an Unmöglichkeit grenzende Schwierigkeit, einen eigenen Packer-Algorithmus zu schreiben?

Re: Kompressionsalgorithmus (x86 = x64)

Verfasst: 27.04.2010 22:01
von ts-soft

Re: Kompressionsalgorithmus (x86 = x64)

Verfasst: 27.04.2010 22:06
von Mok
Ah, interessanter Link, Danke :allright:
Bringt mich auch auf die Idee LZO und UCL in PB zu übersetzen :)

Edit:
luis hat geschrieben:I briefly tested UCL/LZO but the compression ratio seem quite low.
Na dann eben nicht...

Re: Kompressionsalgorithmus (x86 = x64)

Verfasst: 27.04.2010 22:11
von ts-soft
ZLIB magste ja nicht, ansonsten könntest Du dies hier nehmen. Ist Crossplattform!
Entpacken tut das auch keiner, fehlt ja der typische ZIP-Header, ansonsten verschlüsseln.

Code: Alles auswählen

; Autor: Thomas (ts-soft) Schulz
; PB-Version: 4.xx
; OS: windows/linux/MacOS

CompilerSelect #PB_Compiler_OS
  CompilerCase #PB_OS_Linux
    ImportC #PB_Compiler_Home + "purelibraries/linux/libraries/zlib.a"
CompilerCase #PB_OS_MacOS
  ImportC "/usr/lib/libz.dylib"
  CompilerCase #PB_OS_Windows
    ImportC "zlib.lib"
CompilerEndSelect
  compress2(*dest, *destLen, *source, sourceLen, level)
  uncompress(*dest, *destLen, *source, sourceLen)
EndImport

Procedure zipPackMemory(*source, sourceLen = #PB_Default, level = #PB_Default)
  Protected *dest, destLen
  
  If level < #PB_Default Or level > 9 : level = #PB_Default : EndIf
  If *source
    If sourceLen = #PB_Default : sourceLen = MemorySize(*source) : EndIf
    destLen = sourceLen + 13 + (Int(sourceLen / 100))
    *dest = AllocateMemory(destLen)
    If *dest
      If Not compress2(*dest, @destLen, *source, sourceLen, level)
        *dest = ReAllocateMemory(*dest, destLen)
        ProcedureReturn *dest
      EndIf
    EndIf
  EndIf
EndProcedure

Procedure zipUnpackMemory(*source, *dest)
  Protected sourceLen = MemorySize(*source)
  Protected destLen = MemorySize(*dest)

  If Not uncompress(*dest, @destLen, *source, sourceLen)
    ProcedureReturn destLen
  EndIf
EndProcedure

Re: Kompressionsalgorithmus (x86 = x64)

Verfasst: 27.04.2010 22:20
von Mok
ts-soft hat geschrieben:ZLIB magste ja nicht
Wer hat das gesagt? Wer ist dieser verdammte Hobby*** der gerade sein Todesurteil unterschrieben hat? Keiner, was? Ist wohl der ver*** Weihnachtsmann gewesen
Nein, ernsthaft jetzt: Ist zum 1. Mal, dass ich was von ZLIB höre, obwohl ich mich eher für aPLIB entschieden hätte (wegen der kleinen Ausgabegröße). Aber wenn ZLIB am unwahrscheinlichsten (wegen fehlendem Header ist), nehm ich ZLIB. Oder gibt's was, was ihr mir noch eher empfehlt?

Re: Kompressionsalgorithmus (x86 = x64)

Verfasst: 27.04.2010 22:29
von ts-soft
> Wer hat das gesagt?
Du, weil ZLIB = ZIP - Algoryhtmus!

Re: Kompressionsalgorithmus (x86 = x64)

Verfasst: 27.04.2010 22:51
von Mok
ts-soft hat geschrieben:> Wer hat das gesagt?
Du, weil ZLIB = ZIP - Algoryhtmus!
:oops:
Wie wahrscheinlich ist es, dass es Programme gibt, die LZMA und aPLib visualisieren und/oder entpacken können?

Re: Kompressionsalgorithmus (x86 = x64)

Verfasst: 27.04.2010 23:36
von ts-soft
Mok hat geschrieben::oops:
Wie wahrscheinlich ist es, dass es Programme gibt, die LZMA und aPLib visualisieren und/oder entpacken können?
Wenn kein Header vorhanden, dann recht unwahrscheinlich, aber bei ZLIP auch (ist ja kein Header vorhanden).
Aber Du kannst das ganze doch verschlüsseln!

Re: Kompressionsalgorithmus (x86 = x64)

Verfasst: 28.04.2010 05:35
von Thorium
Immer diese Geheimnisskrämerei. ^^
Nimm die Kompression, die am besten passt. LZMA dürfte die besten Ergebnisse liefern. Ein Schutz in welcher Weise auch imme ist eine Kompression sowieso nicht. Das zu entpacken ist leicht auch ohne header. Esseiden du schmeißt jede Menge Mülldaten mit rein. Willst du Scherheit _musst_ du verschlüsseln und den Schlüssel vom Benutzer eingeben lassen, nicht im Programm hinterlegen.

Re: Kompressionsalgorithmus (x86 = x64)

Verfasst: 28.04.2010 14:45
von Mok
Thorium hat geschrieben:Willst du Scherheit _musst_ du verschlüsseln und den Schlüssel vom Benutzer eingeben lassen, nicht im Programm hinterlegen.
@Thorium:
Gibt's dafür auch Sourecodes? Mit den FileFingerprints von PB kannman nur Dateichecksummen erstellen.