Page 1 sur 1
[UDF] VersionDessai
Posté : dim. 05 juin 2016 13:54
par Numeric
Salut,
Ce UDF est toujours en cours d'étude à mon niveau,
Le sujet sur La version d' essai ou du moins sur l'activation des produits ou du moins sur la protection des programmes est un sujet sensible
je ne vous donnerai pas beaucoup plus de détails qu'un UDF proposant une protection primaire
, et sans mode d'activation
Mais dans la prochaine version nous allons activer nos produits en ligne
l'UDF vous permet de :
1)Définir une durée d' essai pour vos programmes
2)Modifier : Ajouter ou supprimer un nombre de jours
3)Notifier le nombre de jours d'essai restant
Re: [UDF]VersionDessai
Posté : dim. 05 juin 2016 16:24
par gothgothhh
Je ne penses pas que c'est une question de "sujet sensible". Tu auras beau protégé ton programme en quelques heures/jours un petit malin le décompilera et sortira les sources sans la version d'essai.
Si tu trouve la solution infaillible pour protéger ton programme, ne la partage pas ... (Tu ne ferais que programmé la mort de tes méthodes de protection)
Ce n'est que mon avis bien-sur ^^
Bon courage pour la suite !
Re: [UDF]VersionDessai
Posté : dim. 05 juin 2016 17:03
par Numeric
cela ne nous empêche pas d'apprendre, et de partager nos connaissances...
croit moi! , mieux vaut créer son propre programme plutôt que d'essayer de forcer la protection d'un Programme complexe et soigneusement Protégé .(forcer la protection....est Interdit par la loi..)
Aussi , Souvent l'effort que l'on se donne pour protéger un programme dépasse celui fournit pour le créer
En plus les méthodes de protection sont nombreuses et dépendent de beaucoup de paramètres...
c'est un UDF que je propose pas un TUTO
...
Aussi mon UDF n'est pas à sa dernière version
Re: [UDF] VersionDessai
Posté : jeu. 16 juin 2016 21:31
par Numeric
Salut,
,
Ah! le petit malin, Tu as crée un petit programme qui règle l'heure de ton ordi à 06h 00 à chaque fois que celui ci affiche 23h 58
Ainsi donc tu vis éternellement un seul jour
, tu utilise donc éternellement mon Programme d'essai.
Waouh! je t'ai eu
car maintenant nous possédons notre propre horloge embarquée
quand notre journée s'écoule , et que tu vis toujours ton éternelle journée, ON PASSE avec notre programme au jour suivant
Re: [UDF] VersionDessai
Posté : mar. 30 mai 2017 23:44
par Numeric
Comme promis, la version évolue
Désormais nos ressources seront cryptées et le timer sera efficace....car il travaillera en arrière plan et ne causera aucun problème au
fonctionnement de votre programme.
j'ai en effet crée un exécutable pour servir de test. il ne présente aucun danger pour votre machine.D'ailleurs vous pourrez quand vous le voudrez nettoyer les ressources que ce dernier va créer. Et cela en un clique....
Code :
#include-once#include <Crypt.au3>#include <Date.au3>#include <File.au3>#include <WinAPIFiles.au3>#include <WinAPISys.au3>#include <Misc.au3>#Region Const et Vars=======================================================================================================;TimerGlobal $TIMER_iCOUNT = 0, $US_NOTIFY = 0;FilesGlobal Const $START_SECTION = "Debut", $TODAY_SECTION = "Now", $END_USE_SECTION = "Trial";Variables for callbackfuncGlobal $GETTIME, $REG, $REGVAL, $FILE, $PASSW;Timer and callback hwndsGlobal $hTimerProc, $iTimerID#EndRegion Const et Vars=======================================================================================================; #FUNCTION# ====================================================================================================================; Name ..........: VE_TrialInit; Description ...: Gère la periode d'essai des programmes; Syntax ........: VE_TrialInit($sRegKey, $RegValueName, $sIniFullPath[, $Trial = 15[, $sPassWord = "12@CTRYPPOq098@qsazfgtSZEERT"]]); Parameters ....: $sRegKey - a string value.; $RegValueName - an unknown value.; $sIniFullPath - a string value.; $Trial - [optional] an unknown value. Default is 15.; $sPassWord - [optional] a string value. Default is "12@CTRYPPOq098@qsazfgtSZEERT".; Return values .: None; Author ........: Numeric; Modified ......:; Remarks .......:; Related .......:; Link ..........:; Example .......: No; ===============================================================================================================================Func VE_TrialInit
($sRegKey, $RegValueName, $sIniFullPath, $Trial = 15, $sPassWord = "12@CTRYPPOq098@qsazfgtSZEERT") Local $GetDir, $CryptToReg, $RegRead, $ClipPutError $PASSW = $sPassWord $REG = $sRegKey $REGVAL = $RegValueName $FILE = $sIniFullPath If Not __ToDayIsNotLastDay
("2017/05/26") Then _WinAPI_ShowError("Time is invalide!", True); Date de codage doit être inferieur à la date d'utilisation $RegRead = RegRead($sRegKey, $RegValueName) $ClipPutError = @error If Not FileExists($sIniFullPath) And $ClipPutError Then $GetDir = __WinAPIGetFilePath
($sIniFullPath, False) DirCreate($GetDir) If Not _FileCreate($sIniFullPath) Then _WinAPI_ShowError("Enable to get Ressources!", True); impossible d'utiliser le programme Local $EndTrial = _DateAdd("d", Int($Trial), _NowCalcDate()); fin d'essai IniWrite($sIniFullPath, $START_SECTION, $START_SECTION, _NowCalcDate()) IniWrite($sIniFullPath, $END_USE_SECTION, $END_USE_SECTION, $EndTrial) IniWrite($sIniFullPath, $TODAY_SECTION, $TODAY_SECTION, _NowCalcDate()) Local $Compress = _NowCalcDate() & "|" & _NowCalcDate() & "|" & $EndTrial RegWrite($sRegKey, $RegValueName, "REG_SZ", __sEncrypteChar
($Compress, $sPassWord, Default)) __FileEncrypt
($sIniFullPath, $sPassWord, True) ;on crypte le fichier d-infos EndIf Local $I_START, $I_NOW, $I_END Local $R_START, $R_NOW, $R_END, $R_SPLIT, $R_READ, $R_DECRYPT $R_READ = RegRead($sRegKey, $RegValueName) $R_DECRYPT = __sDecrypteChar
($R_READ, $sPassWord, Default) $R_SPLIT = StringSplit($R_DECRYPT, "|") __FileEncrypt
($sIniFullPath, $sPassWord, False) ;decrypte le fichier pour lire les infos $I_START = IniRead($sIniFullPath, $START_SECTION, $START_SECTION, Default) $I_NOW = IniRead($sIniFullPath, $TODAY_SECTION, $TODAY_SECTION, Default) $I_END = IniRead($sIniFullPath, $END_USE_SECTION, $END_USE_SECTION, Default) If _DateDiff("d", $I_NOW, _NowCalcDate()) > 0 Then IniWrite($sIniFullPath, $TODAY_SECTION, $TODAY_SECTION, _NowCalcDate()) Local $ToWriteInReg = $R_SPLIT[1] & "|" & _NowCalcDate() & "|" & $R_SPLIT[3] Local $R_CRYPT = __sEncrypteChar
($ToWriteInReg, $sPassWord, Default) RegDelete($sRegKey, $RegValueName) RegWrite($sRegKey, $RegValueName, "REG_SZ", $R_CRYPT) EndIf $I_NOW = IniRead($sIniFullPath, $TODAY_SECTION, $TODAY_SECTION, Default); refresh memory __FileEncrypt
($sIniFullPath, $sPassWord, True) $GETTIME = $I_NOW If Not __ToDayIsNotLastDay
($I_NOW) Then _WinAPI_ShowError("L'horloge a rencontré un probleme", True) If _DateDiff("d", $I_END, $R_SPLIT[3]) <> 0 Then _WinAPI_ShowError("Ressources invalides !", True) If _DateDiff("d", $I_START, $R_SPLIT[1]) <> 0 Then _WinAPI_ShowError("Ressources invalides!", True) If _DateDiff("d", _NowCalcDate(), $I_END) < 0 Then _WinAPI_ShowError("Essai Expiré", True) If $US_NOTIFY <> 5 Then MsgBox(48, "Version d'essai", "IL vous reste " & _DateDiff("d", _NowCalcDate(), $I_END) & " jour(s) d'essai", 2) $US_NOTIFY = 5 EndIf Opt('TrayAutoPause', 0) Local $WinHWnd = 0 $hTimerProc = DllCallbackRegister('_TimerProc', 'none', 'hwnd;uint;uint_ptr;dword') $iTimerID = _WinAPI_SetTimer($WinHWnd, 0, 1000, DllCallbackGetPtr($hTimerProc)) OnAutoItExitRegister
("__KillTimer")EndFunc ;==>VE_TrialInit; #FUNCTION# ====================================================================================================================; Name ..........: VE_ADDtrial; Description ...: permet d'augmenter la periode d'essai...; Syntax ........: VE_ADDtrial($Trial, $sRegKey, $RegValueName, $sIniFullPath, $sPassWord); Parameters ....: $Trial - an unknown value.; $sRegKey - a string value.; $RegValueName - an unknown value.; $sIniFullPath - a string value.; $sPassWord - a string value.; Return values .: La nouvelle date de fin d'essai; Author ........: Numeric; Modified ......:; Remarks .......:; Related .......:; Link ..........:; Example .......: No; ===============================================================================================================================Func VE_ADDtrial
($Trial, $sRegKey, $RegValueName, $sIniFullPath, $sPassWord) Local $R_START, $R_NOW, $R_END, $R_SPLIT, $R_READ, $R_DECRYPT $R_READ = RegRead($sRegKey, $RegValueName) $R_DECRYPT = __sDecrypteChar
($R_READ, $sPassWord, Default) $R_SPLIT = StringSplit($R_DECRYPT, "|") Local $aNewDate = _DateAdd("d", Int($Trial), $R_SPLIT[3]) Local $ToWriteInReg = $R_SPLIT[1] & "|" & $R_SPLIT[2] & "|" & $aNewDate RegDelete($sRegKey, $RegValueName) RegWrite($sRegKey, $RegValueName, "REG_SZ", __sEncrypteChar
($ToWriteInReg, $sPassWord, Default)) __FileEncrypt
($sIniFullPath, $sPassWord, False) IniWrite($sIniFullPath, $END_USE_SECTION, $END_USE_SECTION, $aNewDate) __FileEncrypt
($sIniFullPath, $sPassWord, True)EndFunc ;==>VE_ADDtrialFunc _GetDay
($sDate) If _DateIsValid($sDate) Then Return _
StringSplit($sDate, "/")[3]EndFunc ;==>_GetDay; #FUNCTION# ====================================================================================================================; Name ..........: _TimerProc; Description ...: Callback func; Syntax ........: _TimerProc($hWnd, $iMsg, $iTimerID, $iTime); Parameters ....: $hWnd - a handle value.; $iMsg - an integer value.; $iTimerID - an integer value.; $iTime - an integer value.; Return values .: spend secs; Author ........: Numeric; Modified ......:; Remarks .......:; Related .......:; Link ..........:; Example .......: No; ===============================================================================================================================Func _TimerProc
($hWnd, $iMsg, $iTimerID, $iTime) #forceref $hWnd, $iMsg, $iTimerId, $iTime If $TIMER_iCOUNT = 0 Then $TIMER_iCOUNT = __GetTimeSec
(_NowCalc()) EndIf $TIMER_iCOUNT += 1 __MakTime
($TIMER_iCOUNT, $GETTIME, $REG, $REGVAL, $FILE, $PASSW)EndFunc ;==>_TimerProc; #INTERNAL_USE_ONLY# ===========================================================================================================; Name ..........: __KillTimer; Description ...: liere les ressources de la fonction callback; Syntax ........: __KillTimer(); Parameters ....:; Return values .: None; Author ........: Numeric; Modified ......:; Remarks .......:; Related .......:; Link ..........:; Example .......: No; ===============================================================================================================================Func __KillTimer
() Local $WinHWnd = 0 _WinAPI_KillTimer($WinHWnd, $iTimerID) DllCallbackFree($hTimerProc)EndFunc ;==>__KillTimer; #INTERNAL_USE_ONLY# ===========================================================================================================; Name ..........: __MakTime; Description ...: Timer embarqué permzt de verifier si l"horloge de l utilisateur normalement; Syntax ........: __MakTime($aSec, $GetTime, $sRegKey, $RegValueName, $sIniFullPath, $sPassWord); Parameters ....: $aSec - an array of unknowns.; $GetTime - an unknown value.; $sRegKey - a string value.; $RegValueName - an unknown value.; $sIniFullPath - a string value.; $sPassWord - a string value.; Return values .: None; Author ........: Numeric; Modified ......:; Remarks .......:; Related .......:; Link ..........:; Example .......: No; ===============================================================================================================================Func __MakTime
($aSec, $GETTIME, $sRegKey, $RegValueName, $sIniFullPath, $sPassWord) If $aSec >= 3600 And _DateDiff("d", $GETTIME, _NowCalcDate()) <= 0 Then Local $R_READ = RegRead($sRegKey, $RegValueName) Local $R_DECRYPT = __sDecrypteChar
($R_READ, $sPassWord, Default) Local $R_SPLIT = StringSplit($R_DECRYPT, "|") __FileEncrypt
($sIniFullPath, $sPassWord, False) ;decrypte le fichier pour lire les infos IniWrite($sIniFullPath, $TODAY_SECTION, $TODAY_SECTION, _DateAdd("d", 1, _NowCalcDate())) __FileEncrypt
($sIniFullPath, $sPassWord, True) Local $ToWriteInReg = $R_SPLIT[1] & "|" & _DateAdd("d", 1, _NowCalcDate()) & "|" & $R_SPLIT[3] Local $R_CRYPT = __sEncrypteChar
($ToWriteInReg, $sPassWord, Default) RegDelete($sRegKey, $RegValueName) RegWrite($sRegKey, $RegValueName, "REG_SZ", $R_CRYPT) $aSec = 0 _WinAPI_ShowError("Disfonctionnement de l'horloge détecté", True) EndIf ;ConsoleWrite($aSec & @CRLF)EndFunc ;==>__MakTime; #INTERNAL_USE_ONLY# ===========================================================================================================; Name ..........: __WinAPIGetFilePath; Description ...: Recupere le nom d'un fichier à partir de son repertoire; Syntax ........: __WinAPIGetFilePath($sFilePath[, $bFull = False]); Parameters ....: $sFilePath - a string value.; $bFull - [optional] a boolean value. Default is False.; Return values .: le nom seulement du fichier ou le repertoire entier contenant le nom si $bFull = True; Author ........: Numeric; Modified ......: _WinAPI_GetFullPathName; Remarks .......:; Related .......:; Link ..........:; Example .......: No; ===============================================================================================================================Func __WinAPIGetFilePath
($sFilePath, $bFull = False) Local $FullPath = _WinAPI_GetFullPathName($sFilePath) If $bFull Then Return $FullPath Else Local $sFileName = _WinAPI_GetFileTitle($sFilePath) & _WinAPI_PathFindExtension($sFilePath) Local $fNameLen = StringLen($sFileName) If $fNameLen Then Return StringTrimRight($FullPath, $fNameLen + 1) Else Return $sFileName EndIf EndIfEndFunc ;==>__WinAPIGetFilePath; #INTERNAL_USE_ONLY# ===========================================================================================================; Name ..........: __ToDayIsNotLastDay; Description ...: Determine si la; Syntax ........: __ToDayIsLastDay($iStartDate); Parameters ....: $iStartDate - an integer value.; Return values .: true or false; Author ........: Numeric; Modified ......:; Remarks .......:; Related .......:; Link ..........:; Example .......: No; ===============================================================================================================================Func __ToDayIsNotLastDay
($aLastDate) If _DateDiff("d", $aLastDate, _NowCalcDate()) >= 0 Then Return True Return FalseEndFunc ;==>__ToDayIsNotLastDay; #INTERNAL_USE_ONLY# ===========================================================================================================; Name ..........: __sCrypt_Initialization; Description ...: initialise la librairie et la clé de cryptage; Syntax ........: __sCrypt_Initialization($cPassWord, $iAlgo); Parameters ....: $cPassWord - an unknown value.; $iAlgo - an integer value.; Return values .: clé d'algo; Author ........: Numeric; Modified ......:; Remarks .......:; Related .......:; Link ..........:; Example .......: No; ===============================================================================================================================Func __sCrypt_Initialization
($cPassWord, $iAlgo) If Not _Crypt_Startup() Then Return SetError(1, 0, False) Return _Crypt_DeriveKey($cPassWord, $iAlgo)EndFunc ;==>__sCrypt_Initialization; #INTERNAL_USE_ONLY# ===========================================================================================================; Name ..........: __sCrypt_DestroyRess; Description ...: detruit la clé utilisee pour le cryptage et ferme la librairie; Syntax ........: __sCrypt_DestroyRess($hRessources); Parameters ....: $hRessources - a handle value.; Return values .: None; Author ........: Numeric; Modified ......:; Remarks .......:; Related .......:; Link ..........:; Example .......: No; ===============================================================================================================================Func __sCrypt_DestroyRess
($hRessources) If Not _Crypt_DestroyKey($hRessources) Then _WinAPI_CloseHandle($hRessources) _Crypt_Shutdown() EndIfEndFunc ;==>__sCrypt_DestroyRess; #INTERNAL_USE_ONLY# ===========================================================================================================; Name ..........: __sEncrypteChar; Description ...: Encrypte une chaine de caractère; Syntax ........: __sEncrypteChar($aData, $uPassWord[, $iAlgorithm = Default]); Parameters ....: $aData - an array of unknowns.; $uPassWord - an unknown value.; $iAlgorithm - [optional] an integer value. Default is Default.; Return values .: La chaine cryptée; Author ........: Numeric; Modified ......:; Remarks .......:; Related .......:; Link ..........:; Example .......: No; ===============================================================================================================================Func __sEncrypteChar
($aData, $uPassWord, $iAlgorithm = Default) If $iAlgorithm = Default Then $iAlgorithm = $CALG_RC4; default algo If Not StringLen($uPassWord) Then Return SetError(1, 0, False) ;Local variable Local $g_hKey = __sCrypt_Initialization
($uPassWord, $iAlgorithm), $bEncrypted ; Declare a password string and algorithm to create a cryptographic key. If StringStripWS($aData, $STR_STRIPALL) <> "" Then ; Check there is text available to encrypt. $bEncrypted = _Crypt_EncryptData($aData, $g_hKey, $CALG_USERKEY) ; Encrypt the text with the new cryptographic key. EndIf __sCrypt_DestroyRess
($g_hKey) Return $bEncryptedEndFunc ;==>__sEncrypteChar; #INTERNAL_USE_ONLY# ===========================================================================================================; Name ..........: __sDecrypteChar; Description ...: Décrypte une chaine de caractère deja cryptee avec la meme clé..; Syntax ........: __sDecrypteChar($aData, $uPassWord[, $iAlgorithm = Default]); Parameters ....: $aData - an array of unknowns.; $uPassWord - an unknown value.; $iAlgorithm - [optional] an integer value. Default is Default.; Return values .: La chaine décryptée; Author ........: Numeric; Modified ......:; Remarks .......:; Related .......:; Link ..........:; Example .......: No; ===============================================================================================================================Func __sDecrypteChar
($aData, $uPassWord, $iAlgorithm = Default) If $iAlgorithm = Default Then $iAlgorithm = $CALG_RC4; default algo If Not StringLen($uPassWord) Then Return SetError(1, 0, False) Local $g_hKey = __sCrypt_Initialization
($uPassWord, $iAlgorithm), $bEncrypted ; Declare a password string and algorithm to create a cryptographic key. If StringStripWS($aData, $STR_STRIPALL) <> "" Then ; Check there is text available to encrypt. $bEncrypted = _Crypt_DecryptData($aData, $g_hKey, $CALG_USERKEY) ; dECcrypt the text with the new cryptographic key. EndIf __sCrypt_DestroyRess
($g_hKey) Return BinaryToString($bEncrypted)EndFunc ;==>__sDecrypteCharFunc __FileEncrypt
($sFile, $sUserKey, $bEncrypt = True) If Not FileExists($sFile) Then Return SetError(-1, 0, _WinAPI_ShowError("Unable to get source File")) Local $getInfos = __StringName2
($sFile), $CryptVar = '' Local $sFileName = $getInfos[0] & "." & $getInfos[1] Local $dPath = StringTrimRight($sFile, StringLen($sFileName)) Local $dFile = $dPath & "\" & $getInfos[0] & "2." & $getInfos[1] If $bEncrypt Then $CryptVar = _Crypt_EncryptFile($sFile, $dFile, $sUserKey, $CALG_RC4) Else $CryptVar = _Crypt_DecryptFile($sFile, $dFile, $sUserKey, $CALG_RC4) EndIf If Not @error And $CryptVar <> 0 Then FileDelete($sFile) _WinAPI_CopyFileEx($dFile, $dPath & "\" & $sFileName, $COPY_FILE_OPEN_SOURCE_FOR_WRITE) FileDelete($dFile) Else Return False EndIfEndFunc ;==>__FileEncrypt; #INTERNAL_USE_ONLY# ===========================================================================================================; Name ..........: __StringName2; Description ...: recupère le nom d'un fichier à partir de son repertoire; Syntax ........: __StringName2($sFilePath); Parameters ....: $sFilePath - a string value.; Return values .: None; Author ........: Numeric; Modified ......:; Remarks .......:; Related .......: __WinAPIGetFilePath by Numeric; Link ..........:; Example .......: No; ===============================================================================================================================Func __StringName2
($sFilePath) If Not FileExists($sFilePath) Then Return SetError(1, @extended, '') Local $getExt = '', $extEnd = '', $sFileName Local Const $sDel = '\', $sEdel = '.' Local $getSections = StringSplit($sFilePath, $sDel, 1) If IsArray($getSections) Then $sFileName = _ArrayPop($getSections) If StringInStr($sFileName, $sEdel) <> 0 Then $extEnd = StringSplit($sFileName, $sEdel) $getExt = _ArrayPop($extEnd) EndIf EndIf Local $isBuff = StringLen($sFilePath) Local $isDll = DllStructCreate('wchar[' & $isBuff + 1 & ']') Local $isCALL = DllCall('Comdlg32.dll', 'short', 'GetFileTitle', 'str', $sFilePath, 'str', $isDll, 'word', $isBuff) Local $getInfos[2] = [$isCALL[2], $getExt] Return $getInfosEndFunc ;==>__StringName2; #INTERNAL_USE_ONLY# ===========================================================================================================; Name ..........: __GetTimeSec; Description ...: Recupere la valeur de la macro @Sec; Syntax ........: __GetTimeSec([$aDate = _NowCalc(]); Parameters ....: $aDate - [optional] an array of unknowns. Default is _NowCalc(.; Return values .: @Sec; Author ........: Numeric; Modified ......:; Remarks .......:; Related .......:; Link ..........:; Example .......: No; ===============================================================================================================================Func __GetTimeSec
($aDate = _NowCalc()) Local $MyDate, $MyTime _DateTimeSplit($aDate, $MyDate, $MyTime) Return $MyTime[3]EndFunc ;==>__GetTimeSec
Re: [UDF] VersionDessai
Posté : mer. 31 mai 2017 00:57
par Tlem
Bonsoir Numeric. Les scripts compilés ne sont pas accepté sur le forum (même compressé dans un zip ou autre conteneur) afin d'éviter tout problème lié à un antivirus un peux frileux et/ou mal configuré.
Merci
Re: [UDF] VersionDessai
Posté : mer. 31 mai 2017 01:17
par Numeric
Tlem a écrit : ↑mer. 31 mai 2017 00:57
Bonsoir Numeric. Les scripts compilés ne sont pas accepté sur le forum
D'accord , je l'ai donc retiré et je vous ferais part du code source de ce dernier.
Re: [UDF] VersionDessai
Posté : jeu. 18 oct. 2018 17:43
par caramen
Bonjour !
Je fais mon entré sur le forum FR
fervent du forum officiel.
Juste pour votre info, il y a un nouveau format qui permet la sécurisation des script appelé A3X qui permets meme a quelqu'un qui y pense... d’exécuter des script non compilé. Ce qui permet de crypter les sources etc... De décrypter et exécuter....
A vos google les gas
Je vous aiguillent un peu :
-Un script A3X n'est pas un EXE il ne peut donc pas être décompilé.
La méthode c'est d'avoir un fichier en opensource pour le dévelopeur puis un fichier compiler A3X lut par un autre script qui sert que a lire ce fichier source.
Un fichier .a3x peut être inclus dans un autre script ou exécuter par un interpréteur de AutoIt - soit AutoIt3.exe lui-même, soit un autre script compilé avec le paramètre AutoItExecuteAllowed.
https://www.autoitscript.fr/autoit3/doc ... mpiler.htm
Ps : attention je ne dit pas que c'est infaillible :p
Re: [UDF] VersionDessai
Posté : jeu. 18 oct. 2018 21:04
par Tlem
Bonsoir.
Un script compilé en a3x peux aussi être détecté comme un virus, du coup vaut mieux qu'il soit hébergé ailleurs...
Par contre, c'est un format qui existe depuis la nuit des temps. Donc difficile de le considérer comme "nouveau format". ^^
Envoyé de mon Smartphone en utilisant Tapatalk
Re: [UDF] VersionDessai
Posté : ven. 19 oct. 2018 05:46
par caramen
12 Aout 2006
Personnellement je vend un projet a moi 20 000 € le false positive est un détail pour moi.