Реферат: Как ломать программы - текст реферата. Скачать бесплатно.
Банк рефератов, курсовых и дипломных работ. Много и бесплатно. # | Правила оформления работ | Добавить в избранное
 
 
   
Меню Меню Меню Меню Меню
   
Napishem.com Napishem.com Napishem.com

Реферат

Как ломать программы

Банк рефератов / Программирование

Рубрики  Рубрики реферат банка

закрыть
Категория: Реферат
Язык реферата: Русский
Дата добавления:   
 
Скачать
Microsoft Word, 166 kb, скачать бесплатно
Заказать
Узнать стоимость написания уникального реферата

Узнайте стоимость написания уникальной работы

Как ломать программы Windows (C) ED!SON [UCF], перевод Mr.Boco/TCP СОДЕРЖАНИЕ 1. Введение в ло мание Windows-программ 2. Обзор SoftICE/Win 2.oo 3. Поиск регистрационных кодов 3.1 Task Lock 3.00 - простая з ащита на основе серийного номера 3.2 Command Line 95 - простая регситрация "имя-код " 4. Создание генератора ключей для Command Line 95 5. Как работают инструкции PUSH и CALL когда программа вызывает функцию 6. О программах , написанных на Visual Basic П РИЛОЖЕНИЯ A. Как в SoftICE загру жать символьные имена (имена функций etc) B. Синтаксис функций GetWindowText, GetDlgItemText и GetDlgItemInt C. Где найти программы D. Как связаться с автором 1. ВВЕДЕНИЕ В ЛОМАНИЕ WINDOWS-ПРОГРАММ Ломать программы Wi ndows в большинстве случаев даже проще , чем ломать программы Dos. В Windows сложно что-нибудь скрыть от того , кто ищет , особенно если программа использует стандартные функции Windows. Первая (и част о единственная ) вещь , которая Вам потребуется - это SoftIC E/Win 2.oo, мощный отладчик от фирмы NuMega. Некоторым людям он кажется очень сложным в использовании , но я расскажу Вам , ка к с ним управляться и , я надеюсь , Вы поверите мне . =) В приложении A я привел не которую информацию , которую Вам следует прочи тать. U RL всех программ , которые Вам понадобятся , приведены в приложении C. - ED!SON, edison@ccnux.utm.my 2. ОБЗОР SOFTICE/WIN 2.OO Ниже приведен очень схематичный рисунок , демонстрирующий окно SoftICE: |--- | -------------- Регистры -| | 'R' - правка значен ия регистров | Окно данных | 'D' - просмотр памяти , 'E' - правка памя ти | Окно к ода | 'U' - просмотр кода по адресу , 'A' - вставк а кода | Окно команд | Здесь Вы набираете команды Другие важные клавиши (в стандарт ной настройке ): 'H'/F1 - помощь F 5/Ctrl+D - запуск программы (или продолже ние прерванной программы ) F8 - пошаговая отладка с заходом в т ело функции F10 - пошаговая отладка без захода в тело функции F11 - выйти из функции (будет работать только до первого PUSH в функции ) 3. ПОИСК РЕГИСТРА ЦИОННЫХ КОДОВ Возможно , наилучши й способ попрактиковаться - это найти где-нибуд ь шареварную (shareware) программку и попытаться зарег истрировать ее. 3.1 Task Lock 3.00 - простая защита на основе серийного номера Это очень про стая защита : номер не зависит ни от каких факторов. 3.1.1 Медицинское обследование Какой разрядности программа - 16 или 32 бит ? Где вводится регистрац ионная информация ? Даст ли мне справка как ие-нибудь предположения о том , как устроена регистрация ? Попробуйте ответить на эти воп росы перед тем , как мы продолжим. ....Сейчас Вы дол жны быть заняты обследованием....Вы заняты обсле дованием ? ...Ну как , уже все ?... OK, теперь Вы знаете , что это 32-битное приложение , работающее под Windows 95 и что рег истрация заключается в заполнении регистра ционного номера в диалоговом окошке , к оторое появляется когда Вы выбираете меню "Register|Register...". Из справки Вам также стало известно , что существует два типа регистрации : для индивидуального использования и для использо вания в "конторе " (в оригинал е - site license). Поэтому очень вероятно , что в программе будет ДВЕ проверки регистрационных кодов. 3.1.2 Прерывание программы Регистрационные код ы чаще всего вводятся в обычных строчках ввода типа Windows Edit. Чтобы проверить код , прогр амма должна прочи тать содержимое строки ввода при помощи одной из функций : 16-бит 32-бит ------ ------ GetWindowText GetWindowTextA, GetWindowTextW GetDlgItemText GetDlgItemTextA, GetDlgItemTextW Последняя буква в названии 32-битных функций говорит о то м , какие строки испо льзует эта функция : однобайтовые или двухбайтовые . Двухбайтовые строки используются ОЧЕНЬ редко. Возможно , что Вы уже уловили мою м ысль . "Если бы можно было прерваться по вызову GetWindowText..." - и Вы МОЖЕТЕ это сделать !!! Но сперва Вы должны убедиться , что сим вольные имена (имена функций ) загружены SoftICE'ом . Если Вы не знаете , как это сделать - см . приложение A. Чтобы установить "ловушку " (на самом деле это называется точкой останова или брейкпоинтом ) в SoftICE, Вы должны зайти в отладчик нажатием клав иш Ctrl-D и использовать команду BPX. В качест ве параметра команды можно использовать либо имя функции , либо непосредственно адрес . Так как наш "объект изучения " (Task Lock) является 32- битным приложением , мы должны поставить брейк поинт на функцию GetWind o wTextA. Если это не поможет , попробуйте поставить брейкпоинт на другие функции. В командной ст роке SoftICE наберите следующее : :bpx getwindowtexta Если Вы получит е сообщение об ошибке (например , "No LDT"), убедитесь , что в фоне у Вас не выполняются никакие другие приложения . Я заметил , что Norton Commander в фоне является причиной подобного п оведения SoftICE. Вы можете пров ерить наличие брейкпоинтов командой : :bl В результате В ы увидите что-нибудь типа : 00) BPX USER32!GetWindowTextA C=01 Чтобы выйти из от ладчика , нажмите Ctrl-D (или F5) еще раз. Продолжим ... Итак , Вы установили брейкпоинт и теперь SoftICE будет "выскакивать " при каждом вызове функции GetWindowTextA. Попробуем ввести какое-нибудь значение в окне регистрации и нажмем OK. Вы нажимаете OK... . ..и получаете дурацкое сообщение о том , что Ваш код был неправильным . Значит , это была не функция GetWindowTextA... Попробуем GetDlgItemTextA. Удали м старый брейкпоинт : :bc 0 (0 - это номер брейкпоинта в списке брейкпоинтов ) И установим новый : :bpx getdlgitemtexta Ну что ж , п опробуем еще раз ... 3.1.3 В отладчике Wow! Работает ! Теперь вы в SoftICE, в самом начале функции GetDlgItemTextA. Чт обы попасть туда , откуда она была вызвана , нажмите F11. Теперь Вы внутри модуля SGLSET.EXE. Есл и Вы не уве рены - посмотрите на стр очку между окном кода и окном командной строки , она должна выглядеть так : ----------SGLSET!.text+1B13---------- Сейчас Вы уже можете запретить реакцию на вызов функци и : :bd 0 Если Вам вдруг захочется снова разрешить ее , наберите : :be 0 Первая строка в окне кода выглядит так : CALL [USER32!GetDlgItemTextA] Чтобы посмотреть строчки над ней , нажимайте Ctrl+Up ("стрелка вверх ") до тех пор , пока не увидите нижеприв еденный кусок кода . Если Вы ничего не понимаете в Ассемблере , я добавил коммен тарии которые могут Вам помочь. RET ; Конец ф ункции PUSH EBP ; Начало другой функции MOV EBP, ESP ; ... SUB ESP, 0000009C ; ... PUSH ESI ; ... > LEA EAX, [EBP-34] ; EAX = EBP-34 PUSH EDI ; ... MOVE ESI, ECX ; ... PUSH 32 ; М акс . длина строки > PUSH EAX ; Адрес тек стового буфера PUSH 000003F4 ; Идентификатор управления PUSH DWORD PTR [ESI+1C] ; Идентификатор окна диалога CALL [USER32!GetDlgItemTextA] ; Получит ь текст Команды PUSH означают сохранение значений для последующего исп ользования. Я пометил важны е строчки символом '>'. Глядя на этот код , мы видим , что адрес текстового буфера х ранился в регистре EAX и что EAX был EBP-34h. Поэтому нам стоит взглянуть на EBP-34h: :d ebp-34 Вы должны были увидеть текст , котор ый вы ввели в диалоговом окне . Теперь мы должны найти место , где Ваш номер сравнивается с р еальным серийным номером . Поэтому мы пошагово трассируем программу при помощи F10 до тех пор , пока не встретим что-нибудь о EBP-34. Н е пройдет и нескольких секунд , к ак Вы наткнетесь на следующий код : > LEA EAX, [EBP+FFFFFF64] ; EAX = EBP-9C LEA ECX, [EBP-34] ; ECX = EBP-34 PUSH EAX ; Сохраняет EAX PUSH ECX ; Сохраняет ECX > CALL 00403DD0 ; Вызывает функцию ADD ESP, 08 ; Удаляет сохраненную информацию TEST EAX, EAX ; Проверяет значение функции JNZ 00402BC0 ; Прыгает , если не "ноль " Мне кажется , что это выглядит как вызов функции сравнения двух строк. Эта функция раб отает так : на входе - две строки , на вых оде - 0, если они равны и любое другое зн ачани е , если не равны. А зачем програ мме сравнивать какую-то строчку с той , что Вы ввели в окне диалога ? Да затем , чтобы проверить правильность Вашей строки ( как Вы , возможно , уже догадались )! Так-так , з начит этот номер скрывался по адресу [EBP+FFFFFF64]? SoftI CE не совсем корректно работает с отр ицательными числами и поэтому настоящий адрес следует посчитать : 100000000 - FFFFFF64 = 9C Вы можете сдел ать это вычисление прямо в SoftICE: :? 0-FFFFFF64 Число 100000000 слишком велико для SoftICE, а вычитание из 0 дае т тот же самый результат. Наконец пришло время взглянуть , что же скрывается по адресу EBP-9C... :d ebp-9c В окне данных SoftICE Вы видите длинную строчку цифр - это с ерийный номер ! Но Вы помните , что я говорил Вам раньше ? Два типа регистрации - два разных серийных номера . Поэтому после того , как Вы записали на бумажечку первый серийный номер , продолжайте трассировать программу при помощи F10. Мы дошл и до следующего куска кода : > LEA EAX, [EBP-68] ; EAX = EBP-68 LEA ECX, [EBP-34] ; ECX = EBP-34 PUSH EAX ; Сохра няет EAX PUSH ECX ; Сохраняет ECX > CALL 00403DD0 ; Снова в ызывает функцию ADD ESP, 08 ; Удаляет сохраненную информацию TEST EAX, EAX ; Проверяет значение функции JNZ 00402BFF ; Прыгает если не "ноль " И что Вы ви дите по адресу EBP-68? Вт орой серийный номе р ! :d ebp-68 Вот и все ... Я надеюсь , что у Вас все получилось ка к доктор прописал ? =) 3.2 Command Line 95 - легкая ре гистрация "имя-код ", создание генератора ключей Это программа - хороший пример , с легким алгоритмом генерации кода . 3. 1.1 "Обследова ние " Вы осмотрели п рограмму и увидели , что это 32-битное прилож ение , требующее имя и код в окне регис трации . Поехали ! 3.1.2 Прерывание программы Мы поступаем та к же , как и с Task Lock'ом - ставим брейкпоинты . Можно даже поставить сразу два бре йкпоинта на наиболее возможные функции : GetWindowTextA и GetDlgItemTextA. Нажмите Ctrl-D, чтобы вызвать отладчик и н аберите в окне команд : :bpx getwindowtexta :bpx getdlgitemtexta Теперь возвращайтес ь в прерванную программу , идите в окно регистрации и в водите имя и какой-н ибудь номер (обыкновенное целое число - это наиболее вероятный код ). Я написал примерно следующее : Name: ED!SON '96 Code: 12345 Программа остановила сь на GetDlgItemTextA. Так же , как и в случае с Task Lock'ом , мы нажимаем F11 чтобы вернуться в вызывающюю функцию . Просматриваем окно кода при помощи Ctrl+Up. Вызов функции выглядит так : MOV ESI, [ESP+0C] PUSH 1E ; Максимал ьная длина PUSH 0040A680 ; Адрес буфера PUSH 000003ED ; Идентификатор управления PUSH ESI ; Идентификатор окна диалога CALL [User32!GetDlgItemTextA] Число 40A680 кажется нам интересным , поэтому мы проверяем этот адрес : :d 40a680 Что же видно в окне данных , как не имя , которое мы ввели ? =) А теперь взглянем на кусок кода под вышеприведенным : PUSH 00 ; (не интересно ) PUSH 00 ; (не ин тересно ) PUSH 000003F6 ; Идентифи катор управления MOV EDI, 0040A680 ; Адрес буфера PUSH ESI ; Идентификатор окна диалога CALL [User32!GetDlgItemInt] Функция GetDlgItemInt похожа на GetDlgItemTextA, но возвращает не строку , а цел ое число . Она возвращает его в регистре EAX, поэтому мы трассируем этот код (F10) и смо трим , что же у нас появилось в окне регистров после вызова функции ... В мое м случае оно выглядит так : EAX=00003039 А что такое шестнадцатеричное 3039? Наберем : :? 3039 И получим след ующее : 00003039 0000012345 "09" ^ hex ^ dec ^ ascii Как Вы видите (и , возможно , уже догадались ) это код , кот орый Вы ввели в диалого вом окне . Ok, что теперь ? Посмотрим дальше : MOV [0040A548], EAX ; Сохраня ет рег . код MOV EDX, EAX ; А такж е помещает его в EDX 3.1.3 Подсчитывание регистрационного кода Мы достигли мес та , где подсчитывается реальный регистрационный код ! MOV ECX, FFFF FFFF ; Э ти строчки подсчитывают SUB EAX, EAX ; длину строки REPNZ SCASB ; . NOT ECX ; . DEC ECX ; ECX теперь содержит длину MOVSX EAX, BYTE PTR [0040A680] ; Получает байт по адр . 40A680h IMUL ECX, EAX ; ECX = ECX * EAX SHL ECX, 0A ; Сд виг влево на 0Ah бит ADD ECX, 0002F8CC ; Добавляет 2F8CC к результату MOV [0040A664], ECX ...И где он п роверяется CMP ECX, EDX ; Сравнивает числа JZ 00402DA6 ; Прыгает , если равны Когда Вы дотрас сировали до сравнения чисел , Вы можете пос мотреть , каким должен был быть Ваш Р ЕАЛЬНЫЙ регистрационный код : :? ecx В моем случае это дало : 000DC0CC 0000901324 То есть , прави льный код для меня : 901324. Нажмем F5 или Ctrl-D чтобы вернуться в программу и попробуем е ще раз , но на этот раз с правильным кодом (в десят ичной форме ). Работает ! 4. СОЗДАНИЕ ГЕН ЕРАТОРА КЛЮЧЕЙ ДЛЯ COMMAND LINE 95 Взглянем на алг оритм генерации кода и попробуем перевести его на язык Си . Вот очень простая ф ормула , по которой подсчитывается ключ : code = ((uppercase_first_char * length_of_string ) << 0x0A) + 0x2f8cc; Замечание #1: Не с ледует забывать , что все символы в окне ввода имени были приведены к верхнему регистру , поэтому мы должны сделать то же. Замечание #2: "<< 0x0A" оз начает "умножние на 2 в степени 10" Целиком программа на Си выглядит так : #include #include int main() unsigned long code; unsigned char buffer[0x1e]; printf("CommandLine95 Keymaker by ED!SON '96\n"); printf("Enter name: "); gets(buffer); strupr(buffer); code = ( ((unsigned long)buffer[0] * (unsigned long)strlen(buffer)) << 0x0A) + 0x2f8cc; printf("Your code is: %lu", code); return 0; Приятных сновиден ий ! 4. КАК РАБОТАЮТ PUSH И CALL КОГДА ПРОГРАММА ВЫЗЫВАЕТ ФУНКЦИЮ Снова взглянем PUSH PUSH PUSH PUSH CALL на кусок кода из Task Lock'а : 32 EAX 000003F4 DWORD PTR [ESI+1C] [USER32!GetDlgItemTextA] ; ; ; ; ; Макс . длина строки Адрес текстового буфера Идентификатор управления Идентификатор окна диалога Получает текст Когда Вы вызываете функцию GetDlgItemTextA и з программы на C, вызов выглядит так : GetDlgItemTextA(hwndDlg, 0x3F4, buffer, 0x32); ^ [ESI+1C] ^ EAX PUSH сохраняет данн ые в области памяти , называемой стеком . В результате каждого PUSH'а новый кусок данных помещается в верхушку стека и затем вызываемая функция проверяет , что лежит в стеке и использует эти данные по св оему усмотрению. 5. О ПРОГРАММАХ НА VISUAL BASIC EXE файлы , производи мые Visual Basic'ом , не являются настоящими EXE. Они пр осто содержат код для вызова VBRUNxxx.DLL, который затем читает данные из EXE и выполняет прогр амму . Та кое устройство псевдо -EXE файлов является также причиной того , что программы на Visual Basic'е такие медленные. А так как EXE файлы не являются настоящими EXE файлами , Вы не можете трассировать и дизассемблировать их - Вы найдете вызов функции из DLL и куч у мусора . И когда Вы будете трасси ровать такую программу , Вы "заблудитесь " в DLL. Решением этой п роблемы является декомпилятор . Существует декомпи лятор для программ , написанных на Visual Basic'е ве рсий 2 и 3, созданный кем-то , называющим себя DoDi. Эта про граммя является шареварной и ее можно найти в InterNet'е (см . Приложение C). Для программ , написанных на Visual Basic'е версии 4 (VB для Windows 95), не существует декомпилятора , насколько мне известно , хотя я бы хотел , чтобы он существовал . =) Примечание : Настоящие программисты на пишут на Basic'е . =) ПРИЛОЖЕНИЯ A. КАК В SOFTICE З АГРУЖАТЬ СИМВОЛЬНЫЕ ИМЕНА Чтобы проверить , загрузил ли SoftICE символьные имена GetWindowText, Вы долж ны войти в отладчик нажатием на клавиши Ctrl-D и в окне команд ввести след ующее : :exp getwindowtext Если Вы не получили списка всех функций GetWindowText, Вам нужно отредактировать файл \SIW95\ WINICE.DAT, удалив символ коммен тария (';') перед одной из строчек 'exp=', которые следуют за текстом : "Examples of export symbols that c an be included for chicago" в конц е этого файла. Вы можете удал ить комментарии из всех строчек 'exp=' или сох ранить немножко памяти , раскомментировав только строчки с файлами kernel32.dll, user32.dll и gdi32.dll, которые являю тся самыми важными . После этог о Вы должны перегрузить компьютер. B. СИНТАКСИС НЕ КОТОРЫХ ФУНКЦИЙ Вам будет легче понять , как вызываются функции , о которых мы говорили , если Вы будете знать их описания (декларации ): int GetWindowText(int windowhandle, char *buffer, int maxlen); int GetD lgItemText(int dialoghandle, int controlid, char *buffer, int maxlen); int GetDlgItemInt(int dialoghandle, int controlid, int *flag, int type); Если Вам нуж на более подробная информация , посмотрите в руководстве программиста Windows/Win32. C. ГДЕ НАЙТИ ПРО ГРАММЫ ПРОГРАММЫ ДЛЯ В ЗЛОМА SoftICE/Win 2.oo: http://www.geocities.com/SoHo/2680/cracking.html Де компилятор VB: ftp://ftp.sn.no/user/balchen/vb/decompiler/ ПРОГРАММЫ , ИСПОЛЬЗ ОВАННЫЕ В КАЧЕСТВЕ ПРИМЕРА TaskLock: http://users.aol.com/Sajernigan/sgllck30.zip CommandLine 95: ftp://ftp.winsite.com/pub/pc/win95/miscutil/cline95.zip D. КАК СВЯЗАТЬСЯ С АВТОРОМ На IRC (EFNet): Каналы #Ucf96, #Cracking E-mail: edison@ccnux.utm.my или an461165@anon.penet.fi На моей WWW-стра ничке : http://www.geocities.com/SoHo/26 80/cracking.html
1Архитектура и строительство
2Астрономия, авиация, космонавтика
 
3Безопасность жизнедеятельности
4Биология
 
5Военная кафедра, гражданская оборона
 
6География, экономическая география
7Геология и геодезия
8Государственное регулирование и налоги
 
9Естествознание
 
10Журналистика
 
11Законодательство и право
12Адвокатура
13Административное право
14Арбитражное процессуальное право
15Банковское право
16Государство и право
17Гражданское право и процесс
18Жилищное право
19Законодательство зарубежных стран
20Земельное право
21Конституционное право
22Конституционное право зарубежных стран
23Международное право
24Муниципальное право
25Налоговое право
26Римское право
27Семейное право
28Таможенное право
29Трудовое право
30Уголовное право и процесс
31Финансовое право
32Хозяйственное право
33Экологическое право
34Юриспруденция
 
35Иностранные языки
36Информатика, информационные технологии
37Базы данных
38Компьютерные сети
39Программирование
40Искусство и культура
41Краеведение
42Культурология
43Музыка
44История
45Биографии
46Историческая личность
47Литература
 
48Маркетинг и реклама
49Математика
50Медицина и здоровье
51Менеджмент
52Антикризисное управление
53Делопроизводство и документооборот
54Логистика
 
55Педагогика
56Политология
57Правоохранительные органы
58Криминалистика и криминология
59Прочее
60Психология
61Юридическая психология
 
62Радиоэлектроника
63Религия
 
64Сельское хозяйство и землепользование
65Социология
66Страхование
 
67Технологии
68Материаловедение
69Машиностроение
70Металлургия
71Транспорт
72Туризм
 
73Физика
74Физкультура и спорт
75Философия
 
76Химия
 
77Экология, охрана природы
78Экономика и финансы
79Анализ хозяйственной деятельности
80Банковское дело и кредитование
81Биржевое дело
82Бухгалтерский учет и аудит
83История экономических учений
84Международные отношения
85Предпринимательство, бизнес, микроэкономика
86Финансы
87Ценные бумаги и фондовый рынок
88Экономика предприятия
89Экономико-математическое моделирование
90Экономическая теория

 Анекдоты - это почти как рефераты, только короткие и смешные Следующий
— Ты с алкоголем дружишь?
— Нет. Но связь поддерживаю.
Anekdot.ru

Узнайте стоимость курсовой, диплома, реферата на заказ.

Обратите внимание, реферат по программированию "Как ломать программы", также как и все другие рефераты, курсовые, дипломные и другие работы вы можете скачать бесплатно.

Смотрите также:


Банк рефератов - РефератБанк.ру
© РефератБанк, 2002 - 2016
Рейтинг@Mail.ru