→ Фундаментальные основы хакерства. Проверка аутентичности и базовый взлом защиты. Как приобрести хакерские навыки Все что нужно знать хакеру

Фундаментальные основы хакерства. Проверка аутентичности и базовый взлом защиты. Как приобрести хакерские навыки Все что нужно знать хакеру

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

Кто такие хакеры?

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

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

Необходимо изучение языков программирования

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

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

Даже простые инструкции требуют знаний

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

Необходимо изучать операционные системы

Как стать хакером? Уроки, за счет которых можно изучить данную область деятельности, потребуют достаточно много времени, сил и желания. Что еще необходимо, кроме изучения терминологии и языка программирования? Следует научиться читать операционные системы. Хакерским семейством считается Unix/Linux. Достаточно важной особенностью Unixes является открытость кода. Можно читать, каким образом была написана операционная система. Имеется возможность досконального ее изучения. Также можно предпринять попытки относительно изменения чего-либо. Кроме того, Unix/Linux ориентируется на Интернет.

Требуется изучение Интернета и принципов написания скриптов

Чтобы стать хакером, необходимо разобраться, каким образом следует использовать Всемирную паутину. Также следует понимать принципы написания HTML. Web - серьезное исключение, большая игрушка для хакеров. Как было сказано политиками, Интернет способен изменить мир. И только по этой причине с ним необходимо научиться работать.

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

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

Никакой монотонности быть не должно

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

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

  1. Не надо забывать о том, что для того, чтобы стать одним из лучших в своем деле, требуется решать только самые сложные задачи. Не надо обладать слишком высоким самомнением. Просто необходимо ставить перед собой цели, развиваться день ото дня. Если что-то не было понятно сегодня, то завтра следует постараться разобраться в сложном вопросе. Если не был получен новый навык, то, скорее всего, день прошел зря. Не следует делать себе поблажек.
  2. Не все компьютерные специалисты одинаковы. Имеются те, кто интересуется только получением прибыли. Есть такие, которые стремятся к знаниям и информации, иногда при этом преступая черту закона. Но все знаменитости-хакеры характеризуются наличием разных целей. Именно это позволяет им добиваться значительных высот в своей профессии.
  3. Являясь новичком, не надо пытаться взломать крупные корпорации либо государственные структуры. Следует понимать, что люди, которые отвечают за безопасность данных систем, скорее всего, в своем деле разбираются намного лучше. Следует отметить, что такие специалисты даже в момент обнаружения вторжения не станут оперативно реагировать. Они сначала дождутся, пока хакер не наследит серьезно. Другими словами, новичок может ощущать себя в безопасности после взлома, продолжая исследование систем, к примеру, на наличие уязвимостей. А специалисты в это время активно заманивают их в ловушку.
  4. Необходимо постоянно совершенствоваться, изучая специализированную литературу.

Заключение

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

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

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

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

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

5 этапов, как стать настоящим хакером

1) Наберитесь терпения, вы должны иметь аналитический склад ума и осознавать, что на освоение любого навыка понадобится время, возможно – годы.
2) Отучитесь в институте на факультете прикладной математики, конечно, на это понадобится время, но каждый знаменитый хакер имеет данное образование.
3) Купите книги по основам работы операционных систем и программ, систем безопасности и сетей, но выбор зависит от того, что вы собрались взламывать. Также нужно освоить криптографию и научиться разрабатывать криптографические системы.
4) Вы должны разбираться в моделях шифрования, научиться создавать шифрованные системы и шифры самостоятельно. Без этого навыка вы никогда не станете хакером.
5) Читайте тематические журналы, есть даже журнал под названием «Хакер». Его читают не только хакеры, но и обычные пользователи, которые хотят узнать строение и функционирование программ. Также вы обязаны посещать форумы хакеров, где люди делятся опытом и дают советы новичкам. Конечно, не стоит задавать десятки вопросов, так как на них никто не ответит – обучайтесь постепенно.

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

1. – есть и бесплатная и платная версия. У этого инструмента есть много назначении, но самое главное из них то Показатели для SQL проникновения и Cross Site scripting.

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


2. Aircrack-ng – это полный набор инструментов сетевой безопасности, что включает в себя:
  • (используют для атак на WEP и WPA)
  • (используют для декриптинга WEP и WPA поиманых пакетов)
  • (ставит сетевые карты в режиме монитора)
  • (Инжектор для пакетов)
  • (представляет собой анализатор пакетов)
  • (используетса для виртуальных туннельных интерфейсов)
  • (хранит и управляет ESSID и списки паролей)
  • packetforge-ng (создаёт зашифрованные пакеты для инъекций)
  • airdriver-ng (включает в себя методы для нападения на клиентов)
  • (удаляет WEP клоакинг)
  • airdriver-ng (для управления беспроводными драйверами),
  • (управляет ESSID и может вычислить главный ключ)
  • (даёт доступ к беспроводной карты с других компьютеров)
  • easside-ng (позволяет пользователю запускать программы на удаленном компьютере)
  • easside-ng (средства общения к точке доступа, без ключа WEP)
  • tkiptun-ng (для WPA / атаки TKIP)
  • wesside-ng (для восстановления ключей WEP).

3. Cain & Abel или просто Каин. Классный инструмент для тех кто начинает писать скрипты. Его больше используют как инструмент для восстановления паролей. Этот инструмент позволяет тестеру восстановить различные типы паролей прослушиванием сетевого трафика, и взлома зашифрованных паролей с использованием либо словаря либо Brute Force атакой. Инструмент также может записывать VoIP разговоры и имеет возможность декодировать кодированные пароли, обнаружения сетевых ключей WiFi и кэшированных паролей. При правильной эксплуатации тестер может также анализировать протоколы маршрутизации. Инструмент безопасности по своей природе не использует какие-либо уязвимости в программном обеспечении или отверстия, а просто выявляет недостатки безопасности в стандартных протоколах. Студенты которые учатся на IT в сфере безопасности используют этот инструмент чтобы выучить APR (Arp Poison Routing) Man-in-the-Middle attacks (). Новые версии этой программы позволяет взламывать самые используемые и популярные алгоритмы шифрования.
4. – тут много слов не надо. Думаю по сей день это самая крутая штука для MITM атаки. Оно использует ARP poisoning для атаки. Позволяет увидеть все что творится в сети которой вы находитесь.
5. John The Ripper – пожалуй самое крутое имя для такого рода инструмента. Очень популярный инструмент безопасности, часто сокращенно просто “Джон” используется для взлома паролей. Изначально созданный для операционной системы UNIX, в настоящее время работает на всех основных операционных системах. До сих пор этот инструмент является одним из самых популярных для тестирования паролей и взлома программ которые обеспечивают безопасность. Инструмент сочетает в себе различные взломщики паролей в одном сжатом пакете, который затем может идентифицировать типы хешей паролей через собственную настраиваемую алгоритма крекинга.
6. – является проектом для безопасности, которая предоставляет информацию об уязвимостях и помогает тестирование и обнаружения вторжений. Проект с открытым исходным кодом – известный как , используется специалистами по безопасности, чтобы выполнить код на удаленном целевом компьютере – для тестирования на проникновение, конечно! Но Хакеры его очень любят он позволяет творить чудеса.
7. Nessus – еще один гигант для сканирования уязвимостей. Nessus сканирует различные типы уязвимостей. Те, которые проверяют хакеры на наличие дыр, что могут эксплуатировать, чтобы получить контроль или доступ к компьютерной системе или сети. Инструменты также сканирует пароли по умолчанию и общие пароли, которые можно использовать и выполнить через Hydra (внешний инструмент), и запустить атаку по словарю. Другие сканирования уязвимостей включают в себя атаки против стека TCP / IP.
8. – еще один массивный гигантский инструмент для безопасности, который был вокруг всегда, и, вероятно, самый известный. Nmap имеет признаки во многих фильмов, включая Матрица – просто Google, и вы увидите, что мы имеем в виду. Написанная в C, C ++, Lua Гордон Lione (Fedor) , начиная с 1997 года, Nmap (Network Mapper) является де-факто и лучший сканер безопасности, который используется для обнаружения узлов по компьютерной сети. Для обнаружения узлов в сети Nmap посылает специально построенные пакеты на целевой хост, а затем анализирует ответы. Программа очень сложная, потому что в отличие от других сканеров портов. Он посылает пакеты, основанные на сетевых условиях с учетом колебаний, заторов и многое другое.
9. Kismet – это беспроводной детектор сети, анализатор, и отличный в обнаружение вторжений инструмент безопасности. С Kismet можно контролировать и слушать 802.11b, 802.11a, 802.11g и 802.11n трафик. Есть много Сниферов, но то, что делает Kismet разным и очень популярным является тот факт, что он работает пассивно – это означает, что программа не посылает никаких пакетов, при этом в состоянии контролировать беспроводные точки доступа и беспроводных клиентов. Оно с открытым исходным кодом и широко используется.
10. – была вокруг нас в течение веков и является чрезвычайно популярным. Wireshark позволяет пентестеру поставить сетевой интерфейс в неразборчивый режим и, следовательно, увидеть весь трафик. Этот инструмент имеет множество функций, таких как возможность для сбора данных от живого подключения к сети или читать из файла, сохраненного уже перехваченных пакетов. Wireshark способен считывать данные из широкого спектра сетей, с Ethernet, IEEE 802.11, PPP, и даже петли. Как и большинство инструментов из нашего списка безопасности, захваченные сетевые данные могут контролироваться и управляться с помощью графического интерфейса – который также позволяет вставлять плагины и использовать их. Wireshark может также захватывать пакеты VoIP (как Каин) и сырой USB трафик так же может быть захвачен.

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

Пятнадцать лет назад эпический труд Криса Касперски «Фундаментальные основы хакерства» был настольной книгой каждого начинающего исследователя в области компьютерной безопасности. Однако время идет, и знания, опубликованные Крисом, теряют актуальность. Редакторы «Хакера» попытались обновить этот объемный труд и перенести его из времен Windows 2000 и Visual Studio 6.0 во времена Windows 10 и Visual Studio 2017.

Проверка аутентичности

Проверка аутентичности (от греч. authentikos - подлинный) - «сердце» подавляющего большинства защитных механизмов. Должны же мы удостовериться, то ли лицо, за которое оно себя выдает, работает с программой и разрешено ли этому лицу работать с программой вообще!

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

  • защиты, основанные на знании (пароля, серийного номера);
  • защиты, основанные на обладании (ключевым диском, документацией).

Если защита базируется на одном лишь предположении, что ее код не будет изучен и/или изменен, - это плохая защита. Отсутствие исходных текстов отнюдь не служит непреодолимым препятствием для изучения и модификации приложения. Современные технологии обратного проектирования позволяют автоматически распознавать библиотечные функции, локальные переменные, стековые аргументы, типы данных, ветвления, циклы и прочее. А в недалеком будущем дизассемблеры, вероятно, вообще научатся генерировать листинги, близкие по внешнему виду к языкам высокого уровня.

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


Шаг первый. Разминочный

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

Достоинство такой защиты - крайне простая программная реализация. Ее ядро состоит фактически из одной строки, которую на языке С можно записать так:

If (strcmp(введенный пароль, эталонный пароль)) {/* Пароль неверен */} else {/* Пароль ОK*/}

Давайте дополним этот код процедурами запроса пароля и вывода результатов сравнения, а затем испытаем полученную программу на прочность, то есть на стойкость к взлому:

Листинг 1. Пример простейшей системы аутентификации

#include "stdafx.h" // Простейшая система аутентификации - // посимвольное сравнение пароля #include #include #define PASSWORD_SIZE 100 #define PASSWORD "myGOODpassword\n" // Этот перенос нужен затем, чтобы // не выкусывать перенос из строки, // введенной пользователем int main() { // Счетчик неудачных попыток аутентификации int count=0; // Буфер для пароля, введенного пользователем char buff; // Главный цикл аутентификации for(;;) { // Запрашиваем и считываем пользовательский // пароль printf("Enter password:"); fgets(&buff,PASSWORD_SIZE,stdin); // Сравниваем оригинальный и введенный пароль if (strcmp(&buff,PASSWORD)) // Если пароли не совпадают - «ругаемся» printf("Wrong password\n"); // Иначе (если пароли идентичны) // выходим из цикла аутентификации else break; // Увеличиваем счетчик неудачных попыток // аутентификации и, если все попытки // исчерпаны, завершаем программу if (++count>3) return -1; } // Раз мы здесь, то пользователь ввел правильный // пароль printf("Password OK\n"); }

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

Не так уж редко пароли представляют собой осмысленные слова наподобие Ferrari, QWERTY, имена любимых хомячков или названия географических пунктов. Угадывание пароля сродни гаданию на кофейной гуще - никаких гарантий на успех нет, остается рассчитывать на одно лишь везение. А удача, как известно, птица гордая - палец в рот ей не клади. Нет ли более надежного способа взлома?

Давайте подумаем. Раз эталонный пароль хранится в теле программы, то, если он не зашифрован каким-нибудь хитрым образом, его можно обнаружить тривиальным просмотром двоичного кода программы. Перебирая все встретившиеся в ней текстовые строки, начиная с тех, что более всего смахивают на пароль, мы очень быстро подберем нужный ключ и откроем им программу! Причем область просмотра можно существенно сузить - в подавляющем большинстве случаев компиляторы размещают все инициализированные переменные в сегменте данных (в PE-файлах он размещается в секции.data или.rdata). Исключение составляют, пожалуй, ранние багдадские (Borland’овые) компиляторы с их маниакальной любовью всовывать текстовые строки в сегмент кода - непосредственно по месту их вызова. Это упрощает сам компилятор, но порождает множество проблем. Современные операционные системы, в отличие от старушки MS-DOS, запрещают модификацию кодового сегмента, и все размещенные в нем переменные доступны лишь для чтения. К тому же на процессорах с раздельной системой кеширования они «засоряют» кодовый кеш, попадая туда при упреждающем чтении, но при первом же обращении к ним вновь загружаются из медленной оперативной памяти (кеша второго уровня) в кеш данных. В результате - тормоза и падение производительности.

Что ж, пусть это будет секция данных! Остается только найти удобный инструмент для просмотра двоичного файла. Можно, конечно, нажать клавишу F3 в своей любимой оболочке (FAR, например) и, придавив кирпичом клавишу Page Down, любоваться бегущими цифирьками до тех пор, пока не надоест.

Можно воспользоваться любым hex-редактором (QView, Hiew...) - кому какой по вкусу, - но в статье, по соображениям наглядности, приведен результат работы утилиты DUMPBIN из штатной поставки Microsoft Visual Studio. DUMPBIN запускается из Developer Command Prompt.

Натравим утилиту на исполняемый файл нашей программы, в котором лежит пароль, и попросим ее распечатать содержащую инициализированные только для чтения данные секцию rdata (ключ /SECTION:.rdata) в «сыром» виде (ключ /RAWDATA:BYTES), указав значок > для перенаправления вывода в файл (ответ программы занимает много места, и на экране помещается один лишь «хвост»).

Листинг 2

> dumpbin /RAWDATA:BYTES /SECTION:.rdata passCompare1.exe > rdata.txt 004020E0: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................ 004020F0: 18 30 40 00 68 30 40 00 45 6E 74 65 72 20 70 61 [email protected]@.Enter pa 00402100: 73 73 77 6F 72 64 3A 00 6D 79 47 4F 4F 44 70 61 ssword:.myGOODpa 00402110: 73 73 77 6F 72 64 0A 00 57 72 6F 6E 67 20 70 61 ssword..Wrong pa 00402120: 73 73 77 6F 72 64 0A 00 50 61 73 73 77 6F 72 64 ssword..Password 00402130: 20 4F 4B 0A 00 00 00 00 00 00 00 00 00 00 00 00 OK............. 00402140: 00 00 00 00 90 0A C1 5B 00 00 00 00 02 00 00 00 ......A[........ 00402150: 48 00 00 00 24 22 00 00 24 14 00 00 00 00 00 00 H...$"..$.......

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

Один из способов сделать это - насильно поместить эталонный пароль в собственноручно выбранную нами секцию. Такая возможность не предусмотрена стандартом, и потому каждый разработчик компилятора (строго говоря, не компилятора, а линкера, но это не суть важно) волен реализовывать ее по-своему или не реализовывать вообще. В Microsoft Visual C++ для этой цели предусмотрена специальная прагма data_seg, указывающая, в какую секцию помещать следующие за ней инициализированные переменные. Неинициализированные переменные по умолчанию располагаются в секции.bss и управляются прагмой bss_seg соответственно.

В листинг 1 перед функцией main добавим новую секцию, в которой будем хранить наш пароль:

// С этого момента все инициализированные переменные будут // размещаться в секции.kpnc #pragma data_seg(".kpnc") #define PASSWORD_SIZE 100 #define PASSWORD "myGOODpassword\n" char passwd = PASSWORD; #pragma data_seg()

Внутри функции main проинициализируем массив:

// Теперь все инициализированные переменные вновь будут // размещаться в секции по умолчанию, то есть.rdata char buff="";

Немного изменилось условие сравнения строк в цикле:

If (strcmp(&buff,&passwd))

Натравим утилиту DUMPBIN на новый исполняемый файл:

> dumpbin /RAWDATA:BYTES /SECTION:.rdata passCompare2.exe > rdata.txt 004020C0: D3 17 40 00 00 00 00 00 D8 11 40 00 00 00 00 00 [email protected].@..... 004020D0: 00 00 00 00 2C 11 40 00 D0 11 40 00 00 00 00 00 ....,.@.?.@..... 004020E0: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................ 004020F0: 18 30 40 00 68 30 40 00 45 6E 74 65 72 20 70 61 [email protected]@.Enter pa 00402100: 73 73 77 6F 72 64 3A 00 57 72 6F 6E 67 20 70 61 ssword:.Wrong pa 00402110: 73 73 77 6F 72 64 0A 00 50 61 73 73 77 6F 72 64 ssword..Password 00402120: 20 4F 4B 0A 00 00 00 00 00 00 00 00 00 00 00 00 OK............. 00402130: 00 00 00 00 6F CB C4 5B 00 00 00 00 02 00 00 00 ....oEA[........ 00402140: 48 00 00 00 14 22 00 00 14 14 00 00 00 00 00 00 H....".......... 00402150: 6F CB C4 5B 00 00 00 00 0C 00 00 00 14 00 00 00 oEA[............

Ага, теперь в секции данных пароля нет и хакеры «отдыхают»! Но не спешите с выводами. Давайте сначала выведем на экран список всех секций, имеющихся в файле:

> dumpbin passCompare2.exe Summary 1000 .data 1000 .kpnc 1000 .rdata 1000 .reloc 1000 .rsrc 1000 .text

Нестандартная секция.kpnc сразу же приковывает к себе внимание. А ну-ка посмотрим, что там в ней?

> dumpbin /SECTION:.kpnc /RAWDATA passCompare2.exe RAW DATA #4 00404000: 6D 79 47 4F 4F 44 70 61 73 73 77 6F 72 64 0A 00 myGOODpassword..

Вот он, пароль! Спрятали, называется… Можно, конечно, извратиться и засунуть секретные данные в секцию неинициализированных данных (.bss) или даже секцию кода (.text) - не все там догадаются поискать, а работоспособность программы такое размещение не нарушит. Но не стоит забывать о возможности автоматизированного поиска текстовых строк в двоичном файле. В какой бы секции ни содержался эталонный пароль, фильтр без труда его найдет (единственная проблема - определить, какая из множества текстовых строк представляет собой искомый ключ; возможно, потребуется перебрать с десяток-другой потенциальных «кандидатов»).

Шаг второй. Знакомство с дизассемблером

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

Хакнуть, говорите? Что ж, это несложно! Куда проблематичнее определиться, чем именно ее хакать. Инструментарий хакеров чрезвычайно разнообразен, чего тут только нет: и дизассемблеры, и отладчики, и API-, и message-шпионы, и мониторы обращений к файлам (портам, реестру), и распаковщики исполняемых файлов, и… Сложновато начинающему кодокопателю со всем этим хозяйством разобраться!

Впрочем, шпионы, мониторы, распаковщики - второстепенные утилиты заднего плана, а основное оружие взломщика - отладчик и дизассемблер.

Итак, дизассемблер применим для исследования откомпилированных программ и частично пригоден для анализа псевдокомпилированного кода. Раз так, он должен подойти для вскрытия парольной защиты passCompare1.exe. Весь вопрос в том, какой дизассемблер выбрать.

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

Логичнее всего воспользоваться услугами дизассемблера-интеллектуала (если он есть), но… давайте не будем спешить, а попробуем выполнить весь анализ вручную. Техника, понятное дело, штука хорошая, да вот не всегда она оказывается под рукой, и неплохо бы заранее научиться работе в полевых условиях. К тому же общение с плохим дизассемблером как нельзя лучше подчеркивает «вкусности» хорошего.

Воспользуемся уже знакомой нам утилитой DUMPBIN, настоящим «швейцарским ножиком» со множеством полезных функций, среди которых притаился и дизассемблер. Дизассемблируем секцию кода (как мы помним, носящую имя.text), перенаправив вывод в файл, так как на экран он, очевидно, не поместится:

> dumpbin /SECTION:.text /DISASM passCompare1.exe > code-text.txt

Заглянем еще раз в секцию данных (или в другую - в зависимости от того, где хранится пароль): см. листинг 2.

Запомним найденный пароль: myGOODpassword . В отличие от Visual C++ 6.0, которой пользовался Крис, Visual C++ 2017 не обращается к инициализированным переменным по шестнадцатеричному смещению, а подставляет значение прямо в секцию кода. Таким образом, попробуем найти выявленный ранее пароль в дизассемблированном листинге тривиальным контекстным поиском с помощью любого текстового редактора.

0040107D: B9 08 21 40 00 mov ecx,offset ??_C@_0BA@PCMCJPMK@myGOODpassword?6?$AA@ 00401082: 8A 10 mov dl,byte ptr 00401084: 3A 11 cmp dl,byte ptr 00401086: 75 1A jne 004010A2 00401088: 84 D2 test dl,dl 0040108A: 74 12 je 0040109E

Смотрите, центральная часть этого листинга отвечает за сравнение значений регистров EAX и ECX. В последний, как мы видим, в первой строке листинга записывается эталонный пароль, следовательно, в первом - введенный пользователем. Затем происходит сравнение и выполняются переходы почти в одну и ту же точку: 0x4010A2 и 0x40109E. Заглянем, что там:

0040109E: 33 C0 xor eax,eax 004010A0: EB 05 jmp 004010A7 004010A2: 1B C0 sbb eax,eax 004010A4: 83 C8 01 or eax,1 004010A7: 85 C0 test eax,eax 004010A9: 74 63 je 0040110E 004010AB: 0F 1F 44 00 00 nop dword ptr 004010B0: 68 18 21 40 00 push offset ??_C@_0BA@EHHIHKNJ@Wrong?5password?6?$AA@ 004010B5: E8 56 FF FF FF call _printf

Здесь центральную роль играет инструкция test eax,eax , расположенная по смещению 0x4010A7. В случае если eax равен 0, следующая за ней команда JE совершает прыжок на 0x40110E. В противном же случае на вершину стека выталкивается строка Wrong password:

Push offset ??_C@_0BA@EHHIHKNJ@Wrong?5password?6?$AA@

а следом - вызов функции с говорящим названием:

Call _printf

Значит, ненулевое значение EAX свидетельствует о ложном пароле, а ноль - об истинном.

О’кей, тогда переходим к анализу валидной ветви программы, что делается после прыжка на 0x40110E. А тут притаилась инструкция, которая помещает строку Password OK на вершину стека, после чего вызывается процедура _printf, которая, очевидно, выводит строку на экран:

0040110E: 68 28 21 40 00 push offset ??_C@_0N@MBEFNJID@Password?5OK?6?$AA@ 00401113: E8 F8 FE FF FF call _printf

Оперативные соображения следующие: если заменить команду JE на JNE, то программа отвергнет истинный пароль как неправильный, а любой неправильный пароль воспримет как истинный. А если заменить TEST EAX,EAX на XOR EAX,EAX, то после исполнения этой команды регистр EAX будет всегда равен нулю, какой бы пароль ни вводился.

Дело за малым - найти эти самые байтики в исполняемом файле и слегка подправить их.

Шаг третий. Хирургический

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

Ну, с «выкидыванием запчастей» справиться как раз таки просто - достаточно забить код командами NOP (опкод которой 0x90, а вовсе не 0x0, как почему-то думают многие начинающие кодокопатели), то есть пустой операцией (вообще-то NOP - это просто другая форма записи инструкции XCHG EAX,EAX - если интересно). С «раздвижкой» куда сложнее! К счастью, в PE-файлах всегда присутствует множество «дыр», оставшихся от выравнивания, в них-то и можно разместить свой код или свои данные.

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

Приходится резать программу вживую. Легче всего это делать с помощью утилиты Hiew, «переваривающей» PE-формат файлов и упрощающей тем самым поиск нужного фрагмента. Подойдет любая версия этого hex-редактора. Например, я использовал далеко не самую новую версию 6.86, прекрасно уживающуюся с Windows 10. Запустим ее, указав имя файла в командной строке hiew32 passCompare1.exe, двойным нажатием клавиши Enter, переключимся в режим ассемблера и при помощи клавиши F5 перейдем к требуемому адресу. Как мы помним, команда TEST, проверяющая результат на равенство нулю, располагалась по адресу 0x4010A7.

Чтобы Hiew мог отличить адрес от смещения в самом файле, предварим его символом точки: .4010A7.

004010A7: 85 C0 test eax,eax 004010A9: 74 63 je 0040110E

Ага, как раз то, что нам надо! Нажмем клавишу F3 для перевода Hiew в режим правки, подведем курсор к команде TEST EAX,EAX и, нажав клавишу Enter, заменим ее на XOR EAX,EAX.

004010A7: 33 C0 xor eax,eax 004010A9: 74 63 je 0040110E

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

>passCompare1 Enter password:Привет, шляпа! Password OK

Получилось! Защита пала! Хорошо, а как бы мы действовали, не умей Hiew «переваривать» PE-файлы? Тогда пришлось бы прибегнуть к контекстному поиску. Обратим свой взор на шестнадцатеричный дамп, расположенный дизассемблером слева от ассемблерных команд. Конечно, если пытаться найти последовательность 85 C0 - код команды TEST EAX,EAX, ничего хорошего из этого не выйдет - этих самых TEST’ов в программе может быть несколько сотен, а то и больше. А вот адрес перехода, скорее всего, во всех ветках программы различен, и подстрока TEST EAX,EAX/JE 0040110E имеет хорошие шансы на уникальность. Попробуем найти в файле соответствующий ей код: 85 C0 74 63 (в Hiew для этого достаточно нажать клавишу F7).

Опп-с! Найдено только одно вхождение, что нам, собственно, и нужно. Давайте теперь попробуем модифицировать файл непосредственно в hex-режиме, не переходя в ассемблер. Попутно возьмем себе на заметку - инверсия младшего бита кода команды приводит к изменению условия перехода на противоположное, то есть 74 JE -> 75 JNE.



Работает? В смысле защита свихнулась окончательно - не признает истинные пароли, зато радостно приветствует остальные. Замечательно!


Продолжение следует?

Итак, ты прочел (прочел ведь?) начальный отрывок классической книги Криса Касперски «Фундаментальные основы хакерства» в современном переосмыслении. Получилось ли у нас обновить эти знания до актуального уровня? Стоит ли продолжать? Поделись своим мнением в

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

Шаги

Часть 1

Приобретение базовых навыков

    Перейдите на операционную систему, подобную Unix, например на Linux . Unix - популярная операционная система, часто используемая для серверов и давшая толчок развитию интернета. Хотя можно пользоваться интернетом и не зная Unix, но нельзя быть интернет-хакером, не понимая Unix. По этой самой причине сегодняшняя хакерская культура является весьма сильно Unix-сконцентрированной. Unix, подобно Linux, можно использовать наряду с Windows на одном компьютере. Скачайте Linux или попросите кого-нибудь из пользователей Linux помочь вам с установкой системы.

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

    • Если вы новичок, то попытайтесь найти разрабатываемую программу, которая вам интересна, и станьте хорошим бета-тестером. Существует вполне естественный путь продвижения от помощи в тестировании программ к помощи в их отладке и далее к помощи их модификации. Вы многому научитесь таким способом и породите добрую карму в отношениях с людьми, которые помогут вам впоследствии.
  1. Публикуйте полезную информацию. Еще одна хорошая вещь - отбирать и накапливать полезную и интересную информацию на веб-страницах или документов типа ЧаВО (FAQ или «часто задаваемые вопросы и ответы») и делать их общедоступными. Ведущие основных технических ЧаВО почти столь же уважаемы, как и авторы программ с открытым исходом кодом.

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

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

    • Но остерегайтесь: хакеры настороженно относятся к своим крикливым племенным старейшинам, так что видимое достижение такого рода славы таит в себе опасность. Вместо того, чтобы стремиться к этому, вам лучше как бы не заботиться об этом и тогда все придет само, а уж затем можно стать скромным и милостивым в своем статусе.
  • Некоторые компании нанимают хакеров, чтобы те проверяли, насколько безопасна их система. Так что на этом можно неплохо заработать!
  • Старайтесь не попасться и не занимайтесь взломом.
  • Хорошо пишите на родном языке. Согласно распространенному стереотипу, программисты не очень грамотные, но на самом деле многие хакеры - очень даже хорошо владеют языком.
  • Lisp стоит выучить ради тех глубоких просвещенных познаний, которые вы обретете, когда наконец его освоите. Эти познания сделают вас прекрасным программистом на всю оставшуюся жизнь, даже если вы никогда особо и не будете использовать сам Lisp. Вы можете получить начальный опыт работы с Lisp в режиме редактирования кода текстового редактора Emacs или плагина Script-Fu для графического редактора GIMP .
  • Язык Perl имеет смысл выучить из практических соображений: он очень широко используется для активных web-страниц и системного администрирования, так что даже если вам и никогда не придется писать на Perl, вам следует научиться его читать. Многие люди используют Perl, чтобы избежать программирования на Си, который требователен к ресурсам компьютера.
  • Тестируйте свои знания на созданных вами веб-сайтах.
  • Используйте свои знания и навыки во благо. Хорошим хакером быть куда безопаснее и выгоднее для всех, чем плохим. Плохим хакера живется не очень-то хорошо - им приходится скрываться, дабы избежать проблем с законом.
  • Всегда будьте осторожны. Незаконная деятельность может привести к очень серьезным последствиям, к тому же в интернете на самом деле нет ничего действительно анонимного.
  • Не вовлекайтесь в то, что может привести к неприятностям.
  • Поспрашивайте у сотрудников местных компаний, не нуждаются ли они в проверке систем безопасности.

Предупреждения

  • Взлом - это противоправное действие, которое может привести к серьезному наказанию. Взлом является преступлением и карается по закону.

 

 

Это интересно: