즐겁고 신나는 리버스 엔지니어링 세계를 여행하기 위한 가이드!



소프트웨어 리버스 엔지니어링이란 응용 프로그램의 내부 구조와 동작 원리를 탐구하는 기술입니다. 


신기한 모험과 흥미로운 도전 과제들로 가득한 리버스 엔지니어링의 길로 들어선 독자 여러분을 환영합니다.


리버싱을 잘 하면 프로그램의 속을 훤히 들여다 볼 수 있습니다. 자신이 만든 프로그램도 아니고 소스 코드조차 없는 상태에서 말이죠. 리버싱 기술을 잘 활용하면 개발/테스트 단계에서 미처 발견하지 못한 버그나 취약점을 파악할 수 있고, 파일이나 메모리를 직접 수정(패치)하여 문제를 해결할 수 있습니다. 그리고 더 나아가서 전혀 새로운 기능을 추가시켜 프로그램의 기능을 향상 시킬 수 도 있습니다. 마치 마법과도 같은 멋진 일을 할 수 있는 것입니다.



리버싱 공부를 시작할 때 거창한 사전 준비 같은 건 필요 없습니다. 


이야기를 하나 들려 드리겠습니다. 제가 수 년간 리버싱 블로그를 운영해 오면서 가장 많이 받은 질문은 “도대체 리버싱을 어떻게 공부해야 하나요?” 였습니다. 여러 가지 경험담과 실패 사례를 분석해본 결과 리버싱 공부를 실패하는 가장 큰 원인은 공부 자체의 분량이나 어려움이 아니었습니다. 오히려 “전 C언어도 모르는데요?”, “어셈블리를 마스터 해야 하나요?”, “저는 OS 구조를 잘 모릅니다”, “디버거를 사용할 줄 몰라요”, “이 많은 것들을 언제 다 공부하고 본격적인 리버싱 공부를 시작하죠?” 와 같은 막연한 두려움과 걱정 때문에 중도에 포기하는 것이 주요한 실패 원인이었습니다.


본격적인 리버싱 공부는 C언어, 어셈블리, OS구조, 디버거 사용법등을 공부한다는 것과 같습니다. 이런 것들을 이미 알고 있는 사람은 리버싱 입문 과정이 필요 없습니다. 이미 리버싱 전문가라는 뜻이니까요. 아직 리버싱에 대해 알고 있는 게 하나도 없다구요? 실망하지 마세요. 오히려 참 좋은 일입니다. 바꿔 말하자면 앞으로 머릿속에 입력될 지식이 많다는 뜻입니다. 지금보다 더 똑똑해지고, 더 가치 있는 사람이 될 테니 참 좋은 일이라고 할 수 있습니다.



이 책은 리버스 엔지니어를 꿈꾸는 리버싱 입문자들과 리버싱 기술에 흥미를 갖고 있는 개발자 등을 위하여 쓰여졌습니다. 


리버싱 기술들을 단순히 공식처럼 외우기만 해서는 필요한 순간에 제대로 응용 할 수 없습니다. 관련 지식을 얻고 내부 동작 원리를 이해하는 것이야말로 가장 중요합니다.  따라서 동작 원리를 설명하고 이해 시키는 데에 주안점을 두었습니다. 그럼 이 책이 왜 리버스 엔지니어링 입문서로 적합한지 제 소개를 곁들여서 설명해보도록 하겠습니다.


첫 째는 개발과 분석 경험입니다. 보통 리버스 엔지니어는 업무 과정에서 전문적인 리버싱 실력뿐만 아니라 어느 정도의 개발 실력도 갖추게 됩니다. 저는 네트워크 어플리케이션 개발자로 일하다가 악성 코드 분석 업무를 맡으면서 리버싱 기술을 익히게 되었습니다. 즉 전문 개발자에서 전문 리버서로  전향한 흔치 않은 케이스입니다. 이 두 기술은 그야말로 찰떡궁합처럼 상호 발전하고 보완하면서 기가 막힌 콤비 플레이를 보여줍니다. 평소에 이 둘을 양 날개에 비유하며 다양한 업무에 활용해 왔습니다. 따라서 자연스럽게 개발과 리버싱이라는 두 가지의 관점으로 프로그램을 분석하게 되었습니다. 이 책의 거의 모든 실습 예제는 리버싱 과정에서 얻은 지식과 노하우를 가지고 제가 직접 개발한 것으로서 군더더기 없이 각 장의 주제만을 집중해서 보여줍니다.


둘 째는 교육 및 발표 경험입니다. 회사에서 고참 직원이 되면서 점점 사내 교육/세미나, 외부 발표 기회가 많아졌습니다. 리버싱 입문자들에게 직접 리버싱 교육을 시키면서 그들의 어려움과 궁금증을 잘 파악할 수 있는 계기가 되었지요. 나름대로 어떻게 하면 쉽게 설명할 수 있을지 고민하면서 자연스레 리버싱 입문자를 위한 교육 노하우를 쌓을 수 있었습니다. 이 경험이 책의 구성, 내용, 예제 등 전반에 걸쳐 큰 영향을 끼쳐서 어려운 리버싱 기술을 비교적 쉽게 이해할 수 있도록 설명할 수 있었습니다.


셋 째는 다양한 커뮤니케이션 경험입니다. 몇 년 전부터 리버싱 전문 블로그를 운영하고 있습니다. 처음에는 제가 보유한 리버싱 기술의 정리 차원에서 가볍게 시작하였습니다. 그런데 방문객들이 조금씩 늘어 나면서 여러 가지 다양한 질문들이 올라오기 시작했습니다. 전 사실 이때 좀 놀랐습니다. 그 동안 우리나라는 리버싱의 불모지라고 여겼었는데 생각보다 많은 사람들이 관심을 보였고 관심 범위가 매우 다양했습니다. 그러면서 시야가 밖으로 넓어지는 계기가 되었습니다. 다른 리버싱 블로그도 방문하고 다양한 사람들의 글과 질문을 접하면서 그들의 관심사를 알 수 있게 되었는데요. 리버싱 입문자들은 체계적인 학습 방법을 알고 싶어 했습니다. 그리고 입문 과정을 지난 사람들은 좀 더 전문적인 리버싱 기술과 내부 동작 원리에 목 말라 하고 있었습니다. 블로그 활동을 어느 정도 한 이후부터는 체계적인 학습도구로서 기술 서적 집필을 고려하게 되었습니다.


결과적으로 저의 이러한 리버싱과 개발, 교육/발표, 다양한 커뮤니케이션 경험을 기반으로 하여 리버싱 입문 서적을 완성하게 되었습니다.



독자 여러분께 이 책을 이용한 리버싱 학습 방법에 대한 팁을 소개해 드리겠습니다.


첫째, 기술 서적은 책꽂이를 예쁘게 장식하는 용도가 아닙니다. 여러분의 기술력을 향상 시키기 위한 하나의 도구입니다. 따라서 책의 중요 부분에 밑줄을 팍팍 긋고, 여백에다가 여러분 자신의 생각과 느낌 등을 적어보시기 바랍니다. 연관된 기술, 주의 사항, 기술의 장단점, 저자와 다른 여러분 자신만의 아이디어 등을 신나게 기록하면서 여러분만의 책으로 만들어 보세요. 이런 리버싱 기술 서적을 한 권씩 독파하다 보면 어느 순간 여러분만의 독자적인 리버싱 세계를 구축하면서 리버싱 전문가가 될 수 있답니다.


둘째, 긍정적이고 여유 있는 마음 자세를 가지세요. 리버싱은 OS 의 가장 밑바닥까지 내려가는 심오한 기술입니다. 공부할 내용이 많고 그 특성상 대부분의 내용이 직접 실습하고 눈으로 확인해야만 이해 되는 경우가 많습니다. 이러한 과정을 긍적적인 마음으로 즐기시기 바랍니다. 그리고 리버싱 공부는 얼마나 머리가 좋은지가 아니라 얼마나 시간을 투자했는지가 더 중요합니다. 조급해 하지 말고 여유 있는 느긋한 마음 자세로 공부를 해나가시기 바랍니다.


셋째, 계속 도전하세요. 리버싱이 잘 안될 때는 멈추지 말고 다양한 방법으로 계속 시도해 보시기 바랍니다. 분명히 해결 방법은 존재합니다. 이미 몇 년 전에 누군가 성공시킨 일입니다. 관련 자료를 검색하고 다양하게 시도하면 자신의 실력도 향상될 뿐 아니라 문제가 해결되었을 때 엄청난 성취감을 느낄 수 있습니다. 이러한 성공 경험이 하나씩 쌓이면서 자신감이 생기고 리버싱 실력은 눈부시게 향상됩니다. 또한 경험을 통해 얻은 자신감은 무의식적으로 업무에 영향을 끼쳐서 일이 잘 풀리는 방향으로 나아가게 합니다.



이 책을 통하여 독자 분들의 위시 리스트가 하나씩 이루어 지고, 리버싱 기술이 다양한 IT 분야에서 널리 활용되기를 바랍니다. 감사합니다.



이 승 원

www.reversecore.com

reversecore@gmail.com


저작자 표시 비영리 변경 금지
신고
  1. reversecore 2012.10.10 00:52 신고 댓글주소 | 수정 | 삭제 | 댓글

    "리버싱 핵심 원리"의 서문입니다.

  2. hello 2012.10.10 12:22 신고 댓글주소 | 수정 | 삭제 | 댓글

    안녕하세요~

    지난번 upx 부분에서 질문드렸던 학생입니다.

    upx 관련 해서 메일을 보냈는데, 확인해주실수 있으신가요?

    3일 전에 보냈는데 gmail로는 수신확인이 안되서요 ㅠ-ㅠ

  3. 악성코딩 2012.10.10 13:35 신고 댓글주소 | 수정 | 삭제 | 댓글

    책가격 시간이 지나면 떨어질까요?

  4. 리버싱입문자 2012.10.10 16:58 신고 댓글주소 | 수정 | 삭제 | 댓글

    안녕하세요.
    제가 공부를하면서 궁금한점이있습니다.
    리버싱엔지니어 기술을 배우려면 개발경험없이 리버싱분야로 취업이 가능한가요? 그리고 리버싱을 다루는 회사가 많이있나요? 안x 하x리 게임업체 정도로 나뉠수있나요? 저는 악성코드를 분석하고싶어서요 과연 진로로 일을할수있는 회사가 많은지 궁금해서요

    • reversecore 2012.10.11 00:39 신고 댓글주소 | 수정 | 삭제

      안녕하세요.

      회사마다 자체 채용기준이 있기 때문에 취업 가능 여부는 제가 말씀드릴 수 있는 사항은 아닙니다.

      제가 아는 한도에서 악성 코드를 분석할 수 있는 곳은 말씀하신 보안업체, 게임업체, 국가 기관 정도입니다.

      그중에서도 악성코드 분석 전문 업체는 역시 보안업체입니다.

      감사합니다.

  5. 리셋 2012.10.10 19:13 신고 댓글주소 | 수정 | 삭제 | 댓글

    안녕하세요.
    리버싱에 입문하고자 책을 구매한 학생입니다^^
    http://test_r.blog.me/168393342

    그런데, 저는 책에있는 모든 예제파일을 구할 수 있을거라생각하고
    뒷면에 예제파일을 이 블로그에서 구할 수 있다는 글귀를 보고 들어왔는데
    어디에있는지 찾아볼 수 없네요 ㅠㅠ

    헬로월드부터 해보려고했는데..

    답변 기다리겠습니다!

    • 담벼락 2012.10.10 19:54 신고 댓글주소 | 수정 | 삭제

      http://www.reversecore.com/category/book/bin%26src
      카테고리 보시면 book +누르셔서 여시면 bin&src라는 곳에 예제가 있습니다.

    • reversecore 2012.10.11 00:32 신고 댓글주소 | 수정 | 삭제

      리셋님, 안녕하세요~

      블로그의 책소개 감사합니다. ^^~

      말씀하신대로 실습예제 + 소스코드가 눈에 잘 띄지 않는 문제가 있습니다. 블로그 타이틀 부분에 걸 수 있다면 쉽게 찾으실 수 있을것 같습니다. 방법을 찾아보도록 하겠습니다.

      감사합니다.

    • reversecore 2012.10.11 01:01 신고 댓글주소 | 수정 | 삭제

      담벼락님, 친절한 답변 감사 드립니다~~ ^^

      카테고리 이름을 한글로 고치면서 경로가 아래와 같이 변경되었습니다.

      http://www.reversecore.com/104

      감사합니다.

  6. 리버싱에한걸음 2012.10.11 21:57 신고 댓글주소 | 수정 | 삭제 | 댓글

    저희 부모님을 설득해서
    오늘 드디어 책구매를 하게됬네요 흐흐
    아빠한테 해커가 나쁜일을 하는게 아니라고 간신히 설득해서 사게됬다는 ㅠㅠ
    아 기분이 날아갈것만 같습니다 ㅋㅋ
    시험도 끝났으니 리버싱을 공부할수 있는
    좋은기회가 될것같네요
    학교가서 보고 집가서 보고 꾸준히 공부해야겠습니다
    제가 미래에 코어님같이 보안실력가 가 되있을거라 생각하니
    기분이 좋아진다는 ㅎㅎ

    • reversecore 2012.10.11 22:48 신고 댓글주소 | 수정 | 삭제

      안녕하세요. ^^~
      해킹, 리버싱 꿈나무시군요~ 반갑습니다.

      리버싱에 대한 관심과 열정이 대단하신것 같습니다.
      가까운 미래에 틀림없이 저를 뛰어넘는 훌륭한 보안 전문가가 되실 것입니다.

      꿈을 크게 가지고 즐겁게 공부하시기 바랍니다. ^^~

      감사합니다.

  7. 불멸자 2012.10.13 23:03 신고 댓글주소 | 수정 | 삭제 | 댓글

    안녕하세요. 코어님 책을 공부하고있는 독자입니다.
    제가 책을 읽다가 갑자기 궁금한것이 생겨 댓글 달아봅니다.ㅋㅋ

    p.80의 내용에 4바이트의 크기를가지는
    두 변수를 저장하기위해 sub esp,8 을 한다고 써져
    있는데요 여기서 의문점이 공간을 확보하려면
    add esp,8 을 해야하지않나요? 어째서 sub를
    사용하는지 이해가 가지 않습니다

  8. 늙은초보 2012.10.14 17:19 신고 댓글주소 | 수정 | 삭제 | 댓글

    ESP 는 stack 포인터로 쓰입니다. 스택은 높은 메모리주소에서 낮은메모리 주소로 증가 합니다. 현재 스택에서(예로 현재 스택포인터는 100번지 스택메모리주소를 가리키고 있씀) 4byte * 2 (8byte) 공간을 확보하려면 100번지 - 8 로 낮은 주소로 내려 갑니다. 스택포인터는 높은 주소에서 낮은 주소로 이동할때 스택 메모리 공간이 커집니다.

  9. 불멸자 2012.10.14 22:46 신고 댓글주소 | 수정 | 삭제 | 댓글

    아 1강까지는 이해가 쉬웠는데
    스택프래임부터 시작해서 시리얼번호 크랙미 풀이는
    이해가 너무 힘드네 ㅠㅠ
    아무래도 직접실습하지않고 풀이만봐서 그런가
    이해갈때까지 계속 복습해야할거같네요

    • reversecore 2012.10.14 23:47 신고 댓글주소 | 수정 | 삭제

      안녕하세요~

      말씀하신대로 직접 실습을 해보시면 이해의 폭이 달라지실 것입니다.
      엔지니어링이란게 그런것이겠죠? ^^

      조급하지 않게 한발 한발 나아가시면 됩니다.

      감사합니다.

  10. 질문요 2012.11.04 23:00 신고 댓글주소 | 수정 | 삭제 | 댓글

    오늘 첫 번째 정독 끝났습니다.

    동작원리, 개념에 대해서 꼼꼼하게 잘 설명해주셨더라구요. 그리고 질문하면 댓글도 달아주시고 정말 감사합니다. 덕분에 리버싱이라는 분야에 한발 더 내딛을 수 있게 되었습니다.

    국내에 네트웍프밍 서적은 대부분 TCP/IP 소켓프밍뿐이던데 커널네트웍프밍이나, 로우등 이런 서적은 국내에 없나요?

    • reversecore 2012.11.07 05:49 신고 댓글주소 | 수정 | 삭제

      와~ 불과 한달여만에 책을 다보셨군요.
      대단하십니다.
      제가 알기로 최초이십니다. ^^

      네트워크 프로그래밍 책은 제가 그 분야를 떠난지 오래되서 잘 모르겠네요~ ^^

      감사합니다.

  11. 1쇄구매자 2013.01.14 16:55 신고 댓글주소 | 수정 | 삭제 | 댓글

    축하합니다. 아직 초반부 읽고 있지만 마음에 드는 책입니다.
    2판~3판~ 나와주길~

  12. 사이다한잔 2013.02.06 22:10 신고 댓글주소 | 수정 | 삭제 | 댓글

    책이 오늘 왔습니다. 아직 02를 보고 있지만, 쉽게 이해시키려는 저자의 노력이 돋보입니다. 감사합니다. 열심히 공부하겠습니다.

  13. 강경태 2013.05.09 21:43 신고 댓글주소 | 수정 | 삭제 | 댓글

    그런데 안티디버깅 실습중인데 PEB.Ldr 이부분이 무한루프에서 FF를 전부 NULL로 수정했는데도.

    무한루프문에서 빠져나오질 못합니다. 미치겠습니다.

    좀 알려주세요.

  14. 박경옥 2013.10.29 23:19 신고 댓글주소 | 수정 | 삭제 | 댓글

    안녕하십니까!
    아직 책을 읽지 못하였습니다. 헌데 2쇄가 발간이 된듯 하군요.
    리버싱에 대하여 오래전부터 관심을 가지게 되었으나 형편상 자세한 내용을 못찻아 꿈을 접은지 오래 되었는데...가족을 꾸려 나아가는 가장이 되고 보니 무언가 이룩한 일이 아무 것도 없어
    꿈에 다시 도전장을 던저 보려 밤중에 이렇게 글을 남깁니다.
    핵심원리 2쇄 책을 구입하여 정독을 한 후 관리자 님께 궁금증과 개인적인 1人 CEO 가 되보려
    합니다.
    응원해 주십시요. 관리자 님의 글이 한사람의 인생을 바꾸는 또다른 시각의 열매로 열리길
    기대 하는 한사람입니다.
    세상사는 가장 귀한 존재가 되시길.........화이팅!

  15. 2016.11.23 08:31 댓글주소 | 수정 | 삭제 | 댓글

    비밀댓글입니다





티스토리 툴바