begin process at 2012 02 16 23:05:39
  Trouver un code source :
 
dans
 
Accueil > 

Code

 > 

Fichier / Disque

 > UTILITAIRE DE SANITIZATION DES DISQUES/FICHIERS (SUPPRESSION IRREMEDIABLE DES DONNEES CONFIDENTIELLES)

UTILITAIRE DE SANITIZATION DES DISQUES/FICHIERS (SUPPRESSION IRREMEDIABLE DES DONNEES CONFIDENTIELLES)


 Information sur la source

Attention: ce code a été marqué comme suspect par un admin, il peut donc être dangereux. Ce code a été laissé sur le site dans un but pédagogique, ne l'exécutez pas si vous ne comprenez pas son contenu!
Note :
10 / 10 - par 3 personnes
10,00 / 10

  • 1

  • 2

  • 3

  • 4

  • 5

  • 6

  • 7

  • 8

  • 9

  • 10
Catégorie :Fichier / Disque Classé sous :sanitization, formatage, disque, fichier, récupération Niveau :Initié Date de création :15/04/2007 Date de mise à jour :27/04/2007 21:06:24 Vu / téléchargé :6 548 / 558

Auteur : violent_ken

Ecrire un message privé
Site perso
Ce membre participe au partage de revenus publicitaires
Commentaire sur cette source (76)
Ajouter un commentaire et/ou une note


 Description

Cliquez pour voir la capture en taille normale
/!\ ATTENTION /!\ IL S'AGIT PROBABLEMENT D'UNE DES SOURCES LES PLUS DANGEREUSES DE VBFRANCE.

CE CODE EST DEPOSE DANS UN BUT UNIQUEMENT PEDAGOGIQUE. JE NE SUIS NULLEMENT RESPONSABLE DES EVENTUELS DEGATS CAUSES PAR CE PROGRAMME.
NE TESTEZ PAS CE PROGRAMME SUR UN DISQUE DUR QUI CONTIENT DES DONNEES DONT VOUS AVEZ BESOIN.


======================================== ===
Présentation du programme
======================================== ===
Ce programme a pour but d'effectuer une "sanitization" sur un disque dur ou sur un ensemble de fichiers.
La sanitization est une opération qui consiste en la destruction des données.


Une sanitization est une suppression définitive des données. On l'utilise pour effacer les données sensibles(confidentielles, top secrètes...etc.) d'un disque dur.
Parce que vous savez bien que même si vous supprimez un fichier et que vous l'effacez de la corbeille, il reste quand même présent physiquement sur le disque, donc il est récupérable par n'importe quel logiciel de récupération. Et même après un formatage, le fichier est encore récupérable.

D'où l'intérêt d'un tel programme qui permet l'effacement définitif de vos données.


Par conséquent, si vous appliquez une sanitization sur un de vos disque durs, TOUTES LES DONNEES SERONT PERDUES DEFINITIVEMENT, et vous serez de plus contraint de formater (car le header du disque sera corrompu).
De même, si vous sanitisez un fichier, le fichier demeurera présent sur le disque, mais son contenu sera ILLISIBLE.

L'opération de sanitization est IRREMEDIABLE, les données sont IRRECUPERABLES.

Vous voilà prévenus....



Ce programme suis le protocole de sanitization du département de la défense américaine (DOD 5220.22-M).
Pour plus d'infos sur ces protocoles (en anglais) : http://www.hipaadvisory.com/tech/disksan.htm#a



===========================================
Foncti onnement
========================================= ==
Ecriture dans tout le conteu d'un fichier ou d'un disque de :
-première passe : le byte &H55 (01010101 en binaire)
-deuxième passe : le byte &HAA (le complémentaire de &H55 en binaire)
-dernière passe : des bytes aléatoires entre 0 et 255 inclus.



======================================= ====
Notes
======================================= ====
-La dll de création d'une string aléatoire a été codée par Brunews que je REMERCIE GRANDEMENT. Elle est codée en ASM, le code est fourni.
-Testé sur différents fichiers et sur ma clé USB FAT32. Pas encore testé sur NTFS (pas de disque dur prêt a être formaté ^^)
-Test avec Easy Recovery ==> le contenu des disques EST IRRECUPERABLE



Voilà ;)
@+

Source

  • 'code ULTRA commenté dans le zip ^^
'code ULTRA commenté dans le zip ^^

 Conclusion

Encore une fois : !! ATTENTION A CE QUE VOUS FAITES AVEC CE PROGRAMME !!


Et encore une fois, merci à Brunews pour la dll^^

Notez et commentez svp ;)

 Fichier Zip

Les Membres Club peuvent télécharger directement un fichier contenu dans le zip sans télécharger le zip en entier !

Télécharger le zip


 Historique

15 avril 2007 21:18:45 :
Une bonne petite optimisationS + bug disparu (merci EB ^^)
27 avril 2007 21:06:24 :
Bug corrigé

 Sources du même auteur

Source avec Zip Source avec une capture Source .NET (Dotnet) UTILITAIRE DE SANITIZATION DES DISQUES DURS/FICHIERS (SUPPRE...
Source avec Zip Source avec une capture Source .NET (Dotnet) SIMPLE SHUTDOWN SCHEDULER : ARRÊTS PLANIFIÉS (LOCAL OU REMOT...
Source avec Zip Source .NET (Dotnet) COMMENT DÉMARRER UN PROCESSUS SUR PC DISTANT DE MANIÈRE CACH...
Source avec Zip Source avec une capture Source .NET (Dotnet) YET ANOTHER (REMOTE) PROCESS MONITOR
Source avec Zip Source avec une capture Source .NET (Dotnet) COMMENT DÉTECTER LES PROCESSUS CACHÉS (VIRUS, ROOTKITS...) +...

 Sources de la même categorie

Source avec Zip Source .NET (Dotnet) MODIFIER LES EXTENSION DES FICHIERS par okosa
ROUTINE DIR RÉCURSIVE POUR OBTENIR LA LISTE DE TOUS LES FICH... par kerisolde
Source avec Zip Source avec une capture FILE,SECURITY,FICHIER par okosa
Source avec Zip Source avec une capture Source .NET (Dotnet) PATCHEUR DE FICHIER par tototh
Source avec Zip Source avec une capture LECTURE DES INFORMATIONS DES DISQUES COMPOSANT UN ENSEMBLE R... par jack

 Sources en rapport avec celle ci

Source avec Zip Source avec une capture Source .NET (Dotnet) UTILITAIRE DE SANITIZATION DES DISQUES DURS/FICHIERS (SUPPRE... par violent_ken
Source avec Zip Source avec une capture Source .NET (Dotnet) SYNCHRONISE FICHIERS CLÉ AVEC LE PC par alosamoelle
Source avec Zip Source avec une capture EXPLORATEUR DE DOSSIER EN VB6 par TomIlliev
Source avec Zip Source avec une capture FILESYSTEMLIBRARY, TOUT (+ QUE FSO) SUR LES FICHIERS/DOSSIER... par violent_ken
Source avec Zip ATTRIBUT FICHIER par Exploreur

Commentaires et avis

Commentaire de shadowmoy le 15/04/2007 20:19:14

euh question con pourquoi ne pas mettre simplement tous les bits du fichier a effacer a 00 ??

Commentaire de violent_ken le 15/04/2007 20:28:05

Tout simplement pour minimiser la possibilité de récupération des données. Parce que même à 00, c'est pas encore sécurisé... D'où l'intérêt de faire plusieurs passes.

Je ne m'y connais malheureusement pas suffisement sur la technologie des disques durs pour te donner une réponse complète, mais demande à jmfmarques, il s'y connait bien !


Tu peux lire aussi ce thread : http://www.vbfrance.com/infomsg_CONCATENER-CHAINE-QUELQUES-MO_921256.aspx?p=4

Quelques liens :
http://www.mag-securs.com/spip.php?article7475
http://www.clubic.com/actualite-352-effacement-de-donnees-protegees.html



En gros, je propose le service "Destruction logicielle par réécriture (surcharge) sur le disque dur" vendu ici :
http://www.invirtuel.fr/notre-metier/notre-metier-effacement-securise.php


@+

Commentaire de EBArtSoft le 15/04/2007 20:40:10 administrateur CS

Question : pourquoi utiliser le type string ? Tu comptes ecrire un livre avec les fichiers effacé ? lol

Non sans blague un tableau d'entier aurait fait l'affaire et c'est bcp bcp plus rapide. je me trompe ? Non je crois pas :p

Commentaire de jack le 15/04/2007 20:44:50 administrateur CS

Pour info :
"Sanitization" est le terme anglais de "sanitation" en fr : Nettoyage par élevation de température.
J'espère que les disques durs sont water-proof ... euf, étanches !

Commentaire de EBArtSoft le 15/04/2007 20:47:00 administrateur CS

hahah
j'espere que tu comptes pas "remettre" des données sensible dessus c'est surtout ça la question :p

Commentaire de violent_ken le 15/04/2007 20:48:13

EB ==> Héhé, en effet, mais


-pour la string aléatoire, je ne récupère qu'un pointeur renvoyé par la dll (pas de manip de string). Et comme le temps de création "d'une zone mémoire" de 2Mo par la dll est pratiquement négligeable devant le temps mis a écrire le résultat dans le disque/fichier, pas possible d'optimiser vraiment ici

-pour les &H55 et &HAA, ma foi pourquoi pas virer le StrPtr(s) et utiliser un tableau de bytes ? Faut comparer (d'ailleurs exit le bug que je citais avec cette méthode)



Jack ==> A vrai dire j'ai pas vraiment chercher à traduire ^^ J'ai gardé le terme anglais défini ici : http://en.wikipedia.org/wiki/Sanitization_(classified_information)

@+

Commentaire de EBArtSoft le 15/04/2007 20:51:44 administrateur CS

ouai mais pense au temps que tu va mettre a regle ton probleme de "55 00 55 00 55"... haha c'est toi qui vois. De plus tu te trimbale une dll C qui malgres le talent de notre amis commun BruNews ne sert a rien car tu pourrais facilement t'en passer.
Je suis pour le 100% vb. Car si on ajoute des truc en C autant faire tout en C !

@+

Commentaire de violent_ken le 15/04/2007 20:56:08

Bah oui mais non ;)

Parce qu'en VB, la création d'une d'un tableau de 2097152 bytes aléatoires met quand même 300 fois plus de temps que l'appel à la dll ;)

Ok pour les strings avec des 55, mais pas ok pour la string aléatoire ^^

@+

Commentaire de violent_ken le 15/04/2007 20:57:12

Et encore, comment je remplis mon tableau de bytes non nul sans faire de boucle horriblement lente ???

Commentaire de violent_ken le 15/04/2007 20:58:29

Suis-je bête, le construire une seule fois est suffisant... tout comme ma string que je reconstruis à chaque fois dans la boucle du For...

Là il y a de l'optimisation à faire!!

@+

Commentaire de EBArtSoft le 15/04/2007 21:03:25 administrateur CS

C'est clair ya de quoi faire.
Au moins tu t'en rend compte tout seul c'est deja ça

:p

Commentaire de violent_ken le 15/04/2007 21:04:21

mdr ;)

La MAJ arrive dans 2 minutes ^^
@+

Commentaire de EBArtSoft le 15/04/2007 21:05:13 administrateur CS

...et l'addition s'il vous plait, et que ça saute mdr :p

Commentaire de violent_ken le 15/04/2007 21:19:53

Voilà qui est fait ;)

Au passage j'ai précalculé toutes les opérations qui étaient effectués dans la boucle dans la version précédente...

C'est mieux comme çà ^^
@++

Commentaire de EBArtSoft le 15/04/2007 21:21:42 administrateur CS

a bah ya la dll :p

Commentaire de violent_ken le 15/04/2007 21:22:52

lol oui, je maintiens que c'est impossible de faire mieux niveau perf que la dll !

300 fois plus rapide, la dll, 300 fois ^^

Commentaire de EBArtSoft le 15/04/2007 21:41:20 administrateur CS

tout est relatif, tout. Car 300 fois plus rapide que quoi ? Si c'est 300 fois plus rapide qu'un code mal foutu alors la c'est sur ça ce justifi, enfin je me comprend :p

Commentaire de violent_ken le 15/04/2007 21:46:30

Je vois ce que tu veux dire.

Mais, en VB, comment remplirais tu de manière rapide un tableau de 2097152 de taille avec des bytes aléatoires ?


Moi je fais :


Option Explicit

Private Declare Function GetTickCount Lib "kernel32.dll" () As Long

Private Sub Command1_Click()
Dim lTim As Long
Dim tb(2097151) As Byte
Dim x As Long

    lTim = GetTickCount
    Call Randomize
    For x = 0 To 2097151
        tb(x) = Int(Rnd * 256)
    Next x
    lTim = GetTickCount - lTim
    
    Me.Caption = CStr(lTim)
End Sub



550 ms tout de même... alors que l'appel à la dll prend un temps de l'orde de quelques pauvres ms.

@+

Commentaire de EBArtSoft le 15/04/2007 21:49:32 administrateur CS

deja... pourquoi veux tu un tableau de 2 mega ?
(j'ai pas tout lu le truc de la norme alors je suis peut
etre sous informé :p)

Commentaire de violent_ken le 15/04/2007 21:56:10

Un secteur de disque fait généralement 512 octets.

Ecrire dans un disque secteur par secteur (donc avec un tableau de bytes de 512 de taille) nécessiterait 1953215 boucles, donc près de 2 millions de générations de tableau + 2 millions d'écritures sur le disque..... pour un disque de 1Go.


Donc pour mes 200Go, il faudrait 400 millions de tableaux et 400 millions d'écritures sur le disque. Pas gérable.



Donc j'ai choisi un buffer raisonnable de 2Mo, soient 4096 secteurs de disque, et je n'ai ainsi plus que 500 accès/écritures sur le disque pour un disque de 1Go (sachant que c'est l'opération la plus lente).




De toutes manières, quelle que soit la taille du buffer, il faudra avoir généré 1 milliard de nombres aléatoires pour couvrir 1Go.

Plus le buffer est grand, moins on accède de fois au disque.

@+

Commentaire de EBArtSoft le 15/04/2007 21:59:12 administrateur CS

d'accords mais pourquoi ne pas crée ton tableau de 2Mo une seule fois puis le reutiliser, au lieu de le regenerer a chaque cycle ? il y a t'il une securite suplementaire a ecrire des sequences differentes (surtout avec 2Mo de données) ?

Commentaire de violent_ken le 15/04/2007 22:06:01

Ben, selon le protocole du département américain de la défense (DOD 5220.22-M), la troisième passe d'écriture consiste en un remplissage de bytes aléatoire sur la totalité du disque, et non en la répétition de n fois un buffer tité aléatoirement.

Autrement dit, je suis obligé de regénérer mon buffer aléatoire à chaque cycle.




500 cycles * 550 ms = plus de 4.5 minutes passées exclusivement à générer des tableaux.

Et j'ai fait un bench, il faut seulement 2.5 secondes avec la dll pour générer le même nombre de bytes aléatoires.


Donc 110 fois moins de temps (et pas 300 comme je le disais un peu au hasard^^).

@+

Commentaire de violent_ken le 15/04/2007 22:06:23

*tiré, pas tité

Commentaire de EBArtSoft le 15/04/2007 22:10:11 administrateur CS

Par consequent il faut tout simplement trouver un remplacant a "rnd" comme la fait BruNews. En vb et bien codé je pense qu'on peut atteindre une procedure VB 50 a 10 fois moins rapide que celle de Bruno.

@+

Commentaire de violent_ken le 15/04/2007 22:14:12

Recoder Rnd en VB en l'optimisant ?


J'avoue que je suis curieux de voir une telle function ^^ Faut utiliser quel genre d'opérations ? (parce que j'avoue que je n'ai pas vraiment cherché à décortiquer l'ASM de Brunews).

@+

Commentaire de EBArtSoft le 15/04/2007 22:19:55 administrateur CS

C'est plus simple que ce que tu sembles croires :p
En tout cas personnellement j'aurais immediatement decortiqué le code de Bruno a reception ! Car la moindre ligne de code vaux son pesant d'or :p

(desolé pour le flood :p)

Commentaire de violent_ken le 15/04/2007 22:38:05

Pas grave pour le flood ;)

Mais comme la dll est en ASM et que je ne connais pas l'ASM, je n'ai pu que l'utiliser sans vraiment la comprendre O_o
Le code est en tout cas fourni dans le zip. Si tu es motivé... ^^

@+

Commentaire de Galain le 15/04/2007 22:57:25

Salut Violent_Ken
J'ai testé sur un disque dur en NTFS et cela fonctionne très bien
Un grand bravo

Commentaire de violent_ken le 15/04/2007 22:59:26

Salut Galain, et merci pour la note et pour la confirmation que sous NTFS çà marche aussi ^^

@+

Commentaire de Galain le 16/04/2007 00:11:44

Salut Violent_Ken
Je t'envoie le code de la dll avec les commentaires sur la génération des nombres aléatoires. l'instrution principale est rdtsc dont le rôle est détourné afin d'avoir une valeur aléatoire de base

__declspec(naked) long* __stdcall bnAlloc2MoAlea()
{
  __asm {
    push    PAGE_READWRITE
    push    MEM_COMMIT or MEM_RESERVE or MEM_TOP_DOWN
    push    2097152 ;// 2 Mo
    push    0
    call    dword ptr VirtualAlloc  ;// alloue le buffer contenant les valeurs aléatoires
    test    eax, eax          ;// test si EAX en retour = 0
    je      short allocEXIT   ;// si oui : l'allocation buffer a échouée
    push    edi               ;// sauvegarde des pointeurs
    push    eax
    push    ebx
    mov     edi, eax          ;// EDI = *pdt
    mov     ebx, 131072       ;// NBR TOURS DE 16 OCTETS
    rdtsc                     ;// rdtsc est une instruction qui stocke dans edx/eax un nombre de 64 bits
                              ;// représentant le nombre de cycle horloge fait depuis le démarrage ( sous toute réserve)  
    mov     edx, eax          ;// EDX = nombre aléatoire
    mov     ecx, 214013       ;// multiplicateur
    sub     edi, 4            ;// compense le 1° add   edi,4 (edi est le pointeur de la zone allouée)
  nextNBR:
    mov     eax, edx          ;// EAX = EDX
    mul     ecx               ;// EAX = ECX * EAX
    add     eax, 2531011      ;// EAX = EAX + constante
    add     edi, 4            ;// pointeur + 4
    mov     edx, eax          ;// // nouveau nombre aléatoire  ----------------------------------------------------
    ror     eax, 16           ;// rotation à droite de 16 bits de EAX ( les 16 bits de poids faibles deviennent    |
                              ;// les 16 bits de poids forts)                                                      |
    add     eax, 7979999      ;// EAX = EAX + constante                                                            |
    mov     [edi], eax        ;// on stocke une valeur aléatoire 32 bits soit 4 octets                             |
                                                                                                                   |
    mov     eax, edx          ;//on recommence <<<<<---------------------------------------------------------------                                                                                     |
    mul     ecx
    add     eax, 2531011
    add     edi, 4            ;// pointeur + 4
    mov     edx, eax          ;// seedRand
    ror     eax, 16
    add     eax, 7979999
    mov     [edi], eax
    
    mov     eax, edx
    mul     ecx
    add     eax, 2531011
    add     edi, 4            ;// pointeur + 4
    mov     edx, eax          ;// seedRand
    ror     eax, 16
    add     eax, 7979999
    mov     [edi], eax
    
    mov     eax, edx
    mul     ecx
    add     eax, 2531011
    add     edi, 4            ;// pointeur + 4
    mov     edx, eax          ;// seedRand
    ror     eax, 16
    add     eax, 7979999
    
    dec     ebx               ;// 1 tour en moins
    mov     [edi], eax
    jnz     short nextNBR     ;// si nbre de tours <> 0 on refait le boucle
    pop     ebx
    pop     eax               ;// POINTEUR ORIGINAL
    pop     edi
allocEXIT:
    ret     0
  }
}

Ce code n'engage que moi et il est possible que j'ai fait des erreurs : pour moi l'assembleur est bien loin
a+

Commentaire de Galain le 16/04/2007 00:20:13

mov     edx, eax          ;// // nouveau nombre aléatoire  ----------------------------------------------------

cette ligne est associée si l'on peut dire à celle-ci:   mov     eax, edx          ;//on recommence

Le nombre aléatoire créé au mov  edx,eax    est réutilisé au  mov  eax,edx.
J'avais fait la présentation avec Notepad mais le site n'a pas gardé le format des lignes

Désolé

Commentaire de violent_ken le 16/04/2007 00:29:43

Ah, merci bien pour les commentaires du code ASM : je regarde çà demain en profondeur !

Merci, @+

Commentaire de ghuysmans99 le 16/04/2007 00:34:48

comme d'habitude, parfait !
j'en connais un autre : Eraser

Commentaire de MadM@tt le 16/04/2007 14:30:33

ça fait peur à utiliser avec tous les messages attention attention !! lol
En tout cas c'est vraiment bien, surtout que ça respecte une norme, alors la t'es sur de ton coup (que ça va bien être efficace)
Bravo !

Commentaire de moustachu le 16/04/2007 15:03:18

Bonjour,

Avec un titre comme ça je ne risque pas de tester ton prog ;o). As-tu usé beaucoup de disques durs avant de terminer ton prog ^^.

J'entends souvent dire "Même après formatage, on peut récupérer les fichiers".

Quand un fichier est supprimé puis écrasé par un autre (physiquement) comment peut on récupérer les données d'avant ? C'est naïf comme question, hein. On pourrait multiplier la capacité de stockage d'un disque alors ^^

Beau boulot (je pense). "La programme le plus dangereux de VBFrance" ça fait classe ! Je vais essayer de faire le plus innofensif :o)

++
Moustachu

Commentaire de zavier666 le 16/04/2007 18:16:59

Des professionnel sont capables avec des machines perfectionnées de lire des données réécrites huit fois par dessus!!!!

Comment? eh bien comme dans tout phénomène magnétique (utilisé pour écrire sur un dur) lorsque tu changes un bit d'état (passage de 0 à 1 par exemple) et que tu fais l'inverse après (passage de 1 à 0), la matière sur le disque ne revient pas exactement à son état de départ (on appelle cela un phénomène d'hystérésis). cela permet non pas de récupérer des fichiers au complet (ne comptons donc pas la dessus pour augmenter nos capacité de stockage :) ) mais des fragments de fichiers qui permettent dans certains cas de prouver le stockage d'un fichier illicite sur un PC par exemple.

slts!
-------------------------------------------
Toujours + de VB et d'API => API @ la Loupe
http://xav.prog.power.free.fr

Commentaire de violent_ken le 16/04/2007 19:29:14

ghuysmans99 ==> Merci !

MadM@tt ==> Oui, je préfère prévenir ;) Faudrait pas qu'un utilisateur inatentif sanitize son disque dur par mégarde O_o
Et effectivement, le respect de la norme garantit une certaine efficacité du programme ^^

moustachu ==> Héhé, ma pauvre petite clé USB subit énormément de choses ces derniers temps... je viens de remarquer sur le screenshot : plus de 46Go d'utilisés dessus ;) lol, elle ne fait que 986Mo ^^

Pour l'histoire de l'écrasement, comme le dit zavier666, il est toujours possible, même si çà parait bizarre, de récupérer des données après formatage, et même après écrasement(s). Mais évidemment, l'opération est lente et doit être réalisée par des professionnels. Bien sur, on ne récupèrera que des "bribes" de fichiers.
Le meilleur moyen de supprimer définitivement les données est quand même l'utilisation d'un degausser (très fort champ magnétique qui supprime toutes les données).


"La programme le plus dangereux de VBFrance" ==> Je préfère prévenir ! Comme çà je suis tranquille ;)






Petite doc en anglais : http://www.usenix.org/publications/library/proceedings/sec96/full_papers/gutmann/
A noter qu'ici sont proposées 35 passes !

La conclusion indique que la sanitization n'est pas possible totalement, même avec un grand nombre de passes.
Mais bon, les 3 passes proposées ici sont généralement les plus utilisées car relativement efficaces.





Merci pour tous les commentaires, @+

Commentaire de jack le 16/04/2007 21:03:45 administrateur CS

Bah y-a de la lecture ici ! lol

Commentaire de Galain le 16/04/2007 21:32:54

Salut à tous
Je ne comprend point pourquoi ce code a été marqué comme louche par un admin : oui il est "dangereux" si on ne comprend point le but de ce code.Mais l'auteur a prévenu les visiteurs et leur fournit assez d'information pour comprendre le but de ce même code
Donc j'en conclus que le visireur qui teste ce code sait ce qu'il fait et est une personne averti!

Bravo Violent_Ken et dommage que je ne puisse pas noté un autre 10 pour cette source : chapeau bas

Galain

Commentaire de Galain le 16/04/2007 21:35:49

Donc j'en conclus que le visiteur bien sûr : un doigt a ripé

Commentaire de violent_ken le 16/04/2007 21:37:45

Jack ==> aha oui, y a de quoi faire ;)

Galain ==> C'est vrai que le "louche" est peut être pas le mot qui convient le mieux^^, mais bon, avec la msgbox qui s'affiche, le visiteur sera vraiment averti pour de bon ^^
Et merci encore pour le commentaire positif, çà fait plaisir ;)

@+

Commentaire de BruNews le 16/04/2007 21:42:41 administrateur CS

Le site ne veut pas être responsable de dommages potentiels, il est normal qu'on se prémunisse.
Par "louche" il faut comprendre "potentiellement dangereux", rien de plus.

Commentaire de Galain le 16/04/2007 23:58:20

Le message a été compris
Merci Brunews

Commentaire de moustachu le 17/04/2007 10:17:56

zavier666 et violent_ken > Merci votre éclairage. Quel phénomène cet hysteresys ! Toujours là pour nous embêter ! (6 ans d'étude de physique qui parlent ;o)) Mais sur clé usb ? C'est pas magnétique là , si ?

Commentaire de violent_ken le 17/04/2007 14:05:24

Sur clé USB ==> pas magnétique pour un sou ;) Elle est utilisée comme une partition FAT32 succeptible de jouer le rôle d'un disque dur ^^

Cela dit, les données sont bien évidemment définitivement effacées (avec les trois passes de réécriture).

@+

Commentaire de apxa le 18/04/2007 00:44:20

Iop all,
Dis moi tu as était récement controlé pour sorti une appli comme ca ;)
Hors mis cela ca me semble pas mal.

Have Fun ;)

Commentaire de mortalino le 18/04/2007 01:16:08

BruNews,
faut revoir votre message, je suis pas très bon en grammaire, mais là  (entre les chevrons) :

CETTE SOURCE EST MARQUE COMME LOUCHE PAR UN ADMIN, ET >>IL<< PEUT ÊTRE "DANGEUREU>>X<<" DONC PRUDENCE !

Qu'est ce qui est dangereux ? Dans le contexte, c'est la source ?
donc :

CETTE SOURCE EST MARQUE COMME LOUCHE PAR UN ADMIN, ET ELLE PEUT ÊTRE "DANGEUREUSE" DONC PRUDENCE !

(on ne parle de "son exécution" (donc là au masculin) qu'après :p

Voilà  ;)
++

Commentaire de mortalino le 18/04/2007 01:17:59

correction

(on ne parle de "Ce code" (donc là au masculin) qu'après :p

c'est la fatigue :D

Commentaire de Renfield le 18/04/2007 08:35:02 administrateur CS

c'est moi qui ai activé le mode "louche" sur la source...

non pas que son contenu soit un virus, trojan ou autre... mais là, l'utilisateur est prevenu qu'il ne s'agit pas d'un simple 'pong'...

Commentaire de Galain le 18/04/2007 18:23:59

Rassures-toi Thomas il n'y a aucun problème

Commentaire de violent_ken le 18/04/2007 19:26:15

apxa ==> lol, c'est si jamais les gendarmes frappent chez moi à 5 heures du mat' ;)


Pour le "code louche", pas de problèmes, mieux vaut être prudent ^^

@+

Commentaire de Galain le 19/04/2007 22:56:34

Je me suis amusé à le tester en tout VB (plus de DLL en C) : c'est plus lent mais cela fonctionne nickel et pour
une application non professionnelle cela reste acceptable.Un grand bravo à Violent_Ken

Commentaire de BruNews le 19/04/2007 23:13:08 administrateur CS

Jamais compris en quoi ça pouvait gêner d'avoir des DLLs ou autre dans le dossier du prog vu que dans tous les cas il faut un setup.
A mon humble avis c'est le contraire, VB est fait pour assembler des pièces logicielles, moins il y a de codage en VB et mieux c'est.

Commentaire de Galain le 19/04/2007 23:25:18

La DLL en C ne me génait point : c'est juste pour voir la différence au niveau temps
De rien

Commentaire de draluorg le 20/04/2007 12:08:05

Salut a tous,

Source interessante!

par contre je suis de l'avis de Eb sur le tout en VB du moins pour cette source, car j'ai pas testé mais c'est quand meme ton dur qui ralentit le plus... non ?
Car le temps que tu genere ton tableau doit a peine laisser le temps au disque de se repositionner lol...
Enfin j'exagere, mais pour de l'ectiture sur dique je pense que Vb est suffisement rapide!

En tout cas c'est une tres bonne source! merci ;)

++


Commentaire de violent_ken le 20/04/2007 13:21:56

Salut à tous, alors niveau gestion du temps, il faut :

-2.5 secondes pour générer 10^9 bytes avec la dll
-4.5 minutes en VB (avec Rnd)


Le temps d'écriture de disque est très largement supérieur au temps de génération des bytes avec la dll.
Cependant, en "tout VB", c'est quand même 0.5 secondes pour un tableau de 2Mo... donc cela double le temps d'exécution et ramène le temps de génération du tableau dans le même ordre de grandeur que le tems d'écriture.



Donc en résumé :
-"tout VB" : temps d'écriture équivalent au temps de calcul
-avec la dll : temps de calcul infime devant le temps d'écriture.

Par conséquent, supprimer la dll revient à doubler le temps d'éxecution, ce qui n'est pas vraiment terrible.


Et comme dit Brunews, la dll ne pose pas de problèmes car il est d'ailleurs inutile de l'enregistrer (pas activeX) ==> suffit de la poser dans le App.Path. Donc pas gênante du tout au final.

Et elle permet de diviser le temps par 2 ! Gain énorme vu que la sanitization d'un disque est lente.



Merci encore pour les commentaires, @+

Commentaire de draluorg le 20/04/2007 14:04:54

re,

Erf entre 2.5 secondes et 4.5 minutes, je veux bien que vb soit plus lent que de l'asm mais pas a ce point.
Ou tu es Eb ? montre nous que Vb peut etre plus rapide!
Ou alors je m'en va rejoindre Brunews sur le forum Cpp!! lol

Non vraiment je suis etonné quand meme de voir une telle différence!
Mais la ou je dis que je suis contre la dll, c'est que si on part de ce principe on ne va plus chercher la moindre optimisation en vb et on va recourrir chaque fois a une dll tierce...
Pour certaine appli on se retouvera vite avec 50 dll!
Et donc comme le dit Eb autant coder directement en C++

++

Commentaire de draluorg le 20/04/2007 16:15:47

re re,

Eh l'a fallu que je test...

j'obtiens des temps 7 * plus rapide qu'avec ta boucle en faisant ainsi:

Option Explicit

Private Declare Function GetTickCount Lib "kernel32.dll" () As Long

Private Sub Command1_Click()

    Dim lTim As Long
    Dim x As Long
    Dim l(5) As Long
    
    Call Randomize
    
    l(1) = Int(Rnd * 32)
    l(2) = Int(Rnd * 64)
    l(3) = Int(Rnd * 128)
    l(4) = Int(Rnd * 32)
    l(5) = Int(Rnd * 64)
    
    Dim tb(2097151) As Byte
    lTim = GetTickCount
    
    For x = 0 To 2097151 - 10 Step 10
        l(0) = Int(Rnd * 128)
        tb(x) = l(0)
        tb(x + 1) = l(0) + l(1)
        tb(x + 2) = l(0) + l(2)
        tb(x + 3) = l(2) + l(3) - l(0)
        tb(x + 4) = l(0) + l(1) + l(2)
        tb(x + 5) = l(3) + l(0) - l(5)
        tb(x + 6) = l(5) + l(0) + l(1)
        tb(x + 7) = (l(3) + l(0)) / 2
        tb(x + 8) = l(5) + l(0)
        tb(x + 9) = l(5) + l(2) + l(0)
        tb(x + 10) = l(0) / 2
    Next x
    
    lTim = GetTickCount - lTim
    
    Me.Caption = CStr(lTim)
    
End Sub

Bon d'accord c'est assez barbar mais c'est fait en 5 minutes et  justement c'est encore tres optimisable, et de 4,5 minutes on descend a 38 secondes! (compilé évidement!)

++

Commentaire de violent_ken le 20/04/2007 16:26:27

Salut, bien évidemment, l'instruction =Int(Rnd*256) est fort peu optimisée. Cependant sur l'exemple que tu donnes :

- attention aux dépassements de capacités notamment dans tb(x + 3) = l(2) + l(3) - l(0)
- j'avoue que je ne sais pas comment tu as fait le test ? Chez moi j'obtiens 223s, soient près de 4 minutes pour 500 cycles (compilé bien sur) ??? Tu es sur des 38s ?? (ou alors mon P4 fatigue vraiment ^^)

@+

Commentaire de draluorg le 20/04/2007 16:50:54

eh non j'ai compté que ta boucle chez moi mettait 347 Ms
et la mienne 47 ms
C'est donc environs 7 * plus rapide, si je divise 4,5 minutes par 7 j'obtiens envorons 38 secondes...

atta je test avec 500 cycles...

Voila 36 secondes chez moi en faisant ceci:

Option Explicit

Private Declare Function GetTickCount Lib "kernel32.dll" () As Long

Private Sub Command1_Click()
    
    Dim lTim As Long
    Dim i As Integer

    lTim = GetTickCount

    For i = 1 To 500
        GenBytes
    Next i
    
    lTim = Round((GetTickCount - lTim) / 1000, 3)
    Me.Caption = CStr(lTim)


End Sub


Private Sub GenBytes()

    Dim x As Long
    Dim l(5) As Long
    Dim tb(2097151) As Byte
    
    Call Randomize
    
    l(1) = Int(Rnd * 32)
    l(2) = Int(Rnd * 64)
    l(3) = Int(Rnd * 128)
    l(4) = Int(Rnd * 32)
    l(5) = Int(Rnd * 64)
    
    For x = 0 To 2097151 - 10 Step 10
        l(0) = Int(Rnd * 128)
        tb(x) = l(0)
        tb(x + 1) = l(0) + l(1)
        tb(x + 2) = l(0) + l(2)
        tb(x + 3) = l(2) + l(4) + (l(0) / 2)
        tb(x + 4) = l(0) + l(1) + l(2)
        tb(x + 5) = l(3) + l(0)
        tb(x + 6) = l(5) + l(0) + l(1)
        tb(x + 7) = (l(3) + l(0)) / 2
        tb(x + 8) = l(5) + l(0)
        tb(x + 9) = l(5) + l(2) + l(0)
        tb(x + 10) = l(0) / 2
    Next x
    
End Sub

PS: J'ai un P4 aussi ;)

++

Commentaire de violent_ken le 20/04/2007 17:06:53

Ah oui mais là, c'est plus la même boucle que celle d'avant ^^ Celle d'avant mettait entre 500 et 800 ms, celle ci plus que 100.

Donc c'est 5 fois plus rapide que le Rnd*256.


Mais par contre le résultat n'est pas convenable, la distribution des bytes n'étant pas pseudo-aléatoire ==> (test effectué avec 2M valeurs)
http://www.enregistrersous.com/images/69389407420070420170612.jpg

@+

Commentaire de violent_ken le 20/04/2007 17:08:22

Bien sur, le graphe représente l'occurence en fonction du numéro de byte, échelle 0-255 en abscisse et 0-occurence max en ordonnée

@+

Commentaire de EBArtSoft le 21/04/2007 01:35:59 administrateur CS

LE probleme principal c'est que VB ne fait pas d'arithmetique non signé de ce fait pour avoir un resultat semblable au code de BruNews il faut passer par de l'assembleur "embarqué". Bref on fait de l'assembleur dans VB et le tour est joué. Si ça vous interresse je fait le test pour voir si c'est jouable. Je ferais un module de classe pour que le code soit fonctionnel et dans l'ide et en mode compilé. Apres il faudra soustraire le temps d'appel a la propriete de l'objet. Mais ça devrait deja etre plus rapide que des Rnd :p
Surtout si on optimise la partie tableau pas tres bien foutue il faut l'avouer dans le projet original :p

@+

Commentaire de violent_ken le 21/04/2007 10:18:55

mwahaha ;)

Bon ben si tu es motivé, çà m'intéresse ^^
@+

Commentaire de EBArtSoft le 21/04/2007 11:13:24 administrateur CS

Ok c'est fait (mais pas encore fait les bench) quand t'as le temps passe me voir sur msn

@+

Commentaire de EBArtSoft le 21/04/2007 11:40:40 administrateur CS

Bon j'ai fait mon petit bench vite torché, voila les resultat :

asm + dll : 156ms
asm + vb  : 109ms
rnd + vb  : 13375ms

asm + dll : 140ms
asm + vb  : 94ms
rnd + vb  : 13234ms

asm + dll : 156ms
asm + vb  : 94ms
rnd + vb  : 16312ms

Detail du bench :

    t = GetTickCount
    For i = 0 To 10
        n = bnAlloc2MoAlea()
        Call bnFreeAlloc(n)
    Next
    List1.AddItem "asm + dll :" & GetTickCount - t

    t = GetTickCount
    For i = 0 To 10
        Obj.bnAlloc2MoAlea Tbl(0)
    Next
    List1.AddItem "asm + vb :" & GetTickCount - t

    t = GetTickCount
    For i = 0 To 10
        For j = 0 To 2097151
            Tbl(j) = Rnd * 255
        Next
    Next
    List1.AddItem "rnd + vb :" & GetTickCount - t

Detail de la machine :

P4 1.6Ghz
1024 Ram

Conclusions :

J'obtiens de meilleur resultat avec de "l'assembleur embarqué" ceci s'explique par le fait que BruNews fait une alloc a chaque appel alors qu'il suffit de reutiliser le tableau dimentionné par VB. Ainsi le cout d'un appel a la propriete est minimisé face a l'allocation... bref si ça interresse j'ai le code :p

Commentaire de draluorg le 21/04/2007 11:45:41

re,

"Mais par contre le résultat n'est pas convenable, la distribution des bytes n'étant pas pseudo-aléatoire" oui c'etait a l'arache juste pour montrer que en diminuant le nombre d'appel a rnd tu pouvais gagner enormement de temps...

Bon voici un autre exemple plus propre et plus aleatoire (500 cycles en 5 secondes!)

Private Sub GenBytes(ByRef tb() As Byte)

    Dim x           As Long
    Dim i           As Long
    
    For i = 1 To 151
        tb(i) = Int(256 * Rnd)
    Next i
    
    For x = 151 To 2097151 - 1000 Step 1000
        tb(x) = Int(256 * Rnd)
        For i = x + 1 To x + 1000
            tb(i) = (tb(x) Xor tb(i - x))
        Next i
    Next x

End Sub

Clair que ca vaudra pas le code de Eb mais bon...
Sinon comment analyse tu le niveau "pseudo aleatoire" ? ca m'interesse!

++

Commentaire de violent_ken le 21/04/2007 14:16:10

EB ==> Dsl, j'ai pas WLM d'installé (ni MSN) en ce moment car formatage pas très loin... ;)
Pour le code, oui çà m'intéresse, si tu peux le poster ce serait cool ;)

Et merci pour les bench, c'est bon à savoir...


Dralurog ==> 500 cycles en 5 secondes !! Grosse optimisation.
Pour l'analyse du niveau des tirages aléatoires, le plus simple est de comptabiliser le nombre d'occurence de chaque byte (http://www.enregistrersous.com/images/69389407420070420170612.jpg pour le premier cas).

Donc je confirme, ton dernier algo répartit correctement les bytes
http://www.enregistrersous.com/images/79659193820070421140643.jpg

Faudrait une étude plus poussée pour voir s'il n'y a pas de répétition de suites de bytes ou autre, mais c'est déjà vraiment mieux !

@+

Commentaire de EBArtSoft le 21/04/2007 19:04:38 administrateur CS

Le code ici : http://ebartcodes.info/temp/bnAlloc2.zip

@

Commentaire de draluorg le 21/04/2007 19:42:37

erf! lol 1,4 secondes pour 500 cycles! Chapeau bas monsieur!
Mais bon je pige rien de chez rien au code :(

Sinon avec methode en declarant tb() en global comme toi au lieu de le passer en byref a chaque fois je tombe a 2.2 secondes :P (bon ok je sors...)

++

Commentaire de EBArtSoft le 21/04/2007 20:07:01 administrateur CS

Ouai c'est vrai on pourrait stoker l'adresse du tableau et eviter de le passer en argument a chaque fois... faut voir :p

Commentaire de violent_ken le 21/04/2007 22:08:31

WAOUH, tu es mon gourou EB !! ;)

Vraiment très fort... çà vaut le coup de faire un MAJ ^^
@+

Commentaire de Galain le 22/04/2007 13:30:51

Bravo EB : j'ai testé et c'est nickel

Pour Violent_Ken
J'ai remarqué que pour le conversion d'un currency en 2 long signés tu as supprimé le test sur le passage positif/négatif du mot de 32 bits High : cela n'est pas génant pour l'instant car nos disques durs sont encore trop petits mais dans quelques temps risque de bug !!!

Bravo à vous deux : je vous mets à tous deux un 10 mais il n'est que virtuel malheureusement

Commentaire de violent_ken le 22/04/2007 13:47:21

Effectivement. Mais de toutes façons, je pense que la méthode la meilleure serait de faire un CopyMemory ==> plus de bug et plus rapide ;)

@+

Commentaire de violent_ken le 27/04/2007 21:08:04

Salut, j'ai mis à jour à la suite d'un bug qui (-1 en trop dans mon code) qui empêchait de sanitizer le dernier buffer dans un fichier.


Note : ce code inclus dans ma nouvelle source : http://www.vbfrance.com/codes/FILESYSTEMLIBRARY-TOUT-FSO-SUR-FICHIERS-DOSSIERS-DISQUES_42404.aspx (la MAJ ce soir)

@+

Commentaire de violent_ken le 24/05/2010 12:15:20

Salut,

Version .Net à jour ici : http://www.vbfrance.com/codes/UTILITAIRE-SANITIZATION-DISQUES-DURS-FICHIERS-SUPPRESSION-DONNEES-CONFIDENTIELLES_51792.aspx

@+

 Ajouter un commentaire


Discussions en rapport avec ce code source dans le forum

récupération de données [ par eliefr78 ] Bonjour à tous,je vous décrit le contexte : j'ai créer un outil utilisé par plusieurs utilisateur.les utilisateurs renseignent une base de donnée (il récupération de mon ip public dans un fichier log [ par phil0587 ] Bonjour, J'aimerai pouvoir récupérer sous forme de fichier txt mon ip public Merci pour votre aide benphi Récupération d'un nom de fichier trop long [ par viviane44 ] Bonjour, Je dois lister tous les fichiers de tous les repertoires d'un drive. Pas de problème sinon lorsque je rencontre un fichier dont le fullname e récupération de données d'autres fichiers [ par Phalls ] Bonjour à tous,Je voudrais comparer des données venant de deux types de fichiers totalement différents. La première donnée se trouve dans un fichier . Enregistrement et récupération de deux données dans un fichier .txt [ par Splif62 ] Salut les amis !!Je dois pour les cours développer une petite application qui doit me permettre l'enregistrement et la récupération de 2 données dans [VBS] supprimmer un fichier sans connaitre son emplacement exact [ par zatox ] Bonjour à tous, j'espère ue je suis au bon endroit pour poser cette question. j'aimerai savoir s'il est possible en avec un script vbs de supprimmer Récupération et mise à jour d'un fichier vers un autre [ par p4uline ] VaZy Box pour choisir un fichier texte sur le disque dur [ par bimone78 ] Bonjour,je souhaiterai pouvroir créer une dialogbox qui me permettrait de choisir le fichier sur le disque dur comme si l'on passait par poste de trav créer un fichier sur le disque dur [ par castou60 ] Castou60 bonjour, Je cherche un moyen de créer un fichier quelquonque sur le disque dur avec visual basic 2010. Exist-il une commande précise pour p Récupération de données distante [ par Zenway ] Pourriez-vous m'indiquer comment:- En réalisant un script VB je peux récupérer des données d'un fichier .TXT sur un serveur net, le transformer en .md


Nos sponsors


Sondage...

CalendriCode

Février 2012
LMMJVSD
  12345
6789101112
13141516171819
20212223242526
272829    

Consulter la suite du CalendriCode

Photothèque

 
Développement réalisé par Nicolas SOREL (Nix) avec l'aide de : Cyril DURAND et Emmanuel (EBArtSoft), Merci à Vincent pour ses précieux conseils.
CodeS-SourceS.com© Toute reproduction même partielle est interdite sauf accord écrit du Webmaster
CodeS-SourceS.com© est une marque déposée tous droits réservés

Google Coop CodeS-SourceS Google Coop CodeS-SourceS
Temps d'éxécution de la page : 0,827 sec (3)

Nous contacter | Annoncer sur CodeS-SourceS | Mentions légales