Классификация ПО, понятие взлома и защиты, привязка к железу ПК

 1. Классификация ПО

Программное обеспечение принято по назначению подразделять на:

- системное ПО

- инструментальное ПО

- прикладное ПО

а по способу распространения и использования на

- проприетарное ПО

- открытое ПО

- свободное ПО

- Adware (ПО содержащее рекламу);
- Freeware (бесплатное ПО);
- Shareware(условно бесплатное ПО);
- Demoware (демонстрационное ПО);
- COSS (коммерческое ПО с открытым исходным кодом);
- Spyware (шпионское ПО);
- Abandonware (ПО без поддержки).

2. Взлом программного обеспечения

 

Крэк (англ. crack) — программа, позволяющая осуществить взлом программного обеспечения. Как правило, крэк пригоден для массового использования. По сути, крэк является воплощением одного из видов взлома, зачастую, это обычный патч. 
Крэкер (англ. cracker) — человек, который занимается созданием крэков.
Взломщик — это человек, который взламывает программу при помощи уже готового крэка или без такового.

Люди, специализирующиеся на взломе ПО (crackers) предлагают генераторы ключей или модифицированные версии ПО выкладывая их на различных сайтах, посвященных распространению ПО без соблюдений условий лицензия на ПО и обходя использование технические средства защиты авторских прав.

Практически любой взлом сводится к использованию одного из следующих способов:

- ввод серийного номера (регистрационного кода) (англ. serial number, S/n) - взлом программы посредством введения правильного регистрационного ключа (или фразы), полученного нелегальным способом. Ключ может генерироваться на основе какой-либо информации (имени владельца ПО, характеристик аппаратной части компьютера, и т. п.), либо иметь фиксированное значение. Для генерации регистрационного ключа используется тот же алгоритм, что и в программе. Для массового взлома, создаётся  (англ. keygen сокр. от key generator) генератор ключей .
использование загрузчика 
(англ. loader) — способ обходить некоторые виды защиты ПО, заключающиеся в использовании внешних (навесных) систем защиты. Состоит в изменении определённых фрагментов программы в оперативной памяти сразу после её загрузки в эту память, но перед её запуском (то есть перед выполнением кода в точке входа). 
- применение (бинарного) патча 
(англ. byte patch) — способ, похожий на «загрузчик», но модификация производится статически в файлах программы. Как правило, это один из самых простых и быстрых способов взлома ПО. 
использование взломанной версии 
(англ. cracked) — способ заключается в подмене оригинальных файлов программы файлами, которые уже взломаны. 
использование эмулятора ключа 
(англ. key emulator) — способ используется для обмана защит, построенных на использовании в качестве защиты электронного ключа (как правило, подключаемого к LPT или USB порту компьютера). Заключается в снятии дампа внутренней памяти ключа. Файл с содержимым этой памяти подаётся на вход специальной программе — эмулятору, которая подключает свой драйвер-фильтр в стек драйверов и обманывает защищённую программу, эмулируя работу с аппаратным ключом. 

3. Защита программного обеспечения

Защита разрабатываемого программного обеспечения включает в себя многообразный комплекс мер по защите, применяемых к программному обеспечению по от всевозможного несанкционированного приобретения, использования, распространения, модифицирования, изучения и воссоздания аналоговое программное обеспечение может распространяться, устанавливаться и использоваться на любых компьютерах дома, в офисах, школах, вузах, а также коммерческих и государственных учреждениях без ограничений.

3.1 Крипторы

Существуют программные продукты выполняющие функцию защиты ПО (вставка кода не дающего работать дизассемблеру, шифрование исполняемого кода и выполнения его собственными виртуальными машинами, привязка к железу, создание ключей, ограничения всех видов) так называемые крипторы (наиболее известные ASProtect, Armadillo, Obsidium и т.д.), но не следует забывать о том, что в связи с распространением этих программных продуктов - cracker'ы создают универсальные распаковщики этих многослойных защит (универсальной защиты не существует, и поэтому наша задача максимально усложнить доступ). Поэтому под новую, не распространенную защиту, скорее всего не будут писать универсальный распаковщик (которые в основном используют начинающие взломщики пользуясь наработками более опытных), модифицируя ее на разных продуктах можно добиться большего результата.

3.2 Электронный ключ

Внешний вид электронного ключа


Основой данной технологии является специализированная микросхема, либо защищённый от считывания микроконтроллер, имеющие уникальные для каждого ключа алгоритмы работы. Донглы также имеют защищённую энергонезависимую память небольшого объёма, более сложные устройства могут иметь встроенный криптопроцессор (для аппаратной реализации шифрующих алгоритмов), часы реального времени. Аппаратные ключи могут иметь различные форм-факторы, но чаще всего они подключаются к компьютеру через USB.

Принцип действия электронных ключей. Ключ присоединяется к определённому интерфейсу компьютера. Далее защищённая программа через специальный драйвер отправляет ему информацию, которая обрабатывается в соответствии с заданным алгоритмом и возвращается обратно. Если ответ ключа правильный, то программа продолжает свою работу. В противном случае она может выполнять определенные разработчиками действия, например, переключаться в демонстрационный режим, блокируя доступ к определённым функциям.
Существуют специальные ключи, способные осуществлять лицензирования (ограничения числа работающих в сети копий программы) защищенного приложения по сети. В этом случае достаточно одного ключа на всю локальную сеть. Ключ устанавливается на любой рабочей станции или сервере сети. защищенные приложения обращаются к ключу по локальной сети. Преимущество в том, для работы с приложением в пределах локальной сети не нужно носить с собой электронный ключ.

3.3 Привязка к Оборудованию ПК (устройства, их типы, серийные номера)


Данное ограничение не является серьезным препятствием на пути взломщиков ПО, но усложняет задачу несанкционированного изменения(копирования) ПО. Программа опрашиваются устройства ПЭВМ, получачает уникальные серийные номера устройств (процессор, сетевая плата, жесткий диск, CD ROM и т.д), как недостаток этой технологии можно выделить при замене устройства, необходимо привязка заново, хотя для регистрированных пользователей это не должно являться проблемой. Я обычно реализую привязку следующим образом, пользователю высылается программа "Регистратор", которая собирает нужную вам информацию например о железе ПК пользователя, шифрует информацию и создает ключ, пользователь высылает данный уникальный ключ и на основе создается привязка программы к железу пользователя.

получение s\n раздела ЖМД, флешки
Важно: серийный номер логического диска устанавливается при форматировании, не путайте его с серийным номером физического диска (который дает производитель)!!!
 
function GetSerialNumber(const Root: PChar = nil): string;
var
  NotUsed: DWORD;
  VolumeFlags: DWORD;
  VolumeSerialNumber: DWORD;
begin
  Result := \'\';
  if GetVolumeInformation(Root, nil, 0, @VolumeSerialNumber, NotUsed, VolumeFlags, nil, 0) then
    Result := Format(\'%8.8x\', [VolumeSerialNumber]);
end;

[i]// пример использования[/i]
pas1:string;
pas1:=GetSerialNumber(\'C:\\\');
[i]// для флешки заменить \'C:\\\' на нужный логический диск[/i]
функция получения номера CDROM
function GetNumberOfCDDrives: Byte;
 var
   drivemap, mask: DWORD;
   i: integer;
   root: string;
 begin
   Result := 0;
   root := \'A:\\\';
   drivemap := GetLogicalDrives;
   mask := 1;
   for i := 1 to 32 do
   begin
     if (mask and drivemap) <> 0 then
       if GetDriveType(PChar(root)) = DRIVE_CDROM then
       begin
         Inc(Result);
       end;
     mask := mask shl 1;
     Inc(root[1]);
   end;
 end;[/color]

[i]//пример использования[/i]
Label1.Caption := IntToStr(GetNumCDDrives);
процедура получения инфо о видеокарте

procedure TForm1.Button3Click(Sender: TObject);
var
lpDisplayDevice: TDisplayDevice;
dwFlags: DWORD;
count: DWORD;
begin
Form1.Memo1.Clear;
lpDisplayDevice.cb := sizeof(lpDisplayDevice);
dwFlags := 0;
count:= 0;
while EnumDisplayDevices(nil, count, lpDisplayDevice , dwFlags) do
begin
Inc(count);
Form1.Memo1.Lines.Add(lpDisplayDevice.DeviceString);
end;
end;

 

<На главную>

 

 

 

Расширения для Joomla

Облако тегов