Pure_wipe_FreeSpace 3

Windows specific forum
User avatar
dobro
Enthusiast
Enthusiast
Posts: 766
Joined: Sun Oct 31, 2004 10:54 am
Location: France
Contact:

Pure_wipe_FreeSpace 3

Post by dobro »

a program to clear the free zone of a Hard disk or SD card NTFS

as you probably know, Windows does not actually delete the files and folders,
he only declare, in the allocation table, the place of a given file is free

but the file is still accessible even after deletion!
with for example, TestDisk or Recuva etc ...

Pure_wipe_FreeSpace 3 will create a folder "wipe_FreeSpace"
and fill it with a multitude of file 10 megabytes!

these files are files filled with random characters

The folder will be filled up to saturate the hard disk!
However, it will leave a margin of safety of 500 mega

then the file will be deleted!

this process will effectively write and overwrite the files still present in the free area of the hard disk!

Recuva, and any recovery software, can no longer recover anything!


in French :
un programme pour effacer la zone libre d'un disque Dur ou carte SD NTFS

comme vous le savez surement, windows n'efface pas vraiment les fichiers et dossiers,
il ne fait que declarer, dans la table d'allocation ,que la place , de tel ou tel fichier est libre

mais le fichier est toujours accessible, meme apres effacement !
avec par exemple ,Recuva ou TestDisk etc ...

Pure_wipe_FreeSpace 3 va creer un dossier "wipe_FreeSpace"
et le remplir, d'une multitude de fichiers de 10 mega octets !

ces fichiers sont des fichiers rempli de caracteres aleatoire

Le dossier sera rempli jusqu'a saturer le disque dur !
il laissera cependant une marge de securité de 500 mega

puis le dossier sera effacé !

ce procédé aura pour effet d'ecrire et d'ecraser, les fichiers encore present dans la zone libre du Disque dur !

Recuva, et tout les logiciels de recupération, ne pourront plus rien recupérer !


le Code :

Code: Select all

;***********************************************
;Titre  :*Pure_wipe_FreeSpace 3
;Auteur  : Dobro
;Date  :01/02/2016
;Heure  :12:37:56
;Version Purebasic :  PureBasic 5.30 (Windows - x86)
;Version de l'editeur :EPB V2.62
; Libairies necessaire : Aucune 
; information :

; *********************************
; COMPILEZ EN MODE 
;THREAD SAFE OFF
; 32 BITS
; NON UNICODE 
; *********************************

; Principe de fonctionnement :
;le bouton [x] sert a effacer le fichier temporaire  "wipe_FreeSpace.go" si celui ci survivait en fin de traitement
; si le traitement est interrompu ,le fichier temporaire "wipe_FreeSpace.go" est en principe effacé par le prg
;  il sera effacé a la fin du programme si tout se deroule normalement....
; il y a 1 passes
; passe 1 = ecriture dans le dossier temporaire "wipe_FreeSpace"  de fichiers contenant des valeur aleatoire
; l'ecriture se fait par fichiers de 100 megas octets 
; c'est le fait de creer pleins de  fichiers , qui va donc ecrire sur l'espace libre de votre disque (et la table d'allocation !! )
; jusqu'a le remplir quasi entierement !! 
; et ainsi effacer les anciennes valeurs et fichiers qui peuvent encore y etre ...
; comme on ecrit des fichiers remplis de valeurs aleatoire, en principe , aucun recuperateur de fichier genre "Recuva" ne peut
; ramener de la zone libre des fichiers ayant été effacé par windows .... 
; ensuite :
; effacement du dossier temporaire  "wipe_FreeSpace" et donc de tout les fichiers bidon qu'il contient
; ce qui aura pour effet de vous rendre la partie libre du disque ayant été remplis par le dossier temporaire "wipe_FreeSpace"
; la partie libre du disque est de nouveau sans fichiers, et donc pas de possibilité d'espionner vos données effacées :o)
;***********************************************
;{- Enumerations / DataSections
;{ Windows
Enumeration
	#Win
	#file
EndEnumeration
;}
;{ Gadgets
Enumeration
	#Text_Auteur
	#Text_Titre
	#Button_wipe
	#button_erase_temp
	#Explorer_drive
	#bar
	#sys_on_off
	#Text_info
	#Font_Text_Titre
	#text_taille_file
	
EndEnumeration
;}
Define.l Event
;}
;-declares
Declare  openwindow_win()
Declare  Alea()
Declare event(drive.s)
Declare  wipe_free_space(drive.s)
Declare.s taille_disque(drive.s,mode)
Declare stop_sys(Param.l)
Declare Creation_fichier(drive.s)


global drive.s ,aleat.s="" ,sys_on_off.i=#PB_CheckBox_Unchecked ,compteur=0
Global Dossier.s="wipe_FreeSpace\"
drive.s="c:\"
OpenWindow_Win()
;{- Event loop
Repeat
	Event = WaitWindowEvent(12)
	Select Event
		; ///////////////////
		Case #PB_Event_Gadget
		Select EventGadget()
			Case #Text_Auteur
			Case #button_erase_temp
			if FileSize(drive.s+Dossier.s+"wipe_FreeSpace.go")<>-1
			SetGadgetText(#Text_info, "effacement du dossier temporaire")
				DeleteDirectory(drive.s+Dossier.s,"*.*",#PB_FileSystem_Force ) ; efface le dossier temporaire 
				SetGadgettext(#text_taille_file,"*")
				SetGadgetText(#Text_info, "")
			Endif
			Case #Button_wipe
			drive.s=LCase(GetGadgetText(#Explorer_drive))
			;if drive.s<>"c:\" ; securité pour eviter l'emploi du drive systeme
			if Drive.s<>""
				wipe_Free_Space(drive.s)
			Endif
			; Else
			; MessageRequester("attention","Utilisez un autre lecteur que celui du systeme")
			; Endif
			Case #Explorer_drive
			drive.s=GetGadgetText(#Explorer_drive)
			Case #sys_on_off
			sys_on_off.i=GetGadgetState(#sys_on_off)
		EndSelect
		; ////////////////////////
		Case #PB_Event_CloseWindow
		Select EventWindow()
			Case #Win
			CloseWindow(#Win)
			if FileSize(drive.s+Dossier.s+"wipe_FreeSpace.go")<>-1
				SetGadgetText(#Text_info, "effacement du dossier temporaire")
				DeleteDirectory(drive.s+Dossier.s,"*.*",#PB_FileSystem_Force ) ; efface le dossier temporaire 
				SetGadgettext(#text_taille_file,"*")
				SetGadgetText(#Text_info, "")
			Endif
			Break
		EndSelect
	EndSelect
Forever
;
;}

;-Zone Procedures
Procedure OpenWindow_Win()
	If OpenWindow(#Win, 483, 140, 220, 176, "Pure_Wipe_FreeSpace", #PB_Window_SystemMenu|#PB_Window_MinimizeGadget|#PB_Window_TitleBar)
		; If CreateGadgetList(WindowID(#Win))
		TextGadget(#Text_Titre, 15, 5, 195, 20, "Pure_Wipe_FreeSpace 3 ")
		CheckBoxGadget(#sys_on_off, 15,25, 150, 20, "extinction PC") :GadgetToolTip(#sys_on_off, "si coché , eteinds l'ordi a la fin du traitement")
		
		TextGadget(#Text_Auteur, 170, 156,100, 20, "By Dobro")
		TextGadget(#text_taille_file, 5, 155, 165, 20, "*")
		TextGadget(#Text_info, 10, 80, 200, 20, "")
		ButtonGadget(#button_wipe, 10, 105, 90, 30, "Wipe_Space") :GadgetToolTip(#button_wipe, "lance le néttoyage de la zone libre du disque")
		ButtonGadget(#button_erase_temp, 180, 105, 30, 30, "X"):GadgetToolTip(#button_erase_temp, "Efface manuellement le dossier temporaire au cas ou il serai encore present")
		ExplorerComboGadget(#Explorer_drive, 35, 45, 150, 30, "c:\", #PB_Explorer_DrivesOnly)
		ProgressBarGadget(#bar, 10, 140, 200, 10, 0, 100) :GadgetToolTip(#bar, "Indique l'etat d'avancement du processus")
		; Gadget Fonts
		SetGadgetFont(#Text_Titre, LoadFont(#Font_Text_Titre, "Microsoft Sans Serif", 11, #PB_Font_Bold|#PB_Font_HighQuality))
		;EndIf
	EndIf
EndProcedure




Procedure Creation_fichier(drive.s)
	CreateDirectory(drive.s+Dossier.s)
	
	SetGadgetText(#Text_info, "ecriture du fichier de ref")
	if OpenFile(#file,drive.s+Dossier.s+"wipe_FreeSpace.go")
		For i=1 to 100 ; on va ecrire 100 fois 100 kilo donc chaque fichiers fera 10 mega ... ecrire des fichier trop gros ralenti considérablement le prg
			if WritestringN( #file,aleat.s)=0
				MessageRequester("Attention","erreur d'ecriture"+chr(10)+"utilisez le bouton [x] avant de quitter le prg")
			CloseFile (#file)
			ProcedureReturn
		Endif
	Next i
CloseFile (#file)
Endif
EndProcedure


procedure wipe_Free_Space(drive.s)
	; By Dobro
	if FileSize(drive.s+Dossier.s+"wipe_FreeSpace.go")<>-1
		SetGadgetText(#Text_info, "effacement du dossier temporaire")
		DeleteDirectory(drive.s+Dossier.s,"*.*",#PB_FileSystem_Force ) ; efface le dossier temporaire 
		SetGadgettext(#text_taille_file,"*")
		SetGadgetText(#Text_info, "")
	Endif
	taille_restante.f=Valf(taille_disque(drive.s,1))*1024  ; en mega
	Setgadgettext(#Button_wipe,"Stop")
	if Alea() =1
		Setgadgettext(#Button_wipe,"Wipe_Space")
		SetGadgetState(#bar,0)
		ProcedureReturn
	Endif
	
	SetGadgetAttribute(#bar,#PB_ProgressBar_Maximum,taille_restante.f)
	SetGadgetState(#bar, 1)
	WaitWindowEvent(1)
	; UpdateWindow_(GadgetID(#bar))
	; ecriture
	Creation_fichier(drive.s)
	compteur=0
	SetGadgetText(#Text_info, "copie du fichier :"+str(compteur))
	While taille_restante.f>500 ; minimum qu'on laisse en mega par securité
		compteur=compteur+1
		CopyFile(drive.s+Dossier.s+"wipe_FreeSpace.go", drive.s+Dossier.s+"wipe_FreeSpace"+str(compteur)+".go")
		SetGadgetText(#Text_info, "copie du fichier :"+str(compteur))
		
		
		taille_restante.f=Valf(taille_disque(drive.s,1))*1024
		taille_fichier.f=taille_fichier.f+FileSize(drive.s+Dossier.s+"wipe_FreeSpace.go")/1024/1024 +FileSize(drive.s+Dossier.s+"wipe_FreeSpace.go"+str(compteur))/1024/1024 
		SetGadgettext(#text_taille_file,strf(taille_fichier.f,2)+" Mo"+"  <->  "+strf(taille_restante.f,2)+" Mo")
		SetGadgetState(#bar, taille_fichier)
		if event(drive.s) =1 ; vide les event, et verifie si on demande l'arret du processus
			Setgadgettext(#Button_wipe,"Wipe_Space")
			SetGadgetState(#bar,0)
			ProcedureReturn 
		Endif
	Wend
	SetGadgetText(#Text_info, "terminé !")
	if FileSize(drive.s+Dossier.s+"wipe_FreeSpace.go")<>-1
		SetGadgetText(#Text_info, "effacement du dossier temporaire")
		DeleteDirectory(drive.s+Dossier.s,"*.*",#PB_FileSystem_Force ) ; efface le dossier temporaire avant de quitter Pur_Wipe_FreeSpace
		SetGadgettext(#text_taille_file,"*")
		SetGadgetText(#Text_info, "")
	Endif
	
	if sys_on_off=#PB_CheckBox_Checked
		stop_sys(2)
	Endif
	
EndProcedure

Procedure.s taille_disque(drive.s,mode)
	; mode=0 =taille du disque
	;mode=1 = espace libre restant
	Structure int64
		Long1.l
		Long2.l
	EndStructure
	; this prevents the 'please insert drive' requester.
	; GetDiskFreeSpaceEx_() will just return 0 if the drive is not avaiable,
	; without a prompt to the user:
	SetErrorMode_(#SEM_FAILCRITICALERRORS)
	If GetDiskFreeSpaceEx_(@drive.s, BytesFreeToCaller.int64, TotalBytes.int64, TotalFreeBytes.int64) = 0
		MessageRequester("","Drive not ready!",0)
		End
	EndIf
	; reset the error behaviour
	SetErrorMode_(0)
	; calculate sizes in mb.
	select mode
		Case 0
		TotalMB = ((TotalBytes\Long1 >> 20) & $FFF) | (TotalBytes\Long2 << 12)
		ProcedureReturn strf(TotalMB/1000,2)
		Case 1
		FreeMB = ((TotalFreeBytes\Long1 >> 20) & $FFF) | (TotalFreeBytes\Long2 << 12)
		ProcedureReturn strf(FreeMB/1000,2)
	EndSelect
EndProcedure

Procedure event(drive.s)
	select WaitWindowEvent(1)
		case #PB_Event_Gadget
		Select EventGadget()
			Case #Button_wipe
			SetGadgetText(#Text_info, "processus Stopé")
			if FileSize(drive.s+Dossier.s+"wipe_FreeSpace.go")<>-1
				SetGadgetText(#Text_info, "effacement du dossier temporaire")
				DeleteDirectory(drive.s+Dossier.s,"*.*",#PB_FileSystem_Force ) ; efface le dossier temporaire 
				SetGadgettext(#text_taille_file,"*")
				SetGadgetText(#Text_info, "")
			Endif
			MessageRequester("information","le processus est annulé , le fichier temporaire a été effacé")
			ProcedureReturn 1
		EndSelect
	EndSelect
EndProcedure

Procedure Alea()
	; By Dobro
	SetGadgetText(#Text_info, "fabrication du random") 
	SetGadgetAttribute(#bar,#PB_ProgressBar_Maximum,1024*100)
	For i=1 to 1024*100 step 1024  ; 100 kilo par lignes 
		For col=1 to 1024
			aleat.s=aleat.s+chr(random(250,32)) ; une ligne egale 100 kilo octet (on ecrit 1024 caracteres a la fois soit 1 kilo x 100)
		Next col
		SetGadgetState(#bar, i)
		; UpdateWindow_(GadgetID(#bar))
		if event(drive.s) =1 ; vide les event, et verifie si on demande l'arret du processus
			Setgadgettext(#Button_wipe,"Wipe_Space")
			SetGadgetState(#bar,0)
			ProcedureReturn 1
		Endif
	Next i
EndProcedure

Procedure stop_sys(Param.l)
	
	; Code Le Soldat inconnu
	; Mis en Pb4.00 par Dobro
	; Param = paramètre d'instinction de l'ordinateur
	; 1 : quitter session
	; 2 : arrêter
	; 3 : redémarrer
	
	#TOKEN_ADJUST_PRIVILEGES = 32
	#TOKEN_QUERY = 8
	#SE_PRIVILEGE_ENABLED = 2
	#EWX_LOGOFF = 0
	#EWX_SHUTDOWN = 1
	#EWX_REBOOT = 2
	#EWX_FORCE = 4
	#EWX_POWEROFF = 8
	
	Structure MyLUID
		lowpart.l
		highpart.l
		Attributes.l
	EndStructure
	
	Structure MyTOKEN
		PrivilegeCount.l
		lowpart.l
		highpart.l
		Attributes.l
	EndStructure
	
	Protected hdlTokenHandle.l, tmpLuid.MyLUID, tkp.MyTOKEN, tkpNewButIgnored.MyTOKEN, lBufferNeeded.l
	
	OpenProcessToken_(GetCurrentProcess_(), #TOKEN_ADJUST_PRIVILEGES | #TOKEN_QUERY, @hdlTokenHandle)
	SysName.s = "" + Chr(0)
	Name.s = "SeShutdownPrivilege" + Chr(0)
	LookupPrivilegeValue_(SysName, Name, @tmpLuid)
	tmpLuid\Attributes = #SE_PRIVILEGE_ENABLED
	tkp\PrivilegeCount = 1
	tkp\lowpart = tmpLuid\lowpart
	tkp\highpart = tmpLuid\highpart
	tkp\Attributes = tmpLuid\Attributes
	AdjustTokenPrivileges_(hdlTokenHandle, 0, @tkp, SizeOf(MyTOKEN), @tkpNewButIgnored, @lBufferNeeded)
	
	Select Param
		Case 1 : ExitWindowsEx_(#EWX_LOGOFF | #EWX_FORCE, 0)
		Case 2 : ExitWindowsEx_(#EWX_SHUTDOWN | #EWX_FORCE, 0)
		Case 3 : ExitWindowsEx_(#EWX_REBOOT | #EWX_FORCE, 0)
	EndSelect
	
	
EndProcedure

; Epb 

Image
Windows 98/7/10 - PB 5.42
■ sites : http://michel.dobro.free.fr/
Dude
Addict
Addict
Posts: 1907
Joined: Mon Feb 16, 2015 2:49 pm

Re: Pure_wipe_FreeSpace 3

Post by Dude »

dobro wrote:Recuva, and any recovery software, can no longer recover anything!
You better be right about that, because someone can sue you if you're wrong! Be careful making this type of claim.
User avatar
dobro
Enthusiast
Enthusiast
Posts: 766
Joined: Sun Oct 31, 2004 10:54 am
Location: France
Contact:

Re: Pure_wipe_FreeSpace 3

Post by dobro »

Dude wrote: You better be right about that, because someone can sue you if you're wrong! Be careful making this type of claim.
we can not say anything, in this case! :shock:
fear of the courts, create a de facto sencure you think

in this case, any person testing a forum code, could attack its author
the code "Will" could create damage on his computer ....

so stop immediately the Forum!

I'm on a programming forum, my assertion is related to testing, I did

if I made that statement, it is not to discredit Recuva or other software that I tested (TestDisk, Data Recovery, Free File Recovery)
or some programs, either!
and I happen to use :)

if I say that Recuva was unable to recover my data after using my code is that it's true!

I invite you to test! And prove me otherwise ;)

again, on the site of Recuva here:
http://www.piriform.com/support/recuva#204044054

it is written :
I've deleted some files by accident - HELP!

Ideally, you should install Recuva before you need it, because if you delete a valuable file and then go online to download Recuva, the process of downloading the installer can create a huge number of temporary files which may overwrite the file you are trying to recover.

that's exactly what my code create ,many files to overwrite the files of the free zone!
This poses a problem Recuva! ;)



*****************************************************************************************************
*****************************************************************************************************
*****************************************************************************************************
*****************************************************************************************************


in French :

on ne peut plus rien dire, dans ce cas !
la peur des tribunaux , creer de fait ,une sencure , selon vous

dans ce cas , toute personne, testant un code du forum, pourrai attaquer son auteur
le code "Aurai" pu creer des dommages sur son ordinateur ....

autant arreter tout de suite le Forum !



je suis sur un Forum de programmation , mon affirmation, est lié aux tests, que j'ai fait

si je fait cette affirmation, ce n'est pas pour discréditer Recuva ou les autres logiciels que j'ai testé (TestDisk,Data Recovery , Free File Recovery )
ou quelques programmes que ce soit !
et qu'il m'arrive d'utiliser :)

si je dis que Recuva n'a pas pu recuperer mes données apres l'utilisation de mon code , c'est que c'est vrais !

je vous invite a tester ! , et prouvez moi le contraire ;)

ce code est libre d'utilisation


de plus , sur le site de Recuva ici :
http://www.piriform.com/support/recuva#204044054

il est ecrit :

I've deleted some files by accident - HELP!

Ideally, you should install Recuva before you need it, because if you delete a valuable file and then go online to download Recuva, the process of downloading the installer can create a huge number of temporary files which may overwrite the file you are trying to recover.
c'est exactement ce que fait mon code !
il creer pleins de fichiers qui ecrasent les fichiers present dans la zone libre !
ce qui pose probleme a Recuva ! et aux autres prg du genre
Image
Windows 98/7/10 - PB 5.42
■ sites : http://michel.dobro.free.fr/
Post Reply