Программирование в Delphi глазами хакера 2-е изд.

Аннотация

Рассмотрены нестандартные приемы программирования, а также примеры использования недокументированных функций и возможностей языка Delphi в ОС Windows при разработке шуточных программ и серьезных сетевых приложений для диагностики сетей, управления различными сетевыми устройствами и просто при повседневном использовании интернет-приложений. Компакт-диск содержит исходные коды примеров и откомпилированные программы, а также популярные приложения компании CyD Software Labs.

Купить книгу онлайн

Скачать исходные коды

Введение

Замечания ко второму изданию

Это второе издание книги, но в отличие от других книг, у меня второе издание отличается от первого как собака от кошки. Я переписал больше 80% книги, и не просто исправил ошибки, но и добавил просто непристойное количество нового материала. Устаревшую информацию, которая может быть использована только в Windows 95, я убрал из книги вовсе. Те темы, которые могут быть еще интересными, я перенес в виде статей в PDF-формате на компакт-диск.

Компакт-диск заслуживает отдельного внимания. В данном издании я постарался сделать его максимально интересным. В каталоге Документация вы найдете множество интересных документов и статей. Поэтому, если вы читаете эту страницу еще в магазине, то обязательно требуйте компакт-диск. Его содержимое вас приятно удивит. Наверно, никто еще не давал такого количества дополнительной документации своим читателям.

Благодарности

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

Давыдова Дениса — главного редактора "Игромании". Когда-то он был редактором игровой части в журнале "Хакер", и мне повезло, что я начинал свою писательскую деятельность в журнале именно с ним. Журнал тогда только начинал свое развитие, и Денис уделял мне достаточно много времени. Я программист и выжать из себя пару литературных строк в то время вообще не мог (да и сейчас я в этом деле не гений, у меня в школе по русскому и литературе всегда было 3 с большим минусом), а Денис мне дал пинок, от которого я, можно сказать, начал свою карьеру.

Покровского Сергея aka SINtez — главного редактора журнала "Хакер". После того как Давыдов Денис ушел из журнала, я какое-то время стал меньше публиковаться, но потом меня, можно так сказать, взял под крыло Сергей. Сначала я стал вести рубрику "Hack-Faq", а потом и "Кодинг", которая очень быстро развилась и получила популярность.

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

Отдельная благодарность редакторам, которые делают мои книги лучше, находят и помогают исправить мои ошибки, опечатки и недочеты, редакции издательства "БХВ-Петербург" за длительное и плодотворное сотрудничество.

О книге

Как вы, наверное, уже поняли, я помешанный на программировании человек и в течение всей книги не буду блистать литературным стилем. Зато я постараюсь поделиться своими знаниями и надеюсь рассказать вам что-то новое.

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

В книге я расскажу вам о программировании для хакера. Я буду достаточно часто использовать один термин — "кодинг". Что это такое? Под этим словом мы будем как и все подразумевать слово "программирование". А вот под словом "хакер" лично я подразумеваю немного иной смысл, чем другие. Я считаю, что хакер — это профессионал в компьютерной сфере, но не обязательно доставляющий много неприятностей другим людям своими знаниями. Так вот в этой книге я постарался показать много интересных вещей с точки зрения сетевого программиста-профессионала, а не взломщика. Более подробно о понятии "хакер" вы найдете следующем разделе.

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

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

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

Для понимания книги вам понадобятся хотя бы начальные знания о среде Delphi и сносное умение общаться с компьютером и мышью. Что касается сетевого программирования, то его я опишу полностью, начиная от основ и закачивая сложными примерами. Так что тут начальные знания желательны, но не обязательны. Если вы начинающий программист, то могу посоветовать для получения основ прочитать мою книгу "Библия Delphi" и посетить мой сайт www.vr-online.ru, где выложено достаточно много полезной информации.

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

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

Эта книга построена не так как многие другие. В ней нет длинных и нудных теоретических рассуждений, а только максимум примеров и исходного кода. Ее можно воспринимать как практическое руководство к действию. Чтобы книга не была занудной, я постарался описывать все простым и неформальным языком и в некоторых случаях даже веселой форме.

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

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

Это сравнение приведено здесь не просто так. В 2002 году я попал в больницу с температурой и болями в области живота. Меня положили в хирургическое отделение и хотели вырезать аппендицит. Я пролежал три дня, и ни один врач не решался меня отправить на операцию, но в то же время никто не знал, откуда у меня боли, и почему температура под вечер поднимается до 39 градусов.

На третий день вечером я сбежал из больницы, потому что у моей мамы был день рождения. На нем присутствовал знакомый врач (по специализации акушер), который, осмотрев меня, сказал пить по 1 таблетке через каждые 12 часов (не будем уточнять, что это был за препарат, но это от желудка) и выписываться из больницы. Может кто-то не поверит, но после первой таблетки температура упала, а после второй я вообще плясал, как Борис Моисеев. Результат: врачи перепутали отравление с аппендицитом и чуть не лишили меня моего аппендикса. А ведь могли же вырезать по ошибке или просто ради интереса.

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

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

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

Еще один пример из компьютерной жизни. В 2000 году я проходил обучение в МГТУ им. Баумана на нескольких курсах Microsoft SQL Server. Курсы были очень хорошие, и преподаватель старался все очень подробно и легко преподнести. Но сам курс был поставлен корпорацией как теоретический с небольшим добавлением лабораторных работ. В результате, нам очень хорошо объяснили, ЧТО может делать SQL Server. Но когда после курса я столкнулся с реальной проблемой, то понял, что я не знаю КАК сделать что-либо. Приходилось снова открывать книгу, которую выдали в центре обучения (она была предоставлена Microsoft и, конечно же, на английском языке), и, читая обширную теорию и маленькие практические примеры, разбираться с реальной задачей. Уж лучше бы я узнал на курсах, как практически выполнять примеры из жизни, а не что можно теоретически выполнить, потому что такое обучение, по-моему, — только пустая трата времени и денег.

Не смотря на это, я не противник теории и не пытаюсь сказать, что теория не нужна. Просто нужно описывать, КАК решить задачу, и рассказывать, ЗАЧЕМ мы делаем какие-то определенные действия. После этого, когда вы будете сталкиваться с подобными проблемами, вы уже будете знать, как сделать что-то, чтобы добиться определенного результата.

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

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

Даже если вы решили воспользоваться готовым примером, обязательно досконально разберитесь с ним. Попробуйте изменить какие-то параметры и посмотреть на результат. Можете попытаться улучшить программы, добавив какие-то возможности. Только так вы сможете понять принцип работы используемых функций или алгоритмов.


Содержимое

Оглавление Введение 1
Замечания ко второму изданию 1
Благодарности 1
О книге 2
Кто такой хакер и как им стать? 6
Обратная связь 14

Глава 1. Минимизация, скорость и безопасность

15
1.1. Методы минимизации 15
1.2. Сжатие исполняемых файлов 17
1.3. Без окон, без дверей... 21
1.4. Шаблон минимального приложения 27
1.5. Создание элементов управления с помощью Windows API 34
1.6. Прячем программы 36
1.7. Использование библиотек KOL и MCK 37
1.8. Динамические библиотеки 40
1.9. Оптимизация программ 43
Закон № 1 44
Закон № 2 45
Закон № 3 47
Закон № 4 49
Закон № 5 50
Закон № 6 51
Закон № 7 52
Закон № 8 53
Итог 53
1.10. Приемы оптимизации 54
1.10.1. Быстрый старт 54
1.10.2. Динамические библиотеки 56
1.10.3. Цепочки 59
1.11. Ассемблер и Delphi 62
1.11.1. Использование встроенного ассемблера 63
1.11.2. Внешний ассемблер 66
1.11.3. Встроенный оптимизатор 70
1.12. Безопасный код 71

Глава 2. Простые шутки

75
2.1. Летающая кнопка Пуск 76
2.2. Полный контроль над кнопкой Пуск 81
2.3. Панель задач 87
2.4. Настольные розыгрыши 90
2.5. Контролируем системную палитру 92
2.6. Изменение разрешения экрана 95
2.7. Маленькие шутки 101
2.7.1. Как программно "потушить" монитор? 101
2.7.2. Запуск системных cpl-файлов 102
2.7.3. Программное управление устройством для чтения компакт-дисков 102
2.7.4. Отключение сочетания клавиш ++ 103
2.7.5. Отключение сочетания клавиш + 104
2.7.6. Удаление часов с панели задач 104
2.7.7. Исчезновение чужого окна 105
2.7.8. "Клеим" обои 105
2.7.9. Запрет кнопки Закрыть в заголовке окна 107
2.7.10. Окно, которое нельзя закрыть 107
2.7.11. Спрятать окно 108
2.7.12. Закрыть чужое окно 108
2.8. Шутки с мышью 109
2.8.1. Безумная мышь 109
2.8.2. Мышеловка 110
2.8.3. Изменчивый указатель 111
2.8.4. Как щелкнуть в нужном месте? 112
2.9. Работа с чужими окнами 114
2.10. Дрожь в ногах 119
2.11. Оконные страсти 121
2.12. Буфер обмена 123
2.13. Служба сообщений 128

Глава 3. Система

133
3.1. Подсматриваем пароли, спрятанные под звездочками 133
3.2. Мониторинг исполняемых файлов 140
3.3. Переключающиеся экраны 150
3.4. Безбашенные окна 155
3.5. Права доступа к объектам 165
3.5.1. Дескриптор безопасности 165
3.5.2. Дескриптор безопасности 172
3.5.3. Редактирование прав доступа 182
3.6. Сервисы 189
3.7. Управление менеджером сервисов 193
3.8. Оснастка сервисов 201
3.9. Управление пользователями 208
3.9.1. Получение списка пользователей 209
3.9.2. Управление пользователями и группами 218
3.10. Изменение параметров окна 220
3.11. Создание ярлыков 222
3.12. Управление ярлыками 229
3.13. Прозрачность окон 232

Глава 4. Работа с сетью

237
4.1. Немного теории 237
4.1.1. Сетевые протоколы: протокол IP 240
4.1.2. Сопоставление адресов ARP и RARP 241
4.1.3. Транспортные протоколы: быстрый UDP 242
4.1.4. Транспортные протоколы: медленный, но надежный TCP 243
4.1.5. Прикладные протоколы: загадочный NetBIOS 244
4.1.6. NetBEUI 246
4.1.7. Сокеты Windows 246
4.1.8. Протокол IPX/SPX 246
4.1.9. Порты IP 247
4.2. Их разыскивают бойцы 139-го порта 248
4.3. Чат для локальной сети 252
4.3.1. UDP в Delphi 7 255
4.3.2. UDP в Delphi 2006 257
4.4. Сканирование открытых ресурсов 258
4.5. Telnet-клиент 263

Глава 5. Сеть на низком уровне

271
5.1. Инициализация WinSock 271
5.1.1. Пример инициализации 273
5.1.2. Подключение заголовочных файлов 273
5.1.3. Получение информации о сокетах 276
5.2. Обработка сетевых ошибок 277
5.3. Функции соединения с сервером 279
5.3.1. Синхронность/асинхронность работы порта 280
5.3.2. Соединение с сервером 281
5.3.3. Порты 282
5.3.4. Закрытие соединения 283
5.4. Сканер портов 283
5.5. Самый быстрый сканер портов 287
5.5.1. Работа с событиями 289
5.5.2. Время и количество 290
5.5.3. Кодинг 291
5.5.4. Структура типа TFDSet 298
5.6. Продолжаем знакомиться с WinSock 304
5.7. Определение локального/удаленного IP-адреса 307
5.8. Пишем TCP/IP-сервер и клиента 309
5.8.1. TCP-сервер 310
5.8.2. TCP-клиент 313
5.9. Передача данных 315
5.9.1. Блокирующий режим 315
5.9.2. Блокирующий TCP-сервер 316
5.9.3. Неблокирующий сокет 319
5.9.4. Обмен через сообщения 324
5.9.5. Пример работы через сообщения 328
5.10. Как написать троян 330
5.11. Работа с UDP 331
5.11.1. UDP-сервер 332
5.11.2. UDP-клиент 334
5.11.3. Замечания 335
5.12. HTTP-клиент 336

Глава 6. Железная мастерская

343
6.1. Общая информация о компьютере и ОС 343
6.1.1. Платформа компьютера 347
6.1.2. Информация о процессоре 347
6.1.3. Информация о платформе Windows 347
6.1.4. Дополнительная информация о Windows 348
6.1.5. Переменные окружения Windows 348
6.2. Информация о памяти 350
6.3. Информация о дисках 353
6.4. Частота и загрузка процессора 357
6.4.1. Частота процессора 358
6.4.2. Загрузка процессора 362
6.5. Работа с COM-портом 364
6.6. Работа с LPT-портом 369
6.7. Получение информации об устройстве вывода 374
6.8. Работа с типами файлов 378
6.8.1. Получение информации о типе файлов 378
6.8.2. Связывание своей программы с неопределенным типом файлов 383
6.9. Работа со сканером 386
6.10. IP-config собственными руками 392
6.11. Получение информации о сетевом устройстве 397

Глава 7. Полезное

405
7.1. Работа с NetBIOS 405
7.2. Работа с ARP 411
7.3. Изменение записей ARP-таблицы 419
7.3.1. Добавление ARP-записей 419
7.3.2. Удаление ARP-записей 425
7.4. Работа с сетевыми ресурсами 430
7.5. Быстрая проверка состояний портов: вариант 1 441
7.6. Быстрая проверка состояний портов: вариант 2 451
7.7. Работа с ICMP на примере ping 461
7.8. Trace Route 468
Приложение. Описание компакт-диска 471
Литература 472
Предметный указатель 473
VI Оглавление V Оглавление

Отзывы

Dondyablo

Приобрел Вашу книгу в интернет магазине. Но диска с примерами, конечно, не было. Как бы я мог его получить?
P.S. Делфи+embarcadero уже прошлый век?


Михаил Фленов

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


Добавить Комментарий

О блоге

Программист, автор нескольких книг серии глазами хакера и просто блогер. Интересуюсь безопасностью, хотя хакером себя не считаю

Обратная связь

Без проблем вступаю в неразборчивые разговоры по e-mail. Стараюсь отвечать на письма всех читателей вне зависимости от страны проживания, вероисповидания на русском или английском языке.

Пишите мне


Я в социальных сетях
Facebook Telegram Програмысли
Youtube Instagram Твитер