Абзац
:: Поиск
:: ПоддерЖка ПрОекта
Webmoney:
  • Z610389805629
  • R427996570517
  • E023541002978
  • :: №29 (04.12.2006) ПрОсмотрОв: 3209

    Автор: Александр Синяков / 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 
    psw_len equ $-passw

    Плюс - самих паролей намного больше, чем вычисленых из них кодов. Минус - если в исходном коде встретится подряд 8 нулевых байт, то после кодирования на этом месте будет лежать сам пароль (и есть вероятность, что хакер его заметит). А этого нам не хочется... Выход из минуса - сначала заXOR’ить блок программой R_XOR, а уж потом - паролем. Теперь вражеский взломщик точно сломает себе мозг, пытаясь пробраться в VIP-зону твоей программы! Для еще большей надежности можно ввести CRC - контрольные сумму для заXOR’еного R_XOR блока. После ввода пароля мы разXOR’иваем им блок и проверяем CRC. Если он совпал - все нормально, а если нет - пароль не верный, заXOR’иваем блок обратно и просим ввести правильный пароль.

    © 2004-2013 Perspective group