Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Флейм > Ваd сектор


Автор: vernon 28.11.2002, 21:40
Мне необходимо, чтобы система ( MS-DOS и Windы) не могла бы читать определенный сектор на дискете. Как это можно сделать, подскажите пожалуйста?

Автор: Vit 28.11.2002, 23:49
Дыроколом, шилом и т.п. инструментами

Автор: MuToGeN 29.11.2002, 00:04
уж не вирус ли пишешь?? нехорошо...

программно можно вообще убить весь винт... но работает только с очень старыми винтами. делается методом опускания гололвок на блины, когда те вертятся.

Автор: vernon 29.11.2002, 19:19
Цитата(MuToGeN @ 28.11.2002, 16:04)
уж не вирус ли пишешь?? нехорошо...

программно можно вообще убить весь винт... но работает только с очень старыми винтами. делается методом опускания гололвок на блины, когда те вертятся.

Нет не вирус, мне просто нужно создать КОПИЮ ЛИЦЕНЗИОННОЙ ДИСКЕТЫ. А у оригинала один сектор не читается. Повторяю нужно создать bad сектор у ДИСКЕТЫ, а не ЖЕСТКОГО ДИСКА

Автор: MuToGeN 29.11.2002, 22:29
с дискетой такого не сделаешь

Автор: Vit 29.11.2002, 23:46
Без специального оборудования такое не сделаешь.

Автор: Sun 30.11.2002, 01:55
Можно пометить сектора как BAD при помощи Norton Disk Doctor (или Edit?). Но в качестве защиты дискеты это слишком наивный способ. Существует куча утилит - потрековых копировщиков, которые создают точный образ диска.
Так что не советую даже тратить свое время на защиту такого рода. Придумай что-то оригинальнее.  :)

Автор: NightGoblin 4.12.2002, 11:18
Да почему не сделать - можно, в FAT'е помечается соответствующий сектор как 0FF7h - и DOS в него лазить не будет. Только это действительно хиловатая защита :)

Автор: Vit 5.12.2002, 00:52
Цитата(NightGoblin @ 03.12.2002, 18:18)
Да почему не сделать - можно, в FAT'е помечается соответствующий сектор как 0FF7h

Это только если кретины защиту делали такое пройдёт, обычно в этих случаях читают не через int21, а через int13 и ему по фиг что там в FAT написано, он конкретный сектор читает. Я когда-то очень давно (лет 10 назад) делал защиту - форматировал дискетту обычным форматом, затем дыроколом делал дырку, затем делал карту чтения диска и находил сектор который читался на "половину" - первые например 100 байт всегда читаются, а последние 100 байт сектора никогда не читаются, а между ними - чтение не устойчивое. Теперь в проге сначала прописываем сектор какими-нибудь значениями, затем читаем их, если например 5й байт читается правильно, а 500й неправильно - то всё в порядке, а если читаются оба или не читаются оба то ключ не подходит. Скопировать такую дискетту очень сложно - проверял, ни одна программа не в состоянии сделать дубликат такой дискетты, так как надо физически нарушить чтение половины сектора, а это нельзя сделать ввиду того что сектор BIOS всегда читается целиком. Сама дискетта не содержит никакой записанной ключевой информации, так что никакое даже самое точное копирование не помогает. Обычно такого типа защиты снимаются 2мя способами:
1) Специальным дисководом, который может прожигать лазером метки на диске (раньше я слышал о существовании таких)
2) Изменение кода программы для обхода проверки ключа - и это самый простой метод.

Автор: NightGoblin 5.12.2002, 13:58
Цитата

2) Изменение кода программы для обхода проверки ключа - и это самый простой метод.

Да уж, пожалуй что :D Поставить где-нить JMP вместо JZ и вся защита на хрен... так что лучше че-нить другое, желательно с защитой от дизассемблирования и трассировки :)

Автор: MuToGeN 5.12.2002, 15:12
Цитата(NightGoblin @ 05.12.2002, 05:58)
с защитой от дизассемблирования и трассировки

а такое разве реально?

Автор: NightGoblin 5.12.2002, 15:27
Цитата(MuToGeN @ 05.12.2002, 07:12)
Цитата(NightGoblin @ 05.12.2002, 05:58)
с защитой от дизассемблирования и трассировки

а такое разве реально?

дык, делают же вроде :)

Автор: NightGoblin 5.12.2002, 15:29
Токо все равно, конечно, рано или поздно сломают... Если не средние хацкеры, так спецы займутся ;-)

Автор: MuToGeN 5.12.2002, 15:39
Цитата(NightGoblin @ 05.12.2002, 07:27)
дык, делают же вроде :)

а как именно делают - не в курсе?

ИМХО от дезассембляции защититься - какой-то UNREAL

Автор: NightGoblin 5.12.2002, 15:56
Ну, в определенной степени, можно... Наворотить шифровщик там такой, что без трассировки не разобраться :) Только, говорю - все равно же сломают, нет такой защиты, которую нельзя было бы взломать.

А про конкретные реализации - это лучше не ко мне %)

Автор: MuToGeN 5.12.2002, 16:02
Цитата(NightGoblin @ 05.12.2002, 07:56)
Ну, в определенной степени, можно... Наворотить шифровщик там такой, что без трассировки не разобраться :) Только, говорю - все равно же сломают, нет такой защиты, которую нельзя было бы взломать.

А про конкретные реализации - это лучше не ко мне %)

OK, в целом понял

Автор: Chingachguk 5.12.2002, 18:09
Цитата

Vit Дата сообщения: 04.12.2002,16:52
{skipped}
1) Специальным дисководом, который может прожигать лазером метки на диске (раньше я слышал о существовании таких)
2) Изменение кода программы для обхода проверки ключа - и это самый простой метод.


Ну я бы не назвал это "самым простым способом". Я бы просто подписал эмулятор такого чтения. Те резидент на int 13h (в принципе, его можно встроить в ломаемый экзешник) хватает это прерывание. Триггер такой:

Если (Читаем_Дискету) и (Точка_Вызова(сегмент) in [Выше Дос, меньше 0A000h);
Если записывается ОДИН сектор, то взводим флаг;
Если читается ОДИН сектор, то эмулируем "дефект" - корректируем буфер по es:bx.

Цитата

MuToGeN Дата сообщения: 05.12.2002,07:12
Quote (NightGoblin @ 05.12.2002,05:58)
с защитой от дизассемблирования и трассировки

а такое разве реально?


Есть много прикольных способов. Некоторые успешно работают против самых свежих отладчиков - таких, как Сайс. Например:

; Начало критичного кода
mov ebx,esp
mov esp,0
; Критичный код, не использующий стек и ebx
mov esp,ebx
; Конец критичного кода

Зануляя стековый пойнтер, вводим в транс отладчик, который пытается работать на стеке приложения и не может ;)
Эта фича срабатывает против очень многих ребят.

Автор: Vit 5.12.2002, 23:44
Цитата(Chingachguk @ 05.12.2002, 01:09)
Цитата

Vit Дата сообщения: 04.12.2002,16:52
{skipped}
1) Специальным дисководом, который может прожигать лазером метки на диске (раньше я слышал о существовании таких)
2) Изменение кода программы для обхода проверки ключа - и это самый простой метод.


Ну я бы не назвал это "самым простым способом". Я бы просто подписал эмулятор такого чтения. Те резидент на int 13h (в принципе, его можно встроить в ломаемый экзешник) хватает это прерывание.

А что с диском можно работать только через int13? А если используются другие пути?

Автор: Chingachguk 6.12.2002, 01:28
Цитата

Vit Дата сообщения: 05.12.2002,15:44
А что с диском можно работать только через int13? А если используются другие пути?


Ну так ты сам это написал. Я думаю, вопрос про то, что можно ли выяснить как ты работаешь с дискетой - это не вопрос ;)

Далее. Какие пути есть еще (кроме int 13h, который, кстати, перестанет работать под nt) ?

1. int 25h/int 26h - досовые аналогичные функции, но они позволяют читать сектора активного раздела дос. Если сектор на дискете не из этого множества, то... Если да, то аналогично int 13h.

2. Вручную через порты контроллера. Я слышал много про такие проги, они все стали "не работать" под 98'ми, одну даже помогал править. Но не суть - речь о дос. Начиная с процов 386 в их есть так называемые аппаратные точки останова - DRx. Никто не помешает установить обработчик по доступу к порту ввода-вывода контроллера дискеты. Ничего не будет тормозить, ибо он будет активирован только на время со старта и до того момента, когда он сделает свое "черное дело".

Есть и другой вариант, который будет работать и под 8086. Насколько я понимаю, в программе не была предусмотрена защита от трассировки ? ;)

Тогда делаем вот что. Резидент сажаем уже на int 3 и включаем пошаговую трассировку, изучая команду за командой. Как только встречаем команды типа in/out, да еще в dx=адрес контроллера, то впадаем в глубокую неприязнь к их прямому назначению и подсовываем-таки опять то, что нужно ;) команды инициализации контроллера и чтения стандартизованы, так что проблем тута не будет.

Автор: NightGoblin 6.12.2002, 17:01
Цитата(Chingachguk @ 05.12.2002, 10:09)
; Начало критичного кода
mov ebx,esp
mov esp,0
; Критичный код, не использующий стек и ebx
mov esp,ebx
; Конец критичного кода

Гы, и все??? Я думал, куда сложнее будет... :) Просто никогда такими вещами в серьез не интересовался :satisfied

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)