И снова про защиту программ

Discussion in 'С/С++, C#, Rust, Swift, Go, Java, Perl, Ruby' started by @leks@, 24 Apr 2011.

  1. @leks@

    @leks@ New Member

    Joined:
    28 Nov 2009
    Messages:
    32
    Likes Received:
    0
    Reputations:
    0
    Привет всем хочу снова поднять тему про защиту программ...
    После упорного поиска так я и не нашел не чего путнего ....
    привязка компу сразу отподает... нужно делать онлайн...
    так как я не знаю php то все становиться плохо...
    идея простая нужна помощь ее развить.
    пишем php часть

    • 1 бд (таблица prog "id, id_mash, key, mail")
      2 key.php (делаем пост запрос на даную форму с параметрами mail id_mash скрипт проверяет если такое mail в базе если есть то он меняет key на новый и присылает нам новый кей на почту присваевает id_mash и создает фалик id_mash.txt с текстом) для активации программы тут еще можно что нибуть усложнить....
      в delphi после активации в каждой процедуре пожно будет проверять на существования фаоика на сервере
    так вы скажете ее лехко словать.... так давайте вместе убудем усиливать защиту
     
  2. X-rus

    X-rus Member

    Joined:
    22 Dec 2010
    Messages:
    88
    Likes Received:
    22
    Reputations:
    4
    Я сделал систему защиты, или правильней сказать - систему лицензирования, следующим образом:
    1. Есть таблица user, где хранятся данные пользователя и его ключ доступа, который он может обновлять.
    2. Есть таблица покупок, где хранятся данные, какие пользователи купили определённый софт (+ ещё дополнительные параметры, вроде платных версий).
    3. Программа посылает на сервер запрос, в этом запросе обязательно должен быть ключ доступа и название программы, остальные параметры уже будут зависеть от системы + посылать определённые данные, для создания контрольной суммы, чтобы ответ нельзя было подстроить с помощью своего сервера. На сервере мы проверяем ключ, купил ли пользователь программу, ведём статистику и возвращаем ответ вместе с контрольной суммой.
    4. Проверяем в программе контрольную сумму и, если всё впорядке, продолжаем работу.

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

    Как вариант хардкорной защиты - вынести часть функционала на сервер. На этот функционал наложить ограничения: он не должен подключатся к интернету; не должен выполнять трудоёмких операций и тому подобное.
     
  3. @leks@

    @leks@ New Member

    Joined:
    28 Nov 2009
    Messages:
    32
    Likes Received:
    0
    Reputations:
    0
    X-rus если у вас есть наработка... может поделитись хоть какойнибуть версиий php части...
     
  4. M_script

    M_script Members of Antichat

    Joined:
    4 Nov 2004
    Messages:
    2,582
    Likes Received:
    1,310
    Reputations:
    1,557
    Но ведь контрольная сумма в программе вычисляется по тому же алгоритму, что и на сервере. Значит можно перенести этот алгоритм на свой сервер и обойти защиту.
     
    #4 M_script, 24 Apr 2011
    Last edited: 24 Apr 2011
  5. X-rus

    X-rus Member

    Joined:
    22 Dec 2010
    Messages:
    88
    Likes Received:
    22
    Reputations:
    4
    Там целая система из разных скриптов. Если вы знаете Delphi, то вам не составит труда изучить PHP, он достаточно прост.

    Да, но это уже сопряжено со скрытием программы. И ещё, данный алгоритм нужно менять в каждой версии и почаще выпускать обновления. :)
     
  6. M_script

    M_script Members of Antichat

    Joined:
    4 Nov 2004
    Messages:
    2,582
    Likes Received:
    1,310
    Reputations:
    1,557
    Спасибо за имя таблицы, эта информация может оказаться полезной. Напиши еще имена колонок и включи файл прив :rolleyes:
     
  7. @leks@

    @leks@ New Member

    Joined:
    28 Nov 2009
    Messages:
    32
    Likes Received:
    0
    Reputations:
    0
    насчет php пробовал его раз пять начать учить и каждый раз бросаю...

    идем дальше чтоб нас не ломануи кроме проверки что мы ее купили пусть сервер нам передаст кусок кода для программы который тоже можно шифрануть а в программе рашифровать...
    если мы используем HTTP.Post если хотябы один data.Add('filter[end_date]='); унас не будет или будет не правильный то все прога не работает... а его же опять можно получать из сети... что не составит труда...
    ребята давайте делиться а не просто писать кто круче....
    если написать самоо ядро защиты то потом можно манипулировать всем... и одна отдругой защита будет различаться....
     
  8. X-rus

    X-rus Member

    Joined:
    22 Dec 2010
    Messages:
    88
    Likes Received:
    22
    Reputations:
    4
    Тогда найми программиста, который разбирается в PHP.

    @leks@
    Ещё важно защитить сам сервер. M_script уже намекнул на возможность SQL-инъекции. Чтобы минимизировать риск, нужно все передаваемые параметры во всех скриптах тщательно проверять.
     
  9. @leks@

    @leks@ New Member

    Joined:
    28 Nov 2009
    Messages:
    32
    Likes Received:
    0
    Reputations:
    0
    X-rus да SQL-инъекции то же не исключаем....
    поделитесь кому не жалко хоть старой наработкай по защите
     
  10. M_script

    M_script Members of Antichat

    Joined:
    4 Nov 2004
    Messages:
    2,582
    Likes Received:
    1,310
    Reputations:
    1,557
    Уточни подробности - тип программ, стоимость, методы распространения, количество пользователей и т.д. Защита должна соответствовать программе.
     
  11. @leks@

    @leks@ New Member

    Joined:
    28 Nov 2009
    Messages:
    32
    Likes Received:
    0
    Reputations:
    0
    тип программы уско направленная на не большую аудиторию 1-3 к юзеров.... соимость 1$
    тематика для казахстана
    помогите реализовать... я не боюсь что ее ламанут... так как обновления будет выпускаться еже недельно... и смысол у падет ее ломать....
    как реализавать серверную часть у же не делю думаю.... уже психую и хачу просто серверную часть написать на delphi реализавать протакол обменна но тут опять проблема что нашь Ё**й Кз и его казтелеком мне некуда поставить серверную часть чтоб она постоянно была в онлайне....
     
  12. M_script

    M_script Members of Antichat

    Joined:
    4 Nov 2004
    Messages:
    2,582
    Likes Received:
    1,310
    Reputations:
    1,557
    Лучшая защита программы - хорошая тех.поддержка. Должны быть такие условия для клиента, чтобы он купил программу у автора даже при наличии ее взломанной версии в паблике. Большая часть тех, кто пользуется взломанным софтом, все равно не стали бы покупать его.
    Взлом программы также помогает ее распространению. Часть людей, которым понравится эта программа, купят ее. Особенно это касается программ для автоматизации работы с сайтами, так как часто происходят изменения, требующие обновления программы.
     
  13. M_script

    M_script Members of Antichat

    Joined:
    4 Nov 2004
    Messages:
    2,582
    Likes Received:
    1,310
    Reputations:
    1,557
    @leks@, для твоего случая подойдет простейший вариант:
    1. Программа генерирует случайную строку и отправляет на скрипт.
    2. Скрипт шифрует строку любым алгоритмом (например XOR)
    3. Программа шифрует строку тем же алгоритмом и сравнивает результат с ответом сервера.
     
  14. @leks@

    @leks@ New Member

    Joined:
    28 Nov 2009
    Messages:
    32
    Likes Received:
    0
    Reputations:
    0
    так вот и проблема у меня php
     
  15. M_script

    M_script Members of Antichat

    Joined:
    4 Nov 2004
    Messages:
    2,582
    Likes Received:
    1,310
    Reputations:
    1,557
    Гугл тоже проблема?
    PHP:
    class XorEncryptor {

    /** @var string строка-ключ */
        
    private static $keyString '964b07152d23';

    /**
     * Производит непосредственно (де-)шифрование побитовым сравнением двух строк (поддерживает UTF)
     * @param string $InputString Строка для шифрования
     * @param string $KeyString Строка-ключ
     * @return string Зашифрованная строка
     */
        
    public static function xorEncrypt$InputString$KeyString )
        {
            
    $KeyStringLength mb_strlen$KeyString );
            
    $InputStringLength mb_strlen$InputString );
            for ( 
    $i 0$i $InputStringLength$i++ )
            {
            
    // Если входная строка длиннее строки-ключа
                
    $rPos $i $KeyStringLength;
            
    // Побитовый XOR ASCII-кодов символов
                
    $r ord$InputString[$i] ) ^ ord$KeyString[$rPos] );
            
    // Записываем результат - символ, соответствующий полученному ASCII-коду
                
    $InputString[$i] = chr($r);
            }
             return 
    $InputString;
        }
    /**
     * Вспомогательная функция для шифрования в строку, удобную для использования в ссылках
     * @param string $InputString
     * @return string
     */
        
    public static function encrypt$InputString )
        {
             
    $str self::xorEncrypt$InputStringself::$keyString );
             
    $str self::base64EncodeUrl$str );
             return 
    $str;
        }
    /**
     * Вспомогательная функция для дешифрования из строки, удобной для использования в ссылках (парный к @link self::encrypt())
     * @param string $InputString
     * @return string
     */
        
    public static function decrypt$InputString )
        {
            
    $str self::base64DecodeUrl$InputString );
            
    $str self::xorEncrypt$strself::$keyString );
            return 
    $str;
        }
    /**
     * Кодирование в base64 с заменой url-несовместимых символов
     * @param string $Str
     * @return string
     */
        
    public static function base64EncodeUrl$Str )
        {
            return 
    strtrbase64_encode$Str ), '+/=''-_,' );
        }
    /**
     * Декодирование из base64 с заменой url-несовместимых символов (парный к @link self::base64EncodeUrl())
     * @param string $Str
     * @return string
     */
        
    public static function base64DecodeUrl$Str )
        {
            return 
    base64_decodestrtr$Str'-_,''+/=' ) );
        }
    }
    Это уже тема другого раздела.
    Если нужна помощь по PHP, сюда - /forum37.html
    Если нужен готовый к использованию скрипт, сюда - /forum57.html
     
  16. @leks@

    @leks@ New Member

    Joined:
    28 Nov 2009
    Messages:
    32
    Likes Received:
    0
    Reputations:
    0
    M_script спасибо плюнул на все... скачал самы простой скрипт
    подправил базу добавил таблицу pri_key в которой буду хранить код
    подправил сделал
    echo ''.$userinfo["lic"].''; чтоб видно было
    делаю....
    PHP:
        data.Add('login='+p1);
        
    data.Add('password='+p2);
          try
            
    zkey:=HTTP.Post('http://site.kz/'data);
          
    except
          end
    ;

    авторизуюсь получаю сваю переменную....
    думаю зачем чтото прятать и шифровать когда и так снифером пожно все схавать.... что я отправил что получил
    а вот тут начину чудеса.... так как zkey это уже мною придуманая вещь в которой заложено много чего...
     
  17. @leks@

    @leks@ New Member

    Joined:
    28 Nov 2009
    Messages:
    32
    Likes Received:
    0
    Reputations:
    0
    специ дате оценку на сколко просто слатать такую защиту....
    какие знания нужны
    http://rghost.ru/5327111

    3Na3gQqI+ беру из файта личензии... не вчистом виде....