Skip to content

Commit 21d1a58

Browse files
committed
Adding Iterations options
1 parent 7b45ef6 commit 21d1a58

File tree

1 file changed

+26
-17
lines changed

1 file changed

+26
-17
lines changed

modules/post/windows/manage/sdel.rb

Lines changed: 26 additions & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -35,13 +35,15 @@ def initialize(info={})
3535
register_options(
3636
[
3737
OptBool.new('ZERO', [ false, 'Zero overwrite. If set to false, random data will be used', false]),
38+
OptInt.new('ITERATIONS', [false, 'The number of overwrite passes', 1 ]),
3839
OptString.new('FILE',[true, 'File to be deleted',''])
3940
], self.class)
4041
end
4142

4243

4344
def run
4445
type = 1
46+
n = datastore['ITERATIONS']
4547
file = datastore['FILE']
4648

4749
if datastore['ZERO']==true
@@ -53,9 +55,9 @@ def run
5355
print_error("File #{file} does not exist")
5456
return
5557
elsif comp_encr(file)
56-
print_status("File compress or encrypted. Content could not be overwritten")
58+
print_status("File compress or encrypted. Content could not be overwritten!")
5759
end
58-
file_overwrite(file,type)
60+
file_overwrite(file,type,n)
5961
end
6062

6163

@@ -76,7 +78,7 @@ def size_on_disk(file)
7678
print_status("Size of the file: #{size_file}")
7779

7880
if (size_file<800)
79-
print_status("The file is too small. If it's store in the MTF (NTFS) sdel will not overwrite it")
81+
print_status("The file is too small. If it's store in the MTF (NTFS) sdel will not overwrite it!")
8082
end
8183

8284
sizeC= size_cluster()
@@ -101,34 +103,41 @@ def change_mace(file)
101103
client.priv.fs.set_file_mace(file, date,date,date,date)
102104
end
103105

104-
105106
#Function to overwrite the file
106-
def file_overwrite(file,type)
107+
def file_overwrite(file,type,n)
107108
#FILE_FLAG_WRITE_THROUGH: Write operations will go directly to disk
108109
r = client.railgun.kernel32.CreateFileA(file, "GENERIC_WRITE", "FILE_SHARE_READ|FILE_SHARE_WRITE", nil, "OPEN_EXISTING", "FILE_FLAG_WRITE_THROUGH", 0)
109110
handle=r['return']
110111
real_size=size_on_disk(file)
111112

112-
#http://msdn.microsoft.com/en-us/library/windows/desktop/aa365541(v=vs.85).aspx
113-
client.railgun.kernel32.SetFilePointer(handle,0,nil,"FILE_BEGIN")
114-
115113
if type==0
116114
random="\0"*real_size
117-
else
118-
random=Rex::Text.rand_text(real_size,nil)
119115
end
120116

121-
#http://msdn.microsoft.com/en-us/library/windows/desktop/aa365747(v=vs.85).aspx
122-
w=client.railgun.kernel32.WriteFile(handle,random,real_size,4,nil)
117+
i=0
118+
n.times do
119+
i+=1
120+
print_status("Iteration #{i.to_s}/#{n.to_s}:")
123121

124-
if w['return']==false
125-
print_error("The was an error writing to disk, check permissions")
126-
return
122+
if type==1
123+
random=Rex::Text.rand_text(real_size,nil)
124+
end
125+
126+
#http://msdn.microsoft.com/en-us/library/windows/desktop/aa365541(v=vs.85).aspx
127+
client.railgun.kernel32.SetFilePointer(handle,0,nil,"FILE_BEGIN")
128+
129+
#http://msdn.microsoft.com/en-us/library/windows/desktop/aa365747(v=vs.85).aspx
130+
w=client.railgun.kernel32.WriteFile(handle,random,real_size,4,nil)
131+
132+
if w['return']==false
133+
print_error("The was an error writing to disk, check permissions")
134+
return
135+
end
136+
137+
print_status("#{w['lpNumberOfBytesWritten']} bytes overwritten")
127138
end
128139

129-
print_status("#{w['lpNumberOfBytesWritten']} bytes overwritten")
130140
client.railgun.kernel32.CloseHandle(handle)
131-
132141
change_mace(file)
133142

134143
#Generate a long random file name before delete it

0 commit comments

Comments
 (0)