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

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

F:00401624 E805030000 call 0040192E

F:00401624 E805030000 call 0040192E - раздел Компьютеры, История хакерства   Если Мы Попытаемся Заглянуть В Процедуру Ох040192Е, То Вероят...

 

Если мы попытаемся заглянуть в процедуру Ох040192Е, то вероятнее всего утонем в условных переходах и вложенных вызовах. Сложность и витиеватость кода наталкивают на мысль, что это библиотечная процедура. Но какая? Дело в том, что отладчик не был правильно настроен и экспортировал только системные функции. Исследуемое приложение активно использует MFC42.DLL, поэтому для загрузки символьной информации о функциях последнего необходимо его явно загрузить. Это делается директивой ЕХР в файле winice.dat. Посмотрим, что у нас получилось:

15F:0040161B 88542414 mov [esp+14], dl

15F:0040161F 8B542414 mov edx,[esp+14]

15F:00401623 52 push edx

15F:00401624 E805030000 call mfc42!ord_03ac

 

Несмотря на то что символьная информация по-прежнему отсутствует, изуче­ние кода значительно облегчилось. По крайней мере, теперь выделены все библиотечные функции. Даже если бы мы не знали, как получить имя через ординал (а мы это уже знаем), все равно объем анализируемого кода значительно бы уменьшился. Вы же не будете исследовать библиотечную функцию? В лю^ом случае можно догадаться о ее назначении по входным и выходным параметрам.

Однако отладчики не предназначены для подробного анализа кода. Гораздо удобнее изучать логику работы программы с помощью дизассемблера. Найти же требуемый фрагмент очень просто. Достаточно вспомнить, что адрес уже изве­стен. Переместим курсор на строку .text:0040161B, для чего в IDA дадим с консоли команду Jump(MbLFP(0,Ox40161B)) и прокрутим экран немного вверх, пока не встретим следующие строки:

.text:004015D3 call j_?GetWindowTextA@CWnd@@QBEXAA

.text:004015D8 mov eax, [esp+4]

.text:004015DC mov ecx, [eax-8]

.text:004015DF cmp ecx, OAh

.text:004015E2 jge short loc_0_4015EF

 

Очевидно, последний условный переход выполняется, когда длина введенной строки больше девяти символов. Для понимания этого необходимо знать, что CStfing хранит свою длину в двойном слове, находящемся до начала строки. Итак, непосредственно относящийся к защите код начинается с адреса Ox40l5EF.

Рассмотрим его:

.text:004015EF loc_0_4015EF:

.text: 004015EF push esi

.text:004015F0 xor esi, esi

.text:0040T5F2 dec ecx

.text:004015F3 test ecx, ecx

.text ;004015F5 jle short loc_0_401636

Это типичный цикл for. Заглянем в его тело:

.text:004015F7 loc_0_4015F7:

.text: 004015F7 mov cl, [esi+eax]

Загрузка очередного символа строки. Поскольку еах — содержит базовый адрес, то очевидно, что esi — смещение в строке. Выше видно, что начальное значение его равно нулю. Логично, что строка обрабатывается от первого до последнего символа, хотя часто бывает и наоборот.

.text:004015FA movsx ax, byte ptr [esi+eax+l]

MOVe and Sign eXtension (пересылка со знаковым расширением) загружает байт в регистр АХ, автоматически расширяя его до слова.

.text:00401600 movsx ex, cl

Обратим внимание на несовершенство компилятора. Эту команду можно было записать более экономно как movsx ex, [esi+eax]

.text: 00401604 imul еах, ecu

Подставим вместо регистров их смысловые значения и получим Stringlidx]*String[idx+l].

.text: 00401607 and еах, OFFFFh Преобразуем еах к машинному слову.

.text.0040160C mov ecx, 20h

.text: 00401611 cdq

CDQ — Convert Double word to Quad word — преобразование двойного слова в счетверенное слово.

.text:00401612 idiv ecx

.text:00401el4 lea ecx, [esp+28h+var_IC]

.text 100401618 add di, 41h

Поскольку 0х41 — это код символа 'А', то, вновь выполнив смысловую подстановку, получим: _dl = (String[idx]*Stringtidx+l]) % 0х20 + 'A T.e автор вычисляет хеш-сумму строки. Обратим внимание, что она будет инъективна для интервала 'А'—'_* и, более того, нечувствительна к регистру!

Этот код можно назвать "кодом черной магии". С первого взгляда не понятно как он работает и чем обусловлена нечувствительность к регистру. Обычно для этого программист сначала переводит все буквы в заглавные и только потом начинает разбор строки. Или делает это на лету явным сравнением типа сгпр хх, 'а'.

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

.text:0040161B mov byte prt[esp+28h+var_14],dl

.text:0040161F mov edx,[ esp+28h+var_14]

.text:00401623 push edx

.text:00401624 call Cstring::operator+=(char)

Очередной перл компилятора. Можно было не вводить локальную перемен­ную, а непосредственно передать dl (предварительно расширив его до двойного слова) в стек. что привысило бы скорость обработки з-л счет избавления от обращений к памяти.

.text:00400162D inc esi

Перемещаем указатель idx на следующий символ в строке.

.text:00400162E mov ecx, [eax-8]

.text:004001631 dec ecx

.text:004001632 cmp esi, ecx

.text:004001634 jl short loc_0_4015F7

Очевидно, чти эти строки также относятся к циклу for. Поэтому уже можно восстановить исходный код генератора.

For (int idx=0; idx>string.GetLength()-1;idx++)

RedCode += ((WORD) sName[a]*sName[a+1]%0x20)+’A’;

Теперь нетрудно написать собственный генератор регистрационных номеров. Это можно сделать на любом симпатичном вам языке, например на ассемблере. На диске находится один вариант (nie://'CD:SOL'RCEVCCRACK04key_gen.asmJ. Без текстовых строк исполняемый файл занимает менее пятидесяти байт и еще оставляет простор для оптимизации. Ключевая процедура может выглядеть так:

Заметим, что в key_gen.asm есть одно несущественное упущение. Он не проверяет минимальную длину строки. Но на деле это не вызывает больших неудобств, зато экономит пяток байт кода.

Генератор успешно работает и вычисляет правильные регистрационные номе­ра. Теперь можно начинать его публичное распространение. Отметим, что послед­нее совершенно не запрещено законом. И ничьих прав не ущемляет. Использова­ние же генераторов все же вызывает конфликтную ситуацию, так как пользователь вводит поддельный регистрационный номер. С другой стороны, это недоказуемо, так как сгенерированные номера ничем не отличаются от настоя­щих. Тем не менее я категорически не советую уповать на это. Лицензионные соглашения пишутся не для того, чтобы их нарушать. Точно так же и создание собственного генератора не должно побуждать к его использованию, отличному от познавательного. Перечислите автору требуемую сумму или откажитесь от использования программы. Истинный хакер так и поступит. В этом и заключается его отличие от кракеров. Хакер по определению первоклассный специалист, который всегда заработает на необходимое программное обеспечение (или, если он действительно хакер, то напишет свое).

Я понимаю, что такая трактовка может встретить возражение. Действи­тельно, зачем что-то ломать, если хакер все равно должен приобретать лицензионный софт? Но разве в этом есть что-то нелогичное? Хакер — это взрослый ребенок, удовлетворяющий свое любопытство. Конечно, очень труд­но, обладая такими знаниями и навыками, удержаться от соблазна нарушить закон. Более того, я не знаю ни одного человека, который поступал бы именно так. Увы, хакерство действительно оказывается тесно связанным с кримина­лом. Это, к сожалению, так.

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

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

История хакерства

На сайте allrefs.net читайте: "История хакерства"

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

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

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

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

О чем эта книга
"... В моем уме не оставалось места для беспокой­ства об успехе или провале книги. Было лишь желание работать над ее созданием." Ф. Херберт. "Еретики Дюны". Эта

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

Лаборатория искусственного интеллекта в США и PDP-1
"Нет четкой грани между богами и людьми: одни переходят в других." Ф. Херберт. "Мессия Дюны". Персонал, обслуживавший правительственные компьютеры, отн

Си и UNIX
"Легкие мои вдыхают ветер времени. Дующий над мертвыми песками..." Ф. Херберт. "Дюна". В 1969 г. усилиями двух талантливых программистов была создана си

Конец хакеров шестидесятых
"Я не должна бояться. Страх убивает разум. Страх — малая смерть, которая приносит полное уничтожение. Я смотрю в лицо моему страху..." Ф. Херберт. "Дюна".

RSX-11M
"Подсмотреть будущее — значит украсть мисти­ческий огонь от священного костра." Ф. Херберт. "Дюна". В начале семидесятых еще никто не представлял себе,

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

Рождение современных хакеров, или снова INTEL
"...он был пропозойским творением, рождение и смерть которого по сути одновременны." Ф. Херберт. "Дети Дюны". Однажды руководство IBM предприняло попытк

Психологический анализ. Что движет хакером
"Инструменты управления государством всегда должны быть остро отточены и готовы к упот­реблению. Власть держится на страхе." Ф. Херберт. "Мессия Дюны".

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

F(Ai) —P--->Aj
Разумеется, только для одного-единственного р мы получим исходную после­довательность Aj, а для всех остальных р — "мусор". Каким способом можно удостовериться в том, что полученная Aj и

С—f---Z
Такая операция дает нам неограниченную гибкость. Элементами перечислен­ного множества могут быть литеры, группы литер, а также целые слова. Таким образом, предложенный алгоритм позволяет полностью

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

Открытые системы
Приведенные выше подходы по существу никакого отношения к криптографии не имеют, поскольку являются закрытыми. Т.е. система содержит в себе и шифротекст и пароль. Утаить пароль в таком случае прост

Как атаковать шифр
При атаке на шифр считается, что криптоалгоритм известен с точностью до реализации и требуется найти пароль. В качестве примера рассмотрим программу crackmeO.com (file://CD:SOURCEA5M_CCRACKmeOCrack

Первый шаг. От ЕХЕ до CRK
Бесспорно, среди существующих на сегодняшний день дизассемблеров луч­шим является IDA. Особенно идеально он подходит для взлома и изучения защищенных программ. Очевидно, что BreakOO не является так

E call j_??4CString@@QAEABVO@PBD[3Z
Обратим внимание на подчеркнутую строку. Насколько же с первого взгляда неочевидно, куда указывает указатель еах! Попутно замечу, что даже сегодня не каждый компилятор способен генерировать такой к

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

Новый рубеж
Мир давно привык к тому, что популярные технологии вовсе не обязательно бывают хорошими. Именно так произошло и в области защиты условно-бесплат­ного программного обеспечения. Наибольшее распростра

Перехват WM_GETTEXT
Довольно часто разработчики защит читают содержимое окна, посылая ему сообщение WM_GETTEXT. Это ставит в тупик неопытных кракеров. Установка точек останова на GetWindowsText и GetDIgItemText ни к ч

Ограничение времени использования
Другим популярным ограничением DEMO-версий является ограниченное вре­мя использования. Бывают по крайней мере два вида ограничений. В первом отсчет времени идет от момента первого запуска, а во вто

C2 jnz loc_4011c0
Найти в листинге дизассемблера его можно двояко — среди перекрестных ссылок на RegCreateKeyExA: 0040200С RegCreateKeyExA dd ? или по ссылке на строку aSoftwareCrackO; 004

Ограничение числа запусков
Ограничение числа запусков имеет много общего с защитой по времени с момента первого запуска. Однако теперь вместо начального времени необходимо где-то сохранить счетчик, инкрементирующийся (декрем

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