가상 인터뷰 형식을 빌려 저와 책에 대한 소개를 합니다. 그리고 블로그와 책의 독자님들께 받은 질문들에 대한 답변을 정리하였습니다.



- 안녕하세요? 본인 소개를 부탁 드립니다.


안녕하세요~ 리버스 엔지니어 '리버스코어' 입니다.    

대학 시절부터 컴퓨터 프로그래밍에 매력을 느껴 공부를 했던 계기로 IT 에 입문하였구요.

소프트웨어 업체에서 3년 동안 네트워크 솔루션을 개발하였습니다.

그 후 보안회사로 이직하여 그때부터 쭉 악성 코드 분석업무를 하고 있습니다.

몇 년 전부터 리버스 엔지니어링 전문 블로그(ReverseCore.com)를 운영하고 있지요.



- 이번에 리버스 엔지니어링 분야의 책을 쓰셨는데요, 간단한 책 소개를 부탁 드릴께요.


'리버싱 핵심 원리' 라는 소프트웨어 리버스 엔지니어링 입문용 기술 서적입니다.


컨셉은 다음과 같습니다.


1) 쉽게 쉽게 쉽게

2) 기술 동작 원리의 이해

3) 흥미와 도전 욕구를 자극


이를 위하여 방대한 분량(1,020 페이지), 풍부한 그림(889개), 실습 예제 및 관련 파일(114개), 소스 코드(62개)를 제공하였습니다. 



대부분의 리버싱 기술은 기초적인 동작 원리를 이해하고 나면 그 뒤부터는 변형과 응용의 연속입니다. 따라서 원리를 이해하기 위한 개념 설명과 실습 예제 분석에 대부분의 지면을 할당하였습니다. 



그리고 리버스코어 블로그를 운영하면서 받았던 질문 중에서 초보자에게 유용한 질문과 답변들을 추려서 FAQ 형식으로 각 장의 뒤쪽에 배치 했고요. 리버스 엔지니어링을 처음 배울 때의 어려움과 고민에 대한 제 생각을 곳곳에 넣어 두었습니다.



- 책을 쓰게 된 계기가 있으실 것 같은데요.


리버스 엔지니어링이라는 기술을 처음 접한 이후 그 매력에 완전히 빠져 들었습니다.


실행 파일(PE File)의 구조와 프로세스의 동작 원리를 공부한 후 다른 프로그램의 내부 구조와 동작 원리를 파악할 수 있다는 사실에 엄청난 희열을 느꼈지요. 처음에는 악성 코드를 분석하여 악의적인 행위를 파악하는 일을 주로 하였습니다. 다양한 악성 코드의 기발한 리버싱 기법들을 보고 배우면서 정말 즐거웠습니다. 


하지만 이렇게 획기적이고 가능성이 무궁무진한 기술들이 주로 나쁜 의도를 가진 사람들에 의해 악용되고 있었습니다. 즉, 리버싱 기술 자체는 매우 쓸모가 많은데 그걸 나쁘게 사용한 사람들에 의해서 '어둠의 기술'로 저평가 되고 있고 별다른 활용 방안이 없다는 사실이 매우 안타까웠습니다.


그때부터 이 리버스 엔지니어링 기술을 좋은 쪽으로 활용할 수 없을까 궁리하게 되었지요. 그러다가 프로그램의 내부 동작 원리를 '분석'하는 차원을 뛰어 넘어 프로그램에 존재하는 버그를 수정하고, 새로운 기능을 추가하는 '패치' 작업까지 관심이 확대되었습니다. 리버스 엔지니어링 기술이 반드시 IT 산업에 큰 도움을 줄 수 있을 거라는 확신이 들었습니다.


제 나름대로 리버스 엔지니어링 기술을 전파시키고 싶어서 블로그 활동을 시작하였습니다. 그러던 중 많은 분들께서 체계적인 학습 방법에 대해 목말라 한다는 것을 알게 되었죠. 그래서 리버스 엔지니어링 입문용 기술 서적을 써보자고 마음먹게 되었습니다.



- 리버싱 기술을 배우면 뭘 할 수 있는지 얘기해 주시겠어요?

    

다른 프로그램의 내부 구조와 동작 원리를 파악할 수 있습니다.

예를 들어 악성 코드의 동작 원리를 파악하여 감염 경로, 악의적인 행위를 알아내고, 진단 및 치료 방법에 대한 아이디어를  얻을 수 있습니다. 특히 다른 파일을 감염 시켜 실행 파일 형태를 바꿔 버리는 기능을 가진 Virus 류의 악성 코드는 상세한 분석이 이루어져야만 진단과 치료 코드를 작성할 수 있습니다.


프로그램의 버그를 수정하고 새로운 기능을 추가 시킬 수도 있습니다. 

예를 들면 제작자가 업데이트를 중단한 유틸리티의 버그를 수정할 수 도 있고, 자신만의 독창적인 아이디어를 적용해 새로운 기술을 추가 시킬 수 도 있는 것이죠. (실제로 개발 업무를 담당하시는 분들께서 자신들의 프로젝트에 DLL Injection 과 API Hooking 기술을 활용하는데 조언을 구해오시는 경우가 종종 있습니다.)


제가 최초로 패치시킨 유틸리티는 출시된지 오래된 fhred 라는 이름의 hex editor 였습니다. 마우스 휠 스크롤 기능이 없어서 매우 불편했습니다. 그래서 마우스 메시지 후킹 기법을 사용하여 휠 스크롤 기능을 추가시켰습니다. 



사실 이때 이미 최신 버전의 frhed 에서는 마우스 휠 기능이 지원되고 있었습니다. 제가 가진건 아주 옛날 버전이었던 겁니다. 그냥 최신 버전을 사용하면 되는 거였지요. 


하지만 제가 배운 기술을 활용하여 제 손으로 직접 패치하고 싶었습니다. 결과적으로 이 작업을 계기로 리버스 엔지니어링 기술의 '패치' 활용 가능성에 대해 눈을 뜨게 되었습니다.



- 리버스 엔지니어링 분야의 진로에 대해서 소개해 주시겠어요?


최근에는 국내 기준으로 보안업체, 게임업체, 게임퍼블리싱업체, 대기업/금융업, 국가 행정 부서, 국가 연구 기관 등이 있습니다. 리버스 엔지니어로써 파일을 상세 분석하는 업무를 하시려면 보안업체, 게임업체, 사이버수사대 등을 고려하시면 될 것입니다. 각 업체별로 다양한 업무 직군으로 세분화되기 때문에 사전에 자신이 원하는 분야의 일을 맡을 수 있을지 확인하셔야 겠지요.


참고로 하드웨어 분야(자동차, 모바일, 반도체, 기타)에서는 리버스 엔지니어링의 역사가 오래 되었습니다. 경쟁사에서 신제품을 출시하면 바로 구입하여 상세 분석에 들어갑니다. 치수를 측정하고, 재질을 조사하고, 회로 기판 구조를 파악하는 등의 작업을 하지요. 기구의 설계 관점과 제품의 성능 관점에서 다양한 분석과 테스트가 이루어 집니다. 소위 말해서 벤치 마킹 작업입니다. 


향후 소프트웨어 분야에서도 전문 리버스 엔지니어가 이런 식의 벤치 마킹 업무를 수행하지 않을까 조심스레 예상해 봅니다. 



- 책 얘기로 돌아가서요, 책 출시 후 반응은 어떻습니까?


너무나 감사하게도 반응이 좋습니다. 인상 깊었던 점은 비슷한 시기에 출시된 리버싱, 디지털 포렌직, 해킹 관련 보안 서적들이 골고루 판매 순위 상위권에 자리잡고 있다는 것입니다. 아마 국내에서도 리버싱, 해킹, 보안에 관한 관심이 그만큼 커진게 아닐까 하고 생각해 봅니다. 


기술서적의 저자들은 자신들이 가장 자신있는 부분에 대해서 아주 자세하고 쓰게 됩니다. 따라서 책마다 저자들의 강점과 개성이 녹아있을 수 밖에 없습니다. 앞으로 더 다양한 리버스 엔지니어링 기술 서적들이 출시되어 전반적인 리버싱 기술 수준이 올라가길 희망합니다. 



- 이 책의 장점에 대해서 알려주시죠.


장점으로는 앞에서 소개한 쉬운 설명, 기술 동작 원리의 이해에 초점, 독자의 흥미와 도전 욕구를 자극하는 것입니다. 


추가적인 장점과 특징에 대해 알고 싶으시다면 책의 서문을 참고하시면 될 것 같습니다.


[리버싱 핵심 원리] 서문



- 책의 세부 내용에 대해서 좀 더 구체적으로 알려주실 수 있을까요?


좀 더 정리해서 다음 포스팅에 올릴께요~



- 기술 서적을 집필하면서 여러가지 에피소드가 많았을것 같은데요. 몇 가지만 소개해 주시겠어요?


어쨌든 집필 과정, 에피소드, 시행착오 등에 대해서 한번은 정리하고 싶었는데요. 

이것도 따로 올리는게 좋겠네요... ^^



- 인터뷰에 응해주셔서 감사합니다. 저자님의 향후 계획은 어떠신지요?


"리버싱 핵심 원리"의 AS (질문/답변)를 하면서 계속 지켜보고 싶습니다. 이 책은 제가 쓰긴 했지만 이제 정식으로 출시되어 제 손을 떠나 독자님들의 손으로 보내어졌습니다. 앞으로 독자님들에 의해서 얼마나 흥미진진한 일이 펼쳐지게 될지 저자로서 너무 궁금하고 설레입니다. (마치 책이 살아서 움직이며 자신의 운명을 개척해 나가는 것처럼 생각됩니다. ^^)


그리고 ReverseCore 블로그에 새로운 컨텐츠를 올릴 예정입니다. 일단 hxdhook 연재를 잘 마무리하고, 그 다음에는 64bit API 후킹에 대해 다뤄볼 생각입니다. 그 이후는 바이러스 파일 분석이 될지, 다이알로그 리소스 패치가 될지 아직 결정하지 않았습니다. (둘 다 너무 재미있는 주제입니다~ ^^)



- 마지막으로 리버스 엔지니어를 목표로 열심히 공부하시는 독자분들께 한 말씀 해주세요~


초반에 어려움을 느끼시는 분들께 이야기를 하나 들려드릴께요~ ^^

정지 마찰력(static friction)과 운동 마찰력(kinetic friction)의 얘기입니다.

정지한 물체를 밀어서 움직이게 하려면 처음에는 높은 저항력(정지 마찰력)때문에 힘이 많이 듭니다. 그런데 일단 물체가 '움찔'하고 움직이기 시작하면 그때부터 저항력(운동 마찰력)은 많이 낮아지면서 훨씬 수월하게 밀고 갈 수 있습니다. (주차장에서 차를 밀어본 경험이 있으시다면 금방 이해하실 겁니다. ^^*)

즉, 정지 마찰력 > 운동 마찰력 의 관계가 성립합니다.

Wiki : 마찰력
Google 이미지 검색 : 정지 마찰력

뭐든지 마찬가지라고 생각합니다. 처음에는 힘들지만 일단 시작하고 나면 탄력을 받아 일이 쉬워집니다. "시작이 반이다" 라는 속담은 정말 정확한 표현이었던거죠.

리버스 엔지니어링도 마찬가지입니다. 처음에는 힘들지만 그 정지마찰력 시기를 잘 넘기고 운동마찰력 영역으로 들어가면 속도가 붙고 재미도 생깁니다. 

저도 똑같이 그 과정을 거쳐왔답니다. 그러니 모두들 용기를 내세요~ ^^*


ReverseCore


저작자 표시 비영리 변경 금지
신고
    이전 댓글 더보기
  1. DarkByte 2012.11.08 23:04 신고 댓글주소 | 수정 | 삭제 | 댓글

    안녕하세요. 어렵지만 꿋꿋히 책을읽는 초보입니다. 혹시 언제 날잡아서 오프라인 질문답변이나 강의가 가능할련지요? 싸인회도 한번열어주시면 좋은기회가 될거라생각합니다 ㅎㅎ

    • reversecore 2012.11.10 00:20 신고 댓글주소 | 수정 | 삭제

      안녕하세요~ ^^

      오프라인 만남이 확실히 도움이 될 것입니다만, 제 개인 사정때문에 어려울 것 같습니다.

      대신 이곳에 질문을 올려주시면 답변해 드릴께요~ ^^

      감사합니다.

  2. ssongil 2012.11.11 00:27 신고 댓글주소 | 수정 | 삭제 | 댓글

    리버싱에 관심만 가지다가 책을 찾다보니 딱 제가 찾고 있던 책이 떡하니!!!
    바로 구매해서 열심히 보고 있습니다.

    어서 공부해서 질문을 올릴 수 있었으면 좋겠네요^^

  3. R 2012.11.11 12:05 신고 댓글주소 | 수정 | 삭제 | 댓글

    포맷하면서 이왕이면 리버싱에 최적화된 운영체제로 다시 설치하고 싶은데
    어떤걸 추천하시나요? XP 32비트?

  4. set 2012.11.12 14:01 신고 댓글주소 | 수정 | 삭제 | 댓글

    안녕하세요 이번에 좋은책이나왔다고해서 구매하고 공부중인데
    정말 좋은책이네요 ㅎ
    그런데 저자님의 올리디버거 설정파일은 어디있나요?
    홈페이지에 있다고 나왔는데 찾기어렵네요 ㅠ

    • reversecore 2012.11.12 22:58 신고 댓글주소 | 수정 | 삭제

      안녕하세요.

      소스코드 압축을 해제하시면

      01_기초_리버싱\02_Hello_World!_리버싱\etc\ollydbg.ini

      위 경로에 존재합니다.

      OllyDbg 설치 경로에 복사해주시면 됩니다.

      감사합니다.

  5. 양동표 2012.11.17 12:08 신고 댓글주소 | 수정 | 삭제 | 댓글

    기다리고 기다렸는데 드디어 나왔군요!

    밖에서 보고 싶었는데 군대 입대 후 오랜만에 들어와보니 책이 나와있네요.

    그래서 싸지방에서 바로 구매했습니다!

    군생활 동안 열심히 공부하겠습니다!!

    • reversecore 2012.11.20 12:56 신고 댓글주소 | 수정 | 삭제

      안녕하세요.

      와~ 군생활도 힘드실텐데... 리버싱 공부까지... ^^~
      의욕이 대단하십니다.

      공부하시다가 질문 있으시면 올려주세요~

      감사합니다.

  6. 송혜영 2012.11.19 21:56 신고 댓글주소 | 수정 | 삭제 | 댓글

    129p에 add명령어는 3바이트 call명령어는 5바이트 라고 나와있는데
    여기서 사용하는 바이트와 스텍의 크기와는 아무 상관이 없는건가요?
    그리고 각각의 명령어가 사용하는 바이트를 어떻게 알수있나요?

    • reversecore 2012.11.20 12:55 신고 댓글주소 | 수정 | 삭제

      안녕하세요~

      네, Instruction 명령어의 길이는 스택과는 상관이 없습니다.
      명령어의 바이트(내용), 길이는 OllyDbg 에서 직접 보셔도 되고요.
      그 해석 원리를 이해하시려면 49장 IA-32 Instruction 을 참고하시면 됩니다~

      감사합니다.

  7. 송혜영 2012.11.21 18:27 신고 댓글주소 | 수정 | 삭제 | 댓글

    안녕하세요 132p목표(2)에서

    registration code를 찾는 부분에서 입력스트링과 정답을 한번 비교해서
    맞으면 정답부분으로 틀리면 틀린 부분으로 가면 되는데
    왜 여기선 입력스트링과 정답을 정답부분에서도 하고 틀린부분에서도하는지 잘모르겠습니다.

    • reversecore 2012.11.25 00:53 신고 댓글주소 | 수정 | 삭제

      안녕하세요.

      ^^ 크랙미를 만드신 lena 님께서 그렇게 프로그래밍을 하셨다고 밖에는 설명드리기 어렵겠습니다.

      저라면 말씀하신 대로 한번만 비교하도록 프로그래밍 했을 것 같습니다.

      감사합니다.

  8. 임영철 2012.11.28 16:00 신고 댓글주소 | 수정 | 삭제 | 댓글

    안녕하세요 리버싱 핵심원리 p384 그림 27.2 의 내용과
    본문의 내용이 상이 하다고 생각되어 질문을 드립니다.

    코드 인젝션 단원 부분 인데요
    그림 27.2 에서
    10001002 주소에서는 PUSH 1000781C
    10001007 주소에서는 PUSH 10007828
    1000100E 주소에서는 CALL DWORD PTR DS:[100060E4]

    이렇게 되어있는데 본문 설명과 그림 27.3, 27.4 에서는
    10001002 주소 PUSH 10009290
    10001007 주소 PUSH 1000929C
    1000100E 주소 CALL DWORD PTR DS:[100080F0]

    이렇게 기입 되어 있습니다.
    그림과 본문이 달라서 몇번을 봐도 잘 이해가 되지 않습니다.
    제가 놓친 부분이 있는 걸까요? ㅠ_-

    • reversecore 2012.11.29 00:15 신고 댓글주소 | 수정 | 삭제

      안녕하세요.

      매우 죄송하게도 그림이 잘 못 되었습니다.
      errata 페이지에 정확한 그림을 올려두었으니 참고하시기 바랍니다.

      불편을 끼쳐 드려 죄송합니다~

      추가적인 질문있으시면 또 올려주세요~

      감사합니다.

  9. 2012.11.30 21:08 댓글주소 | 수정 | 삭제 | 댓글

    비밀댓글입니다

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

      안녕하세요.

      ㅎㅎㅎ 지금 하신 방법이 올바른 방법이라고 생각됩니다.

      어떤 드라이버라도 XP ~ 7, 32/64bit 를 모두 지원할 수 는 없답니다.
      그 OS 에 맞는 전용 드라이버를 사용하는 것이 원칙입니다.

      감사합니다.

  10. 2012.12.03 23:55 댓글주소 | 수정 | 삭제 | 댓글

    비밀댓글입니다

    • reversecore 2012.12.04 21:23 신고 댓글주소 | 수정 | 삭제

      안녕하세요.

      1. Themida 는 프로텍터 중에서도 지존이기 때문에 다양한 안티 디버깅 기법이 적용되어 있습니다. 어떤 식으로 왜 튕기는지에 대해서는 저도 답변 드리기 어렵습니다.

      2. 설치 프로그램(Installer)에서 각 OS 버전별로 가지고 있다가 해당 OS 에 맞는 드라이버를 설치합니다. 프로그램에서 매번 하는게 아니라 인스톨러에서 최초 설치 시 한번 수행하는 거라고 생각하시면 됩니다.

      감사합니다.

  11. null0305 2012.12.04 23:37 신고 댓글주소 | 수정 | 삭제 | 댓글

    안녕하세요
    오늘 리버싱핵심원리 를 구입하여 읽어보앗더니
    제가 아는거와 모르는 방법이 있어서.
    열심히 공부하기로 다짐하고 악성코드 분석쪽으로 도전할려고합니다.
    (사실은 처음부터 분석쪽 이 어릴적 꿈이여서 인터넷을 통해 공부를 하엿습니다)
    좋은책 을 써주셔서 정말로 감사합니다 ㅠㅠ
    악성코드 분석쪽 으로 일을 갈려면
    궁금한게 있습니다.
    자격증(?) 하고 무엇이 필요한가요?
    악성코드 분석한걸 모아서 포트폴리오 로 하여도 가능할까요?
    긴댓글 읽어주셔서 감사합니다^^~ 좋은하루 되세요~ㅎㅎ

    • reversecore 2012.12.12 06:50 신고 댓글주소 | 수정 | 삭제

      안녕하세요.

      악성코드 분석 꿈나무를 뵙게 되서 반갑습니다. ^^~

      좋은 분석 문서를 많이 작성해서 그걸로 포트폴리오를 만든다면 확실히 면접에서 좋은 인상을 줄 수 있다고 생각됩니다. 실력과 열정을 보여줄 수 있는 확실한 방법이 되겠네요~ ^^

      제가 아는 신규직원들 중에는 그러한 포트폴리오를 가지고 있는 친구들은 없었습니다.

      언제 제가 한번 블로그에 분석 문서를 공개하면 좋겠네요~ ^^
      (악성코드는 민감한 사항이라서 일반 파일을 대상으로 해야죠.)

      감사합니다.

  12. 12ㄴㄴ 2012.12.05 10:17 신고 댓글주소 | 수정 | 삭제 | 댓글

    책이 분량이 너무 많은 것 같은데..
    한권을 2~3권으로 분(分)권 되어잇으면..
    훨씬 좋을 것 같습니다..

    • reversecore 2012.12.12 06:46 신고 댓글주소 | 수정 | 삭제

      안녕하세요.

      분권을 하면 휴대성은 좋아지는데요.
      가격이 같이 오르더라구요. ^^

      다음번 2nd Edition에서는 한번 고려해 보도록 하겠습니다.

      감사합니다.

  13. 2012.12.05 23:52 댓글주소 | 수정 | 삭제 | 댓글

    비밀댓글입니다

    • reversecore 2012.12.12 06:44 신고 댓글주소 | 수정 | 삭제

      안녕하세요~

      Driver 파일은 크게 9X계열의 vxd 와 NT계열의 sys 파일 두 종류가 맞습니다. 그러나 특정 OS 에 특화된 기능(추가된 기능)들을 쓰기 위해서는 각 OS 별로 전용 Driver 를 만들어서 사용합니다. (저희 제품만 봐도 각 OS 별 Driver 를 별도로 제작합니다.)

      물론 간단한 기능의 Driver 라면 어찌어찌 공용으로 쓸 수 도 있겠죠~

      * 질문은 좋은 것입니다. 많이 해주세요~ ^^

      감사합니다. ^^

  14. -_-;; 2012.12.11 11:00 신고 댓글주소 | 수정 | 삭제 | 댓글

    요즘 책 잘보고 있습니다.
    해외 나가기 전에 가져가고 싶었지만 조금의 차이로 해외에서 받게되었네요.
    두께와 내용과 정성에 만족합니다.

    좋은 책 감사합니다.

  15. 매지구름 2013.02.20 18:28 신고 댓글주소 | 수정 | 삭제 | 댓글

    안녕하세요, 예전에 밤벌레 아이디로 티스토리 운영하다 다시 닉네임을 바꾸었어요, 매지구름으로요...^^ 책 드뎌 나온건가요? 얼릉 구입해야 겠습니다. 전 요즘 주식에 빠져있어가지고요..
    데이트레이딩으로 수익본다고요... 리버싱관련 도서와 요번에 신설 자격증 정보보안기사.산업기사 자격증이 나왔죠... 쭉 해오던터라 별로 생소한 건 못느끼고요...빨랑 따야죠..ㅎㅎ 님 도서구입링크좀 부탁드려요. 재가 귀찮으니즘에 빠져서,,,,,ㅎ ㅈㅅ 리버스코어님 블로그 제링크에 추가했습니다. *^^*
    앞으로 자주 왕래했으면 싶습니다........^^ 주식하시면 저랑 더욱더 친해질수도..*^^*

  16. 껌나무 2013.03.09 08:27 신고 댓글주소 | 수정 | 삭제 | 댓글

    책 구매해서 잘 보았습니다. 책에 보니까 64bit 디버깅하려면 Windbg, IDA pro툴을 이용하라고 하시던데 제가 필요한 기능이 되는 지 알고 싶습니다.
    32bit dll을 ollydbg에서 assembly code jnz-> jump로 변경해서 패치를 하였습니다. 64bit dll파일도 Windbg나 IDA Pro에서 assembly code 변경이 가능한가요? 조언 부탁드립니다.

  17. sdfkj 2014.07.20 03:23 신고 댓글주소 | 수정 | 삭제 | 댓글

    혹시 컬러 책으로 출판안하나요???

  18. 2014.07.31 00:09 댓글주소 | 수정 | 삭제 | 댓글

    비밀댓글입니다

  19. Charliedelo 2015.06.07 12:45 댓글주소 | 수정 | 삭제 | 댓글

    관리자의 승인을 기다리고 있는 댓글입니다

  20. Chrisphibeni 2015.08.15 13:14 댓글주소 | 수정 | 삭제 | 댓글

    관리자의 승인을 기다리고 있는 댓글입니다


◀ PREV : [1] : [1] : [2] : [3] : [4] : [5] : [6] : [7] : [8] : [9] : [···] : [57] : NEXT ▶



티스토리 툴바