De. De, зато открывает оперативный простор для использования дизассемблера, дляудобства и ускорения работы добавим к нему отладчик. Использование именно IDA не принципиально, но предпочтительно, хотя я и неиспользовал механизм FLIRT для анализа в полном объеме в смысле ограничилсятолько сигнатурами Borland C Compiler, входящими в поставку Иды по дефолту,сигнатуры Delphi 7 было лень искать. Я не слишком большой специалист по Delphi,но интуиция подсказала, что окно регистрации выводится какой либо ООП процедуройиз разряда Create. WindowFormDialog. Только прежде, чемэтим заниматься, нужно посмотреть адрес точки входа распакованной программы вдизассемблере 0. Подсмотрев адрес возврата мы получим функциюосновного модуля, которая показывает нам регистрационную форму sub. По перекрестной ссылке видно, чтовызывается эта функция только из стартовой процедуры, причем вызову предшествуетпроверка равенства некоторой глобальной переменной назовем ее Registration. Flagнулю CODE 0. A cmp ds Registration. Flag, 0. CODE 0. Анализируем алгоритм преобразования кода при проверке CODE 0. DAD push offset a. Проведение диагностики вручную с помощью бланков и накладных ключей. Подскажите, можно ли отправить из психометрика инфу. ОБЩИЕ СВЕДЕНИЯ middot ИСТОРИЯ СОЗДАНИЯ middot УСТАНОВКА и ЭКСПЛУАТАЦИЯ middot ОБЛАСТИ ПРИМЕНЕНИЯPsychometric Expert легко настраивается под. Программное обеспечение Psychometric Expert представляет собой многофункциональную диагностическую систему, предназначенную для. Md. 33. 33. 3a. Интересующая нас часть Info. Этот блок кода получает ID процессора припомощи инструкции CPUID и складывает результат с константой. CODE 0. 06. 39. 0C1 call Get. Raw. Comp. Code. CODE 0. C6 add eax, 3. 97. Bh. Поскольку внутри себя процедура содержит большое количество незначимого кода,вот мой вариант этой функции она же первая функция в проекте генерациирег кода INT Get. Raw. CodeVOID. В случае же равенства первогокода серийника символу. Воспроизведениеэтого, думаю, также не встретит каких либо серьезных препятствий. Далее для строк с регистрационным кодом и серийником вызывается функция,которую я назвал Change. Symbols, что понятно из ее алгоритма. Вот ее вызов CODE 0. B mov edx, ds lp. ACode. Global. CODE 0. Name. Global. CODE 0. Полнаяреконструкция алгоритма для рег кода выглядит так VOID Changhe. Reg. Code. SymbLPSTR lpsz. Buff. Полная реконструкция этойфункции VOID Change. Comp. Code. SymLPSTR lpsz. Str. У них их, видите ли, аж пять вариантов поставки как у. Ford Mondeo, алгоритм смены символов в рег коде, кстати, также зависит откомплектации. Следующий блок кода манипулирует уже непосредственно с рег кодом CODE 0. ACode. Global. CODE 0. Такимобразом, предварительный формат рег кода выглядит так хххххх хх. Алгоритм полностью обратим. Ну и наконец то, для чего это все делалось CODE 0. Name. Global. CODE 0. D mov eax,. Алгоритм его генерации вполне очевиден достаточно использовать функции,описанные выше, при вычислении поля у. Сгенерировав регистрационный код по описанной схеме, подставив вместо точекпару случайных символов например. Психа и запустимего. Он будет прекрасно пахать, откликаясь на все наши нажатия кнопок и пунктовменю, предоставляя полный доступ к своему основному функционалу, но закрывего и перезагрузив мы снова увидим наглое окно с требованием регистрации. Вотнезадача. Все ясно, мы не полностью сгенерировали номер, в каком то другомместе проверяется остальная часть, которая при обнаружении хака снимаетрегистрацию. Как можно найти место проверки Элементарно. Обычным поискоминструкции CPUID убеждаемся, что нужна она только знакомой нам функции. Get. Raw. Code, по перекрестным ссылкам к которой мы увидим еще шесть процедур, изкоторых она вызывается. Проанализируем одну из них по адресу 0. AD8. 4 назовемее Checkregistration. CODE 0. 05. 2AF1. B call Get. Raw. Comp. Code. CODE 0. 05. AF2. 0 mov edi, eax. CODE 0. 05. 2AF2. Bh. CODE 0. 05. 2AF2. CODE 0. 05. 2AF2. A call Get. Raw. Comp. Code Лучше посмотрим, откуда берутся случайные параметры. RTime, RData и. RName мы без труда обнаружим в том же Info. А вот RSize, похоже, являетсяэкспортируемой глобальной переменной класса регистрации, которая рассчитываетсяпри инициализации в конструкторе класса, поэтому ее придется поискать, благоразработчик хорошенько наследил. По перекрестной ссылке находим откудавызывается Check. Registrarion. 1 CODE 0. F mov edx,. Сгенерировать его методом брута посхеме whileresultlt 0xffff. Это избавляет юзверя от проблем скопированием туда сюда, а результат такой же. К тому же экзешник при этом нетрогается а значит все вполне в юридических рамках, хотя это дело вкуса. Пример достаточно неплохой для новичка, как мне кажется. Хороший опыт пореверсу ООП кода, простой упаковщик и не слишком сложный алгоритм проверки. Новот привязка к аппаратуре убила коммерческую реализацию этого проекта принемалой стоимости лишать себя возможности апдейта компа захочет не каждыйпсихолог хотя я лично не психолог и что именно делает эта програмулина, хотьубей, не пойму. Так устроен мир механизм, призванный защитить разработку отзлых хакеров загнал ее в гроб, а от хакеров так и не уберег. Сестринское Дело В Дерматовенерологии: Учебник Л.Н.Хмыз. P. S. Кстати, варианты замены символов рег кода в зависимости от комплектации. Психа реализованы именно в функции, вызывающей Init. Rsize, думаю в них несложнобудет разобраться самостоятельно.