Top

해커의 언어 파이썬 3 입문 [보안 분야에 가장 필요한 파이썬 3 문법 체계]

  • 지은이오동진
  • ISBN : 9791161751344
  • 25,000원
  • 2018년 03월 19일 펴냄
  • 페이퍼백 | 276쪽 | 188*235mm
  • 시리즈 : 해킹과 보안

책 소개

소스 코드 파일은 여기에서 내려 받으실 수 있습니다.

요약

해킹에 관심과 열정을 보이는 초보 해커를 대상으로 사이버 보안에서 자주 사용하는 내용을 중심으로 파이썬 3 문법을 소개한다.

추천의 글

저자를 안 지도 10년 가까이 됐다. 저자는 강의를 하고 나는 수업을 듣던 관계에서 이제는 가끔 만나 소주 한 잔 기울이며 이런저런 얘기를 나누는 친근한 사이가 됐다. 얘기 주제는 즐거운 소식이나 역사 이야기 아니면 하소연 등등.
저자와 만나 얘기를 나누다 보면 저자 특유의 표정이 있다. 본인이 굉장히 관심을 가지거나 중요시하는 부분에 대한 얘기가 나올 때는 그 말투나 눈빛이 사뭇 매서워진다. 처음에는 잘 몰랐지만 몇 번의 만남으로 그 특성을 알고 난 뒤에는 그러한 말투나 눈빛이 나올 때 나도 관심을 더 기울이고 경청하게 된다.
파이썬 얘기를 나눴을 때 저자의 표정 역시 그러했다. 이 책을 저술하기 전인 2015년경 컴퓨터 프로그래밍 언어를 배워보기 위해 저자에게 자문을 구한 적이 있다(예전에 잠시 공부하긴 했지만 컴퓨터는 전반적으로 초보 수준이다). 당시 C 언어를 공부하겠다고 질문했는데 돌아온 답변은 “파이썬 언어를 해보는 것이 어떠냐?”는 권유였다. 그리고 파이썬에 대해서 장점과 단점을 구체적으로 말해주는데 그 표정이나 말투에서 파이썬 언어에 대한 애착을 느꼈다.
그리고 또 한 가지. 이번 원고를 받아 내용을 읽다 보니 저자의 평소 어투와 비슷하다는 느낌도 받았다. “착오가 없길 바란다.” 등 편하게 대화하듯 쓰여진 문장을 보니 읽는 독자에게 하나라도 더 알려주기 위한 노력도 살짝 엿보인다.
난 전산 지식은 미천하기 때문에 책의 수준이나 내용의 충실함 등을 언급하는 것이 망설여진다. 하지만 평소 파이썬에 대한 저자의 애착이나 책 전반에 써져 있는 저자의 표현 방법을 볼 때 이 책 한 권을 쓰기 위해 엄청난 정성을 들였음을 확신한다.

서울 종로 경찰서 생활 안전과 경정 이상현 경정

이 책은 언어에 관한 책이다.
언어가 없는 삶을 상상할 수 있을까? 일상생활의 간단한 욕구부터 어렵고 복잡한 형이상학적 내용에 이르기까지 모든 것을 언어라는 도구를 통해 표현하고 이해한다.
파이썬도 마찬가지로 인간의 의사 표현을 컴퓨터가 이해할 수 있는 언어의 한 종류이다. 컴퓨터와 인간 사이에 수많은 언어가 있겠지만 이 책에서 다루는 파이썬은 초보자들에게는 접근하기 쉽고 전문가들에게는 편하고 즐거운 언어이다.
컴퓨터 언어를 모르는 사람에게 있어서 컴퓨터는 한낱 고철에 불과하다. 하지만 컴퓨터를 고철로 여기는 사람(본인 포함)도 이 책을 읽다 보면 즐겁게 파이썬을 배울 수 있을 것이라 생각한다. 이 책이 파이썬 자체의 특성(직관성과 쉬운 문법)과 저자의 간결한 문체가 잘 조화돼 있기 때문이다. 이 책은 강의 교재로도 사용 가능할 정도로 편제가 치밀하게 구성돼 있다. 또한 백화점식 예제 나열을 지양하고 가장 필수적인 문법 체계에 초점을 두고 집필됐기 때문에 지루하지 않게 배울 수 있고 배운 것을 바로 실전에 접목할 수 있을 것이다.
긴 겨울이 지나고 봄이 다가오고 있다. 마냥 춥기만 한 바람 속에서 어느덧 봄의 향기가 느껴진다. “겨울은 결코 영원히 지속되지 않는다. 그리고 봄이 순서를 건너뛰는 법도 결코 없다.”는 미국의 소설가 할 볼란드의 말이다. 처음엔 파이썬이 생소하더라도 스스로 계획을 세워 조금씩이라도 매일 꾸준히 이 책을 읽다 보면 큰 어려움 없이 어느새 실력이 부쩍 늘어있는 자신을 발견할 것이다.

모의 침투 연구회 회원 주성환

파이썬은 최근 가장 인기 있는 언어다. 간단하면서도 강력한 프로그래밍 언어의 대명사인 만큼 가볍고 가독성이 좋고 다양한 라이브러리로 구성돼 있어 프로그래밍 입문자에게 많이 추천되는 언어이다. 코드 경진 대회 서비스를 제공하는 코드이벨은 2016년 프로그래밍 인기 순위에서 파이썬을 1위로 꼽았을 정도다. 대형 글로벌 기업부터 스타트업까지 다양하게 활용되고 있는 파이썬이 인기가 높은 이유는 초보자 또는 숙련자를 가리지 않는 언어이기 때문일 것이다. 초보자에게는 쉬운 접근성을 가지고 있으며 숙련자에게는 뛰어난 확장성으로 강력한 기능을 제공한다. 또한 보안과 접목돼 그 강력함을 최대치로 끌어 올리고 있다. 대부분의 보안 관련 도구들 역시 파이썬으로 작성됐거나 파이썬 스크립트 형태의 모듈로 구성돼 있다.
나 역시 정보보안 분야에 큰 애정을 가지고 있는 사람 중 하나지만, 새로운 언어 습득에 대해 막연한 부담감이 있었다. 그렇기 때문에 최근 화두가 된 언어에 대해서도 소극적인 관심으로만 머물러 있던 중, 이번 원고를 받아 들며 파이썬을 향한 본격적인 맛보기가 시작됐다. 오동진 선생님의 『해킹 입문자를 위한 TCP/IP 이론과 보안』을 통해 입문자의 입장을 헤아려주는 친절함을 몸소 느껴본 기억이 있어 반가운 마음으로 부담 없이 읽기 시작할 수 있었다. 기대했던 대로, 이번 『해커의 언어 파이썬 3 입문』 역시 한 권의 소설책을 읽는 듯이 가벼운 걸음으로 시작했지만, 완독 후에는 파이썬의 전체적인 그림을 그려주는 가이드 역할로서 부족함이 없었다.
특히 프로그래밍 언어에 대한 지식이 없는 완벽한 초보자 해커에게도 군더더기 없는 파이썬 입문서가 돼 줄 것이다. 복잡한 개념과 문법의 소스 코드로 가득 차있는 서적이 아닌, 쉬운 예시들로 원리를 설명하고 있다. 이러한 구성에서 독자들이 책 안의 지식을 그대로 받아들이기보다는 온전히 내 것의 일부로 만들어내게끔 이끌어주려는 저자의 노력을 엿볼 수 있었다. 파이썬의 기본적인 개념.지식.구조, 그리고 원리에 대한 전체적인 감각을 심어주는 이 책은 응용 단계를 위한 다음 목적지로 가는 청사진 정도는 가뿐히 그려낼 수 있도록 초석을 다져줄 것이다. 또한 해커로서 파이썬을 접하게 되는 순간부터 완독을 끝낸 시점까지 일련의 과정을 통해 해킹 수행의 도구로 단연 파이썬을 가장 사랑하게 되지 않을까 생각한다. 그 출발점이 『해커의 언어 파이썬 3 입문』이 된 것을 환영한다.

모의 침투 연구회 부회장 김지수

이 책에서 다루는 내용

█ 데비안 및 우분투 기반 운영 체제 환경에서 파이썬 3 소개
█ 백박스 4.7 버전에서 파이썬으로 침투 도구 분석 및 제작
█ 파이썬 입문자를 고려한 수학적 체계성에 충실한 구성
█ 고등학교, 대학교, 학원 등에서 교재로 사용 가능

이 책의 대상 독자

█ 프로그래밍 경험이 없는 초보 해커
█ 데비안/우분투 기반에서 파이썬 언어를 다루고자 하는 입문자
█ 파이썬 언어에 입문하려는 기업체 정보 보안 담당자
█ 기타 전산 과목을 담당하는 중등 교사 또는 전산학과 전공자 등

이 책의 구성

제1장 ‘파이썬 소개와 실습 환경 구축 들여쓰기’에서는 파이썬 언어의 강점 등을 소개했고 파이썬을 사용할 수 있는 운영 체제의 종류 그리고 데비안/우분투 기반 중심의 파이썬 3 작업 환경 등을 소개한다.
제2장 ‘주요한 데이터 타입과 변수 그리고 객체의 이해’에서는 파이썬에서 처리하는 데이터 타입의 종류를 소개한다. 변수와 객체의 개념 그리고 참조 변수도 소개한다.
제3장 ‘숫자 데이터 특징과 각종 연산자’에서는 정수를 중심으로 숫자 데이터 타입의 다양한 연산자를 소개한다. 또한 숫자와 관련이 있는 바이트 순서 개념 등을 소개한다.
제4장 ‘문자열 데이터 특징과 내장 함수들’에서는 시퀀스 데이터 타입으로서 문자열 데이터 타입의 형식과 특징을 소개한다. 또한 문자열과 관련한 다양한 내장 함수의 기능 등을 소개한다. 아울러 바이트 타입과 바이트 배열도 소개한다.
제5장 ‘리스트 데이터 특징과 내장 함수들’에서는 시퀀스 데이터 타입으로서 리스트 데이터 타입의 형식과 특징을 소개한다. 또한 리스트와 관련한 다양한 내장 함수의 기능 등도 다룬다.
제6장 ‘튜플 데이터 특징과 내장 함수들’에서는 시퀀스 데이터 타입으로서 튜플 데이터 타입의 형식과 특징을 소개한다. 또한 튜플과 리스트를 상호 변경할 수 있는 내장 함수의 기능 등도 소개한다. 더불어 format() 함수를 이용한 문자열 서식도 소개한다.
제7장 ‘딕트 데이터 특징과 내장 함수들’에서는 매핑 데이터 타입으로서 딕트 데이터 타입의 형식과 특징을 소개한다.
제8장 ‘각종 제어문의 이해’에서는 중괄호가 아닌 들여쓰기에 기반한 파이썬 고유의 조건문/반복문의 형식과 기능 등을 간결한 예제를 통해 소개한다.
제9장 ‘파일 및 예외 처리에 대한 이해’에서는 open() 함수와 write() 함수와 read() 함수 그리고 close() 함수로 이어지는 일련의 파일 처리 과정을 소개한다. 또한 예외의 개념과 try-except-else-finally 문으로 이루어진 예외 처리를 소개한다. 더불어 raise/assert 문의 개념도 다룬다.
제10장 ‘함수에 대한 이해’에서는 사용자 정의 함수를 중심으로 파이썬 고유의 함수 형식과 다양한 용어와 기능 등을 소개한다. 또한 함수에서 사용하는 전역 변수와 지역 변수, 아울러 축약 함수의 개념을 소개한다.
제11장 ‘모듈과 패키지에 대한 이해’에서는 모듈과 프레임워크 그리고 패키지 개념을 소개한다. 또한 import문의 다양한 사용 방법을 설명한다.
제12장 ‘주요한 내장 모듈’에서는 파이썬을 커널과 소켓 등에서 자주 사용하는 주요 모듈 세 가지, 다시 말해 os 모듈과 socket 모듈과 struct 모듈을 소개한다. 이와 함께 형식 문자열의 종류도 소개한다.
제13장 ‘클래스에 대한 이해’에서는 객체 지향 스크립트 언어로서 파이썬 고유의 클래스 형식과 다양한 기능 등을 소개한다. 또한 클래스에서 사용하는 self 인자의 개념, 클래스의 핵심 기능인 상속과 다형성의 개념을 소개한다.
제14장 ‘GUI 기초’에서는 tkinter 모듈을 이용한 파이썬 GUI 개념을 소개한다. 또한 이벤트 개념 등을 소개한다.
제15장 ‘파이썬의 활용’에서는 제3장부터 제14장까지 소개한 문법 내용을 토대로 소켓과 암호에 대한 내용을 다룬다.

저자/역자 소개

지은이의 말

공대생들에게 수학은 필수 과목이다. 그렇다고 공대생들이 수학 전공자가 배우는 모든 분야를 배우는 것은 아니다. 공대생들은 공업 수학(engineering mathematics)을 통해 자신의 전공에 부합하는 수학적 지식만을 선택해 학습한다. 공업 수학은 상미분 방정식과 편미분 방정식 그리고 벡터 미적분과 푸리에 해석 등과 같이 공학에서 필요한 부분만을 엄선해 반영하기 때문이다. 공업 수학이 없었다면 공대생들은 수학 과목에 자신의 전공 과목까지 익혀야 하는 이중고에 시달릴 수밖에 없었을 것이다.
이 책을 구상한 이유도 바로 이런 인식 선상에 있다. 해커에게 파이썬은 해킹을 구현하기 위한 도구일 뿐 파이썬 그 자체에 의미를 두는 것은 아니다. 다시 말해 해커는 게임을 개발하거나 통계를 분석하기 위해 파이썬을 사용하는 것이 아니다. 그렇기 때문에 해커에게는 파이썬의 광범위한 문법 중에서도 해킹에 필요한 문법이 우선적으로 필요하다. 공대생에게는 집합론이나 유클리드 기하학이 아닌 공업 수학이 필요한 이유와 같은 이치다.
이 책은 이제 막 컴퓨터 언어를 시작하려고 하는 사람을 대상으로 하기보다는 해킹에 관심과 열정을 보이는 초보 해커를 염두에 두고 해킹 단계가 높아질수록 필수적으로 요구하는 파이썬 문법에 부합하도록 구성했다. 다시 말해 파이썬을 이용한 해킹 도구를 소개하거나 이러저러한 분야에서 활용할 수 있다는 백화점 식 예제를 지양하고 보안 분야에서 가장 필요한 파이썬 문법 체계에 초점을 뒀다.

이 책은 다음과 같은 점을 염두에 두고 집필했다.

  1. 해커에게 친숙한 데비안/우분투(Debian/Ubuntu) 기반의 운영 체제 환경에서 파이썬 3 언어를 소개했다. 이 책에서는 모의 침투 운영 체제인 백박스(BackBox) 4.7 버전 환경을 사용했다. 터득한 파이썬 문법과 기능을 이용해 곧바로 침투 도구 분석이나 제작에 접목하라는 의도다.
  2. 복잡할 수 있는 개념을 단편적으로 분리해서 소개했다. 길고 복잡한 소스 코드로 이루어진 예제는 산만해지기 쉽기 때문에 짧고 간결한 소스 코드만으로 이루어진 예제를 통해 문법 내용에 집중할 수 있도록 구성했다. 중학생 이상이면 쉽게 이해할 수 있는 소스 코드 예제를 실었다.
  3. 순수 파이썬 입문자도 볼 수 있게 체계적으로 구성하기 위해 노력했다. 일례로 데이터 타입을 설명하면서 제어문 내용을 전혀 사용하지 않았고, 함수와 클래스 내용도 전혀 사용하지 않았다. 수학적 체계성에 충실하고자 노력했다.
  4. 강의 교재로 사용할 수 있도록 5일, 35시간 기준 분량으로 내용을 구성했다. 최근 코딩 교육 강화 추세를 고려해 고등학교 등에서도 사용할 수 있도록 집필했다.

필자는 작년 12월 한 달 내내 이 책을 집필하는데 매진했다. 잘못된 입력에서 잘못된 출력이 나온다는 전산의 기본 법칙을 알기 때문에 사소한 오류가 독자 여러분에게 잘못된 지식으로 전해지는 두려움을 안고 한 자 한 자마다 정성을 들였다. 그럼에도 놓친 오류가 있을 수 있다. 이러한 노력을 가상히 여겨 너무 심하지 않게 질책해 주기 바랄 뿐이다.

지은이 소개

오동진

인천대학교 일어과, 경희사이버대학교 정보통신학과를 졸업하고 한국외국어대학교 교육대학원에서 전산교육학 석사를 취득했다.
약 9년 동안 한국통신KT과 하이텔(HiTEL) 등에서 근무하며 다양한 정보 기술 환경을 경험했다. 정보처리산업기사와 CCNA/CCNP 등의 자격증을 취득했다.
국가공무원인재개발원과 한국지역정보개발원 등에서 정보보안기사와 모의 침투 분야 등을 강의 중이다. 2016년 경찰 교육원에서 우수 외래 강사로 감사장을 받기도 했다. 사이버 보안 중 다양한 모의 침투 운영 체제와 사회 공학에 특히 관심이 많다. 페이스북 ‘모의 침투 연구회’와 ‘사이버 안보 연구회’ 회장이다.
강의가 없을 때는 문학, 사학, 철학책을 읽거나 국가 정보학 책을 읽는다.
저서로는 에이콘출판사에서 펴낸 『해킹 입문자를 위한 TCP/IP 이론과 보안』(2016), 『소켓 개발 입문자를 위한 백박스 기반의 파이썬 2.7』(2016), 『칼리 리눅스 입문자를 위한 메타스플로잇 중심의 모의 침투 2/e』(2017), 『백박스 리눅스를 활용한 모의 침투』(2017) 등이 있고, 공저로는 『데비안 리눅스 활용과 보안』(2017)이 있다.

목차

목차
  • 1장. 파이썬 소개와 실습 환경 구축
    • 입문자와 전문가 모두를 만족시키는 파이썬 언어
    • 실습 환경 구축

  • 2장 주요한 데이터 타입과 변수 그리고 객체의 이해
    • 추천영화 1. 공상 과학 영화 분야에서 기념비적인 작품

  • 3장 .숫자 데이터 특징과 각종 연산자

  • 4장. 문자열 데이터 특징과 내장 함수
    • 추천영화 1. 개인 정보란 은밀한 사생활이 담긴 흔적

  • 5장. 리스트 데이터 특징과 내장 함수

  • 6장. 튜플 데이터 특징과 내장 함수
    • 추천영화 1. 영화사에서 해커가 주인공으로 등장하는 최초의 작품

  • 7장. 딕트 데이터 특징과 내장 함수

  • 8장. 각종 제어문의 이해
    • 조건문
    • 반복문
    • 추천영화 1. 케빈 미트닉 사건을 다룬 최고의 해커 영화

  • 9장. 파일 및 예외 처리에 대한 이해

  • 10장. 함수에 대한 이해
    • 추천영화 1. 네트워크 세대의 한 단면을 잘 묘사한 청춘 영화

  • 11장. 모듈과 패키지에 대한 이해

  • 12장. 주요한 내장 모듈
    • 추천영화 1. 사회 공학을 영화의 반전 기법으로 활용한 걸작

  • 13장. 클래스에 대한 이해

  • 14장. GUI 기초
    • 추천영화 1. 스턱스넷에 대한 기록 영화

  • 15장. 파이썬의 활용
    • 간단한 UDP/TCP 소켓 작성
    • 보안 알고리즘의 이해

  • 부록. My-SQL과 파이썬 연동 설정

도서 오류 신고

도서 오류 신고

에이콘출판사에 관심을 가져 주셔서 고맙습니다. 도서의 오탈자 정보를 알려주시면 다음 개정판 인쇄 시 반영하겠습니다.

오탈자 정보는 다음과 같이 입력해 주시면 됩니다.

(예시) p.100 아래에서 3행 : '몇일'동안 -> 며칠동안

정오표

정오표

[p.53 아래에서 4행]
16 >> 22
->
16 >> 2

[p.96 예제 6-13]
name = "Oh Dog Jin"
->
name = "Oh Dong Jin"

[p.160 예제 10-15 중간 부분]
functionScore(score)처럼 함수 호출이 발생하면 ... result에에서 참조한다.
->
functionScore(score)처럼 함수 호출이 발생하면 ... result에서 참조한다.

[p.199 예제 13-2]
nam이라는 인자 대신
->
man이라는 인자 대신

[p.219 아래에서 4-5행]
super(Base, self).display() 문을 추가한다.
->
super(Derived, self).display() 문을 추가한다.