1. Теперь за форумную активность начисляются биткоины и другие криптоденьги. Подробнее.
    Скрыть объявление
  2. Появилась архивная версия форума arhiv.xaker.name, где собраны темы с 2007 по 2012 год.
    Скрыть объявление

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

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

  1. ArtMoney
    ArtMoney VIP Продвинутый
    Симпатии:
    8
    Доброго дня, товарищи форумчане!

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


    После многократных неудачных попыток осилить защиту 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 Новичок
    Симпатии:
    0
    несмотря на то что статья от 8 февраля, я набрёл на неё буквально только что.
    хочется увидеть автора этого поста, чтобы пожать ему руку ведь проделанный им труд поистине титанический!
    от себя хочу добавить что полностью с ним соглашусь в вопросах сапорта, если к тебе относятся по человечески то и хочется идти на диалог, общаться итп, а если как к серому стаду баранов, с которого можно тупо стричь капусту то уж нет - увольте!
     
    15 май 2012
  3. Dr. MefistO
    Dr. MefistO Крывіч Глобальный модератор
    Симпатии:
    125
    5 авг 2012
    1 человеку нравится это.
  4. Dr. MefistO
    Dr. MefistO Крывіч Глобальный модератор
    Симпатии:
    125
    Продолжение банкета

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

Поделиться этой страницей

Загрузка...