SystemSoftlab (ArtMoney, Spyware Process Detector) - горе-саппорт

Тема в разделе "Статьи, руководства, видео", создана пользователем ArtMoney, 8 фев 2012.

  1. ArtMoney
    ArtMoney Guest
    Доброго дня, товарищи форумчане!

    С чего все начиналось...​


    После многократных неудачных попыток осилить защиту ArtMoney, мне наконец-то это удалось! Четыре дня исследований, доработок и других манипуляций не прошли даром - все лицензионные ключи, которые я получал, спокойно прожевывались программой, и выдавали имена радостную информацию о том, что, вот, Ты - лицензионный пользователь! И это не могло не радовать.
    Я долго думал: как же поступить с кейгеном!?
    Выложить его в народ? Тогда какой-нибудь быдляк мигом бы его приспособил под продажу ключей.
    Продавать ключи самому? Это не соответствовало бы моим убеждениям.
    Отдать кейген тем ребятам, которым я доверяю?! Я так и сделал... И вот, уже многие счастливчики/халявщики имеют у себя на руках лицензионный ключ к программе ArtMoney.

    И это радавает нас!:yahoo: Радостные отклики людей, которым товарищи с форума высылали лицензионные ключи, вселяли в меня мысль - работа сделана не зря!

    Но... Хотелось мне не этого, как потом оказалось...
    Я желал сообщить разработчикам SystemSoftlab о том, что мне это удалось, что я смог сломать их алгоритм. Хотел, чтобы поняли, что супер-защиты нет, что нужно принять взлом как истину, и исправиться, а мне сказать Спасибо!:angel: Этого я ждал... Но оказалось, что ждал зря.
    Столкнулся со следующим:
    - тупая система саппорта; Срочное письмо, которое я накатал им, встретил следующим ответом бот:
    Мне не хотелось ждать столько, и я решил подобрать рег. номер юзера с саппортом. Не удалось... Мой ящик они занесли в свою спам-базу. Пришлось регать другой ящик.
    Написал я и в отдел продаж, и на главный ящик дирекции. Все без толку! Везде молчанка. На всех ящиках - тишина...

    Может быть разработчики Artmoney и хорошие перцы (программа просто замечательная, а защита программы - самая интересная из всех, что мне доводилось встречать! Реальный респект разработчикам защиты!), но вот саппорт у них - ГАВНО! Я пообещал им, что, если они никак не отреагируют на мое письмо, алгоритм лицензионного ключа, и эта статья увидят свет. Ответа нет - Народ, держи статью!

    Описание защиты ArtMoney и алгоритма лицензионного ключа​

    Протектор/упаковщик: программа упакована AsPack'ом. Этот упаковщик снимается на ура многими статическими/динамическими распаковщиками, поэтому распаковка трудностей не вызвала.

    Общее описание алгоритма: алгоритм продуман просто суперски!
    Восстановление зашифрованного участка памяти (обычный XOR, но каждый байт - двумя символами из ключа (50 символов), что требует шести точных комбинаций: какой байт надо-какой байт есть, для определения этих символов). Этот ключ шифруется так, как написано в след. абзаце.
    Все данные пользователя кодируются другим алфавитом, т.е. определенной букве русского алфавита соответствует определенная буква алфавита программы (ну и для английского алфавита тоже используется свой алфавит).
    Но не все так просто с данными пользователя. Все символы зависят от третьего символа (его позиции в алфавите программы). Ну и в конце (2 символа) контрольная сумма ASCII-кодов всех предыдущих символов, тоже записанная согласно алфавиту.

    Загрузил?=) Ничего страшного, я попробую все расписать дальше подробнее.

    Алгоритм в подробностях​

    Алфавит:
    Английский алфавит для расшифрованных символов:
    Русский алфавит для расшифрованных символов:
    Основная процедура расшифровки символов ключа в программе (обратную составить не трудно):
    Код:
    1. Находится позиция искомого символа в алфавите;
    2. От этой позиции отнимаем позицию третьего символа ключа в алфавите (смотрите третий пункт основного описания);
    3. Если эта разность меньше нуля, прибавляем к ней 3C (шестнадцатеричное);
    4. Если в четвертом символе (смотрите четвертый пункт основного описания) указано, что используется русский алфавит, берем из русского алфавита символ с позицией равной сумме в пункте 3, иначе - из английского;
    
    Основное описание алгоритма:
    1. Первый символ ключа: буква A (для английской версии), или B (для русской);
    2. Второй символ меняется от версии к версии. В текущей (7.38) - это 5 символ из алфавита;
    3. Случайный символ из алфавита;
    4. Четвертый символ определяет "русскоязычность/англоязычность" ваших данных:
    Цифра кодируется так, чтобы при расшифровке процедурой расшифровки получить эту цифру.
    5. Далее идет зашифрованный регистрационный номер пользователя. Он должен быть больше либо равен 1000 и меньше либо равен 99000. Шифруется так, чтобы получить при расшифровке регистрационный номер. После каждой цифры ebp3c увеличивается на 1 (в самом начале эта переменная содержит значение 5);
    6. После номера идет закодированный символ | , но закодирован он немного не так, как остальные символы. Разница только в том, что теперь процедура расшифровки выглядит так:
    Код:
    1. Находится позиция искомого символа в алфавите;
    2. К этой позиции прибавляем позицию третьего символа ключа в алфавите (смотрите третий пункт основного описания);
    3. Если эта сумма больше 3C, отнимаем от нее 3C (шестнадцатеричное);
    4. Берем символ из основного алфавита, который находится на позиции на один меньшей, чем разность в пункте 3.
    
    7. Далее идут 10 символов строки, которой зашифрована память. В каждой версии это новая случайная строка. Но я приведу алгоритм, по которому она расшифровывается:
    Код:
    function Temp(const Line: string; dl: byte): string;
    var
      c: char;
      cnt: byte;
    begin
      result:='';
      cnt:=dl;
    
      while cnt>0 do
      begin
      c:=translate(Line[ebp3c+1],False);
      result:=result+c;
      Inc(ebp3c);
    
      if d3e4>ebp3c then
      Dec(cnt)
      else
      Exit;
      end;
    end;
    //Line - это строка, которую мы расшифровываем. В данном случае это строка для расшифровки памяти.
    //dl - длина строки, в данном случае 10 символов
    //translate - основная функция расшифровки
    //ebp3c -  перед шифровкой оно равно 5. при шифровании каждой буквы увеличивается на 1
    //Второй параметр False в функции Translate означает, что символы кодируются английские
    //d3e4 - равно 84 в хексе, не меняется
    
    В итоге мы получаем строку из расшифрованных символов, которыми дальше будет расшифровываться память (подробнее распишу дальше)
    8. После расшифровки ebp3c увеличивается на 1;
    9. Дальше идет зашифрованное ФИО. Расшифровывается оно так же, как и регистрационный номер;
    10. Теперь идут следующие 10 символов строки для расшифровки памяти;
    11. Потом город пользователя. Расшифровывается так же, как и ФИО;
    12. Страна пользователя. Она указывается двумя символами международного сокращения этой страны. Например, Россия - ru, Беларусь - by, Украина - ua, и т.д. Расшифровывается она той же процедурой, что и символы строки для расшифровки памяти;
    13. Еще 10 символов для расшифровки памяти;
    14. Электронный ящик (расшифровывается так же, как и ФИО);
    15. Четвертый кусок из 10 символов для расшифровки памяти;
    16. Шестизначное число. Можете использовать 123456. Видимо внутренний номер для проверки валидности саппортом;
    17. Последний пятый кусок строки расшифровки памяти;
    18. Два символа контрольной суммы всех предыдущих символов. Считается так:
    Код:
    1. Складываются ASCII-коды символов.
    2. Если сумма больше FF (хекс), то делим ее нацело на 4 до тех пор, пока она не станет меньше FF.
    3. Преобразовывается полученное значение в HEX (например, мы получили AB), буквы делаются маленькими (ab), и каждая из букв расшифровывается основной процедурой расшифровки. Полученные буквы должны быть равны двум последним буквам ключа.
    Расшифровка памяти​

    В программе имеется A3C (хекс) зашифрованных байт памяти. Они расшифровываются 50 символами строки для расшифровки памяти, которые мы получали в пунктах: 7, 10, 13, 15, 17 (эти строки склеиваются).
    Каждый байт расшифровывается двумя символами этой строки. При достижении конца строки для расшифровки, берется опять первый символ и т.д., пока не конец зашифрованного участка памяти.
    В результате мы получаем рабочий код программы, который должен выполниться, после применения ключа для отображения главной формы и прочего барахла.

    Итог​

    Алгоритм очень крутой! Мне понравилось его исследовать! Хочется высказать благодарность его разработчикам. Вот чтоб еще саппорт был таким же...

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

    Не стоит оставлять сообщения о взломе вашего продукта без внимания. А уж тем более игнорировать их.
    Используйте в исключительно ознакомительных целях!​

    Автор: Аноним (ник изменен)​
     
    Последнее редактирование модератором: 15 фев 2012
    8 фев 2012
    8 пользователям это понравилось.
  2. Angel
    Angel Guest
    несмотря на то что статья от 8 февраля, я набрёл на неё буквально только что.
    хочется увидеть автора этого поста, чтобы пожать ему руку ведь проделанный им труд поистине титанический!
    от себя хочу добавить что полностью с ним соглашусь в вопросах сапорта, если к тебе относятся по человечески то и хочется идти на диалог, общаться итп, а если как к серому стаду баранов, с которого можно тупо стричь капусту то уж нет - увольте!
     
    15 май 2012
  3. Dr. MefistO
    Dr. MefistO Крывіч Глобальный модератор
    Симпатии:
    90
    5 авг 2012
    1 человеку нравится это.
  4. Dr. MefistO
    Dr. MefistO Крывіч Глобальный модератор
    Симпатии:
    90
    Продолжение банкета

    Пришло на мыло от автора блога:
    ВРЕМЕННО УДАЛЕНО. БУДЕТ НЕМНОГО В ДРУГОЙ ИТЕРАЦИИ ОПУБЛИКОВАНО АВТОРОМ БЛОГА.
     
    Последнее редактирование: 6 авг 2012
    6 авг 2012
Загрузка...