해킹정보

게시글 '기본적인 해킹 기술'에 대한 정보
기본적인 해킹 기술
등록일 2005-10-16 조회 3,123
해커에게는 마음가짐이 중요하지만 기술은 더욱 중요하다. 마음가짐과 태도가 능력을 대신할 수 있는 것은 아니다. 해커라고 불리기 위해서는 다음과 같은 기본적인 기술들을 갖고 있어야 한다. 그러나 이러한 종류의 기술들은 새로운 기술이 개발되고 기존의 기술이 낡고 쓸모없는 것이 되어감에 따라서 천천히 바뀌어 간다. 예를 들면, 기계어를 이용한 프로그래밍이 예전에 필요한 기본적인 해킹 기술이었고 HTML은 최근에야 포함된 것이다. 그러나 현 시점에서는 다음과 같은 것들이 필요하다. 1. 프로그래밍을 학습하라. 프로그램을 만드는 방법을 배우는 것은 해킹의 가장 기본적인 기술이다. 어떠한 컴퓨터 언어도 모르고 있는 상태라면 Python(파이썬) 언어부터 학습할 것을 권하고 싶다. 파이썬은 매우 간결하게 디자인되어 있으며, 관련 문서가 풍부하고 비교적 초보자에게 쉬운 언어이다. 초보자들에게 좋은 언어임에도 불구하고 파이썬은 결코 단순한 작업만을 위한 언어는 아니다. 파이썬 언어는 매우 강력하고 유연하며 대형 프로젝트에 매우 적합한 언어이다. 그러나 한가지 종류의 언어만을 알고 있다면 해커나 단순한 프로그래머 수준의 기술에도 결코 도달하지 못한다는 사실을 알고 있어야 한다. 이러한 수준에 도달하기 위해서는 특정한 언어가 아닌 일반적인 관점으로 프로그래밍 문제에 접근하는 방법을 배울 필요가 있다. 진정한 해커가 되기 위해서는 기존에 알고 있던 지식과 매뉴얼에 설명된 새로운 언어의 내용을 연관시켜서 빠른 시일안에 새로운 언어를 학습할 수 있는 능력을 키워야 한다. 이것은 몇가지 다른 언어를 배워야만 한다는 사실을 의미한다. 만약 본격적인 프로그래밍을 하고 싶다면 유닉스의 핵심 언어인 C 언어를 배워야만 한다.(그럼에도 불구하고 C 언어는 초보자들이 처음에 배울만한 언어는 아니다.) C 언어 이외에 해커들에게 특히 중요한 언어는 Perl(펄)과 LISP(리스프)이다. Perl은 실용적인 이유로 인해서 배울 가치가 있다. Perl은 동적 웹페이지를 만들기 위한 CGI와 시스템 관리를 위한 스크립트를 작성하기 위해서 매우 널리 사용된다. 따라서 Perl 언어로 프로그램을 만들 일이 없다고 하더라고 Perl 소스를 해독할 수 있는 능력을 갖고 있어야 한다. LISP은 심오한 개발의 경험을 얻고 싶을 경우에 배울만한 훌륭한 언어이다. 이러한 경험은 여러분들이 LISP을 실제로 사용하지 않게 되더라도 남은 날들을 통해서 여러분들이 보다 좋은 프로그래머가 될 수 있도록 만들어 줄 것이다. Python과 C, Perl, LISP 네개의 언어를 모두 배우는 것이 실제로 최상의 방법이다. 이들은 가장 중요한 해킹 언어라는 점 이외에도 프로그래밍에 대한 다른 접근 방법을 갖고 있기 때문에 여러분들에게 프로그래밍에 대한 가치있는 방법들을 알려줄 것이다. 프로그램을 작성하는 방법은 매우 복잡한 기술이기 때문에 이글에서 구체적이고 완벽한 지식을 설명할 수는 없다. 그러나 책과 교육 과정이 이러한 기술을 알려줄 수 있는 것은 아니라는 사실은 말할 수 있다. 많은, 아마도 대부분의 일류 해커들은 독학을 하고 있으며 (a) 코드를 읽는 것과 (b) 코드를 직접 작성해 보는 것으로 프로그램을 만드는 방법을 배울 수 있다. 프로그래밍을 배우는 것은 컴퓨터 언어가 아닌 일반적인 언어 작문을 배우는 것과 같다. 좋은 프로그램을 만드는 방법은 대가가 만든 코드를 읽고 자신이 직접 프로그램을 만들어 보는 것이며, 또다른 소스를 읽고 다시 만들어 보고 더욱 많은 소스를 읽고 또다시 만들어 보는 과정을 자신이 구상했던 형태에 맞는 힘과 효율성을 갖출 때까지 계속해서 되풀이 하는 것이다. 참고할 만한 좋은 코드를 발견하는 것은 일반적으로 어려운 일이다. 왜냐하면 초보 해커들이 읽고 변형해 볼 수 있을 만한 대형 프로그램의 소스 코드를 구하는 일이 매우 힘들기 때문이다. 그러나 이러한 상황은 이제 극적으로 바뀌었다. 왜냐하면 오픈 소스 소프트웨어와 프로그래밍 툴 그리고 해커들이 만든 운영체제의 소스 코드를 이제 쉽게 구할 수 있기 때문이다. 2. 오픈 소스 유닉스 중의 하나를 구해서 학습하고 운영해 보자. 우선, 여러분이 개인용 컴퓨터를 갖고 있거나 이러한 시스템을 사용할 수 있다는 전제하에 얘기를 해 보고자 한다.(실제로 오늘날에는 이러한 것들을 어렵지 않게 가질 수 있다.:-)) 초심자들이 해킹 기술을 습득할 수 있는 가장 확실한 첫번째 단계는 리눅스나 BSD 유닉스 중의 하나를 구해서 개인용 컴퓨터에 설치한 뒤에 이를 운영해 보는 것이다. 이 세상에는 유닉스 이외에도 많은 운영체제들이 있다. 그러나 이러한 운영체제들은 바이너리 형태로만 배포되기 때문에 소스 코드를 읽거나 수정할 수 없다. DOS나 윈도우즈 또는 MAcOS가 설치된 시스템에서 해킹 기술을 배우려고 하는 것은 마치 깁스를 하고 춤을 배우려고 하는 것과 같다. 유닉스는 인터넷 운영체제이다. 유닉스를 모르는 상태에서도 인터넷을 이용하는 방법을 배울 수는 있지만, 유닉스를 모르면 결코 인터넷 해커가 될 수 없다. 이러한 이유로 인해서 오늘날의 해커 문화는 특히 유닉스를 중심으로 이루어져 있다.(해커 문화의 중심이 언제나 유닉스 중심으로 이루어 졌던 것은 아니며 몇몇 오래된 해커들은 이러한 부분에 대해서 여전히 불만스러워 한다. 그러나 유닉스와 인터넷의 공생 관계는 마이크로소프트의 세력이 그것을 약화시키지 못할 정도로 꾸준히 강화되어 왔다.) 따라서 유닉스를 배우고 익혀서 가능한 많은 시간을 함께 보내고 소스 코드를 읽고 코드를 수정해 가면서 시스템을 운영해 볼 것을 권하고 싶다.(개인적으로 나는 리눅스를 선호하지만 동일한 컴퓨터에 리눅스와 DOS/윈도우즈를 함께 설치하는 방법을 사용할 수도 있다.) 여러분은 마이크로소프트의 운영체제에서보다 월등하게 좋은 C와 LISP, Python, Perl을 포함한 프로그래밍 툴들을 얻을 수 있다. 여러분은 즐거움을 얻을 수 있을 것이며 또한 훗날 대가가 된 후에 뒤돌아 보기 전까지는 알 수 없을 만큼 자신이 배울 수 있다고 생각하는 것 이상의 많은 지식을 얻을 수 있을 것이다. 유닉스를 학습하는데 필요한 보다 많은 사항들에 대해서는 color=blue>Loginataka (4)를 참고하기 바란다. (4) 역자주: Loginataka는 1993년에 "Dialogue between a Guru and a Newbie"라는 부제를 달고 유닉스 그루(guru)가 되기를 원하는 사람의 질문에 대한 답변으로 유즈넷에 올려진 글이다. Loginataka는 범어(Sanskrit)로 축도(祝禱, blessing)라는 뜻을 담고 있다. 뉴스그룹에 올려진 최초의 글은 이곳을 통해서 참고할 수 있다. 리눅스를 구하기 위해서 http://linuxresources.com/apps/ftp.html 사이트를 참고할 수 있으며, BSD 유닉스에 대한 정보와 도움말은 http://www.bsd.org/ 사이트를 통해서 구할 수 있다. (주의: 만약 여러분이 초보자라면 리눅스나 BSD를 혼자서 설치할 것을 권하지 않는다. 리눅스의 경우에는 리눅스 유저 그룹의 도움을 요청하거나 리눅스 인터넷 지원 협동 조합(Linux Internet Support Co-operative)를 통해서 방법을 찾을 수 있을 것이다. LISC는 여러분 이 도움을 얻을 수 있는 IRC 채널을 운영하고 있다. 3. WWW를 사용하는 방법과 HTML을 작성하는 방법을 배우라. 해커 문화가 만들어 온 대부분의 것들은 눈에 보이지 않게 움직이며 공장과 사무실 그리고 대학들이 일반인들의 삶에서 충돌없이 운영되도록 도와준다. 하나의 큰 예외인 웹은 해커들의 빛나는 커다란 작품으로 정치가들 조차 그것이 이 세상을 바꾸도 있다고 인정하고 있다. 다른 많은 이유들이 있지만, 이 한가지 사실만으로도 웹이 어떻게 움직이는 가를 배울 필요성이 있다. 웹의 작동 방법을 배운다는 것은 누구나 할 수 있는 브라우저 사용법을 배운다는 것이 아니라 웹의 마크업(markup) 언어인 HTML을 작성하는 방법을 배운다는 것을 의미한다. 만일 여러분이 프로그램을 작성하는 방법을 모르고 있다면 HTML을 작성하는 방법은 프로그래밍을 위한 사고 방식에 약간의 도움이 될 것이다. 따라서 HTML을 이용해서 홈페이지를 만들어 보자. 그러나 단지 홈페이지를 만드는 것이 해커가 되는 길에 근접하는 것은 아니다. 웹은 많은 홈페이지로 가득 차 있으며 별다른 가치를 갖고 있지 않거나 내용도 없는 경우가 많다. (다음의 페이지를 통해서 바람직하지 않은 HTML 사용 예를 참고할 수 있다. http://www.tuxedo.org/~esr/html-hell.html) 홈페이지를 가치 있게 만들기 위해서는 의미있는 내용이 있어야 하며 다른 해커들에게 흥미나 도움을 줄 수 있어야 한다. 그럼, 이제 다음 주제로 넘어가 보자.