Page 1 sur 1

je déclare la guerre a les antivirus :/

Publié : mer. 13/déc./2017 20:04
par celtic88
hi les Pures :D ,

Image

pour que les choses soient claires :) J'utilise pas d'antivirus ,pour moi il ne sert à rien, ....

passons aux choses sérieuses 8) , j'ai constaté qu'il ya quelque antivirus qui détecte les applications compiler par pb comme des virus pour rien exemple :

Code : Tout sélectionner

MessageRequester(":(","By Celtic88")
le résultat 6 / 66 ?
https://www.virustotal.com/fr/file/6bdf ... 513183060/

ok ,
-les étapes pour rendre notre Pb FUD :
* il ya d'autre moyen pour 'contourner' les av , j'ai choisi la méthode la plus simple pour qu'elle soit utilisé par tous :) :

il faut tout d'abord compiler notre pb en dll on ajoutent une simple fonction , qui sert à être appeler quand le programme se lance

voilà l'éxemple et la fonction à ajouter

Code : Tout sélectionner


CompilerIf #PB_Compiler_ExecutableFormat = #PB_Compiler_DLL
  ProcedureDLL Start_EXE () ; procedure that will be called when the program loads
    ;//not change anything...
    Protected OK =  999999;junk code
    !PUSH   999999
    ;........
    
    !PUSH   dword 0
    !CALL  _GetModuleHandleW@4
    !MOV    [_PB_Instance],eax
    !CALL   PB_DllInit
    !CALL  _PB_EOP
    ExitProcess_(0)
  EndProcedure
CompilerEndIf

;here your code
MessageRequester("","By Celtic88")
;..


maintenant, il ne reste qu'à convertir notre dll en exe ,
et voilà le patche ;)

Code : Tout sélectionner

;// By Celtic88 @hotmail.fr
;// Convert 'PB dll' to Exe

DLL.S = OpenFileRequester ( "Select Pb Dll File..." , "" , "Dll (*.dll)" , 0 ) 

Declare Patch_Pb_Dll_To_Exe ( DLLPath.s ) 
If Patch_Pb_Dll_To_Exe ( DLL ) = 1
  MessageRequester("","All is ok :)")
EndIf

Procedure Rva2Offset( dwRva, *pLibrary)
  Protected *tIMAGE_DOS_HEADER.IMAGE_DOS_HEADER = *pLibrary
  Protected *tIMAGE_NT_HEADERS.IMAGE_NT_HEADERS = *tIMAGE_DOS_HEADER + *tIMAGE_DOS_HEADER\e_lfanew
  Protected *tIMAGE_SECTION_HEADER.IMAGE_SECTION_HEADER = *tIMAGE_NT_HEADERS + SizeOf ( IMAGE_NT_HEADERS ) 
  With *tIMAGE_SECTION_HEADER
    For i = 1 To *tIMAGE_NT_HEADERS\FileHeader\NumberOfSections
      If \VirtualAddress < = dwRva And \VirtualAddress + \SizeOfRawData > dwRva
        ProcedureReturn ( dwRva - \VirtualAddress ) + \PointerToRawData
      EndIf
      *tIMAGE_SECTION_HEADER + SizeOf ( IMAGE_SECTION_HEADER ) 
    Next
  EndWith
EndProcedure

Procedure Patch_Pb_Dll_To_Exe ( DLLPath.s ) 
  #IMAGE_DOS_HEADER                = $5A4D;//Magic number
  #IMAGE_NT_SIGNATURE              = $00004550;//signature
  #IMAGE_SUBSYSTEM_WINDOWS_GUI     = 2        ;//Windows graphical user interface (GUI) subsystem.
  #IMAGE_FILE_DLL                  = $2000    ;//The image is a DLL file. While it is an executable file, it cannot be run directly.
  #IMAGE_DIRECTORY_ENTRY_BASERELOC = 5
  #IMAGE_REL_BASED_HIGHLOW         = 3
  #IMAGE_REL_BASED_DIR64           = 10
  Structure IMAGE_BASE_RELOCATION ; from winnt.h
    VirtualAddress.l
    SizeOfBlock.l
  EndStructure
  
  Protected file = OpenFile ( #PB_Any , DLLPath ) ;//Open Dll
  If Not file : ProcedureReturn - 1 : EndIf
  Protected size = Lof ( file ) 
  Protected *pLibrary = AllocateMemory ( size ) 
  ReadData ( file , *pLibrary , size ) 
  CloseFile ( file ) 
  
  ;//Read PE format
  Protected *tIMAGE_DOS_HEADER.IMAGE_DOS_HEADER = *pLibrary
  ;//Check If it's valid format
  If ( *tIMAGE_DOS_HEADER\e_magic < > #IMAGE_DOS_HEADER ) : ProcedureReturn - 2 : EndIf;// MS-DOS header missing.
  Protected *tIMAGE_NT_HEADERS.IMAGE_NT_HEADERS = *tIMAGE_DOS_HEADER + *tIMAGE_DOS_HEADER\e_lfanew
  With *tIMAGE_NT_HEADERS
    ;// Check signature
    If ( \Signature < > #IMAGE_NT_SIGNATURE ) : ProcedureReturn - 2 : EndIf;// wrong signature.
                                                                           ;// Check if is a dll file
    If (\FileHeader\Characteristics & #IMAGE_FILE_DLL) <> #IMAGE_FILE_DLL:ProcedureReturn -2:EndIf ;//noop :/
    
    ;//Get Pe Section
    Protected *tIMAGE_SECTION_HEADER.IMAGE_SECTION_HEADER = *tIMAGE_NT_HEADERS + SizeOf ( IMAGE_NT_HEADERS ) 
    
    ;// Export Directory
    Protected ExportVirtualAddress = \OptionalHeader\DataDirectory[#IMAGE_DIRECTORY_ENTRY_EXPORT]\VirtualAddress
    Protected RelocVirtualAddress=\OptionalHeader\DataDirectory[#IMAGE_DIRECTORY_ENTRY_BASERELOC]\VirtualAddress
    Protected *PreferredBase = \OptionalHeader\ImageBase
    Protected *NewBase = $00400000 ;The default value for DLLs is 0x10000000. The default value for applications is 0x00400000 
    
  EndWith
  Protected *tIMAGE_EXPORT_DIRECTORY.IMAGE_EXPORT_DIRECTORY , 
            *AddressOfNames.long , *AddressOfNameOrdinals.Word , *StartAddressOfFunctions, 
            *AddressOfFunctions.long , AddressOf_Start_EXE ,
            *ir.IMAGE_BASE_RELOCATION,*e.Unicode,ii,*i.integer
  
  For i = 1 To *tIMAGE_NT_HEADERS\FileHeader\NumberOfSections
    With *tIMAGE_SECTION_HEADER
      
      ;//Find Address of Procedure "Start_EXE()"
      If \VirtualAddress < = ExportVirtualAddress And \VirtualAddress + \SizeOfRawData > ExportVirtualAddress
        Delta = \VirtualAddress - \PointerToRawData
        *tIMAGE_EXPORT_DIRECTORY = *pLibrary + ( ExportVirtualAddress - \VirtualAddress ) + \PointerToRawData
        
        Debug "Dll Name : " + PeekS ( *pLibrary + ( *tIMAGE_EXPORT_DIRECTORY\Name - Delta ) , - 1 , #PB_Ascii ) 
        
        *AddressOfNames = *pLibrary + *tIMAGE_EXPORT_DIRECTORY\AddressOfNames - Delta
        *AddressOfNameOrdinals = *pLibrary + *tIMAGE_EXPORT_DIRECTORY\AddressOfNameOrdinals - Delta
        *StartAddressOfFunctions = *pLibrary + *tIMAGE_EXPORT_DIRECTORY\AddressOfFunctions - Delta
        For o = 0 To *tIMAGE_EXPORT_DIRECTORY\NumberOfNames - 1
          
          *AddressOfFunctions = *StartAddressOfFunctions + (*AddressOfNameOrdinals\w * SizeOf ( long ) )
          ;//Debug PeekS(*pLibrary+*AddressOfNames\l-Delta,-1,#PB_Ascii) + " " +
          ;//Hex(*AddressOfNameOrdinals\w) + " " +
          ;//Hex(*AddressOfFunctions\l)
          
          If PeekS( *pLibrary + *AddressOfNames\l - Delta , - 1 , #PB_Ascii ) = "Start_EXE";// yoop is here :)
            Debug "Address Of 'Start_EXE()' is : " + Hex ( *AddressOfFunctions\l ) 
            AddressOf_Start_EXE = *AddressOfFunctions\l;//save Address...
            Break;//break
          EndIf
          
          *AddressOfNameOrdinals + SizeOf ( Word ) 
          *AddressOfNames + SizeOf ( long ) 
        Next
      EndIf
      
      If \VirtualAddress <= RelocVirtualAddress And \VirtualAddress+ \SizeOfRawData > RelocVirtualAddress
        *ir=  *pLibrary+\PointerToRawData+ (RelocVirtualAddress-\VirtualAddress)
        While *ir\VirtualAddress
          Debug "Reloc RVA : " + Hex(*ir\VirtualAddress)
          *e=*ir+SizeOf(IMAGE_BASE_RELOCATION)
          For ii=1 To (*ir\SizeOfBlock-SizeOf(IMAGE_BASE_RELOCATION))/SizeOf(Word) 
            If ((*e\u >> 12) & $000F = #IMAGE_REL_BASED_HIGHLOW) Or 
               ((*e\u >> 12) & $000F = #IMAGE_REL_BASED_DIR64)
              *i = *pLibrary + (Rva2Offset(*ir\VirtualAddress, *pLibrary) + (*e\u & $0fff))
              *i\i - *PreferredBase
              *i\i + *NewBase ;// add new imge base address
            EndIf      
            *e + SizeOf(Unicode)
          Next
          *ir +*ir\SizeOfBlock
        Wend
      EndIf  
      
    EndWith
    *tIMAGE_SECTION_HEADER + SizeOf ( IMAGE_SECTION_HEADER ) 
  Next
  
  If AddressOf_Start_EXE;//Finally , write new pe headers
    *tIMAGE_NT_HEADERS\OptionalHeader\ImageBase = *NewBase
	
    *tIMAGE_NT_HEADERS\FileHeader\Characteristics ! #IMAGE_FILE_DLL;// remove FILE_DLL attribute
    Debug "original Entry Point" + *tIMAGE_NT_HEADERS\OptionalHeader\AddressOfEntryPoint
    *tIMAGE_NT_HEADERS\OptionalHeader\AddressOfEntryPoint = AddressOf_Start_EXE;//change Entry point  to address of "Start_EXE()"
    *tIMAGE_NT_HEADERS\OptionalHeader\Subsystem = #IMAGE_SUBSYSTEM_WINDOWS_GUI
    
    file = CreateFile ( #PB_Any , GetFilePart ( DLLPath , #PB_FileSystem_NoExtension ) + ".exe" ) ;//create new pe file
    If Not file : ProcedureReturn - 4 : EndIf
    WriteData ( file , *pLibrary , size ) 
    CloseFile ( file ) 
    
    ProcedureReturn 1;// congratulations :)
  Else
    ;// Procedure "Start_EXE()" not exists ;!!!
    ProcedureReturn - 3
  EndIf
EndProcedure


le résultat :
2/67 :D pas mal, et notre application est plus détecté comme un prog pb :D
https://www.virustotal.com/fr/file/a6a4 ... 513187346/

pour les programmeurs avancés cette méthode sert aussi a exécuté le exe directement depuis la mémoire et on peut même exporter ces procédure comme une dll :)

a+
By .

Re: je déclare la guerre a les antivirus :/

Publié : jeu. 14/déc./2017 11:01
par Kwai chang caine
Merci de ton puissant partage, chevalier blanc des temps modernes 8) :D

Tiens c'est rigolo, j'ai testé ton EXE

Code : Tout sélectionner

MessageRequester(":(","By Celtic88")
Et j'ai que
SHA256: 5f7848ad6ee414106c783229508813340a4d409132cd80a99fd75ab8e6e8134b
Nom du fichier : MessageRequester.exe
Ratio de détection : 1 / 66
Baidu Win32.Trojan.WisdomEyes.16070401.9500.9637 20171212
Sans utiliser ton code magique 8O
https://www.virustotal.com/fr/file/5f78 ... /analysis/

Re: je déclare la guerre a les antivirus :/

Publié : jeu. 14/déc./2017 11:33
par Ar-S
Compilé en PB 5.61 x86
SHA256: 64489c922eee461ecdd456310c88a188bae4d75c0b5f626be13a84d9eade804f
Nom du fichier : msg_x86_pb561.exe
Ratio de détection : 3 / 67
Compilé en PB 5.50 x64
SHA256: 39950658981ab21b72fc4a965209416b99d2d7f3e1c691329628bb58855f37c1
Nom du fichier : msg_x64.exe
Ratio de détection : 1 / 67
Dans les 2 cas ce sont des AV inconnus. Pour le x64 c'est Jiangmin..

Si je compile le prog x86 en dll puis je le patch en exe, je ne peux plus le lancer, j'ai un message qui me dit que le programme n'est pas executable...
Pourtant le patch m'a affiché "All is Ok"

Si tu en a 6 et nous 3 ou 1 selon le compilo, tu es sûr de ton système sans antivirus ?

Re: je déclare la guerre a les antivirus :/

Publié : jeu. 14/déc./2017 14:36
par Zorro
Rappel , celtic88 est en Algérie ! ;)
ceci explique surement cela !

en principe les algériens sont surtout connu pour avoir fait des prg de
décryptage TV Sat (TPS s'en souviens encore :mrgreen: ) ou de générateur de Clefs ...

la réputation d'un pays, reste dans la sphere "anti-virus" :)

sans parler bien sur des Warez :lol:

Re: je déclare la guerre a les antivirus :/

Publié : ven. 15/déc./2017 20:02
par Kwai chang caine
Mais alors...y'a pas que le racisme primaire.. 8O mais aussi le racisme binaire :wink: :lol:

Re: je déclare la guerre a les antivirus :/

Publié : ven. 22/déc./2017 10:09
par celtic88
merci les gars pour vous commentaires..

le code est testé sur un system 32 bit windows 7 pb version : 5.51

elle reste une méthode parmi d'autres ,pour prouver que les antivirus sert à rien le meilleur d'entre eux je l "bypass" au bout d un quart heur max ;)

Re: je déclare la guerre a les antivirus :/

Publié : jeu. 25/janv./2018 21:34
par celtic88
juste pour le plaisir une autre méthode :D

Code : Tout sélectionner

;Team fuxk avs :)

Structure fuxk_avs
  MOVEAX.b
  ADDr.l
  NEGEAX.w
  CALLEAX.W
EndStructure

Procedure changeentrypoint ( DLLPath.s ) 
  
  OpenFile(0, DLLPath )
  Protected size = Lof (0) 
  Protected *pLibrary = AllocateMemory ( size ) 
  ReadData ( 0 , *pLibrary , size ) 
  CloseFile ( 0 ) 
  
  Protected *tIMAGE_DOS_HEADER.IMAGE_DOS_HEADER = *pLibrary
  Protected *tIMAGE_NT_HEADERS.IMAGE_NT_HEADERS = *tIMAGE_DOS_HEADER + *tIMAGE_DOS_HEADER\e_lfanew
  With *tIMAGE_NT_HEADERS
    
    Protected *tIMAGE_SECTION_HEADER.IMAGE_SECTION_HEADER = *tIMAGE_NT_HEADERS + SizeOf ( IMAGE_NT_HEADERS ) 
    Protected pCode = *tIMAGE_NT_HEADERS\OptionalHeader\ImageBase + *tIMAGE_NT_HEADERS\OptionalHeader\AddressOfEntryPoint
    Protected VirtualAddress_code = *tIMAGE_SECTION_HEADER\VirtualAddress + (*tIMAGE_SECTION_HEADER\SizeOfRawData - 10)
    *tIMAGE_NT_HEADERS\OptionalHeader\AddressOfEntryPoint = VirtualAddress_code
    Protected *pl.fuxk_avs = *pLibrary + *tIMAGE_SECTION_HEADER\PointerToRawData  + (*tIMAGE_SECTION_HEADER\SizeOfRawData - 10)
    
    
    Debug Hex(pCode)
    
    *pl\MOVEAX = $B8
    *pl\ADDr = -pCode
    *pl\NEGEAX = $D8F7
    *pl\CALLEAX = $D0FF
    
    CreateFile(0, "celtic88.exe")
    WriteData(0,*pLibrary,size)
    CloseFile(0)
    
  EndWith
  
  
EndProcedure


file$ = OpenFileRequester("select exe","exe|*.exe","",0)

If file$
  changeentrypoint ( file$ ) 
EndIf



Re: je déclare la guerre a les antivirus :/

Publié : ven. 26/janv./2018 0:26
par Ar-S
J'ai testé ton dernier code sur mon exe. Un simple "killer d'exe"
Sans patch : 2/64
Cybereason malicious.b2bead 20171103
Cylance Unsafe 20180126

Après ton patch, 3/64.. :roll:
Avira (no cloud) TR/Crypt.XPACK.Gen 20180125
Cylance Unsafe 20180126
Qihoo-360 HEUR/QVM20.1.C5AC.Malware.Gen 20180126

C'est pas encore ça.

Re: je déclare la guerre a les antivirus :/

Publié : ven. 26/janv./2018 10:42
par TazNormand
J'ai un peu de mal à cautionner ce genre de programme qui "bypass" les antivirus. N'en déplaise à Celtic88, pour moi ils ont leur utilité, et c'est le jour où tu te trouves infecté que tu regrettes de ne pas en avoir installé un.

Tous les antivirus proposent d'ajouter un programme dans ses exceptions lorsque l'on est sûr de sa provenance, alors certes, si l'on décide de commercialiser une de ses créations je peux comprendre que de voir son œuvre créer des alertes antivirus n'est pas la panacée, mais nombre de créations de softs via PB n'ont pas générés d'alertes.

Se pourrait-il que les versions Warez de PB génèrent des "faux positifs" ???

Re: je déclare la guerre a les antivirus :/

Publié : ven. 26/janv./2018 17:11
par Zorro
c'est plutot que Pb est comme Fasm , alors que les autres langages (C++, C# .... utilisent des lib genre "Microsoft .NET"
ou des librairies bien reférencées , avec leur lots de Dll indispensables

les virus sont souvent (toujours?) fait en assembleur autonomes sans Librairies indispensables et "connues"

Purebasic de ce point de vue genere des Executables ressemblant trait pour trait a ceux fait en Assembleur
et donc, avec tout ce que ça comporte comme risque potentiel ...

on a des exe tres petits, mais en meme temps, on a des prg qui sont plutot mal vu .... (du point de vue des anti virus )

ceci explique cela :)

il m'a semblé voir passer une news , comme quoi Fred aurait oeuvré pour faire passer Purebasic
pour un prg respectable aux yeux des antivirus , une histoire de signature ... ??? !!!

celtic88 a écrit :hi les Pures :D ,

pour que les choses soient claires :) J'utilise pas d'antivirus ,pour moi il ne sert à rien, ....
Yo Celtic , j'aimerai avoir ton assurance ... :lol:

en meme temps , je me demande si le simple fait de surveiller la liste des prg lancé au demarrage du systeme ne sufirai pas ?

observation des clef "Ordinateur\HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Run" et Runonce
ainsi que "Ordinateur\HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Run" et Runonce
par exemple , permet deja de savoir quel prg se relance au demarrage , point de depart de bien des virus
ensuite un petit tour dans le dossier "Shell:Statup"

et verifier si un "Autoexec.bat" existe dans C:\
deja ça devrai calmer pas mal de trucs (pas tout bien sur) , mais la plupart des virus devrai etre coincé par ce genre de verif ultra rapide ...
faudrai faire un apprentissage des prg regulierement utilisé, et creer une alerte si un nouveau debarque dans ces liste ...
voir bloquer tout prg n'etant pas en liste verte

un antivirus a 2 balles , qui pourrai deja pas mal protéger , je pense
qu'en pensez vous ? 8O

sur Atari j'avais fait un code, qui lisait le contenu d'un fichier Prg (l'entete) , puis tout le reste du fichier pour voir si celui ci comportait encore l'entete
si oui, cela signifiait qu'il se repliquait ...
c'etait simple a l'epoque :)

j'ai meme bloqué des virus en utilisant un simple editeur Hexa :) (il suffisait d'effacer la partie entete (copie de la vrais entete mais située dans corps du fichier ) qui suivait la vraie entete du prg , situé elle, au debut ) .. bref la presence deux 2 meme entetes dans le meme fichier etait tres louche !!

ceci empechait la reproduction du prg , mais pas son action nefaste ...
mais la plupart du temps l'action nefaste avait lieu avec le prg "enfant" pour ne pas attirer l'attention sur le prg generateur :)
donc le fait de l'empecher de se reproduire, finalement empechait le virus de s'activer :)

Re: je déclare la guerre a les antivirus :/

Publié : dim. 04/févr./2018 18:11
par celtic88
@Ar-S ,
C'est pas encore ça.
j'ai bien d'autre méthode 8) plus dur que ça :D mais je veux pas entrer dans le hacking et virus cryptage :twisted: .

Re: je déclare la guerre a les antivirus :/

Publié : dim. 04/févr./2018 18:53
par celtic88
@Zorro désolé j ai pas vue votre commentaire..
....prg lancé au demarrage du systeme ne sufirai pas ?
ne suffit pas :( :D !
..un antivirus a 2 balles , qui pourrai deja pas mal protéger , je pense
qu'en pensez vous ?
:roll:


en ce moment je travaille sur un Programme de protection son travail est de lancer un 'exe' suspect dans un espace virtuel et pour chaque appelle à un API dangerouse 'ex: tcp connect', il faut demander l'autorisation et c'est seulement comme ça qu'on peut arrêter un virus

a+

Re: je déclare la guerre a les antivirus :/

Publié : dim. 04/févr./2018 19:50
par Ar-S
J'utilise Covert Pro pour lancer mes navigateurs et autres programmes "sensibles". J'ai aussi Shadow Protect mais je l'utilise que rarement. Si je dois eventuellement plugger des DD de clients plein de vérolins par exemple car il faut rebooter :D