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

Пятнадцать лет назад эпический труд Криса Касперски «Фундаментальные основы хакерства» был настольной книгой каждого начинающего исследователя в области компьютерной безопасности. Однако время идет, и знания, опубликованные Крисом, теряют актуальность. Редакторы «Хакера» попытались обновить этот объемный труд и перенести его из времен 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.



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


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

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

Роман Широкий

Время на чтение: 5 минут

А А

Многие пользователи интернета интересуются тем, как стать хакером с нуля и с чего начать. Обычно ценители этого хобби – молодые парни, средний возраст которых 16-20 лет.

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

Хакер – программист высочайшего класса, который работает с готовым программным обеспечением и с помощью языков программирования реализует свою фантазию.

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

  • Освойте базовые основы программирования. Этот навык позволит достичь цели. По словам профессионалов, изучить базу реально самостоятельно в домашних условиях, если уделять как можно больше времени изучению материалов, языков программирования и компьютерной техники.
  • Азы программирования обладают схожей структурой и принципами. Ряд языков программирования придется выучить назубок. В их числе РНР, MySQL, Java и прочие.
  • Помимо языков программирования, обязательно познакомьтесь с операционными системами, которые, на первый взгляд, кажутся незатейливыми. Речь идет о платформах UNIX и Linux. Настоящие хакеры с прошивкой Windows не работают.
  • Хакеры стремятся к правильной работе в сети, которая предусматривает намного больше, нежели общение с друзьями. Если действительно хотите стать настоящим асом, придется получить много знаний, и поможет только интернет. Узнайте, как работает глобальная паутина и разберитесь, зачем клиент передает серверы НТТР, как браузер взаимодействует с сервером и так далее. Без этих знаний рассчитывать на хороший результат не придется.
  • Подберите пакет программ. Сразу предупрежу, что правильно выбрать инструментальные программы непросто, однако сильное желание упростит задачу. Для начала найдите несколько компиляторов и ассемблеров. Первые решения переводят программный текст в эквивалентную программу. Второй вариант – обеспечение, преобразовывающее программы в команды машинного типа.
  • Не обойтись и без хорошего текстового редактора, позволяющего создавать и изменять текстовые файлы, просматривать, распечатывать и находить текстовую информацию.
  • Потребуется специализированный редактор, в котором создаются и изменяются исходные коды программ. Такое решение может быть отдельной программой или частью среды разработки.

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

Видео инструкции

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

Как стать хакером с нуля


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

Молодых людей влечет активная деятельность по хищению информации и взлому сайтов . Но, они не учитывают, что за такие поступки часто приходится отвечать перед законом.

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

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

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

Пошаговый план действий

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

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

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

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

Видео советы

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

Как стать хакером с чего начать


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

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

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

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

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

  1. Наберитесь терпения. Осознайте, что освоение навыков потребует годы.
  2. Особое внимание уделите изучению прикладной математики. Поверьте, без математических знаний стать хакером не удастся.
  3. Обязательно приобретите книги, посвященные работе программ, программных платформ, систем безопасности.
  4. Научитесь писать код и создавать шифрованные системы без посторонней помощи. Работа без этих навыков невозможна.
  5. Читайте тематические журналы, посещайте сайты и форумы, посвященные хакерской деятельности. Источники информации помогут в саморазвитии.
  6. Ведите дневник . Записывайте статистику успехов и достижений. Со временем заметите, что навыки стали более совершенными.

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

Видео

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

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

А как же совет Спольски учить по 1 языку в год для развития кругозора?:)

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

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

Игорь

Вопрос из серии "Что сделать чтобы стать хакером"
Чтобы быть хакер надо:
1. Выучить ассемблер. Другие языки не нужны,главное знать ассемблер.
2. Надеть свитер и отрастить бороду. Не важно что ты девушка.
3. Поставить Linux. Не важно зачем. У каждого хакера должен стоять Linux.
В принципе список можно продолжать до бесконечности. Хакер прежде всего специалист,а не копия штампов из фильмов и газет. Добейся успеха в одной области и будет тебе счастье:).

Zhenya

Мне кажется алгоритмы надо понимать,а не заучивать. А что касается языка, то можно в год прочитывать какую-нибудь книжку по 1 языку,просто,чтобы иметь представление о его возможностях. А потом, при необходимости, им воспользоваться

Sergey

Есть языки на которых можно написать "все, что мне нужно", как выразился Михаил. А есть языки на которых можно написать все что угодно в принципе. Ко второму типу, думаю относяться ассемблер, с и с++. Остальные либо для узко специальных задач (php и пр.), либо уступают им в скорости (c#, java и пр.). Что выбрать каждый решает сам, в силу своих задач. Ознакомиться же с математическими принципами программирования следует каждому - это основы.

klamm

Вот вот, а как же Python)

По моему он не такой уж хакерский, он очень прост по синтаксису, проще чем C#. Если взять что языки C# и Java - языки высокого уровня, то Python - язык сверх-высокого уровня, так как он чисто для прикладного приограммирования, при написании программ на нём, главное уметь пользоваться библиотеками.

А всё, что не возможно написать на Python, пишется на С и вызывается из Python проги.

klamm

Насчет того, как стать хакером,

catb . org / ~esr / faqs / hacker-howto . html

alex

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

Ник

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

Ancort

асм, с++ и лисп (как-то забыли) - вот "хакерские" языки, имхо

Владимир

Мне тоже как-то C# больше нравится, в стиле ооп как-то код воспринимается проще, что ли

Руслан Даутхаджиев

Опять споры, какой язык круче?? Вечный спор на эту тему. По поводу Питона - чисто скриптовый язык для мобильных платформ и web. Поддерживает сторонние конструкторы для создания GUI, например, QT. Особой крутизны этого языка не вижу. Программировать прекрасно можно хоть на QBasic -все зависит от фантазии и опыта программиста. Если язык устарел, это еще не значит, что он "мертв".

Руслан Даутхаджиев

Alex, нынче программистами называют людей, умеющих просто работать в MS Word:). Что вы хотите? Чтобы человек сразу родился с возможностью написать свою ОС? Все начинают с малого. Все зависит от желания человека обучаться и познавать что-то новое.

А то что, вы "Хакер" и в вузе писали свой язык мы уже поняли. Спасибо..

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

От suxx до rulezzz

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

При этом корень hack пришел в культуру от хиппи. Перевести на русский глагол to hack можно как «врубаться».

Слово «Бэкдор» (от английского «Backdoor» — черный вход) и производный от него глагол «забэкдорить» означают для хакера специальное ПО, отрывающее ему доступ к нужной «тачке». А «Тачка», в свою очередь, означает персональный компьютер, объект для взлома. Другие вспомогательные программы хакеры величают «Тулзами» (от английского «tools» — инструменты). Также именно хакерами введено в обиход выражение «вывалиться в кору», что означает непредвиденное завершение работы какой-либо программы.

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

Опытных пользователей, которые имеют определенный набор знаний для взлома, профессионалы называют «Крекерами» («to crack» — взломать). Программы, которые сканируют сетевой трафик, называют «сниферами».

Есть и другие слова, которые давно вошли в мир программиста частично из лексикона хакеров:

  • Suxx (сакс) — отстой.
  • Баг — ошибка.
  • Пофиксить — исправить.
  • Расшарить — открыть в общий доступ.
  • Окна — Windows.
  • Карлсон — кулер компьютера.
  • Ламер — человек, который не разбирается «в теме», но зачастую желающий показаться таковым.
  • Rulezz — круто, противоположное слову Suxx.

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

Программирование — это основной инструмент хакера. Если вы ещё не знаете никакого компьютерного языка, то я рекомендую начать с Python"а. Он понятно разработан, основательно документирован и относительно добр к новичкам. Несмотря на своё доброе отношение к новичкам — это не просто игрушка, а очень мощный и гибкий язык, который превосходно подходит для больших проектов. Я уже писал более подробную оценку Python"у . Есть прекрасное руководство для начинающих и официальный учебник на сайте Python"а, также можно найти превосходные руководства в других местах, одно из них Computer Science Circles .

Раньше я рекомендовал Java, как язык для раннего изучения, но, учитывая эту критику, изменил своё мнения (поищите также: “The Pitfalls of Java as a First Programming Language” (“Заблуждения о Java, как о первом языке программирования”)). Хакер не может подходить к решению проблемы, как решает её сантехник в магазине, он должен знать, что конкретно делает каждый компонент. Поэтому, сейчас я сколоняюсь, что в начале лучше будет изучить языки C и Lisp, и уже после них Java.

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

Если вы решили погрузиться в серьёзное программирование, то вы должны выучить сердцевину ОС Unix — язык C (произносится Си ). C++ (произносится Си Плас Плас )очень тесно связан с C, если вы знаете один, то изучить другой будет не трудно. Хотя они не являются языками для начинающих. И, на самом деле, чем больше вы избегаете программирования на C, тем более продуктивны будете вы.

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

Другие языки первостепенной важности для хакеров - это Perl и LISP . Язык Perl имеет смысл выучить из практических соображений: он очень широко используется для активных web-страниц и системного администрирования, так что даже если вам никогда не придётся писать на Perl, вы должны научиться его читать. Многи люди используют Perl в этом качестве, а я советую вам использовать Python и избегать программирования на Си, если задача не требует экономного использования ресурсов машины. Вам необходимо понимать такой код.

LISP ценен для изучения по другой причине - вы приобретёте глубокие знания узнав этот язык до конца. Эти познания сделают вас прекрасным программистом на всю оставшуюся жизнь, даже если вы никогда особо и не будете использовать сам LISP. (Первоначальные навыки программирования на LISP можно достаточно легко получить, создавая и модифицируя расширения текстового редактора Emacs или создавая плагины на Script-Fu для GIMP).

На самом деле, лучше выучить все пять: Python, C/C++, Java, Perl, и LISP. Помимо того, что это самые важные хакерские языки, они демонстрируют очень разные подходы к программированию и каждый из них научит ценным подходам.

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

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

Питер Норвиг (Peter Norvig) один из ведущих хакеров Google и соавтор популярного учебника по ИИ (Искусственному Интеллекту), написал замечательную статью под названием Teach Yourself Programming in Ten Years (Научи себя программировать за десять лет). На его "рецепт успешного программирования" стоит обратить особенное внимание.

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

Больше об этом процессе я рассказал в How To Learn Hacking (Как научиться хакингу). Это простой набор инструкций, который выполнить очень не легко.

Отыскать хорошие исходные тексты для изучения раньше было сложно, потому что было очень мало больших программ, доступных в исходных текстах и пригодных для изучения и экспериментов юным хакерам. Теперь ситуация кардинально изменилась: программы в исходных текстах, средства разработки и целые операционные системы (всё это создано хакерами) теперь широко доступны. Что подводит меня прямо к следующему разделу...