░▒▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▒░ ░▒▓████████████████ Hacker Dreams ███████████████▓▒░ ░▒▓█ SnapShot Professional 3.0 █▓▒░ ░▒▓█ CopyRight 1994 DaLe Co. █▓▒░ ░▒▓█ (0512)20-15-20 █▓▒░ ░▒▓██████████████████████████████████████████████▓▒░ ░▒▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▒░ Предлагаемый Вашему вниманию ToolKit "Hacker Dreams v3.0" служит для избавления пользователя от необходимости носить с собой ключевую диске- ту или ключевой компьютер для того чтобы иметь возможность изредка запус- кать какую-либо защищенную программу. Данная система была опробована и оттестирована со всеми доступными мне в настоящий момент системами защиты от копирования пристыковочного типа, в том числе и с оверлеями (шифрованными) : - Super Guard - Hota - Shield - Convoy - Cerberus - AntyCop - CopyLock II (& модифицированный) - и чёй-та там ещё Со всеми этими защитами она показала вполне удовлетворительный ре- зультат, что позволяет предполагать ее работоспособность и универсальность к остальным системам подобного рода. Главным элементом данной системы является маленькая программка SnapShot.com, которая несмотря на свой Tiny size обладает Large possibility. Ее функция - сдирание защиты с файла и получение работоспособ- ного EXE файла. Физика данного процесса такова : перехватывая первое прог- раммное прерывание, вызванное программой после отработки защиты, мы можем аккуратно снять дамп памяти с уже расшифрованным кодом нашей (здесь и дальше можете читать - Вашей) программы. Первый этап нашей работы по сня- тию - нахождение этого самого первого прерывания. Это делается при помощи Quaid Analyzer'а. Не буду вдаваться в подробности работы с этой системой - этому посвящена соответствующая документация, замечу лишь одно - все прог- раммы написанные на C/C++ и откомпилированные компилятором любой фирмы од- ной из первой командой проверяют версию DOS : B4 30 mov ah,30h CD 21 int 21h Для MicroSoft C это вообще первые команды, Borland С имеет еще па- ру-тройку команд перед этим, но точка входа у него, как правило 0:100h или 0:0. Turbo Pascal в точке старта имеет один или несколько дальних вызовов типа : 9a 0000 XXXX call Seg1:0000h 9a 0000 XXXX call Seg2:0000h и т.д. и в первом дальнем call выполняет считывание некоторого вектора : B4 35 mov ah,35h CD 21 int 21h По этой причине снятие защиты с Pascal'я несколько сложнее, так как труднее найти точку входа. |||||||||||||||||| В данной версии программы предусмотрен автоматизированный алгоритм восстановления первоначальных значений CS:IP и SS:SP. Он представляет со- бой следующее: вы задаете смещения в стеке ломаемой программы, по которым находятся IP и CS, а также алгоритм обработки IP (например, из IP нужно вы- честь 4 для MS C, чтобы IP указывал на точку входа в программу). Та же участь постигла регистры SS и SP. Неискушенному пользователю может пока- заться, что это значительно усложняет процесс снятия защиты и что гораздо лучшим был вариант SnapShot 2.2, где достаточно было указать только тип компилятора или, еще проще, - берешь Intruder, запускаешь его и усё. Мне же кажется, что крэканье программ - занятие не для профанов и в этом случае необходим соответствующий инструмент с как можно большими функциональными возможностями, а не с максимально удобным сервисом. К тому же мной было найдено большое количество программ, которые невозможно было подогнать под какие-либо стандартные рамки и в этом случае неудобство с заданием алгорит- ма обработки CS и IP спасало положение. Исходя из этих же измышлений автор не стремился к красочному интерфейсу. Для облегчения решения задачи построения алгоритма обработки IP и CS создается специальный файл состояния регистров на момент снятия дампа и адреса загрузки обеих дампов. Из всей представленной информации наибольший интерес представляют CS:IP, SS:SP и оба столбика состояния стека. SS там, скорее всего, выставлен верно, требует совсем небольшой коррекции регистр SP,а CS:IP получают путем анализа содержимого стека и изучения куска прог- раммы, загадившего этот стек. После нахождения прерывания и снятия дампа с кодом программы возни- кает проблема с восстановлением элементов перемещения. Ее решение дости- гается при помощи еще одного дампа программы, загруженной уже по другому адресу. Два этих дампа будут отличаться в конечном числе слов (для непосвя- щенных - это два соседних байта) на одинаковую величину, равную разнице ад- ресов загрузки. Отсюда очевиден алгоритм получения Table Relocation и кор- рекции одного из дампов. ╔════════════════════════════════════════════════════════════════════════╗ ║ Важнейшим достоинством данной программы, отличающим ее от аналогов (ко-║ ║ торые были сделаны, скорее всего, по ее образу и подобию - об этом го-║ ║ ворят сроки появления оных и ссылки на SnapShot) - это возможность сни-║ ║ мать защиту с программ со встроенными оверлеями, в том числе и тогда,║ ║ когда оверлей тоже зашифрован. О 100% снятии защита с таких программ║ ║ кричать не буду - возможны всякие варианты загрузки оверлея в память,║ ║ отмечу лишь то, что с Turbo C, MS C снималась защита успешно. ║ ╚════════════════════════════════════════════════════════════════════════╝ Также в данной версии программы введен еще один параметр: "заполни- тель". Необходимость его заключается в следующем : порой в коде программы попадаются куски данных по характеру напоминающие заполнение оперативной памяти перед запуском программы и SnapShot в этом случае принимает невер- ное решение о длине программы. В этом случае рекомендуется подбором опреде- лить подходящий заполнитель. Небольшой совет-тест : длина сломанной прог- раммы никогда не может быть меньше исходной защищенной. Небольшое описание SnapShot : ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ Для работы программы необходим файл конфигурации, имя которого мож- но указать в командной строке. По умолчанию принимается имя SnapShot.CFG. Параметры в файле конфигурации имеют следующие назначения (в одинарной рам- ке помечены значения, принимаемые по умолчанию) : a) ╔═════════╗ ║ Program ║ a:\path\NAME.EXE ╚═════════╝ - ломаемая программа b) ╔═══════════╗ ║ Parametrs ║ /1 /2 -a -b ╚═══════════╝ - параметры командной строки ломаемой программы (необходимы только в том случае, если данные параметры требует защита) - отсутствие данной строки в файле конфигурации означает, что пара- метров командной строки нет c) ╔═══════════╗ ┌────┐ ║ Interrupt ║ │ 21 │ ╚═══════════╝ └────┘ - по какому прерыванию d) ╔══════════╗ ┌────┐ ║ Function ║ │ 30 │ ╚══════════╝ └────┘ - по какой функции e) ╔═════╗ ┌──────┐ ║ Top ║ │ FFFF │ ─┐ служат ╚═════╝ └──────┘ │ для - вершина памяти │ определения │ области, f) ╔════════╗ ┌───┐ │ где ловить ║ Bottom ║ │ 0 │ │ необходимое ╚════════╝ └───┘ │ прерывание - нижняя граница памяти ─┘ Верхняя и нижняя границы памяти определяют тот промежуток памяти (сег- менты) относительно PSP, где должно отлавливаться прерывание для снятия дампа. g) ╔════════╗ ┌───┐ ║ Number ║ │ 1 │ ╚════════╝ └───┘ - номер вызова h) ╔═════════╗ ┌────┐ ║ Exclude ║ │ No │/1234 ╚═════════╝ └────┘ - исключить из подсчета номера вызова вызов по этому адресу (IP) - "No" - не исключать ничего i) ╔══════╗ ┌────┐ ║ Fill ║ │ DE │ ╚══════╝ └────┘ - заполнитель j) ╔════╗ ┌───┐ ║ CS ║ │ 2 │ ╚════╝ └───┘ 1) значение для вычисления регистра _CS_, означающее смещение в стеке (из полученного слова вычитается адрес загрузки) _CS_ =(SS:[SP][+данное значение]-PSP) здесь SS:[SP] означает значение взятое из стека ломаемой программы 2) "No" - взять текущий _CS_ = CS-PSP где CS - сегментный регистр ломаемой программы k) ╔═════════╗ ┌───┐ ║ StackIP ║ │ 0 │ ╚═════════╝ └───┘ - значение для вычисления регистра _IP_, означающее смещение в стеке (из полученного слова вычитается адрес загрузки) StackIP = (SS:[SP][+данное значение]) здесь SS:[SP] означает значение взятое из стека ломаемой программы l) ╔═════════╗ ┌───┐ ║ DeltaIP ║ │ 4 │ ╚═════════╝ └───┘ - значение для вычисления регистра _IP_ по следующей формуле _IP_ = StackIP - DeltaIP m) ╔════╗ ┌───┐ ║ SS ║ │ 0 │ ╚════╝ └───┘ - алгоритм вычисления регистра _SS_ _SS_ = SS - PSP + данное значение n) ╔════╗ ┌───┐ ║ SP ║ │ 6 │ ╚════╝ └───┘ - алгоритм вычисления регистра SP _SP_ = SP + данное значение o) ╔═════════╗ ┌─────┐ ║ Overlay ║ │ Yes │/No ╚═════════╝ └─────┘ - копировать ли оверлеи при их наличии p) ╔═══════╗ ┌─────┐ ║ Cript ║ │ Yes │/No ╚═══════╝ └─────┘ - копировать ли оверлеи с раскриптовкой r) ╔════════╗ ┌────┐ ║ Delete ║ Yes/│ No │ ╚════════╝ └────┘ - стирать ли служебные файлы (данный параметр был введен лично для CreaSoft'а) Примеры заполнения файла конфигурации : ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1) Turbo Pascal interrupt 21 function 35 cs 8 stack_IP 6 delta_IP 5 sp a 2) Turbo C (com) interrupt 21 function 30 cs 2 stack_IP 0 delta_IP b 3) Turbo C (exe) interrupt 21 function 30 cs 2 stack_IP 0 delta_IP c 4) MicroSoft C = Clipper interrupt 21 function 30 cs 2 stack_IP 0 delta_IP c 5) Clipper (overlay) /тестировалось на 1С:Бухгалтерии-Профи 2.0/ interrupt 21 function 30 cs 2 stack_IP a delta_IP 3 sp c 5) для 1С:Бухгалтерии-Профи 2.0 (bmp.com(с защитой) вызывает bmp.exe(зашифрованный с оверлеем)) interrupt 21 function 30 number 2 cs 2 stack_IP a delta_IP 3 sp c (без утилиты реконструкции - отдельно скопировать оверлей) После окончания работы программы остаются следующие служебные файлы : SnapShot.Tm1 ─┬─ два файла дампов SnapShot.Tm2 ─┘ SnapShot.Log - состояние регистров SnapShot.Rel - EXE заголовок и Table Relocation SnapShot.Crk - файл чистого кода SnapShot.Vp0 ─┬─ два файла дампов таблиц векторов SnapShot.Vp1 ─┘ ╔═══════════════════╗ ║ Sincerely yours, ╚════════════╗ ╚═══════════════╗ DaLe. 05.12.94 ║ P.S. ╚════════════════╝ ~~~~ Право на копирование данной программы автор оставляет за собой. Поэтому в свободное распространение пускается демонстрационный вариант, в котором отключена возможность копировать зашифрованные оверлеи. В случае получения автором вознаграждения в размере 5 USD (сравните 1C:Бух-Про 2.0 - 120 USD) вы получите полноценную копию SnapShot'a, будете получать все но- вые версии, а также еще несколько полезных утилит : - утилита расшифрования криптованных служебных файлов (например Convoy 3.2 позволяет зашифровать не только исполняемый файл, но и файлы дан- ных к нему). Данной утилитой можно будет раскриптовать также ряд фай- лов к программам со встроенной защитой; - утилита реконструкции крякнутого файла поможет вам приблизить его размер к размеру оригинала и в ряде случаев решить проблему с нестандартными способами защиты (пример 1C:Бух-Про 2.0 : bmp.com(с защитой) вызывает bmp.exe(зашифрованный с оверлеем)) Материальная поддержка позволит автору продолжить работу над данной программой и создать полновесный инструмент для вскрывания практически всех возможных пристыковочных защит. Должен заметить, что несмотря на кажущуюся универсальность данной программы, существует достаточно большое количество способов защиты, с которыми SnapShot (а тем более Intruder и AutoHack) пока не может бороться. Автор будет крайне признателен тому, кто предоставит систему защиты Cerberus (имеется ввиду рабочую систему защиты от копирования), а также последнии версии всяких Конвоев и т.д. и т.п. За эту и подобную информацию автор передаст всем участникам парада по рабочей версии SnapShot'а. P.S.S. Немного истории : ~~~~~~~~~~~~~~~~~~~~~~~~~ апрель-май 1992 - 0.0 самая первая версия SnapShot'а совершенно глупым образом сдирала дампы и строила EXE модуль, имела ряд конструктивных недостатков июль 1992 - 1.0 первая и единственная версия 1.0, которая получила распространение имела главный недостаток - не восстанавливала начальные значения CS:IP и SS:SP сентябрь-октябрь 1992 - 1.1 исправлена ошибка с расчетом длины EXE файла - до этой версии PKLITE ругался по этому поводу. Данную версию имело всего нес- колько человек и по-видимому распространения не получила июнь-июль 1993 - 2.0 после длительного перерыва сделана наконец-то обработка для нахож- дения CS:IP и SS:SP сентябрь-октябрь 1993 - 2.1 исправлена очень неприятная, но достаточно редкая ошибка - когда перемещаемый элемент находится на границе сегмента ноябрь 1993 - 2.2 добавлена опция Fill октябрь - ноябрь 1994 - 2.3 к огромному неудовольствию для CreaS0ft'а SnapShot стал генерить на два файла больше - дампы таблиц векторов прерываний до запуска программы, после второго запуска. Но в качестве компенсации за мо- ральный ущерб введена функция для удаления служебных файлов. декабрь 1994 - 3.0 - устранены ряд неточностей в работе программы - значительно ускорены алгоритмы сканирования и построения дампов - в корне изменен алгоритм восстановления CS:IP, SS:SP; - введена обработка файлов с оверлеями, в том числе и зашифрованными - теперь имя файла конфигурации можно задавать в командной строке (очень ценно когда приходится экспериментировать)