:: СОДЕРЖАНИЕ НОМЕРА
:: Газетные рубрики
:: АВТОРЫ
:: Поиск
:: Поддержка проекта
Webmoney:
|
:: №29 (04.12.2006) Просмотров: 4636
Автор: Александр Синяков / SAM style. Рубрика: Читатель читателю. Номер: №29 (04.12.2006). Методы кодирования данныхСуществует много способов запутать «злобного хацкера», пытающегося взломать твою программу. Однако, как было сказано в одном из номеров «Абзаца», любая программная защита может быть взломана - это только вопрос времени и умений хакера.Но так ли это? А, может, есть способ скрыть часть данных от посторонних глаз так, что ни одна живая душа, кроме тебя, не имела к ним доступа? С этим я и попытался разобраться... Сначала на ум приходит простенькая XOR’ка. XORKA ld hl,ADDR ld bc,lenght ld d,0 LAB1 ld a,d xor (hl) ld (hl),a inc hl dec bc ld a,b or c jr nz,LAB1 ret Можно, конечно, «навесить» в цикл дополнительные XOR’ы, даже используя регистр R... R_XOR di ld hl,ADDR ld bc,lenght xor a ld r,a LAB1 ld a,r xor (hl) ld (hl),a inc l dec bc ld a,b or c jr nz,LAB1 ei ret ...но у всех таких методов один большой изъян - после трассировки программы в отладчике «скрытые» данные оказываются раскодированы. Что делать? Ввести какой-то параметр, известный только тем людям, которые имеют право на доступ к кодируемой информации. Например, пароль. Если просто вводить пароль и потом проверять его правильность, такая, с позволения сказать, «защита» очень зыбкая. При хранении правильного пароля в самой программе он становится легкой добычей. Другое дело - использовать введенный пароль для получения какого-либо дополнительного параметра XOR’ки. Например, путем несложных математических действий из пароля «состряпать» число, которое будет являться стартовым в XOR’ке. Как вариант - убрать «xor a» в вышеприведенной R_XOR, и перед вызовом кодировщика в A помещать вычисленый из пароля параметр. Метод хороший - чтобы получить доступ к данным, хакеру придется перебрать 256 вариантов входных параметров в процедуру раскодирования. Не у каждого на это хватит сил. Тем более, если мы будем применять неоднократное кодирование данных, взломщик поседеет, пока подберет правильные коды. Другим вариантом может быть кодирование с использованием самого пароля, а не вычисленного из него параметра. К примеру, у нас есть пароль из 8 символов. Первый байт кода XOR’им с первым символом пароля, второй - со вторым,.. восьмой - с восьмым, девятый - снова с первым и так далее. ld hl,code ;кодируемый блок ld bc,lenght ;его длина xor a ex af,af' LAB1 ex af,af' and a jr nz,LAB2 ld de,passw ;пароль ld a,psw_len ;длина пароля LAB2 dec a ex af,af' ld a,(de) xor (hl) ld (hl),a inc hl inc de dec bc ld a,b or c jr nz,LAB1 ret passw db Плюс - самих паролей намного больше, чем вычисленых из них кодов. Минус - если в исходном коде встретится подряд 8 нулевых байт, то после кодирования на этом месте будет лежать сам пароль (и есть вероятность, что хакер его заметит). А этого нам не хочется... Выход из минуса - сначала заXOR’ить блок программой R_XOR, а уж потом - паролем. Теперь вражеский взломщик точно сломает себе мозг, пытаясь пробраться в VIP-зону твоей программы! Для еще большей надежности можно ввести CRC - контрольные сумму для заXOR’еного R_XOR блока. После ввода пароля мы разXOR’иваем им блок и проверяем CRC. Если он совпал - все нормально, а если нет - пароль не верный, заXOR’иваем блок обратно и просим ввести правильный пароль. |