Seite 2 von 3

Re: Avira Falschmeldung bei IncludeBinary

Verfasst: 27.04.2010 18:53
von Fluid Byte
Bisonte hat geschrieben:Dann hat man aber bestimmt das Problem beim Endnutzer immer noch...
Genau da liegt das Problem. Ob es bei mir fehlerfrei ausgeführt werden kann ist sekundär aber beim Endnutzer muss es problemlos funktionieren.
Thorium hat geschrieben:Dann beschwer dich bei Avira, die immer wieder ihre Definitionen versauen oder fummel solange rumm bis keine Meldung mehr kommt.
So einfach ist es leider das nicht. Jede Anti-Viren-Software hat ihr Schwächen was auch Falschmeldungen beinhaltet. Da ist Avira ganz sicher nicht alleine. Nur kann man den Normalverbraucher nicht dazu bewegen die Anwendung in eine Ausnahmeliste einzutragen. Das mag für Programmierer bzw. erfahrene Benutzer eine Lösung sein aber wenn OTTO das sieht löscht er einfach die Anwendung.

@marroh:
Die Idee habe ich gestern angefangen umzusetzen. Dabei ist RC4 wohl gar nicht ausschlaggebend sondern es ist nur wichtig das die .EXE nicht "nackt" eingebunden wird. Sie mit ZIP oder RAR zu packen dürfte den gleichen Effekt haben (wenns dann funktioniert).

Ein Nachteil ist aber bei größeren Anwendungen das der Start etwas verzögert wird. Mann muss ja erst Registerbreite erkennen, .EXE entpacken, ins TEMP-Verzeichnis schreiben und ausführen.

Re: Avira Falschmeldung bei IncludeBinary

Verfasst: 27.04.2010 22:20
von NoUser
Fluid Byte hat geschrieben:
Bisonte hat geschrieben: Die Idee habe ich gestern angefangen umzusetzen. Dabei ist RC4 wohl gar nicht ausschlaggebend sondern es ist nur wichtig das die .EXE nicht "nackt" eingebunden wird. Sie mit ZIP oder RAR zu packen dürfte den gleichen Effekt haben (wenns dann funktioniert).

Ein Nachteil ist aber bei größeren Anwendungen das der Start etwas verzögert wird. Mann muss ja erst Registerbreite erkennen, .EXE entpacken, ins TEMP-Verzeichnis schreiben und ausführen.
Es ist so wie Du es sagst. Darum tippte ich dass die Lösung alles andere als sauber ist. Klar, ob die EXE nun gepackt oder verschlüsselt eingebunden wird ist egal. Die kurze Verzögerung kann man (denke ich mal) schon verkraften. Und sollte es wirklich viel länger dauern könnte man ja auch kurz einen Splash-Screen anzeigen um dem Benutzer zu signalisieren dass da was abgearbeitet wird.

Wenn Du es so umsetzt wäre es nett wenn Du das Ergebnis hier präsentieren würdest. Dann weiss ich ob es so immer noch geht oder eben nicht.

lg Martin

Re: Avira Falschmeldung bei IncludeBinary

Verfasst: 28.04.2010 00:03
von Fluid Byte
Es funktioniert, aber nur beim 64Bit Compiler. Das nutzt mir aber leider nichts da ich den Launcher als 32Bit kompilieren muss damit er sowohl auf 32Bit sowie auf 64Bit ausgeführt werden kann.

Es reicht im 32Bit Compiler nur "IncludeBinary" als einzige Zeile (!) stehen zu haben und es gibt besagt Fehlermeldung von Avira :freak:

Ein Ass hab ich aber noch im Ärmel. Ich werde versuchen die 32Bit/64Bit .EXE bzw. ein PB-Archiv was diese beinhaltet (Packer Lib) ans Ende der "Launcher.exe" zu hängen.

Wenn das nicht klappt weiß ich auch nicht weiter ... :|

Re: Avira Falschmeldung bei IncludeBinary

Verfasst: 28.04.2010 00:11
von Kaeru Gaman
geht es dir nur um Windows?
probier doch mal, es als Windows-Ressource anzuhängen und nicht per IncludeBinary.
das müßte von Avira eigentlich eher akzeptiert werden, weil das die offizielle Lösung zum anhängen von Ressourcen ist.

Re: Avira Falschmeldung bei IncludeBinary

Verfasst: 28.04.2010 00:48
von Fluid Byte
Ich hab' ein Resource Script erstellt (.rc) und es in den Compiler-Optionen eingebunden (Typ = RCDATA).
Die Anwendung lässt sich dann auch kompilieren. Das Problem ist dass man auf die Resourcen mittels BeginUpdateResource_()/EndUpdateResource_() zugreifen muss. Sobald aber ein BeginUpdateResource_() im Quelltext ist kann die .EXE nicht mehr erstellt werden (gibt vorher besagte Warnung).

Ich denke mal in der Windows-Version macht PB dasselbe, ist also identisch mit IncludeBinary.

Der Tipp war eigentlich gut aber nun stehe ich wieder am Anfang ... :freak:

Re: Avira Falschmeldung bei IncludeBinary

Verfasst: 28.04.2010 01:13
von ts-soft
Nimmste den hier: http://www.realsource.de/index.php/down ... aconverter
Fügst die beiden Exen hinzu, stellst Packformat meinetwegen auf None.
Erstellst eine test.res
Zur Nutzung dann:

Code: Alles auswählen

Import "test.res" : EndImport
XIncludeFile "UDRes_Include.pbi"

UDRes_Save(GetTemporaryDirectory() + "test.exe", 1)
; usw.
Avira AntiVir Premium sagt keinen mucks :wink:

Gruß
Thomas

Re: Avira Falschmeldung bei IncludeBinary

Verfasst: 28.04.2010 01:58
von Fluid Byte
Fluid Byte hat geschrieben:Ein Ass hab ich aber noch im Ärmel. Ich werde versuchen die 32Bit/64Bit .EXE bzw. ein PB-Archiv was diese beinhaltet (Packer Lib) ans Ende der "Launcher.exe" zu hängen.
Das deckt sich wohl mit deiner Methode. Lediglich wird keine rohe .EXE bzw. ein gepacktes Archiv angehängt sondern ein exportiertes Resource Script (.res).

Wie auch immer, ich habe es gerade ausprobiert und kann hiermit bestätigen das es einwandfrei funktioniert!
Ich werd' demnächst mal meinen Code für einen 32Bit/64Bit Multi-Launcher in Tipps&Tricks posten.

Danke ts-soft 8)

Re: Avira Falschmeldung bei IncludeBinary

Verfasst: 28.04.2010 02:16
von ts-soft
> sondern ein exportiertes Resource Script (.res).
Da muß ich mich aber wehren. Es ist ein vom PureDataConverter kompilierte binäre Resource-Datei
(kein Script) und der Compiler ist nativ in PB geschrieben und im PureDataConverter integriert.

Der Compiler kann zwar nur einen Resource-Typ, aber der reicht ja für den Zweck :wink:

Freut mich, wenn alles funktioniert.

Gruß

Thomas

Re: Avira Falschmeldung bei IncludeBinary

Verfasst: 28.04.2010 20:58
von Fluid Byte
Ok ok, ich nehm' alles zurück :mrgreen:

Ein Frage hab' ich aber noch. Die beiden .EXE haben eine Größe von 83kb und 55kb. Daraus resultiert eine .res-Datei von 139kb.

Warum ist dann aber die "Launcher.exe" die die Ressourcen enthält 331kb groß? Das ist mehr als die beiden .EXE roh und die .res-Datei zusammen.

Re: Avira Falschmeldung bei IncludeBinary

Verfasst: 28.04.2010 21:07
von ts-soft
Wenn Du keine Komprimierung genutzt hast, sollteste den Import in der UDRes_Include entfernen und
evtl. noch anpassen. Lediglich in den anderen Formaten wird eine spezielle Include generiert, die nur
die genutzten Packformate Importiert. Da ich bei den *.res keine Include-Datei generiere ist diese für
alle Packformate ausgerichtet.

Gruß
Thomas

// edit
Hab Dir mal eine UDRes_Include.pbi erstellt, die keinerlei Packer integriert :wink:

Code: Alles auswählen

;{
; Version 1.1
;
; Copyright (c) 2008 by Thomas Schulz / ts-soft@web.de
; http://www.realsource.de
;
; The contents of this file are subject To the Mozilla Public License Version
; 1.1 (the "License"); you may not use this file except in compliance with
; the License. You may obtain a copy of the License at
; http://www.mozilla.org/MPL/
;
; Software distributed under the License is distributed on an "AS IS" basis,
; WITHOUT WARRANTY OF ANY KIND, either express Or implied. See the License
; For the specific language governing rights And limitations under the
; License.
;
; The Original Code is UDRes_Include.pbi
;
; The Initial Developer of the Original Code is Thomas Schulz.
;
; Portions created by Thomas Schulz are Copyright (C) 2008
; Thomas Schulz. All Rights Reserved.
;}

; CompilerIf Defined(uncompress, #PB_Procedure) = #False
; ImportC "zlib.lib"
;   uncompress(*dest, *destLen, *source, sourceLen)
; EndImport
; CompilerEndIf

Enumeration
  #UDRes_Packer_None
  #UDRes_Packer_jCalg1
  #UDRes_Packer_zip
EndEnumeration

CompilerIf Defined(UDResPack, #PB_Structure) = #False
Structure UDResPack
  Size.q
  CRC.q
  Packer.b
  Magic.b[6]
EndStructure
CompilerEndIf

CompilerIf Defined(_UnpackMemory, #PB_Procedure) = #False
Procedure _UnpackMemory(*SourceMemoryID, SourceLength, *DestionationMemoryID, DestLength, Packer = #UDRes_Packer_jCalg1)
;   Select Packer
;     Case #UDRes_Packer_jCalg1
;       ProcedureReturn UnpackMemory(*SourceMemoryID, *DestionationMemoryID)
;     Case #UDRes_Packer_zip
;       If Not uncompress(*DestionationMemoryID, @DestLength, *SourceMemoryID, SourceLength)
;         ProcedureReturn #True
;       EndIf
;   EndSelect
EndProcedure
CompilerEndIf

Procedure UDRes_Get(ResNumber, hModule = 0)
  Protected ResName.s, ResType.s = "PBDATA"
  Protected hFind, hLoad, hLock, hSize, Size, CRC, Packer
  Protected *Mem.UDResPack, *DestMem

  If ResNumber < 0 : ProcedureReturn #False : EndIf
  ResNumber + 1

  ResName = "#" + Str(ResNumber)

  If Not hModule : hModule = GetModuleHandle_(#Null) : EndIf

  hFind = FindResource_(hModule, ResName, @ResType)
  If hFind
    hLoad = LoadResource_(hModule, hFind)
    hSize = SizeofResource_(hModule, hFind)
    hLock = LockResource_(hLoad)

    *Mem = AllocateMemory(hSize)

    If *Mem
      CopyMemory(hLock, *Mem, hSize)
      FreeResource_(hLock)

      If PeekS(@*Mem\Magic[0], 6, #PB_Ascii) <> "PBDATA"

        ProcedureReturn *Mem
      EndIf

      Size    = *Mem\Size
      CRC     = *Mem\CRC
      Packer  = *Mem\Packer

      If Size > 0
        *DestMEM = AllocateMemory(Size)
        If *DestMEM
          If _UnpackMemory(*Mem + SizeOf(UDResPack), MemorySize(*Mem), *DestMEM, Size, Packer) > 0
            FreeMemory(*Mem)
            If CRC32Fingerprint(*DestMEM, Size) = CRC

              ProcedureReturn *DestMEM
            Else
              FreeMemory(*DestMEM)
            EndIf
          Else
            FreeMemory(*DestMEM)
          EndIf
        EndIf
      Else
        FreeMemory(*Mem)
      EndIf
    EndIf
  EndIf
EndProcedure

Procedure.s UDRes_GetFileName(ResNumber, hModule = 0)
  Protected *Mem = UDRes_Get(0, hModule)
  Protected FileNames.s
  If *Mem
    FileNames  = PeekS(*Mem, -1, #PB_UTF8)
    FreeMemory(*Mem)
    ProcedureReturn StringField(FileNames, ResNumber + 1, ",")
  EndIf
EndProcedure

Procedure UDRes_GetResNumber(FileName.s, start = 1, hModule = 0)
  Protected *Mem = UDRes_Get(0, hModule)
  Protected FileNames.s
  Protected I, J

  If *Mem
    FileNames = PeekS(*Mem, -1, #PB_UTF8)
    FreeMemory(*Mem)
    If start < 1 : start = 1 : EndIf

    J = CountString(FileNames, ",")

    For I = start To J
      If UCase(StringField(FileNames, I + 1, ",")) = UCase(FileName)
        ProcedureReturn I
      EndIf
    Next
    
  EndIf

EndProcedure

Procedure UDRes_Save(FileName.s, ResNumber, hModule = 0)
  Protected FileID
  Protected *Mem

  FileID = CreateFile(#PB_Any, FileName)

  If FileID
    *Mem = UDRes_Get(ResNumber, hModule)

    If *Mem
      WriteData(FileID, *Mem, MemorySize(*Mem))
      CloseFile(FileID)
      FreeMemory(*Mem)

      ProcedureReturn #True
    EndIf

    CloseFile(FileID)
    DeleteFile(FileName)
  EndIf
EndProcedure

Procedure UDRes_CatchSound(Sound, ResNumber, hModule = 0)
  Protected *Mem = UDRes_Get(ResNumber, hModule)
  Protected Result

  If *Mem
    Result = CatchSound(Sound, *Mem, MemorySize(*Mem))
    FreeMemory(*Mem)

    ProcedureReturn Result
  EndIf

EndProcedure

Procedure UDRes_CatchImage(Image, ResNumber, Flag = 0, hModule = 0)
  Protected *Mem = UDRes_Get(ResNumber, hModule)
  Protected Result

  If *Mem
    Result = CatchImage(Image, *Mem, MemorySize(*Mem), Flag)
    FreeMemory(*Mem)

    ProcedureReturn Result
  EndIf

EndProcedure

Procedure UDRes_CatchSprite(Sprite, ResNumber, Modus = 0, hModule = 0)
  Protected *Mem = UDRes_Get(ResNumber, hModule)
  Protected Result

  If *Mem
    Result = CatchSprite(Sprite, *Mem, Modus)
    FreeMemory(*Mem)

    ProcedureReturn Result
  EndIf

EndProcedure

CompilerIf #PB_Compiler_Version >= 430
Procedure UDRes_CatchModule(Module, ResNumber, hModule = 0)
  Protected *Mem = UDRes_Get(ResNumber, hModule)
  Protected Result

  If *Mem
    Result = CatchModule(Module, *Mem, MemorySize(*Mem))
    FreeMemory(*Mem)

    ProcedureReturn Result
  EndIf

EndProcedure
CompilerEndIf