рефераты конспекты курсовые дипломные лекции шпоры

Реферат Курсовая Конспект

SetTimer

SetTimer - раздел Информатика, NAG SCREEN 18C Is Iconic 195 Killtimer B7 Enablewindow 146 Ge...

18C Is Iconic

195 KillTimer

B7 EnableWindow

146 GetSystemMetrics

19E LoadIconA

Попробуем найти код, который вызывает SetTimer, для чего установим на последнюю точку останова:

015F:004013CD MOV ЕАХ, [ESI+20]

015F:004013DO PUSH 00

015F:004013D2 PUSH 00002710

015F:004013D7 PUSH 01

015F: 004013D9 PUSH EAX

015F:004013DA CALL [USER32! SetTimer]

015F:004013EO MOV ECX, [ESP+OC]

015F:004013E4 MOV DWORD PTR [ESI+60],00000000

Очевидно, что, удалив CALL tUSER32!SetTimer] вместе с заносимыми в стек параметрами, можно полностью парализовать защиту. Ветка вывода диалога попросту никогда нс получит сообщения WM_TIMER и. следовательно, управле­ния. Анализ защиты можно считать завершенным. Как видим, сушестнует не один путь ее взлома. И любой способ ничем не хуже другого.

Рассмотрим еще один похожий пример file://CD:SOURCEVCCRACKOC RELEASEcrackOC.exe. Первым бросающимся в глаза отличием является NAG-Screen, всплывающий при первом запуске программы. Очевидно, что его появле­ние связано не с таймером, а с процедурой инициализации приложения. Другое (более существенное) отличие можно увидеть, если запустить spyxx или изучить таблицу импорта. Нет сообщения WM_TIMER, и нет в импорте процедуры SetTiiner. Очевидно, приложение ухитряется с высокой периодичностью вызывать nag-screen не используя таймера. Самый очевидный способ это сделать — постоянно опрашивать текущее время и через некоторые промежутки передавать управление защите. Разумеется, организовать подобное можно либо непосредст­венно в цикле выборки сообщений, либо в отдельном потоке. По опыту могу сказать, что разработчики защит чаще всего предпочитают последнее. В чем можно убедиться, запустив 'Process Viewer Application', который входит в поставку MS VC.

Приложение имеет два потока. Вполне возможно, что один из них целиком принадлежит защите и не делает ничего кроме постоянного опроса времени. Для подтверждения этого нам нужно изучить код потока и проанализировать его. Установим точку останова на CreateThread. Разумеется, приложение не вызывает его непосредственно, а действует через MFC. Но сейчас это для нас не важно. Вспомним прототип функции CrealeThread или обратимся к SDK:

HANDLE CREATEThread (

LPSECURITY_ATTRIBUTES lptthreadAttributes, //pointer ti security attributes

DWORD dwstackSize, //initial thread stack size

LPTHREAD_START_ROUTINE lpStartAddress, //pointer to thread function

LPVOID lpparameter, //argument for new thread

DWORD dwcreationflags, //creation flags

LPDWORD lpthreadId //pointer to receive thread ID );

Таким образом, адрес процедуры потока можно узнать с помощью команды D ss:esp+OC и последующего дизассемблирования. Разумеется, это будет _beginth-readex модуля MSVCRT. Однако, немного потрассировав последнюю, можно добраться и до кода приложения. Здесь не помешает небольшой опыт работы с MFC и ее исследования. MicroSoft предоставляет отладочные версии и даже исходные тексты, поэтому архитектуру MFC изучить нетрудно, но очень и очень полезно. То же самое можно отнести и к другим компиляторам и библиотекам.

Так или иначе, но найти рабочий код приложения в потоке будет нетрудно. Изучать его непосредственно в отладчике затруднительно и неудобно. Дизассем­блер в этом отношении окажется более подходящим. Рассмотрим результат его работы.

. text: 00401740 push есх

ЕСХ указывает на экземпляр класса, производного от CWinThread.

.text: 00401741 mov ean, [ecx+6Ch]

.text: 00401744 push esi

.text: 00401745 test eax, eax

Очевидно, что [ecx+6Ch] какой-то флаг. Но какой? На данном этапе это еще не ясно.

.text 100401747 push edi

.text:00401748 jz short loc_0_401750

Если этот флаг равен нулю, происходит выход из потока. Он может быть связан или с какой-то ошибкой, или с регистрацией. Так или иначе, если удалить условный переход JZ, поток никогда не получит управления и NAG-SCREEN не появится. Однако, это не будет полноценным взломом, так как при первом запуске программы по-прежнему будет появляться диалог.

.text:0040174A pop edi

.text:0040174B xor eax, eax

.text:0040174D pop esi

.text:0040174E pop ecx

.text:0040174F retn

Остальное тело потока здесь не приводится для экономии места. Его содер­жимое не представляет ничего интересного. Поток — "стрелочник". Ему прика­зали — он выполнил, т.е. вывел диалог. Да, конечно, создание диалога нетрудно и блокировать, но это не даст ответа на вопрос: кто же за всем этим стоит? Убедимся, что этот поток всецело подчинен защите, т.е. ни для чего другого больше не служит.

Собственно говоря, непосредственно к защитному механизму могла относить­ся только переменная [ecx+6Ch], весь остальной код потока полностью автономен и ничем не управляется.

Необходимо найти код, манипулирующий этой переменной. Очень вероятно, что он и будет ядром защитного механизма, который мы пытаемся снять. Однако это потребует анализа, возможно, непростого и утомительного. Не лучше ли просто блокировать вызов диалога, невзирая на то что защита по-прежнему работает, — ведь досадить пользователю она уже не может? Чем плох этот метод? Так (или почти так) думает большинство кракеров. Может быть думает все-таки по другому, но ломает именно так. И в этом трудно их винить, так как рынок требует самых быстрых и дешевых решений. Красиво это решение или нет. заказчика ни в малейшей степени не интересует. Этим и вызвана деградация технической культуры. В наши дни эти слова уже звучат как метафора. Действи­тельно, есть техника, есть культура — а что такое техническая культура?

Сегодня программирование уже перестало быть искусством, и только отдель­ные энтузиасты-одиночки все еще считают его увлекательным хобби, на которое не жалко тратить все свободное время. F-сли вы принадлежите к их числу, то исследование защиты несомненно стоит продолжать, в противном случае можно удалить вызовы AfxMessageBox, чтобы NAG-SCREEN не появлялся ни при запуске, ни в дальнейшем.

Задумаемся над следующим неочевидным моментом. Если защитный меха­низм манипулирует каким-то флагом, вполне естественно, что при каком-то условии программа считается зарегистрированной и эта переменная принимает единичное значение, блокирующее все остальные ветки защиты. (А их, забегая вперед, целых три). Но какое же условие может проверять защита? Никакой явной регистрации в программе не предусмотрено. Из источников ввода остаются только командная строка, ключевой файл и реестр. Первое — давно забытый пережиток MS-DOS и в Windows массового применения не нашло. А вот реестр очень даже вероятная кандидатура.

Читатель, вероятно, уже запускает монитор. Посмотрим, что нам даст его применение: 43 CrackOc OpenKey HKCUSOFTWARECRACKOCRegIt NOTFOUND

В самом деле, защита пыталась открыть явно относящийся к регистрации раздел. Попробуем его создать b запустим программу еще раз.

О чудо! Программа признала нас зарегистрированным пользователем! Исчезли NAG-SCREEN-ы. изменилась строка с "Ждите..." на "больше не появится...". Вот что значит качественный взлом!

Конечно, реальные защиты не только проверяют существование раздела, но и проверяют его значение. Здесь же для упрощения этого не делалось. Работа с реестром уже была рассмотрена выше и никаких трудностей не представляет. Более того, даже облегчает нам распространение "кряков" к программе. Доста­точно только экспортировать раздел CRACKOC в файл: запустив его. пользователь импортирует раздел в свой реестр и тем самым регистрирует приложение. Надо ли говорить, что распространение подобного файла никак не противоречит российскому законодательству, а поэтому ограничено быть не может.

Вообще же NAG-SCREEN-ы даже трудно отнести к защитам. Они принципи­ально не могут быть сложно защищены. Все, что нужно, — это удалить одну или несколько процедур, даже не вникая в их алгоритм. Можно, конечно, противодей­ствовать отладке и дизассемблированию, но сегодня совершенство и мощь инструментария хакера позволяют противодействовать любому антиотладочному коду. Интерактивный дизассемблер IDA вообще невозможно обмануть именно в силу его интерактивности, так как предполагается его тесное взаимодействие с человеком. Человека же, в отличие от автоматики, одурачить очень трудно.

 

– Конец работы –

Эта тема принадлежит разделу:

NAG SCREEN

Каждому предоставлена полная свобода выбора — или терпи Nag Screen...

Если Вам нужно дополнительный материал на эту тему, или Вы не нашли то, что искали, рекомендуем воспользоваться поиском по нашей базе работ: SetTimer

Что будем делать с полученным материалом:

Если этот материал оказался полезным ля Вас, Вы можете сохранить его на свою страничку в социальных сетях:

Все темы данного раздела:

NAG SCREEN
Вероятно, до разработчиков защит наконец-то дошел тот малоприятный факт, что на языке высокого уровня чрезвычайно трудно создать что-нибудь устойчивое даже против кракера средней квалификации. Наве

Ограничение возможностей
Многие незарегистрированные версии отличаются тем, что часть их возмож­ностей заблокирована. Если программа предусматривает регистрацию, то обычно больших проблем при взломе не возникает. Совсем др

Text;004015CFp
jmp ds: ?EnableWindow@cwnd@@QREHH@z j_?EnableWindow@cwnd@@QAEHH@z endp Их всего два. Как раз по числу элементов управления. Пока защита не предвещает ничего необычного и ее код вы

Mov dwordptr [esi], offset off_0_4035C8
40139E mov eax, esi 4013A0 pop esi 4013AI retn 4013AI sub_0_401390 endp Становится ясно, что sub_0_401440 — это виртуальная функция CDocu-ment::On3aveDocument()!

Ключевой файл
Настал черед рассмотреть и ключевые файлы. Обычно это самая сложная защита из всех вышеизложенных^ поскольку может сочетать в себе как мощную шифровку, так и недостающие фрагменты кода. Но именно

Способы затруднения анализа программ
Все методы взлома защитных механизмов (за исключением, возможно, крип­тографических) сводятся практически к двум моментам — локализации кода защиты в сотнях килобайт (мегабайт) кода приложения и ан

Приемы против отладчиков
Самым первым отладчиком под MS-DOS был Debug.com фирмы MicroSoft. Совершенно очевидно, что этот инструмент годился разве что для забавы и изучения ассемблера. Но рынок не терпит пустого ме

Приемы против отладчиков реального режима
Чтобы понять, как противодействовать отладчикам реального режима, необ­ходимо изучить сам процесс отладки. 8086 процессор предоставлял для этого одну команду, один флаг и две исключительные ситуаци

J E9 EC EF JMP F125
2298;0139j F2 REPNE Полученный мусор может привести систему к краху, но едва ли будет нормально выполняться. При этом защитный механизм настолько "размазан" по коду, что обнаружи

Приемы против отладчиков защищенного режима
Позже появился 80286 (с точки зрения хакера мало чем отличавшийся от своего предшественника), а вслед за ним и 80386, принесший принципиально новые возможности отладки. Точнее, "принципиально

Технологии эмуляции процессора
На заре компьютерной истории, когда общение с майнфреймами велось исключительно на уровне машинных кодов, уже существовали эмуляторы. В первую очередь это было связано с необходимостью выполнять ко

Дизассемблирование в уме
"— Мне известны политические аргументы. — Но меня интересуют человеческие доводы." Ф. Херберт. "Мессия Дюны". Очень часто под рукой не оказывается ни отладчика,

Структура команд INTEL 80х86
"— Потому ты и опасен, что ояладел своими страстями." Ф. Херберт. "Мессия Дюны". Дизассемблирование (тем более в уме) невозможно без понимания того, как процессо

Add b, [00100],002
00000105: 00B406B2 add [si][OB206],dh | ----------ip Т.е. текущая команда станет на байт короче! И "отрезанный" ноль теперь — часть другой команды! Но при выпол

Есть базирование если 2bit=1 то 0 –BP, 1 - BX
если 3bit=0 то 0 –база BX, 1 – база BP если 3bit=1 то 0 –индексный регистр 1 - базовый Возможно, кому-то эта схема покажется витиеватой и трудной для запомина­ния, но зубрить все

В4 ОЭ БД 77 01 CD 21
Вот она! Но что представляет собой опкод ОхВА? Попробуем определить это in трем младшим битам. Они принадлежат регистру DL(DX). А ОхВ4 0х9 — это шоу АН,9. Теперь нетрудно догадаться, что оригинальн

F2 AC 02 EO E2 FB BE 3В 01 30 24 46 61
Чтобы превратить его в знаковое целое, необходимо дополнить его до нуля (операция NEG, которую большинство калькуляторов не поддерживают). Тот же результат мы получим, если отнимем от 0х100 указанн

Маленькие хитрости
"Главная часть дисциплинирующей выучки — это ее сокрытая часть, предназначенная не освобож­дать, но ограничивать." Ф. Херберт. "Еретики Дюны". Хорошо, если в ваш

Х1 0х2 0х4 0х8 0х10 0х20 0х40 0х80
Причем все математические операции с такими круглыми числами делать^ уме на порядок проще, за что я и люблю шестнадцатиричную систему счисления. Разумеется, описанные приемы ни для кого не должны б

Ассемблирование в уме
"Ничто не превосходит по сложности человече­ский ум." Ф. Херберт. "Еретики Дины". Мы уже проделали титаническую работу, дизассемблировав в уме крохотный файл в п

Int 021
Дело в том, что указанным способом невозможно ввести с клавиатуры символ #8. А смещение строки как раз и есть 0х108. Чтобы избавиться от восьмерки, можно было бы, конечно, исполнить следующую после

B90123 456789
1111 111111 MOV DX, 0х100+2+2 ; OxlOO-адрес загрузки, 2 длина MOV АН, 9, 2 длина jmp JMP SHORT $+20 — резервирует 20 символов для строки. Предполагается, что этого окажется достат

Маска отображения файлов —*
Вообще навигатор очень напоминает Norton Commander, и общение с ним проблем вызвать не должно. На всякий случай я все же опишу назначение клавиш управления: Alt-FI (Drive)

Text 00000452 |D:KPNCHIEWDEXEM.EXE
При этом кроме собственно имен сохранятся текущий режим и позиция курсора (что особенно приятно). Последнее позволяет использовать HIEW для чтения больших текстовых файлов (электронных книг, докуме

Ассемблер
"Убийство острием лишено артистизма. Но пусть тебя это не останавливает, если плоть, раскрываясь, сама себя предлагает." Ф. Херберт. "Дюна". Пере

Дизассемблер
Дизассемблер в HIEW великая вещь. фактически это основной режим работы хакера. Не то чтобы некоторые ленились дизассемблировать в уме hex-коды, (что, скажем, частенько приходится делать при работе

Adc dh,[si]
……………….. 00000104:xxxx Разница в том, что ссылка во втором случае указывает "в космос", но никак не на переменную 0х4. Это можно исправить, указав HIEW-y вручную начальное

Adc dh, [si] <—
00000106: 0100 add [bx] [si], ax 00000108: E3F7FF call 000000102-------- (i) И все ссылки при этом работают правильно. Заметим, что базирование никак не влияет на

Манипуляции с блоками
"Соединение невежества и знания, соединение ди­кости и культуры — не начинается ли оно с того чувства достоинства, с которым мы относимся к своей смерти?" Ф. Хербер

Поддержка LE/PE/NE/LX/NLM-ФОРМАТОB
"Понятие прогресса, служит защитным механиз­мом, отгораживающим нас от ужасов будущего." Ф. Херберт. "Дюна". Вообще-то шестнадцатиричный редактор идеологически д

Калькулятор
"Врагу, которым восхищаешься, легче вселить в тебя ужас" Ф. Херберт. "Дюна". Необходимость встроенного калькулятора сегодня сомнений ни у кого не вызывает. Хакер

Калькулятор
"Врагу, которым восхищаешься, легче вселить в тебя ужас" Ф. Херберт. "Дюна". Необходимость встроенного калькулятора сегодня сомнений ни у кого не вызывает. Хакер

Калькулятор
"Врагу, которым восхищаешься, легче вселить в тебя ужас" Ф. Херберт. "Дюна". Необходимость встроенного калькулятора сегодня сомнений ни у кого не вызывает. Хакер

Крипт-система
"Не считай человека мертвым, пока не увидишь его тело. И даже тогда ты можешь ошибиться." Ф. Херберт. "Дюна". Уникальность HIEW-a прежде всего в том, чт

Описание файла HIEW.INI
"— Осторожность — важное качество для чело­века, который будет вождем." Ф. Херберт. "Дюна". HIEW хранит часть настроек в ini-файле, который немного напоминает од

JumpTable]
Задает таблицу переходов по call/jmp в дизассемблере. По умолчанию она выглядит следующим образом: "0123456789ABCDEFGHIJKLMOPQRSTUVWXYZ". При этом первый символ — это клавиша отката, т.е.

Хотите получать на электронную почту самые свежие новости?
Education Insider Sample
Подпишитесь на Нашу рассылку
Наша политика приватности обеспечивает 100% безопасность и анонимность Ваших E-Mail
Реклама
Соответствующий теме материал
  • Похожее
  • Популярное
  • Облако тегов
  • Здесь
  • Временно
  • Пусто
Теги