안녕하세요. ReverseCore 입니다. 

책 원고 작성을 완료하였습니다.

모든 컨텐츠 작성을 마치고 자체 퇴고(8회)를 완료하였습니다.

이제 출판사에 넘겨줄 수 있겠네요. ^^~



<퇴고 작업을 도와준 아이패드>


분량


8섹션, 61챕터, A4 기준 1000 페이지 입니다.
885 개의 이미지와 65 개의 소스파일이 담겨있습니다.
책 이름도 결정 하였습니다. (나중에 공개할 께요~ ^^)


내용


기존 블로그의 내용 60% + 새로운 컨텐츠 40% 로 구성하였습니다.

블로그에 있는 내용들은 Windows XP + Visual C++ 6.0/2008 환경에서 작업했었습니다. 이를 최신 Windows 7 32bit + Visual C++ 2010 환경으로 재작업을 하였구요. 컨텐츠들의 순서 조정에 많은 고민을 하였습니다.

새로 추가된 내용들은 아래와 같습니다.


64 bit Computing / Debugging
고급 리버싱 (TLS, TEB, PEB, SEH, IA-32 Instruction 해석)
Anti-Debugging (Static, Dynamic, Advanced)
디버깅 실습 (Service, Self-Creation, PEImageSwitching, DebugBlocker)
 



일정


2010년 5월 1일 책을 쓰기로 마음 먹고 2011년 12월 3일 원고를 마감하였네요. 원고 작업만 19 개월 소요되었군요. (블로그 시작한날인 2009년 2월부터 따져보면 벌써 약 33 개월이 지났네요.)

아직까지는 제 인생 최대의 프로젝트라고 말할 수 있겠습니다. ^^

2011년 6월말쯤 8장 마지막 챕터를 끝내고 책에 뭐 빼먹은게 없나 살펴보니, 문득 제가 애초에 기획했던 모든 컨텐츠 작성을 끝냈다는 사실을 깨달았습니다.

약간 멍~ 했죠. 조금 재충전을 하고 퇴고 작업에 들어갔습니다. 노트북으로 들고 다니며 보는데 한계가 있어서 문서를 출력해서 보다가 분량이 너무 많아서 힘들었습니다. 그래서 아이패드에 문서를 전부 입력하고 PDF Viewer 앱과 터치펜으로 퇴고 작업을 했습니다. (퍼포먼스가 확 향상되더군요.) 약 5 개월간의 기나긴 퇴고 작업 끝에 드디어 원고를 탈고 할 수 있었습니다.

마침 아내가 아기와 외출한 시간(12월 3일 토요일 오후 6시)에 제가 계획한 8 단계 퇴고작업의 마지막 작업을 끝마칠 수 있었네요. 


소감


일단 기분이 몹시 좋습니다. 몸과 마음이 날아갈듯 하네요. ^^ 
마치 오랜 여행을 마치고 집에 돌아온 느낌이 드네요. 기쁜 마음에 이렇게 블로그에 글을 올려 봅니다. 


# 작업 속도

책을 쓸 때는 생각보다 작업 속도가 너무 느려서 도대체 언제쯤 책이 완성될 수 있을까 싶었습니다. 하루에 그림 하나 또는 캡쳐 두개 정도 밖에 못 할 때도 많았거든요. 하지만 그런 날들이 하루 이틀 쌓이니까 어느 순간부터는 "내가 언제 이렇게 많은 일을 했지?" 라는 생각이 들면서 목표 지점이 희미하게나마 보이기 시작했습니다. 


# 재작업

책을 쓰면서 가장 힘들었던 순간은 이미 한번 쓴 글을 두번 세번 다시 쓸 때 였습니다. 독자분들께 최신의 리버싱 경험을 드리기 위해 개발도구를 Visual C++ 2010 으로 바꾸고 작업환경을 Windows 7 으로 바꾸었습니다. 그러다보니 기존 문서를 그에 맞게 다시 캡쳐하고 변경된 주소를 찾아 고치는 작업들이 많았습니다. 지금와서 뒤돌아보니 그런 작업들이 가장 기억에 많이 남습니다. 


# 슬럼프

10 여회의 크고 작은 슬럼프를 경험하였습니다. 수많은 재작업과 검증, 생각대로 나오지 않는 글쓰기, 예상보다 훨씬 오래 걸리는 시간, 개인적인 외부 요인 등으로 인해서 글을 쓰지도 못하고 글쓰기 자체가 싫어지는 상황이 몇 번 닥쳤었죠. 스트레스가 쌓인 겁니다.

제가 새벽에 일어나 글을 쓰는 책상이 있는데요, 어느 순간에는 그쪽을 쳐다보기도 싫어지더군요. 그리고 저녁에는 퇴근 후 글을 쓰러 찾아가는 도서관이 있습니다. 한때는 그쪽으로 발길이 도저히 떨어지지 않는 날도 많았습니다.

다행인것은 그때마다 제 자신이 슬럼프 상황인걸 인식하고 극복하려고 노력했다는 것입니다.


# 응원

가끔 블로그에 방문해서 댓글에 답변도 달아드리고 제 책을 응원하는 글을 보면서 힘을 얻곤 했습니다. 그리고 부모님, 아내, 친구들, 회사 동료들까지 많은 분들께서 관심을 가져주시고 격려를 해주셨습니다.

이 자리를 빌어서 모든 분들께 감사 드립니다.

그리고 제가 좋아하는 독서도 많이 하고 사람들과 많이 어울려 다니면서 다시 용기를 얻어서 작업을 이어나갈 수 있었습니다. 그러다 결국 여기까지 올 수 있었구요.

"포기하기 전까지 실패란 없다. 시행착오가 있을 뿐이다. 시행착오를 거듭하다보면 언젠가 결국 성공하게 된다."

위 명언을 계속 새기면서 포기하지 않고 꾸준히 작업했더니 결국 원고가 완성되었습니다.


# 앞으로...

출판사와의 일정이 잡히면 블로그에 다시 공지해 드리겠습니다.

원고 작업을 한번 성공하니 자신감이 충만해 지는게 느껴집니다. 이번에 많은 경험과 시행착오를 겪어보니 두 번째 책도 금방 쓸 수 있을 것 같은 기분입니다. (2 탄을 기획 중인데요. 구체적으로 정리되면 알려드릴께요~)


다시 한번 모든 분들께 감사 드립니다. ^^~


ReverseCore

Trackback Address :: http://www.reversecore.com/trackback/95 관련글 쓰기

  1. Sun2Day 2011/12/05 02:58 댓글주소 | 수정 | 삭제 | 댓글

    우와....
    수고 하셨습니다!!
    정말 기대 되는 책입니다. +_+
    나오면 바로 머스트해브 아이템으로 등록하겠습니다 +_+

  2. ph4nt0m 2011/12/05 03:06 댓글주소 | 수정 | 삭제 | 댓글

    Reversecore님의 블로그 글을 읽으며 책출간을 오매불망 기다렸습니다.
    정말 고생 많으셨구요~ 탈고 축하드립니다~~
    즉시 구매 예정!!! 매우 기대하구 있습니다~ 하루빨리 출판되었으면 좋겠네요^^

  3. bear 2011/12/05 08:05 댓글주소 | 수정 | 삭제 | 댓글

    우와~~~ 늘 오가며 목이빠져라 기다렸습니다^^
    정말 수고하셨습니다..... 출간까진 좀 느긋하게 기다릴께요^^

  4. 꿀보 2011/12/05 09:16 댓글주소 | 수정 | 삭제 | 댓글

    고생하셨습니다. 축하드리구요~^^
    책을 쓴다는 것은 정말 어려운 일인것 같은데 멋지십니다.~

  5. 그를위해 2011/12/05 09:30 댓글주소 | 수정 | 삭제 | 댓글

    수고하셨습니다. 블로그를 통해 많은 도움 받았는데...
    앞으로 책으로도 볼 수 있네요..^^.. 기대백배..^^

  6. iwillhackyou 2011/12/05 09:37 댓글주소 | 수정 | 삭제 | 댓글

    얼마나 고생하셨을지 느껴집니다. ^^.
    정말 기대됩니다...

  7. KMC 2011/12/05 11:27 댓글주소 | 수정 | 삭제 | 댓글

    수고하셨습니다^^
    기나긴 대장정의 막을 내리시는군요 ㅎ
    이 블로그 작년 초부터 봐오면서 댓글한번 안썼었는데 책 내용이 무지 기대 되고 그 동안의 블로깅 내용들의 노고가 엿보여서 진심으로 구매 할 의사가 있으며 축하드립니다^^//

  8. Ethobis 2011/12/05 14:13 댓글주소 | 수정 | 삭제 | 댓글

    수고하셨습니다!
    진짜 오래 기다렸네요!! ㅋㅋㅋ.. 이거이거 이제 리버싱을 공부하려는 초심자들의
    평균 레벨이 올라갈것 같은 느낌입니다! ㅋㅋㅋㅋ
    기대기대! 두권사서 한권은 보관용 한권은 보는 용으로 써야겠습니다 ^_^

  9. HS 2011/12/05 14:34 댓글주소 | 수정 | 삭제 | 댓글

    수고하셨습니다~~^^살포시 기대를 해봅니다~~ :))

  10. 호지니 2011/12/05 14:47 댓글주소 | 수정 | 삭제 | 댓글

    우와~ 정말 기대되는 책입니다.
    싸인 준비 해두세요 ^^

  11. zxh 2011/12/05 15:33 댓글주소 | 수정 | 삭제 | 댓글

    출간되면 꼭 사서 읽어야겠네요!! 기대됩니다

  12. sun 2011/12/05 18:01 댓글주소 | 수정 | 삭제 | 댓글

    수고하셨습니다~~~^^ 너무너무 기대됩니다^^

  13. SAMSA 2011/12/05 19:23 댓글주소 | 수정 | 삭제 | 댓글

    Good !

  14. bbangdenge 2011/12/05 20:13 댓글주소 | 수정 | 삭제 | 댓글

    정말 고생하셧습니다 ㅎ 감사하구여
    리버싱에 너무 관심이 많아 자주 블로그도 들렸는데 이번에 책두 꼭사서 보겠습니다 ㅎ

  15. J 2011/12/06 15:39 댓글주소 | 수정 | 삭제 | 댓글

    그간 정말 고생 많으셨습니다. ^^
    무사히 마치신 후의 성취감과 벅찬 감동이 저에게도 느껴질 정도군요.
    게다가 나름대로 이 블로그를 방문하셨던 분들도
    함께 기다린 만큼 벅찬 기대감으로 와닿는 것 같습니다.

    부디, 블로그를 통한 공동구매와 퇴고과정에서 경험하셨듯이
    독자들의 가독성 향상과 저자의 생각이 독자들에게 전달되는데 있어서
    주변 상황과 공간의 제약을 받지 않도록
    책으로 출판하는 것외에도 전자문서로의 출판도 생각해 주셨으면 합니다.

    아마 1000페이지 분량이면 출퇴근시간에 들고다니기에는 무리가 있을것 같아서요. ^^
    (물론, 새로운 것을 배운다는 즐거움에 비하자면 감수할 수 있겠습니다만.. ㅎㅎ)

  16. Good Job! 2011/12/06 20:43 댓글주소 | 수정 | 삭제 | 댓글

    저는 오늘 처음 들어와봤는데 정말 알찬내용이 많은 꿀 블로그인거 같습니다! 책 나오면 꼭 사고 싶습니다~책 나오면 바로 올려주세요.ㅎㅎ

  17. 철이 2011/12/07 05:51 댓글주소 | 수정 | 삭제 | 댓글

    정말로 고생 하셨습니다. 주옥 같은 글들이 많겠네요.

    많은 광고 해드리겠게요 ㅠ

  18. 달봉아 2011/12/07 19:13 댓글주소 | 수정 | 삭제 | 댓글

    1년넘게 기다렸네요 이제나 저제나 언제 나오나 시간날때마다 체크했는데 오늘이 그날이군요
    정말수고 하셨습니다! 꼭 사볼게요 ^^

  19. reversecore 2011/12/07 21:21 댓글주소 | 수정 | 삭제 | 댓글

    안녕하세요~ ReverseCore 입니다.

    위에 댓글 달아주신 모든 분들께 감사 드립니다.

    여러분들의 관심과 응원으로 잘 끝마칠 수 있었습니다.

    너무 감사합니다.

  20. koromoon 2011/12/07 22:59 댓글주소 | 수정 | 삭제 | 댓글

    정말로 고생이 많으셨습니다...
    항상 블로그의 좋은 내용으로 인해서 감사했는데
    이렇게 좋은 책이 나올줄이야... ㅠㅠ
    꼭 사서 보고 싶습니다...
    항상 좋은 일만 가득하길 바랍니다...
    감사합니다... revesecore님...

  21. RUIN 2011/12/08 18:58 댓글주소 | 수정 | 삭제 | 댓글

    캬~ 수고 하셧습니다.
    입대 하기전부터 기대하던 책이었는데 입대 후에 지금 탄생햇군요!! 책이 저보다 더 짬 되는듯...
    내년에 볼 수 있을듯합니다 +_+

  22. modagi 2011/12/08 23:32 댓글주소 | 수정 | 삭제 | 댓글

    정말 축하드리고 감사드립니다. :)
    저도 기대가 컸던 만큼 이 소식이 아주 반갑고 기쁩니다. 감사합니다.

  23. lasthit 2011/12/09 07:55 댓글주소 | 수정 | 삭제 | 댓글

    멋지시네요. 인생의 꿈중 하나가 책을 써보는것인데 그걸 이루신분을 보니
    허용할수 없을 정도로 부럽습니다. 정말 축하드리고 책 제목도(?) 기대되네요.

  24. manlds 2011/12/09 11:19 댓글주소 | 수정 | 삭제 | 댓글

    와... 진짜 기다리던 책중에 하나 입니다. 올해 초 블로그 방문후 내용이 너무 좋아 매일 꾸준히 방문하고 있습니다. 이해 안되는 것은 보고 또 보고 하니 정말 도움이 되더라고요. 댓글 내용도 충실히 달아주시던데 댓글 내용도 많은 도움이 되었습니다.
    어서 출판일이 왔으면 좋겠네요. 수고하셨습니다.
    앞으로도 많은 지식전수 부탁드려요!

  25. 찡구 2011/12/09 12:07 댓글주소 | 수정 | 삭제 | 댓글

    어서 책이 나왔으면 좋겠네요 ㅜ.ㅠ
    ( 기다리고있어요~ :) )
    고생많이 하셨어요~~

  26. hcscp 2011/12/09 18:07 댓글주소 | 수정 | 삭제 | 댓글

    오오,,군대에서부터 간간히 들리던 곳인데,
    드디어 책이 나오는건가요!!너무 기대되요 ㅠㅠ 나오자 마자 살겁니다.

  27. 감염오리 2011/12/10 00:00 댓글주소 | 수정 | 삭제 | 댓글

    우리나라에는 리버스 엔지니어링 관련 책이 거의 없는 실정인데 ㅎㅎ

    나오면 저도 바로 살꺼예요^^ 빨리 나왔으면 좋겠네요

    아! 그런데 디스어셈블러는 뭘 사용해서 리버싱을 하실건지...

  28. RH 2011/12/10 17:07 댓글주소 | 수정 | 삭제 | 댓글

    드디어 기다리고 기다리던 리버스코어님의 책이 나오는군요

    와,, 정말 기대하고 있습니다.

    나오면 당장 구매를 ㅎㅎ

  29. 방문자 2011/12/11 00:45 댓글주소 | 수정 | 삭제 | 댓글

    질문있는데 책이 나오게되면 페이지 올칼라인가요?
    가격이 후덜덜하겠느넫,,,

  30. 세의 2011/12/11 19:04 댓글주소 | 수정 | 삭제 | 댓글

    기대하던 희소식입니다! 꼭꼭 사서 보겠습니다. ㅠ_ㅠ

  31. 박모씨 2011/12/11 21:05 댓글주소 | 수정 | 삭제 | 댓글

    오호...책으로 나오는군요.....꼭 사보고 싶어요.
    내나이 40에 리버싱을 배워야 하는 현실이 슬프군요...
    근데 이해하기 쉽게 잘 쓰신거 같아요.

  32. BBB 2011/12/12 16:19 댓글주소 | 수정 | 삭제 | 댓글

    이야!@!@!@
    컴퓨터를 많이하니깐 눈아파서 ㅜ 책으로 보고싶었는데 !!
    나오면 바로 사서 공부해야겠네요@!@!@!@!@!#!~#~!#

  33. kimms 2011/12/13 14:36 댓글주소 | 수정 | 삭제 | 댓글

    기대기대기대 하고 있습니다~~

  34. itsohard 2011/12/13 21:50 댓글주소 | 수정 | 삭제 | 댓글

    우와!!!!!!!!!!!!!! 너무 기대하고 있어요 이번 방학은 이 책으로 불태워야 겠군요 ㅎㅎ

  35. 고로아기 2011/12/14 09:16 댓글주소 | 수정 | 삭제 | 댓글

    정말 많이 기대하고있었는데; 요번 방학 때 ㅠ.ㅠ;;; 꼭 보고싶습니다...

  36. -=twopark=- 2011/12/14 14:39 댓글주소 | 수정 | 삭제 | 댓글

    수고하셨슴당. 출간이 기대되는군요.

  37. ^^리버스 공부 2011/12/14 20:33 댓글주소 | 수정 | 삭제 | 댓글

    정말 수고 많으셨습니다.^^
    많이 많이 팔리기를 저도 기대하겠습니다 .

  38. 니티 2011/12/15 08:46 댓글주소 | 수정 | 삭제 | 댓글

    정말 기대 됩니다^^) 저도 책 출간할때 19개월정도 걸린거 같은데, 정말 써본 사람만이 겪는거 같아요.
    1000페이지 안에 엄청난 내공이 묻어 있을거 같네요 홧팅!!!^^)

  39. 아메리카노냠냠 2011/12/15 11:24 댓글주소 | 수정 | 삭제 | 댓글

    책 언제 나오나요?? 애타게 기다리고 있는 1인.^^;;

  40. d 2011/12/17 03:15 댓글주소 | 수정 | 삭제 | 댓글

    d

  41. 가비 2011/12/17 19:53 댓글주소 | 수정 | 삭제 | 댓글

    와! 정말 수고하셨습니다. ^^
    분량이 정말 후덜덜하네요....;;
    출판되면 반드시 사서 보도록 하겠습니다.
    이 책이 우리나라의 IT 발전에 큰 기여를 하게 될 것 같습니다.

  42. 몽팡시에르 2011/12/18 15:29 댓글주소 | 수정 | 삭제 | 댓글

    리버스 코어 블로그를 눈팅만 한지 거의 1년이 되어가는데 그동안 속으로 정말 기다렸던 책입니다..

    코어님게서 책에 대해서 블로그에 언급을 안하시길래

    조용히 책 제작을 포기 하신줄 알았습니다...ㅎㅎㅎㅎ

    책이 나오면 100% 살겁니다....정말 입니다...ㅋㅋㅋ

    그동안 정말 고생하셨구욤...

    앞으로 코어님 팬 할랍니다....ㅎㅎㅎ

  43. 2011/12/20 11:33 댓글주소 | 수정 | 삭제 | 댓글

    비밀댓글입니다

  44. 비밀 2011/12/20 14:03 댓글주소 | 수정 | 삭제 | 댓글

    정말정말 축하드리고 감사드립니다!
    책으로 출간되면 정말 좋겠다고 생각했는데, 제 일인것처럼 너무나 기쁜네요.
    출고되면 꼭 알려주세요!!

  45. 비밀 2011/12/20 14:09 댓글주소 | 수정 | 삭제 | 댓글

    아. 책 제목 생각해 두셨다고 하셨는데.
    개인적으로.. "해킹의 미학" 이런 유치한게 아닐거라고 생각합니다.. ㅋ
    '해킹' 이라고 되어 있으면, 왠지 사려다가도 꺼려지더라고요...........................

  46. reversecore 2011/12/21 01:11 댓글주소 | 수정 | 삭제 | 댓글

    안녕하세요.

    제 책을 기대해 주시는 모든 분들께 감사드립니다. ^^~

    출간 일정이 잡히면 공지해 드리겠습니다.

    감사합니다.

  47. 책을보면서 2011/12/21 09:12 댓글주소 | 수정 | 삭제 | 댓글

    정말로 빨리 나왔으면 좋겠습니다. ㅎ

    너무너무 기대가 됩니다.!!!

    출판일이 빨리 결정되었으면..ㅎ

  48. LazyZombie 2011/12/21 12:25 댓글주소 | 수정 | 삭제 | 댓글

    너무 기대됩니다. 책 제목은 정해졌나요?? 꼭 사보겠습니다!

  49. 드레 2011/12/21 12:30 댓글주소 | 수정 | 삭제 | 댓글

    정말 기대 많이하고 있습니다. 하루 빨리 책이 나왔으면 좋겠습니다.
    완전 머스트 해브 아이템!!!

  50. K;nG 2011/12/24 16:34 댓글주소 | 수정 | 삭제 | 댓글

    3월안에는 구매를 희망하는데, 언제 쯤 출간이 될지 알 수 있을까요?

  51. 학수고대 2011/12/27 05:00 댓글주소 | 수정 | 삭제 | 댓글

    이 블로그에 거의 1년동안 오면서 이 책이 나오기를 기다렸던 이중의 한 사람입니다.
    정말 수고하셨습니다.

  52. hcscp 2011/12/27 10:30 댓글주소 | 수정 | 삭제 | 댓글

    책 초판 나오자 마자 바로 구매하고 싶네요 ㅎ

  53. No.190 2011/12/27 15:31 댓글주소 | 수정 | 삭제 | 댓글

    책 나오기만을 기다리고 있겠습니다!-_-
    총알 장전 완료.

  54. sisio07 2011/12/28 14:22 댓글주소 | 수정 | 삭제 | 댓글

    오 기대 하고 있습니다.

    책 나오기만을 기다리고 있습니다.

    리버싱 책이 매우 급합니다. 빨리 출간좀

  55. $Zero 2011/12/28 16:37 댓글주소 | 수정 | 삭제 | 댓글

    오랜만에 들렀는데 이제서야 소식을 접하네요
    책을 출판하신다니!! 정말 오래 기다렸습니다 ㅎㅎ

    앞으로도 좋은 책 많이 써주세요~~

  56. 짐승남 2012/01/02 13:13 댓글주소 | 수정 | 삭제 | 댓글

    언제 만나볼수 있는건가요?... 일정이라도 좀 알려주세요.

  57. Mr.Smurf 2012/01/03 10:20 댓글주소 | 수정 | 삭제 | 댓글

    언제쯤 만나 볼 수 있나요 예약 구매 하겠습니다~

  58. 신정우 2012/01/05 03:35 댓글주소 | 수정 | 삭제 | 댓글

    정말 책이 기다려집니다.
    문득 님께서 고생하신 3년 시간동안
    저는 뭐하고 있었는지 반성이 되네요.
    감사합니다.
    새해복많이 받으세요.

  59. 김태형 2012/01/05 13:38 댓글주소 | 수정 | 삭제 | 댓글

    정말 기대많이 하고있습니다 책나오면 바로 사야하겠네요

  60. 김태형 2012/01/05 13:39 댓글주소 | 수정 | 삭제 | 댓글

    정말 기대많이 하고있습니다 책나오면 바로 사야하겠네요

  61. 뚜기 2012/01/06 17:31 댓글주소 | 수정 | 삭제 | 댓글

    빨리 만나보고 싶어요~~~

  62. db_click 2012/01/07 17:59 댓글주소 | 수정 | 삭제 | 댓글

    다음휴가 때 꼭 사보겠습니다!

  63. keine__ 2012/01/08 15:15 댓글주소 | 수정 | 삭제 | 댓글

    반드시 사서 공부하고싶소!!

  64. smartsnake 2012/01/11 19:19 댓글주소 | 수정 | 삭제 | 댓글

    언제쯤 나오는겁니까!!! 너무 기다려져서 미치겟습니다!!!!
    기다리기 힘든 책은 딱 2번잇엇는데 3번째가 되는군요!!

  65. 질문이용 2012/01/14 11:39 댓글주소 | 수정 | 삭제 | 댓글

    책.. 처음 입문자도 볼수 있는건가요? 아니면 좀 초보자부터 보는건가요?
    리버싱이라는걸 근 3년전에 알았는데.... 선듯 손이 않가다가.. 또 새해가 오니.. 리버싱이라는걸
    공부해보면 어떨까..(취미로)

    리버싱 진입장벽이 너무 높자나요... 책도 거의 없고....

  66. 질문이용 2012/01/14 11:39 댓글주소 | 수정 | 삭제 | 댓글

    책.. 처음 입문자도 볼수 있는건가요? 아니면 좀 초보자부터 보는건가요?
    리버싱이라는걸 근 3년전에 알았는데.... 선듯 손이 않가다가.. 또 새해가 오니.. 리버싱이라는걸
    공부해보면 어떨까..(취미로)

    리버싱 진입장벽이 너무 높자나요... 책도 거의 없고....

  67. 질문이용 2012/01/14 11:39 댓글주소 | 수정 | 삭제 | 댓글

    책.. 처음 입문자도 볼수 있는건가요? 아니면 좀 초보자부터 보는건가요?
    리버싱이라는걸 근 3년전에 알았는데.... 선듯 손이 않가다가.. 또 새해가 오니.. 리버싱이라는걸
    공부해보면 어떨까..(취미로)

    리버싱 진입장벽이 너무 높자나요... 책도 거의 없고....

  68. 2012/01/14 21:24 댓글주소 | 수정 | 삭제 | 댓글

    비밀댓글입니다

  69. 으아아 2012/01/15 01:36 댓글주소 | 수정 | 삭제 | 댓글

    으아 기다리다 미치겠네. 빨리 사고 싶다아아

  70. 박싱데이 2012/01/16 13:38 댓글주소 | 수정 | 삭제 | 댓글

    안녕하세요.
    포스팅하신 글중에 IE 접속제어글을 따라서 해보고 있는데요. 이게 Windows7 에서는 잘됩니다만 XP 에서는 IE 의 메뉴가 모두 없어지거나(주소입력창도 사라짐), 다른 프로그램이 실행되지 않거나, explorer.exe 가 죽는등의 문제가 있는것 같습니다. 원인을 파악해 보려고 했는데..... 털썩..역시 제 실력으로는 ㅠㅠ.. 무엇이 문제일까요? 가르침 부탁 드리겠습니다.
    추신 : 너무 잘 정리해 주셔서 공부 잘하고 있습니다.^^

  71. daniel 2012/01/17 21:07 댓글주소 | 수정 | 삭제 | 댓글

    요즘 열심히 방문해서 공부하고 있습니다.

    기다려 집니다. 책이 빨리 나왔으면 좋겠네요.

  72. 노랑두꺼비 2012/01/18 11:56 댓글주소 | 수정 | 삭제 | 댓글

    책 어디서 사요~~~~? 출판사 및 발간시기를 알려주세요...
    사고 싶습니다 저도 빨리 고수가 되고 싶습니다~

  73. SeHwa 2012/01/19 07:55 댓글주소 | 수정 | 삭제 | 댓글

    드디어 나오는군요.
    구입 준비 완료입니다.

  74. kwsjjang8 2012/01/22 07:47 댓글주소 | 수정 | 삭제 | 댓글

    책 언제쯤 나오나요????? 중간 공지좀 부탁드려요~!@~새해복 많잉 받으세요

  75. 빵집상인 2012/01/25 11:31 댓글주소 | 수정 | 삭제 | 댓글

    기대되네요 ㅋㅋ
    좋은 글 정말 감사합니다~

  76. 기다리다 지친다 2012/01/25 20:38 댓글주소 | 수정 | 삭제 | 댓글

    지쳐서 다른책 하나 샀음.아으으앙

  77. 기초 2012/02/03 00:43 댓글주소 | 수정 | 삭제 | 댓글

    기다리고 있습니다. 언제쯤 나오는건지 ㅜㅜ

  78. arkanoid 2012/02/03 10:48 댓글주소 | 수정 | 삭제 | 댓글

    안녕하세요. 오랜만에 리버싱 관련 글들을 검색해보다 여기에 오게 되었습니다. 사실 처음 공부할 때는 리버싱이 되게 재미있는데, 시간이 흐르고 이런저런 다른 일들을 하다보니 옛날만큼 리버싱에 많은 시간을 투자하지 못하네요. 책을 출판하신다니 정말 열정이 대단하시고 고생이 많으셨을 것 같습니다. ^^

  79. 현기증 2012/02/08 15:30 댓글주소 | 수정 | 삭제 | 댓글

    아오! 현기증 나네요!!
    도대체 언제 출판되는거에요???? ㅋ

  80. reversecore 2012/02/08 23:22 댓글주소 | 수정 | 삭제 | 댓글

    안녕하세요.

    출판사에 원고를 넘겼구요.
    책이 편집/출판 되려면 아직 시간이 많이 필요합니다.

    기다리다 지치시는 분들께 너무 죄송합니다.
    기다리시고 기대하시는 분들이 너무 많으셔서 제가 다 마음이 안절부절입니다.

    대신 책이 출판되기 전까지 블로그에 더 재밌는 컨텐츠를 제공할 계획입니다.
    새로운 컨텐츠를 기대해 주세요~~~ ^^

    감사합니다.

  81. cqstudent1 2012/02/09 19:20 댓글주소 | 수정 | 삭제 | 댓글

    용기 얻고 갑니다..

  82. 기대 2012/02/10 01:21 댓글주소 | 수정 | 삭제 | 댓글

    새로운 콘텐츠라 많이 기대되네요
    물론 리버싱 내용이겟지요.
    빨리 시작하시길...

  83. live up my expectation 2012/02/11 14:30 댓글주소 | 수정 | 삭제 | 댓글

    기다리다가 목빠지겠습니다 ㅠㅠ 그래도
    책 내용이 모두의 기대에 부응할거라 믿어 의심치 않기에

    오늘도 기다립니다
    힘내세요
    그래도 올해 안에는 나오겠죠뭐 ;;

  84. 철통경계 2012/02/13 04:57 댓글주소 | 수정 | 삭제 | 댓글

    책 언제쯤 발매 되나요?? 목 빠질거같아요 ㅎㅎ

  85. 리버스코님 2012/02/13 13:40 댓글주소 | 수정 | 삭제 | 댓글

    안녕하세요
    책 언제쯤 볼수 있나요?
    혹 원고 안줄래요



기존 InjDll.exe 유틸리티를 업그레이드(Ver. 1.1.1) 하였습니다.

  1. 64bit 지원

  2. <dll path> 의 상대 경로 지원


☞ InjDll.exe - DLL Injection/Ejection 전용 도구


Windows 7 64bit OS 가 보급됨에 따라 리버싱 분야에도 점차 64bit 지원 여부가 중요한 이슈가 되고 있습니다. 저 또한 최근에 64bit 관련 내용을 공부하면서 흥미로운 내용을 많이 접하였습니다. (이번에 작업 중인 리버싱 책에 64bit 리버싱 챕터를 추가시켰습니다.)

각 플랫폼(32/64bit) 별로 Dll Injection 을 하실 때 다음의 내용을 주의해 주시기 바랍니다.

- Target 프로세스가 32bit 인 경우 : Injector & Dll => 모두 32bit (PE32 포멧)
- Target 프로세스가 64bit 인 경우 : Injector & Dll => 모두 64bit (PE32+ 포멧)

* 64bit OS 에서는 32/64bit 프로세스가 모두 실행 가능하므로, Target 프로세스의 PE 포멧을 확인 하신 후 적절한 Injector(InjDll32/InjDll64) 와 DLL 을 사용하시면 됩니다.

* PE32+ 포멧의 파일을 생성하시려면 Visual C++ 2010 Express & Windows SDK 를 설치하시면 됩니다.


ReverseCore

Trackback Address :: http://www.reversecore.com/trackback/93 관련글 쓰기

  1. 퓨틱 2010/10/31 10:42 댓글주소 | 수정 | 삭제 | 댓글

    1등이군요 하하
    좋은 자료 감사합니다!

  2. 천세진 2010/11/01 09:54 댓글주소 | 수정 | 삭제 | 댓글

    업데이트에 감사드립니다.

    또한 의견을 반영해주심에 더욱 더 감사드립니다.
    참고로 64-bit PE32+를 생성하고 싶지만 저처럼 가난하신 분들은
    Windows Server 2003 SDK를 사용하셔도 됩니다.

    • reversecore 2010/11/03 00:21 댓글주소 | 수정 | 삭제

      안녕하세요.

      2003 SDK 에서도 되는군요? 좋은 정보 감사합니다. ^^

    • stares 2011/01/27 13:05 댓글주소 | 수정 | 삭제

      천세진님 혹시 그 옛날에 winapi32 assembly강좌 쓰신분 아니신가요??~

    • 천세진 2011/02/03 14:40 댓글주소 | 수정 | 삭제

      //stares님

      네, 2000년 초반에 Win32 API Assembly에 대해서 잠시 썼습니다.. ^^;
      나중에 보니 너무 허접하고 잘못된 내용도 있어서
      제 웹사이트에서는 해당 강좌를 지웠던 기억이 있네요..

      기억해주시니 감사합니다.

    • Stares 2011/02/04 19:53 댓글주소 | 수정 | 삭제

      흠..그거 재밌게 읽고있엇는데 말이죠..

      5개의 강좌만 쓰여진게 끝인가요?
      필요햇는데....

  3. 또다른D 2010/11/02 11:44 댓글주소 | 수정 | 삭제 | 댓글

    언제쯤 책이 나올지 궁금하네요.

    요즘 리버싱에 관심이 생겨서 여러 서적을 접하고 있는데,
    생각보다 어렵네요.

    reversecore님의 책이 쉽고 자세하게 풀이해줄거라 기대하고 있어요!!

    올가을까지라는 글을 얼핏 봤는데 이제 나올때가 된걸까요?? 기대기대~

    • reversecore 2010/11/03 00:19 댓글주소 | 수정 | 삭제

      원래 가을까지 할 수 있을꺼라 생각했는데요.

      추가되는 분량이 급격히 늘고, 완성도를 높이기 위해 일정이 훨씬 늘어났습니다. ^^

      기대해주시는만큼 높은 완성도를 갖춰서 출시하도록 하겠습니다.

      감사합니다. ^^

  4. 2010/11/04 16:12 댓글주소 | 수정 | 삭제 | 댓글

    비밀댓글입니다

    • reversecore 2010/11/06 00:24 댓글주소 | 수정 | 삭제

      안녕하세요.

      pRemoteBuf 에는 "myhack.dll" 문자열이 쓰여지는 것입니다. myhack.dll 자체를 쓰는 것이 아니구요.

      myhack.dll 은 타겟 프로세스에서 LoadLibrary() 를 호출하면 그때 로딩됩니다. Injector 쪽에서는 myhack.dll 의 로딩 주소를 미리 예측 하기 어렵지만, 일단 로딩되면 로딩 주소를 구해올 수 있습니다. (CreateToolhelp32Snapshot(TH32CS_SNAPMODULE, dwPID); API 사용...)

      이제 타겟 프로세스에서 myhack.dll 이 어느 주소에 로딩되었는지 알았으니... WriteProcessMemory() API 로 데이터를 변경할 수 있습니다.

      감사합니다.

  5. 낭만고양이 2010/11/12 15:34 댓글주소 | 수정 | 삭제 | 댓글

    안녕하세요. 리버스님 항상 양질의 포스팅에 감사드리고, 올려놓으신 포스팅이 참 많아서
    정독하는데 정말 오래 걸렸습니다..^^물론 시간가는줄도 모르고 흥미있게 읽었는데요..
    64 버전업에서 궁금한게 있어서 이렇게 눈팅만 하다 죄송스럽게 글을 올립니다..
    x64 OS를 지원하는 인젝터와 DLL은 단순히 32 OS에서 동작하는 코드를 그대로 x64
    컴파일러로 컴파일 하신건지 아니면 내부 소스 또한 x64에 맞춰 바뀌는지 궁금해서 질문
    드립니다.. 그리고 책발매는 언제쯤인지도요.. 날씨가 변동이 심하네요.. 건강 조심하시고, 늘 좋은 포스팅 기대하겠습니다..__*

    • reversecore 2010/11/15 02:49 댓글주소 | 수정 | 삭제

      안녕하세요.

      하나의 소스로 32/64 를 빌드 시킨 것입니다.

      위 경우에는 소스 변경이 거의 없었습니다만...
      일반적으로는 32->64 포팅할 때 주의사항들이 있으므로...
      인터넷으로 검색하셔서 관련 내용을 숙지하시는 것이 좋습니다.

      책은 내년 2분기쯤으로 예상합니다.

      감사합니다.

  6. 김추노 2010/11/16 12:45 댓글주소 | 수정 | 삭제 | 댓글

    리버스님 블러그너무 멋지고 좋아요.

    책빨리나와서 구입하고싶습니다.

    리버스님 화이팅!

  7. RUIN 2010/11/17 00:09 댓글주소 | 수정 | 삭제 | 댓글

    아 책 빨리 보고 싶은데.....ㅠㅠ개인적인 생각이지만
    책을 반으로 나누시는건 어떨지........
    part 1과 Part 2로.........
    그저 빨리 보고 싶은 마음에 한마디 해보았습니다.ㅎㅎ;;

  8. Nicegom 2010/11/26 13:03 댓글주소 | 수정 | 삭제 | 댓글

    어서 책 출판하셔요^^ 기다리는중입니다. ㅎㅎ;;

  9. 봉이 2010/11/29 14:57 댓글주소 | 수정 | 삭제 | 댓글

    core님의 양질의 포스팅은 계속 되어야 한다! 쭈~~욱!!!!

  10. RUIN 2010/12/03 13:01 댓글주소 | 수정 | 삭제 | 댓글

    도대체 책 언제 나와요 ㅠ_ㅠ
    책 Part 1 // Part 2로 나눠서 Part 1부터 먼저 내주셧으면 ㅠㅠ

    • reversecore 2010/12/03 16:14 댓글주소 | 수정 | 삭제

      안녕하세요.

      Part 1/2 를 생각해 봤는데요.

      현재로서는 한권에 다 넣는게 좋다고 생각중입니다.

      제 책을 기다려주셔서 감사합니다. ^^

      힘내서 열심히 작업할께요~

    • RUIN 2010/12/03 18:20 댓글주소 | 수정 | 삭제

      네ㅠㅠㅠ........

      최대한 빨리 써주신다면 감사 감사^_^

      감기 조심하세요^^

    • 두둥 2010/12/05 01:31 댓글주소 | 수정 | 삭제

      저도 책 기다리고 있어요..ㅜ.ㅜ

      요새 사이트에 자주 못들어 왔는데 다양한 정보를
      책으로 볼수있는 기회가 빨리 오기를 바랍니다.

    • reversecore 2010/12/10 11:55 댓글주소 | 수정 | 삭제

      네, ^^

      항상 신경써 주시는 두분께 감사드립니다.

  11. Saeglo 2010/12/24 17:48 댓글주소 | 수정 | 삭제 | 댓글

    안녕하세요.
    여기서 배운게 정말 많고 항상 잘 보고 있습니다.

    혹시 윈도우가 아닌 다른 OS에서의 리버싱은 다룰 생각이 없으신지 궁금합니다.

    예를 들어 리눅스의 시스템 콜 후킹 같은 -

    실은 제가 최근에 Mac에 대해 공부를 하고 있는데
    국내에서 Mac에 대한 정보는 찾기가 힘들어서
    혼자 공부하기 쉽지 않네요 ㅠㅠ

    • reversecore 2010/12/27 14:53 댓글주소 | 수정 | 삭제

      안녕하세요
      아직은 윈도우에만 집중하고 있구요~ 다른 플랫폼으로는 모바일(iOS, Android) 에 관심있는 정도입니다^^

  12. kaka 2010/12/27 20:39 댓글주소 | 수정 | 삭제 | 댓글

    안녕하세요.
    좋은 글 매일와서 보고 따라해 보고..ㅋㅋ 있습니다.
    일단 책을 좀더 기다려야 한다니..아쉽습니다.
    화이팅~하세요.

    질문인데요..
    올려 놓으신 소스로 win7(32비트) IE8에서 DLL 인젝션을 실행하면 인젝션은 잘됩니다.
    그런데 인젝션된 dll의 DLL_PROCESS_ATTACH 이벤트가 수행되지 않는건
    머가 문젠가요? IE를 관리자 권한으로 실행하면 원하는데로 되던데요...
    직접 인젝션을 시키거나 NewZwResumeThread()을 수행하나 마찬가지네요.

    이것저것 해봐도 DLL_PROCESS_ATTACH 이벤트가 실행되질 안네요 T___T;;

    • reversecore 2010/12/31 00:38 댓글주소 | 수정 | 삭제

      안녕하세요.

      어떤 소스 코드를 사용하셨나요?

      제 블로그에 몇 가지 버전의 InjDll 소스가 있습니다. @@~

      제가 http://www.reversecore.com/76 에 있는 InjDll64.exe 와 dummy64.dll 을 가지고 테스트 해보면 잘 되는데요.

      dummy64.dll 소스에 OutputDebugString() 을 추가해서 DbgView 로 확인하면 DLL_PROCESS_ATTACH 가 정확히 뜹니다.

      테스트하신 소스(혹은 실행파일)을 제게 보내주시면 확인해 드리겠습니다.

      감사합니다.

    • kaka 2011/01/03 09:52 댓글주소 | 수정 | 삭제

      새해 복 많이 받으세요..

      아.. 죄송합니다.
      정확히 질문을 하지 못했네요.
      iexplore.exe부모는 DLL_PROCESS_ATTACH가 말씀하신데로 정확히 뜨는데,
      자식 iexplore.exe에게는 DLL_PROCESS_ATTACH나 DLL_THREAD_ATTACH 이벤트가 발생하질 안습니다.

      인젝터는 reversecore님께서 올려놓으신 파일로 했습니다.

    • reversecore 2011/01/07 05:38 댓글주소 | 수정 | 삭제

      아~ iexplore.exe 의 child process 말씀이시군요.

      Global API Hooking 을 써야 하는데요.
      인젝션 시키는 DLL 에 global API Hooking 코드가 준비되어 있어야 합니다. 위 댓글에서 소개한 dummy.dll 에는 그런 기능이 없지요.

      http://www.reversecore.com/79 <- 요기 있는 redirect.dll 파일이 바로 그 파일입니다.

      redirect.dll 을 인젝션 하신 후 IE 의 탭을 마구 띄워서 child process 가 생성되는 순간 자동으로 인젝션이 되면서 DLL_PROCESS_ATTACH 가 뜹니다.

      DbgView 로 확인할 수 있도록 OutputDebugString() 으로 로그를 찍었습니다.

      * Win 7 32bit/64bit 에서 테스트 하였습니다.

      kaka 님께서도 새해 복 많이 받으세요~~~

      감사합니다.

  13. kaka 2010/12/30 17:51 댓글주소 | 수정 | 삭제 | 댓글

    안녕하세요.
    InjDll64.exe와 dummy64.dll로 win7 64 OS에서 테스트해보니
    notepad에 inject(dll_process_attach)후 자동으로 dll_process_detach되던데
    왜그럴까요?

    • reversecore 2010/12/31 00:41 댓글주소 | 수정 | 삭제

      역시 제 환경에서는 잘 되는데요.

      notepad 에 injection 성공하면 DLL_PROCESS_ATTACH 가 뜨고 바로 이어서 DLL_THREAD_DETACH 가 뜹니다. (원격 스레드가 종료되면서 뜨는거죠.)

      메일 주소를 알려주시면 OutputDebugString() 을 추가한 dummy64.dll 을 보내드리겠습니다. 다시 한번 확인해 보시기 바랍니다.

      * 간혹 보안 모듈에서 DLL Injection 을 막는 경우가 있습니다. 근데 그건 인젝션 자체를 막는 거라 올려주신 증상하고도 맞지 않네요.

      감사합니다.

  14. Reversing_H 2011/01/14 10:22 댓글주소 | 수정 | 삭제 | 댓글

    항상 잘보고 잘 배우고 있습니다.
    여기서 질문하나 드릴게요 ~

    제가 리버싱쪽으로 취업을 하고 싶은데,,
    리버싱쪽에서 뽑는거는 잘 못본듯 하고
    다른기술도 같이 병행해야하는 업무인지;

    이쪽에 대해 아는게 없어서 말이죠;;

    조언 부탁드립니다 ^^

    • reversecore 2011/01/14 11:50 댓글주소 | 수정 | 삭제

      안녕하세요.

      관리자가 아닌 리버싱 엔지니어를 말씀하시는 거라면...

      제가 알기로는 보안 분야뿐입니다.
      (AV 업체, 온라인 게임 업체...)

      간혹 보안 컨설팅 분야에서 리버싱 관련 지식에 대해 가산점을 부여한다는 얘기만 건네 들은적은 있네요~

      감사합니다.

  15. Reversing_H 2011/01/14 11:01 댓글주소 | 수정 | 삭제 | 댓글

    아,, 한가지더 ;
    보통 악성코드 분석에서 리버싱이
    쓰이는걸로 알고있는데

    그렇다면 악성코드 분석할때
    필요한게 리버싱과
    또 어떤분야가 필요한지
    알고싶습니다.

    질문여러개 드려서
    죄송합니다 ㅠ

    • reversecore 2011/01/14 11:54 댓글주소 | 수정 | 삭제

      회사마다 다르겠습니다만...

      악성코드 분석은 리버싱 지식만 있으면 됩니다. (이것만도 쉽지 않습니다.)

      추가적으로 악성 코드 자체의 지식, 보안 지식 등을 갖춘다면 면접에서 좋은 점수를 받을 수 있겠지요.

      사실 회사마다 사람 뽑는 기준(신규직원의 경우) 은 다 틀려서 말이죠. 어디는 학력을 중시하고, 어디는 성격/기질을 중시하고, 어디는 순수한 실력을 보기도 하고... 그렇답니다. ^^

      감사합니다.

  16. Reversing_H 2011/01/15 20:07 댓글주소 | 수정 | 삭제 | 댓글

    답변 정말 감사드립니다.
    그런데 한가지 더 질문드릴게요;;
    원래 제가 7년전쯤에 프로그래밍쪽이 너무 좋아서
    개발쪽으로 취업을 하려다가 우리나라의 개발직의 종사자분들의
    여러가지 이야기를 들어보니(뭐 IT쪽은 여건이 안좋은건 비슷하지만)
    흥미도 떨어지고 여차저차에서 아예 IT쪽에 손을 놓았다가
    보안쪽에 흥미를 갖고 다시 공부를 시작했습니다.
    하지만 보안이라는 분야에 대해 처음 접하고 보안자체도 워낙 종류가
    많더군요;; 그리고 신입이 바로 들어가기도 쉽지 않은 분야이구요.
    그래서 리눅스 계열의 서버쪽에 우선 취업을 해서 이직하려고 준비하던중에
    리버싱이라는 분야를 알게 됐고 매우 흥미를 가지게 되었습니다.
    정말 이건 충격자체였고, 바로 이거다라는 느낌을 받았습니다.
    하지만 이걸 알게된것이 얼마전이고 말 그대로 실력이 없습니다.
    목표는 리버싱 일을 하는게 제 목표이긴 하지만요.
    여기서 질문을 드리자면
    뭐 물론 제일 좋은것은 처음부터 리버싱 업무를 하는 곳에 취직하는게 제일
    좋겠지만,, 제가 여건상 돈을 벌어야 하기에;; 바로 들어가기에는
    시간적이 여유와 자금적 여유가 없어서 프로그래밍 쪽이나
    서버쪽에 먼저 취직을 해야 할듯 싶은데 ,
    추후 리버싱일을 하려면 개발직 쪽으로 가는것이 더 나을까요?
    또한 개발직 쪽으로 가더라도 개발직도 종류가 많은데
    보안솔루션 개발쪽으로 가는것이 더 좋은 선택인지
    많은 것이 고민됩니다.
    자꾸 질문드려서 죄송하구요;;
    그만큼 이곳을 알게되고 리버싱이란 것을 알게되서
    기쁘구요. 조언좀 주셨으면 좋겠습니다 .
    감사합니다 ^^

    • reversecore 2011/01/20 00:04 댓글주소 | 수정 | 삭제

      안녕하세요.

      사실 리버싱일을 하시려면 말그대로 리버싱쪽으로 취직을 하시는게 좋습니다.

      제가 처음 리버싱으로 취업할 때만 해도 국내에 리버싱을 하는 사람들이 없어서 거의 대부분 경력 개발자들을 뽑았습니다. 몇 달을 교육시켜서 실무에 투입했지요.

      요즘은 리버싱 인구가 많이 늘어나서... 회사도 신입을 뽑더군요... 신입들의 리버싱 경험도 상당하더군요. 경력을 뽑을때도 동종 업계의 리버싱 경력자를 뽑구요...

      저와 저희 회사의 사례를 소개해 드린거라서요...
      참고만 하시기 바랍니다.

      제 개인적으로는 개발/리버싱 모두 경험을 가지고 있는 것이 좋다고 생각합니다. (실제로 제가 그렇구요.)

      감사합니다.

  17. 아침햇살 2011/02/07 16:24 댓글주소 | 수정 | 삭제 | 댓글

    안녕하세요^^ 맨날 눈팅만하고...책나오길를 기다리는 사람입니다;;
    매번 조용히 글만읽고 댓글하나 없이 가다가....궁금한게 있어서 염치 없지만 이렇게 질문하나
    드리고 갑니다.

    32비트에서는 전역 후킹시에 ntdll!ZwResumeThread를 이용하면 앞으로 실행될 프로세스에 대해
    서도 모두 후킹이 가능한걸 알았읍니다.. 근데

    64비트에서는 실행되고 있는 프로세드들이 64비트 응용프로그램인지 32비트 응용프로그램인지를
    구분하여 따로 Injector와 DLL을 맞추서 인젝션을 해야 하더군요..

    예를 들어 저는 64bit OS에서 32비트 응용프로그램에만 인젝션을 시도할 예정인데요
    이게 앞으로 실행될 프로세스에 대해서 어떻게 인젝션을 해야 할지 좀 감이 안와서요;;
    쓰레드를 돌려서 새로 생성되는 프로세스를 감시하다가 32비트인지 64비트인지 구분해서 인젝션을 할까도 생각했지만 이건 왠지 아니다 싶은 생각이 들더군요;;
    64비트에서도 ntdll!ZwResumeThread 처럼 뭔가 핵심적인 함수 하나를 후킹해서 전역적으로 후킹할 수 있는 방법이 없을까 해서요.. 물론 저 함수를 64비트에서 후킹 할 수 있겠지만
    제가 돌리는 응용프로그램이 32비트이다보니 explorer.exe에 인젝션을 할 수 가 없는 상황입니다.
    다른 분들의 의견이나 reversercore님의 의견이 한번 듣고 싶네요..~ +.+
    구글링을 해봤지만 딱히 눈에 딱 보이는거 없어서요..(혹시 제가 놓친거 일 수도 있습니다..ㅋ)
    어떻게 생각하세요??

    • reversecore 2011/02/09 21:39 댓글주소 | 수정 | 삭제

      안녕하세요.

      64bit 환경에서 32bit 프로세스만 global hooking(자동 인젝션) 을 하신다는 말씀이시죠~

      제가 직접 시도해 보기 전에는 뭐라 말씀드리기가 어렵군요.

      테스트 후 다시 답변 달아드리겠습니다.

      감사합니다.

    • 아침햇살 2011/02/14 11:34 댓글주소 | 수정 | 삭제

      넵 답변 달아주셔서 감사합니다^^

      지금은 우선 쓰레드에서 프로세스를 감시하여 새로 생성된 프로세스
      를 탐지해 32bit일경우만 Injection하도록 작업하고 있습니다.^^

      좀더 좋은 방법이 나왔으면 좋겠네요~ ㅎ ~
      그럼 수고하세요^^

  18. baboha 2011/02/12 19:22 댓글주소 | 수정 | 삭제 | 댓글

    안녕하세요 리버스코어님 글 잘보고있습니다.

    질문이 하나있는데요

    프로세스가 실행중일때 Injection된 dll의 이름들을 얻을려면 어떻게 해야할까요?

    IAT에 써진것말고 프로세스가 LoadLibrary를 통해서 따로 Injection한 것까지 알고싶습니다

    마치 procexp 프로그램처럼요

    • reversecore 2011/02/18 22:44 댓글주소 | 수정 | 삭제

      안녕하세요.

      말씀하신 그런 기능을 수행하는 API 가 있습니다. Injection 된 DLL 들을 Ejection 시킬 때 사용됩니다.

      CreateToolhelp32Snapshot(TH32CS_SNAPMODULE, dwPID)
      Module32First()
      Module32Next()

      위 API 를 검색해 보시기 바랍니다.

      감사합니다.

  19. harrison 2011/04/16 06:37 댓글주소 | 수정 | 삭제 | 댓글

    안녕하세요.
    리버싱 관련 지식이 필요해서 검색을 하다가 이곳에 왔는데,
    굉장한 도움이 도움이 되었습니다.
    감사합니다.

  20. wordboss 2011/05/17 10:47 댓글주소 | 수정 | 삭제 | 댓글

    안녕하세요.
    오늘 오랜만에 강좌에 와보니 새로운 내용 더 생겼네요.
    보 다 흥미로운 내용 더 많이 올려주세요
    자주 방문 하겠어요
    건강에 각별히 류의하시구요

  21. FreeAngel 2011/07/06 03:01 댓글주소 | 수정 | 삭제 | 댓글

    궁금한점이있는데요.ㅠㅠ 글로벌 후킹에ㅓ 실행되는 프로그램, 앞으로 실행될 프로그램을
    제어 할 수 있다고했는데, 흰트조금만주세요.ㅠㅠ 크레이트 프로세스를 써서하는건지;;;;ㅠ

    • reversecore 2011/07/14 05:56 댓글주소 | 수정 | 삭제

      안녕하세요.

      제 블로그에 있는 글이 도움이 되실 것 같습니다.

      Advanced Global API Hooking – IE 접속 제어 (1)
      (http://www.reversecore.com/77)

      API Hooking – '스텔스' 프로세스 (1)
      (http://www.reversecore.com/65)

      감사합니다.

  22. 2011/10/27 10:49 댓글주소 | 수정 | 삭제 | 댓글

    비밀댓글입니다

  23. 2011/10/28 12:51 댓글주소 | 수정 | 삭제 | 댓글

    비밀댓글입니다

  24. 2011/10/28 12:51 댓글주소 | 수정 | 삭제 | 댓글

    비밀댓글입니다

  25. 2012/01/09 02:04 댓글주소 | 수정 | 삭제 | 댓글

    비밀댓글입니다

    • reversecore 2012/01/11 06:17 댓글주소 | 수정 | 삭제

      안녕하세요.

      와~ 대단하세요.
      그토록 분명한 꿈을 갖고 계시니 꼭 이룰 수 있을 거라 생각합니다.

      감사합니다.

  26. 따오기d 2012/02/01 10:45 댓글주소 | 수정 | 삭제 | 댓글

    수고하십니다.!! 글잘봤어요
    질문이 있는데요
    Injector = 32bit process
    HookDLL = 64bit dll
    Target Process = 64bit Process
    OS 는 Windows 2008 R2 (64bit) 이구요
    이상황에서 Injector 가 wow 로 돌고있는 상황에서 가능한 방법이 있나요?

  27. 따오기 생각 2012/02/13 13:34 댓글주소 | 수정 | 삭제 | 댓글

    따오기님
    수고하세요.
    오 그거 생각에 system disable wow비슷한 API가 있는데요.
    그걸 참고하시지요.



"리버싱 공부를 어떻게 시작해야 할지 모르겠어요. 도와주세요." 라는 질문을 종종 받곤 합니다. 제가 블로그 활동을 하는 이유는 우리나라의 리버싱 기술 수준을 향상시키고, 리버싱 기술을 널리 전파하는데 작은 힘을 보태는 것입니다. 특히 리버싱에 처음 입문하시는 분들께 길잡이 역할을 할 수 있다면 더이상 바랄게 없습니다.

과연 어떻게 하면 리버싱을 잘 할 수 있을지 제 생각을 얘기해 드리겠습니다.



1. 모든 공부에는 "목표"가 있어야 합니다.


"리버싱 전문가가 되기 위해", "취직을 위해", "흥미를 위해", "해커가 되기 위해" 등의 자신만의 목표가 필요합니다. 이러한 목표가 없으면 힘든 공부를 지속하기 어렵습니다. (도중 포기할 확률이 높아진다는 뜻입니다.) 목표는 여러분들에게 방향을 제시합니다. 그 목표를 향해 한발 한발 전진하시기 바랍니다.


2. "긍정적인 마인드"를 가지세요. 


잘못된 편견을 가지신 분들이 많이 계십니다.

- "저는 C 언어도 모르는데요... 리버싱을 할 수 있을까요?"  --->>> 물론이죠.
- "저는 어셈블리를 해본적이 없는데요... 리버싱을 못 하겠지요?" --->>> 천만에요. 잘 하실 수 있습니다.
- "저는 윈도우즈 구조를 전혀 모르는데요... 그래도 리버싱을 할 수 있을까요?" --->>> 무지 잘하게 되실 겁니다.

바로 위와 같이 "저는 XXX 를 모르는데요" 라던지 "저는 YYY 를 해본적이 없는데요" 라는 말은 리버싱을 공부할 때 전혀 의미없는 말입니다. 이런 말은 지레 겁을 먹게 만들고, 도전 의식을 꺾어버립니다. 시도조차 못해보고 포기하게 만드는 부정적인 말입니다. 오히려 "XXX 를 모르기 때문에 배우고 싶다" 라고 긍정적인 생각을 해보시기 바랍니다.

배워야 할 가짓수를 따지자면 수십 가지가 넘을 것입니다. 리버싱 초보자가 그걸 처음부터 다 배워야 할까요? 너무 힘들겠지요. 지겨워질 겁니다.

그냥 새로운 내용이 튀어 나올때마다 다 해결하고 넘어가려고 하지 마시고 일단 맘에 묻어두시고 계속 진행하시는 것이 중요합니다. 반복 학습 하는 과정에서 한가지씩 차츰 차츰 배워나가시면 됩니다.

예를 들어 "XOR EAX, EAX" 의 의미는 디버깅을 몇 번 해보시면 저절로 체감하게 되는 내용입니다. 처음 볼때나 낯설고 흥미롭지요. 하지만 100번 봤다고 생각해 보세요. 그냥 당연하게 받아들이게 됩니다. 오히려 같은 의미의 "MOV EAX, 0" 명령어가 이상하게 보일겁니다. XOR EAX, EAX 를 왜 안썼을까 하고 말이죠.


3. "재미"를 느끼셔야 합니다.


초보일수록 더더욱 리버싱 과정에서의 재미를 찾으셔야 합니다. 어렵고 지겨운데 어떻게 계속 해나갈 수 있겠습니까? 리버싱이 재밌고, 하나씩 모르는 걸 배워나가고, 내가 맘먹은대로 프로그램을 패치시키는 이런 과정에서 재미를 찾으셔야 하지요.

사람은 재미있는 일이라면 남들이 아무리 말려도 스스로 하게 되어있답니다.


4. "검색"을 생활화 하셔야 합니다.


"검색하면 9할은 나온다" <- 제가 어디서 읽은 후 맘속에 담아둔 명언 입니다. 특히 리버싱 기술은 수많은 검색을 통한 지식 습득이 필수적입니다. 역사가 짧고 관련 전문가도 적고 관련 서적도 거의 없다시피 하니까요. 일단 믿고 검색해 보시기 바랍니다. 반드시 원하시는 내용을 찾을 수 있으실 겁니다.


5. 제일 중요한건 "실천"입니다.


"Just Do It" 아시죠~

뭔가를 이루고는 싶은데... 맘을 먹으셨으면... 행동을 하셔야죠... 그것도 지금 당장 하는겁니다...

제 블로그에 있는 HelloWorld 부터 무작정 따라해보는 겁니다. 당연히 처음에는 하나도 아는게 없지요. 모든게 낯설게 느껴집니다. (특히 어셈블리 명령어는 거의 외계 언어로 보이죠.)

첫 목표는 디버거를 이용해서 main() 함수를 찾아가는 겁니다. 디버거에 일단 익숙해 지기 위해서 메뉴도 하나씩 건드려 보고요. tracing(StepIn[F7], StepOut[F8] 명령어를 이용) 을 마구 해보는 겁니다. 차츰 감이 오다가 결국 main() 을 찾게 됩니다. C 소스 코드와 Disasembly 코드의 차이도 확인해 보시구요. 시작은 성공하신 겁니다! 출발이 좋군요. ^^

그다음 간단한 crackme, patchme, unpackme 등을 찾아서 해보시구요.

흔히 볼 수 있는 메모장, 계산기등을 패치해봅니다. (아주 간단히 말이죠. 가령 기능을 막아본다던지 하는 그런 정도로요.) 그 후 차츰차츰 대상을 넓혀 가시는 겁니다.


6. "느긋한 마음"을 가지세요.


리버싱 초보자가 가장 걸리기 쉬운 병이 바로 "조급증" 입니다. 빨리 성과를 내고는 싶은데 공부가 만만치는 않고 실력은 제자리에서 맴돌고 있습니다. 자신이 얼마나 모르는 것인지, 제대로 가긴 하는 건지 너무 답답합니다. 어셈블리, 윈도우즈 내부구조, PE 파일 포멧, API 후킹 등 뭐 하나 쉬운게 없습니다. 어셈블리 한가지만 봐도 어디까지 공부를 해야 하는지 알 수 가 없지요. 이럴때 마음이 급해지고 목표를 잃어 버리게 됩니다. 

제가 해드리는 얘기를 잘 읽어 보시기 바랍니다.

世界最强 大韓民國 

위 한자들을 읽어 보세요. "세계최강 대한민국" 입니다. 대부분 정확히 읽으셨을 겁니다. 그렇다면 안보고 정확히 쓸 수도 있으신가요? 아마 안보고 쓰는건 쉽지 않으실 겁니다. ^^ 위 8 글자 중에서 한 두 글자를 모르더라도 주변 글자들을 통해서 전체를 읽어 낼 수 있습니다. 

저를 비롯한 많은 리버서들이 어셈블리 명령어를 100% 자유자재로 구사하지는 못합니다. 몇명은 그래도 어셈블리 프로그래밍이 가능하지만 많은 사람들은 그렇지 못합니다. 마치 위의 한자를 읽을 수만 있고 쓸 수는 없는 것과 비슷한 상황입니다. 그래도 리버싱만 잘해요~ ^^ 명령어를 모르면 찾아 보면 되니까요. 그 정도만 알아도 프로그램의 동작 흐름을 알아낼 수 있습니다. 아마 이런식으로 몇 년이 더 흐르면 지금보다 훨씬 잘하게 되겠지요.

중요한 것은 저와 제가 아는 모든 리버서들도 초보 시절에는 (여러분들과 같이) 다 고만고만한 조건이었다는 것입니다. 꾸준히 하다보니 자연스럽게 어느 정도의 실력이 쌓인 것이지요. 절대로 조급해 하지 않았습니다.

여러분들도 지금 당장 시작해보세요~ 분명히 성과가 나타날 것입니다.

제가 어떻게 장담하냐구요? 저는 사실 구체적인 성공 사례를 알기 때문입니다. 블로그를 운영하면서 많은 분들께 과분한 감사의 메일을 받았습니다. 그 사연들을 읽어보면 감동에 이어 전율이 흐를 때도 있습니다.

- 대학 졸업작품이 단과대 전체 최우수 작품으로 선정되었습니다. (상까지 받으셨다는...)
- 개발 프로젝트에 후킹 기술을 적용해서 쉽게 해결할 수 있었습니다. (유명 회사 개발팀 소속이십니다.)
- XX소프트웨어 멤버십에 합격했습니다. (XX 취직이 보장된다는 그런 곳이라죠.)
- 리버싱 프로젝트("문서 암호화")를 성공시켰습니다. (아마 대학교 동아리 였던걸로 기억합니다.)
- 기타...

이분들께서는 대부분 리버싱 초보셨습니다. 본인들의 불타는 열정으로 엄청난 성취를 이루어 내신 거지요. 따라서 제가 여러분도 할 수 있다고 장담할 수 있는 것이고요.

공부하시다가 모르시는 내용이 있으세요? 질문하세요~ 저도 다른 분들의 생각을 들어보고 같이 고민하는 것을 좋아합니다.

자, 지금 당장 시작하세요~ ^^

ReverseCore

Trackback Address :: http://www.reversecore.com/trackback/92 관련글 쓰기

  1. 리틴 2010/10/13 07:36 댓글주소 | 수정 | 삭제 | 댓글

    몇번 검색하다가 우연히 즐겨찾기 해놨던 곳인데 다음뷰에서도 보게되네요 ^^!
    좋은글 항상 잘 보고 있습니다. ^^

  2. 철이. 2010/10/13 08:45 댓글주소 | 수정 | 삭제 | 댓글

    안녕하세요 철이 입니다.^^

    초보자가 봐야할 책을 소개 해주는것도 좋다고 생각합니다.

    저 같은 사람을 위해서.

    요즘 masm을 다시 공부 하고 있습니다.

    도대체 뭐를 공부 해야지 어떻게 공부해야지. 막막합니다.

    • reversecore 2010/10/14 20:49 댓글주소 | 수정 | 삭제

      안녕하세요.

      제가 책을 보고 롱부한게 아니라서요...

      읽은 책이 없다보니.. 추천 해드릴 것도 없네요...

      뭐를 공부해야 할지 막막하다면... (보통 이것저것 잘 하시는 분들의 공통된 현상입니다.)

      먼저 목표를 정해 보시기 바랍니다. 아마 희미한 불빛이 보이기 시작할 것입니다.

      감사합니다.

  3. 철이. 2010/10/13 09:08 댓글주소 | 수정 | 삭제 | 댓글

    결국은 꾸준함이라고 생각하는데;; 쉽지 않네요 ㅠ

    ㅎㅎ 좋은글 감사합니다.

  4. Sun2Day 2010/10/13 14:22 댓글주소 | 수정 | 삭제 | 댓글

    음.. 저는 좀 비관적으로 생각합니다..
    약간 다른 쪽에서요 ^^;
    안된다는 생각은 하지 않지만 뭘 보던지 일단 좀 부정적으로
    "에이.. 이거 아닌거 아니야??"
    라는 생각이 먼저 들더군요;;
    리버서라고 말은 못하겠지만 이게 제가 분석을 하는 이유가 아닌가 싶네요 +_+
    좋은 글 잘 읽고 갑니다.

    • reversecore 2010/10/14 20:50 댓글주소 | 수정 | 삭제

      Sun2Day님, 안녕하세요.

      ㅎㅎㅎ 그런 방법도 있군요...

      사람마다 효과적인 방법을 다를것입니다.

      좋은 사례 감사합니다. ^^

  5. HS 2010/10/13 18:40 댓글주소 | 수정 | 삭제 | 댓글

    리버싱 서적의 앞부분에~ 들어가면 딱 좋을 내용인데요~? +_+ ㅋㅋ
    잘 읽고 갑니다~~ ^^

    • reversecore 2010/10/14 20:53 댓글주소 | 수정 | 삭제

      안녕하세요.

      ^^ 요즘 회사 업무 많이 바쁘시죠?

      바쁘신데도 틈틈이 방문해주셔서 감사합니다.

      환절기에 감기 조심하시구요. ^^

  6. 퍼다우크 2010/10/21 14:54 댓글주소 | 수정 | 삭제 | 댓글

    얼씨구 언제 이런 블로그를 .....
    아이고 글도 많이도 쓰셨네요... 5년을 옆에 있었는데 이런걸 몰랐다니...T.T

  7. Middle Reverser 2010/10/22 18:24 댓글주소 | 수정 | 삭제 | 댓글

    저 같은경우도 리버싱 은 함부로 모른다고 접근 하면 안된다고 동감합니다 ...
    저두 .. C 언어를 배우기 전에 Reversing 을 배우기시작했는데요 ... 스스로 부족한건 자동으로 공부를 하게 되더군요 ..
    동감합니다 ^^

  8. 이영호 2010/10/25 10:43 댓글주소 | 수정 | 삭제 | 댓글

    안녕하세요? 즐겨찾기 하고 간혹 한번 두번 읽고 가는 사람입니다.
    강의해주신 내용보니 참 좋아서요..저는 웹프로그래머라 윈도우 어플리케이션에 대해 잘 알지
    못하지만 어쩌다가 리버싱이란걸 알게되서 흥미를 갖고있답니다 ^^;;

    아무쪼록 감사의 말씀 전하고 갑니다 ^^

  9. binoopang 2010/12/09 16:25 댓글주소 | 수정 | 삭제 | 댓글

    안녕하세요. 여기 참 자주 오게 되네요 ^^
    좋은글도 감사히 잘 읽고 갑니다.

  10. Lr라 2011/01/07 10:46 댓글주소 | 수정 | 삭제 | 댓글

    정말 도움이 되는 글이군요 ㅠㅠ
    예전에 비해서 강좌가 많이 사라져서 슬펏는데 아쉽네요 ㅎㅎ
    런투 크랙이 망해버려서 공부할길도 없어지니말이져..
    점점 슬퍼지는 현실 ㅠㅠ

    • reversecore 2011/01/11 10:57 댓글주소 | 수정 | 삭제

      안녕하세요.

      아이쿠~ 제가 원래 리버싱 입문자에게 약간의 도움이라도 드리고자 블로그를 시작했늗데 요즘 다른 일(?)로 강좌를 못 올리는 상황입니다.

      저말고도 다른 분들의 훌륭한 강좌가 많이 있습니다. 최소한 제가 리버싱 시작할 때보다는 훨씬 공부하기 좋은 환경이라고 감히 말씀드릴 수 있습니다. ^^~

      이럴때 실전 디버깅 연습을 많이 해보시는건 어떨까요?
      간단한 프로그램을 리버싱하면서 자신이 부족하다고 싶은 부분을 집중적으로 찾아서 공부하시는 겁니다.

      tuts4you 나 openrce 같은 사이트에 많은 샘플 예제가 있으니 그걸 활용해 보시는 것도 좋겠네요.

      감사합니다.

  11. 정등어 2011/02/22 14:00 댓글주소 | 수정 | 삭제 | 댓글

    와...정말 많은 도움이 되었습니다 자주자주 들르겠습니다 사...사..사탕합니다 리버스코어님

  12. blackrus 2011/02/22 23:49 댓글주소 | 수정 | 삭제 | 댓글

    리버스코어님을 멘토로 만났더라면 참많이배웠을거같습니다 ㅎ
    그렇다할 스승이없는 저에겐 참아쉽네요 ㅎㅎ

    • reversecore 2011/02/28 16:01 댓글주소 | 수정 | 삭제

      저도 처음에 리버싱 멘토가 없었습니다. ^^

      장단점이 있는것 같습니다. 멘토가 없으면 없는대로 더 열심히 찾고 헤메고 하던 일들이... 지금보면 참 소중한 경험이 되었으니 말이지요.

      감사합니다.

  13. Aly 2011/03/01 11:18 댓글주소 | 수정 | 삭제 | 댓글

    리버싱을 공부하는 한 학생으로써, 정말 좋은말씀과 좋은정보들 감사합니다.

    앞으로 자주 들리면서 많은 질문드리도록 하겠습니다 ^^

  14. 초보 2011/03/16 01:05 댓글주소 | 수정 | 삭제 | 댓글

    궁금한게 있습니다!
    PE 분석후, 디어셈블러를 통해 나온 어셈블리어에서
    변수의 이름도 파악할 수 있나요?
    함수이름은 파악이 되는걸로 아는데....
    답변부타드립니다ㅜ

    어셈블리어에서 어떤 정보까지 알 수 있는지... 찾아봐도 잘 안나오네요ㅜ

    • reversecore 2011/03/16 21:31 댓글주소 | 수정 | 삭제

      안녕하세요.

      빌드 과정에서 생성되는 map 파일이란게 있습니다.
      디버거에 이 파일을 연결해주면 변수명, 함수명 등을 보실 수 있는데요.

      일반적인 상황에서는 map 파일을 배포하지 않으니 제삼자는 볼 수 없습니다. 따라서 전역변수와 함수명은 일반 주소로 표시되고, 로컬 변수는 [ESP+X] 형태로 표시되는 것이 일반적입니다.

      함수이름이 파악된다는 말씀은 아마 Win32 API 이름이 보인다는 뜻인것 같습니다. 그것은 DLL 에서 외부로 노출한 것이기 때문에 디버거에서 볼 수 있는 것이지요.

      감사합니다.

  15. 이제시작 2011/03/27 22:22 댓글주소 | 수정 | 삭제 | 댓글

    글을읽고 많은 도움을 얻어갑니다!
    적어도 저는 지금 3번째는 만족하고있네요~!
    요즘 하나하나 하는게 재미있습니다 !!

  16. 아직시작안함 2011/04/22 23:43 댓글주소 | 수정 | 삭제 | 댓글

    안녕하세요 ,제가 네이버에 리버싱이라고 검색해보면 뜨겠지만 리버싱이라는 4만원짜리 책을 사려고 합니다. 그런데 그게 기초를 좀 다져야 한다고 하는데 그럼 어떤책을 기초로 삼아야 할까요? 추천좀 해주세요, 아니면 님께서 어떻게 시작하셨는지 가르쳐 주세요

    • reversecore 2011/05/03 00:56 댓글주소 | 수정 | 삭제

      안녕하세요.

      그 책이 어떤 책인지는 잘 몰라서 뭐라 말씀드릴 수 가 없네요.

      제 경우는 업무가 리버싱이기 때문에 시작할 때 남들보다 훨씬 수월하였습니다.

      감사합니다.

    • 아톰보트 2011/06/26 11:08 댓글주소 | 수정 | 삭제

      4만원 짜리 책이라는게 혹시....
      에이콘 출판사에서 나온 리버싱비밀을파헤치다 아닐까요?
      저도 이 책이있는데 초보자가 보기에는 좀 힘든거 같더라구요 ^^

    • Emalron 2011/08/22 11:45 댓글주소 | 수정 | 삭제

      하지만 한국에 나온 책 중엔 가장 좋은 책 인거 같습니다.

  17. 아톰보트 2011/06/26 11:07 댓글주소 | 수정 | 삭제 | 댓글

    좋은글 잘 읽었습니다!!
    즐겨찾기 해두고 매일 와야 할 거 같아요..
    전 이제 리버싱공부를 시작한 초보거든요 ㅎ
    앞으로 많은 조언과 가르침 부탁 드리겠습니다^^

  18. 리버서가되고싶다 2011/09/22 17:58 댓글주소 | 수정 | 삭제 | 댓글

    안녕하세요.
    저는 리버싱을 하기위해 c언어공부를 하고있고 이해될떄까지 마친 후
    X86 프로세서를 위한 어셈블리언어 <--이걸 공부하려고하는데요..
    확실이 c랑 어셈을 어느정도 공부한 후에 리버싱을 하게된다면 수월하게 기술을 익힐수있을까요..?

    • reversecore 2011/09/28 21:04 댓글주소 | 수정 | 삭제

      안녕하세요.

      C 와 Assembly 를 잘 알면 분명 디버깅이 수월합니다만...

      잘 모르시는 분들도 리버싱을 공부하면서 같이 병행으로 배우시는 분들이 많습니다.

      그래도 잘 하시더군요. ^^~

      감사합니다.

  19. Z2ong2 2011/09/30 13:17 댓글주소 | 수정 | 삭제 | 댓글

    안녕하세요.
    시작할때 여기서 시작하고 중간에 크랙미 몇개 풀고 다시오네여
    지금 3달정도 리버싱 공부를 하고 있는데 이게.. 실력이 느는것 같지 않네여..
    그저 3달동안 이 블로그의 글 몇개와 크랙미 몇개 풀고 그랬는데도
    얼마전 청소년대회의 리버싱문제는 풀지도 못햇네요 ㅠㅠ
    너무 느린걸까요 아니면 조급한 생각일까요..
    조언 부탁드립니다

  20. 아로미 2011/11/08 02:54 댓글주소 | 수정 | 삭제 | 댓글

    리버스코어님 글을 읽으니 힘이 솟네요... +_+/
    지금부터 열심히 공부하겠습니다! 잘 부탁합니다 ^^

  21. 양승환 2012/02/12 03:00 댓글주소 | 수정 | 삭제 | 댓글

    이글보니까 힘이 나네요~^^
    2~3개월동안 공부하면서 실력이 늘지 않는다고 자책해왔었는데..ㅎㅎ;;
    그래도 꾸준히 해볼랍니다~^^
    리버스코어님 글보구 호랑이기운받고 갑니다~
    감사합니다~^^


책소개

column 2010/09/06 01:00

책소개


제가 요즘 회사일, 집안일 외에 대부분의 시간에 리버싱 서적을 열심히 쓰고 있습니다. 책 홍보를 위해 간략히 소개해 드리자면 타겟 독자층은 "리버싱 입문을 원하는 초보자"와 "리버싱 레퍼런스가 필요한 중급자" 입니다. 컨셉은 "내부 동작 원리를 아주 쉽고 뜨겁게 이야기" 하는 것입니다. 분량은 (제발) 1,000 페이지가 넘지 않도록 노력 중입니다. 책 내용은 블로그 내용을 좀 다듬어서 60% 정도를 채우고, 새로운 주제를 써서 나머지 40% 정도를 채울 예정입니다. 그리고 실습 예제를 많이 넣으려고 합니다.


일정


집필 일정은 늦가을까지로 예정했었습니다. 그런데 쓰면 쓸수록 제 자신이 점점 진지해지면서 입문자에게 필요하다고 생각되는 범위와 분량이 대폭 늘어나고 있습니다. 일정과 분량을 조절할 필요가 있네요. 욕심을 자제하려고 노력도 해봤지만, 진정한 "리버싱 입문서"를 독자에게 제공해야 한다는 사명감(?) 같은 게 생겨서 이젠 굳이 자제하려고 노력하지 않습니다. ^^


조언


제 블로그를 방문하시는 분들 중에서 혹시 제가 책에서 다루면 좋겠다고 생각되는 주제(또는 조언, 건의, 아무거나)가 있으시다면 댓글로 알려주시기 바랍니다. 작업에 큰 도움이 될 것입니다.


블로그


블로그에 글을 많이 올리지 못해서 자주 방문하시는 분들께 죄송하다는 말씀을 드립니다. 집필이 끝나면 제 블로그에는 실전 리버싱 실습 위주로 포스팅을 할 예정입니다. 그리고 책에 미처 쓰지 못한 내용들을 올리게 될 것입니다.

제 블로그는 매일 방문하고 있습니다. 댓글의 질문들에 답변도 올리고, 이메일로 문의하신 내용도 꼭 챙겨읽고 답변 드리고 있습니다. 리버싱 하시다가 궁금한 점 있으시면 부담 갖지 마시고 질문해 주세요. 저는 같이 생각해 보는 것을 좋아합니다. 답변 달면서 제가 더 많이 배우니까요.

그리고 바쁘더라도 종종 글을 올려야겠어요. 예전에는 블로그 포스팅 하는게 저의 즐거움 이었는데 말이죠. 요즘엔 글을 쓰기만 하고 올리지는 않으니 즐거움이 하나 줄었어요.

방문해 주시는 모든 분들께 감사 드립니다.
댓글, 이메일 보내주시는 분들에게도 감사드려요. 여러분께서는 모두 가까운 미래에 '열혈 리버서' 가 되실 것입니다.

감사합니다. 

* 제가 좋아하는 멘트를 하나 남길께요~ 제 트위터에도 쓴 내용입니다. (트위터를 혼잣말 하는 공간으로 활용하기 때문에 Follow, RT 이런거 없어요. ^^)

"똑같은 시기에 비슷한 생각을 하는 사람은 많지만 실천에 옮기는 사람은 드물다. 나는 생각을 행동에 옮겼을 뿐이다. 기회는 도전하고 실천하는 자가 받는 선물 같은 것이다." - 강덕수, STX 그룹 회장 (창업주)

Trackback Address :: http://www.reversecore.com/trackback/90 관련글 쓰기

  1. 소매치기 2010/09/06 09:44 댓글주소 | 수정 | 삭제 | 댓글

    오호~ 책이라.. 아무래도 한글로 나온 리버싱책이 적다보니.. 더욱관심이 가네요 ㅎ
    나오면 언넝 사서 볼게요 ㅋㅋ 리버싱 초보라 리버스 엔지니어링 비밀을 파헤치다도 봐봤는데
    반도 이해를 못했어요 ;; 여기서 좀더 공부를 해보고 차근차근 둘다 읽어 나가야 겠네용 ㅋ

    언넝 나오길 기다립니다 +_+

    • reversecore 2010/09/07 00:15 댓글주소 | 수정 | 삭제

      안녕하세요.

      그책은 좀 오래되긴 했지만 아주 훌륭한 책입니다.

      공부하시다가 막히시면 질문 올려주시고요~ ^^

  2. 빠코 2010/09/06 10:58 댓글주소 | 수정 | 삭제 | 댓글

    이 블로그를 알게된 것이 얼마되지 않았는데, 정리하는 스타일도 깔끔하시고 글 솜씨도 좋으신 것 같습니다. 마침 오늘 책을 쓰신다고 하니 기대가 되네요. 좋은 결과 얻기를 저도 같이 빌어드릴께요.

  3. iwillhackyou 2010/09/06 11:17 댓글주소 | 수정 | 삭제 | 댓글

    안녕하세요. 오랜만에 글을 남깁니다.
    집필 작업을 하시는군요 ^^;
    저도 개인적으로 패커를 만들고 있느라 정신이 없는데..ㅎㅎ

    다름이 아니고 혹시 제가 아는 분이신가 해서요 -_-;
    혹시 A보안회사에 근무하시는지요?

    • reversecore 2010/09/07 00:18 댓글주소 | 수정 | 삭제

      와~ 팩커를 만들고 계신다고요?
      팩커를 만드는 것은 그냥 단순히 몇 개 분석해 본거와는 차원이 틀린일이라고 생각되는데요... 대단하십니다~~~

      A 보안회사.... 맞습니다... ^^

  4. 철이. 2010/09/06 23:28 댓글주소 | 수정 | 삭제 | 댓글

    아.. 정말로 부럽습니다.

  5. SeHwa 2010/09/07 11:19 댓글주소 | 수정 | 삭제 | 댓글

    리버싱 분야의 명저가 하나 나오겠네요. 빨리 보고싶습니다~

  6. 챨리 2010/09/07 11:40 댓글주소 | 수정 | 삭제 | 댓글

    안녕하세요.
    기대 많이 하고 있습니다.

  7. munhoney 2010/09/08 14:39 댓글주소 | 수정 | 삭제 | 댓글

    항상 좋은 글 많이 남겨주셔서 잘 보고 있었는데, 이번에는 책으로 좋은 글 써주신다니, 나오자마자 언능 하나 사야겠네요 ㅋㅋ
    한번도 글 쓴적 없었는데, 이번을 기회로 정말 좋은 정보 공유해주셔서 감사하다는 말씀 전해드립니다.

  8. 0x00 2010/09/11 14:12 댓글주소 | 수정 | 삭제 | 댓글

    책 빨리 보고 싶네요 ^^.

  9. KT&G 2010/09/13 14:33 댓글주소 | 수정 | 삭제 | 댓글

    기대가 많이 되네요. 벌써부터 코어님의 책을 보게 된다니 왠지 뿌듯?한 기분이 ^^;

  10. 봉이 2010/09/13 16:53 댓글주소 | 수정 | 삭제 | 댓글

    코어님 블로그같이 재밌는 예제, 노하우가 많았으면 좋겠습니다 ^^

  11. nika 2010/09/14 09:28 댓글주소 | 수정 | 삭제 | 댓글

    기대하고 있습니다.
    화이팅 입니다 ^^

  12. blackrus 2010/09/15 16:13 댓글주소 | 수정 | 삭제 | 댓글

    0이 6자리가 넘더라도 사겠습니다....
    기대됩니다 빨리 출판되면 좋겠네여!

  13. ChoboJase 2010/09/16 16:33 댓글주소 | 수정 | 삭제 | 댓글

    전부터 책이 나오기를 기대했는데 ~ 책을 내신다니 V.V~
    내공이라 할수 있는 기초 부분에 대한 넓은 식견을 얻을수 있었으면 좋겠습니다.
    나오면 저도 바로 구입 예정입니다.

  14. guru 2010/09/17 21:23 댓글주소 | 수정 | 삭제 | 댓글

    안녕하세요..항상 좋은 글 감사드립니다.
    어서 밀렸던 글들 다 머리속에 집어 넣고 RSS 로 추가되는 글들 기다리고
    싶은데 쩝 ...ㅠㅠ 노력 부족인가봅니다.
    힘드실텐데 리버스코어님 책이 하루라도 빨리 나왔으면 +_+;
    항상 건강하세요

  15. 퓨틱 2010/09/25 00:13 댓글주소 | 수정 | 삭제 | 댓글

    기대하고 있을께요~
    파이팅입니다 ㅋㅋㅋㅋ

  16. Ezbeat 2010/09/25 04:01 댓글주소 | 수정 | 삭제 | 댓글

    너무 기대가 됩니다. ^^
    꼭 사서 다시한번 보겠습니다.

    음... 이건 제 의견입니다.
    이미 블로그에 있는 내용을 중심으로 많이 넣으셨다면 거의 윈도우 환경 중심일탠데요.
    보통 해킹대회때는 ELF바이너리 문제도 많이 나오고
    또한.. 모바일 어플리케이션도 리버싱을 많이 합니다.

    이렇게 다른 환경에서의 리버싱에 대한 내용도 길게는 아니더라도 쫌 넣으면 어떨까 싶어서요^^;

    • reversecore 2010/09/25 12:59 댓글주소 | 수정 | 삭제

      Ezbeat 님, 안녕하세요~ ^^

      사실 철저하게 "Windows 리버싱"에 대한 내용들로만 채웠습니다.

      다른 플랫폼은 제가 잘 알지도 못하고 할 말도 없어서 말이죠. ^^

      해킹대회에 관심이 많으시군요? 저도 그런 대회에 참가하시는 분들을 보면 참 존경스럽습니다. 어찌 그리 다양한 분야에 대해 깊은 지식들을 갖고 계신지...

      제 개인적으로는 최근에 Android App 개발쪽에 흥미를 갖고 공부를 하고 있습니다. 재밌어서 하는 공부는 누가 시키지 않아도 저절로 하게 되요. ^^ 향후 몇 년간 Android 를 다뤄보면서 리버싱 기술이 필요해지면 또 기회가 있겠지요? ㅋ

      감사합니다.

    • SeHwa 2010/09/25 14:07 댓글주소 | 수정 | 삭제

      추측컨대 책 제목은 "Windows Reversing Bible" 아니면
      "Introduction to Windows Reverse Engineering" 정도 되겠군요..

      Ezbeat 님도 블로그에 올리신 내용들 모아서
      책이라도 써보시는것이 어떤가요..^^
      그 동안 도움되는 내용이 많았는데 글도 아주
      리버스코어님 만큼 정리를 잘 해 놓으셔서
      인기가 많을듯..

    • reversecore 2010/09/29 01:28 댓글주소 | 수정 | 삭제

      SeHwa님, 책 제목 감사합니다. ^^

  17. Ezbeat 2010/09/26 12:39 댓글주소 | 수정 | 삭제 | 댓글

    SeHwa//그렇게 봐주시니 감사합니다 ^^; 하지만 저도 제 실력을 알기에 아직 그런정도까지는 아니구요 ..하핫;; 리버스코어님을 보시면 여기 블로그에 정리해놓은 내용이 리버스코어님의 전부가 아닙니다. 현직에 계시면서 수많은 경험과 노하우.. 이런것들은 제가 따라갈수 없는 부분이지요..;;

    전 아직 학생이므로 졸업도 하고 나중에 회사에 들어가 일을 하게 됬을 때 그 때 더욱 실력을 쌓고 경험도 쌓고 노하우도 만들게되면 그 때 책을 쓰는게 맞다고 생각이되네요. ^^;

    그리고 제 블로그를 보시면 아시겠지만.... -_-;;; 리버스코어님처럼 체계적으로 정리되지 않았습니다. 그냥 제가 그날 공부한게 있거나 해킹대회 때 푼 문제들 그 때 그 때 올리고.. 그런식이라서요..ㅠㅠ

    • reversecore 2010/09/29 01:30 댓글주소 | 수정 | 삭제

      아~ 너무 겸손하세요~ ^^

      Ezbeat 님이야 말로 정말 열심히 공부하시고 실력도 뛰어나신걸 제가 알고 있습니다. 저 또한 Ezbeat 님의 멋진 블로그와 책을 기대합니다. ^^

  18. kjm3326 2010/10/06 15:03 댓글주소 | 수정 | 삭제 | 댓글

    정말 인터넷 검색을 통해서 이곳을 알게된게 행운이라고 생각합니다.
    전 커널모드의 후킹에 대해서 관심이 많은편인데 강의 기대하고 있겠습니다.
    지금 집필하시는 책 또한 꼭 구입해서 공부하도록 하겠습니다.

  19. H4cker 2010/10/15 07:17 댓글주소 | 수정 | 삭제 | 댓글

    리버싱 검색하다가 여기까지 왓는데 책을 집필하신다는 좋은 소식을 들엇네요~
    책 출간은 예상 시기는 어느정도 일까요?^^

    • reversecore 2010/10/19 21:56 댓글주소 | 수정 | 삭제

      안녕하세요.

      저의 책에 관심을 가져주셔서 감사합니다.
      예상은 내년초쯤 생각됩니다만...
      제가 생각하는 완성도가 아니다 싶으면 보강작업으로 인하여 계속 연기될 수도 있습니다.

      감사합니다.

  20. pdice 2010/10/17 16:30 댓글주소 | 수정 | 삭제 | 댓글

    안녕하세요.
    리버싱에 관한 국내 사이트들이 어떤 것들이 있나 검색하다가 이 곳을 발견했습니다.
    여러가지 경험과 지식을 잘 정리해 놓으셨네요. ^^
    저는 마지막으로 디버거를 실행시켜 본 적이 언제인지 이제 기억조차 나지 않고,
    제가 직접 만들었던 어셈블리 소스 코드를 봐도 잘 이해가 안되네요. ^^;;
    글들을 읽다보니 저도 뭔가 다시 한번 만들어 보고 싶다는 생각이듭니다.
    앞으로 종종 들릴께요. 수고하세요.

    • reversecore 2010/10/19 21:59 댓글주소 | 수정 | 삭제

      안녕하세요.

      아, 원래 리버싱을 하셨나 봅니다.
      지금은 잠깐 손을 떼신 상태이시고요.

      저도 다른 개발업무에 파묻혀서 그럴 때가 있습니다.
      하지만 한번 리버싱에 빠진 사람은 완전히 손을 뗄 수가 없더군요. ^^
      필요할 때마다 그때 그때 리버싱을 하고 있습니다.

      pdice 님께서도 개인 목표(개인 프로젝트?)를 세우신후 조금씩 작업해보시는 것이 어떨까요? 느긋하게 말이지요.

      감사합니다.

  21. 2010/10/22 09:43 댓글주소 | 수정 | 삭제 | 댓글

    비밀댓글입니다

    • reversecore 2010/10/23 06:48 댓글주소 | 수정 | 삭제

      너무 과분한 칭찬과 격려에 감사드립니다. ^^

      사실 몸이 너무 피곤할 때는 "내일 쓰고, 오늘은 그냥 잘까?" 하는 강렬한 유혹에 넘어갈때가 있는데요... 이런 칭찬과 격려를 받으니 정말로 힘이 절로 나는군요. 사명감 비슷한걸 느낄때도 있습니다. ^^

      참고로 전 개발자로 몇 년 일하다가 리버싱을 시작하였습니다. 시작한 나이로 따지면 늦은 셈이지요. 그러나 현업에 있는 입장에서 생각해보면 사실 기술을 배우는데 나이는 문제가 안되더군요. ^^

      가장 중요한것은 역시 본인의 의지라고 생각합니다.

      ^^!!님께서도 정말 하고 싶은 일이 있으시다면 그걸 꼭 해보시기 바랍니다. 리버싱 지식은 안쓰면 까먹기도 쉽지만... 반대로 다시 배우기도 쉽답니다.

      다행히 리버싱 분야는 국내/해외 할것없이 오로지 실력으로만 평가 받는 분야라고 생각합니다. 과거에 하셨던 동아리 활동이 큰 도움이 될 것 같습니다. 지금 새로 동아리를 조직해보시거나 기존 동아리에 참여해 보세요. 같이 모여 공부하면 아무래도 혼자하는 거보다는 얻을 수 있는 정보의 양이 훨씬 많겠지요.

      열심히 공부하시고, 종종 들러주세요~

      감사합니다.

  22. 2010/11/13 22:02 댓글주소 | 수정 | 삭제 | 댓글

    비밀댓글입니다

    • reversecore 2010/11/15 02:41 댓글주소 | 수정 | 삭제

      안녕하세요.

      먼저 관심에 감사드립니다. ^^

      책은 내년 2 분기쯤으로 예상하고 있습니다.

      감사합니다.

  23. grayjava 2010/11/16 16:53 댓글주소 | 수정 | 삭제 | 댓글

    자료를 구하다 구글신이 이곳을 점지해 주어 왔습니다.
    좋은 내용이 많네요.
    책도 기대하고 있습니다.
    API 완전정복처럼 2권 이상으로 분권하여
    우선 1권을 출간하면 어떨까요?

  24. RUIN 2010/11/17 00:10 댓글주소 | 수정 | 삭제 | 댓글

    grayjava님 저랑 똑같은 생각을.....ㅋㅋㅋㅋ
    존경하는 코어님 의견 반영 해주셧으면 합니다!!

  25. Angelibra 2010/11/21 03:29 댓글주소 | 수정 | 삭제 | 댓글

    매번 혼자 독식하다가 reversecore님의 깔끔하게 정리된 글들을 보면서 다시 복습하게 되는데..
    매번 유용한 글들 올려주셔서 감사합니다 :)
    기대됩니다.. 국내 몇개 안되는 리버싱서적 !
    리버서가되려고 공부하려는 분들께 좋은 바이블책이 될 것 같습니다
    나오면 바로 당장 구입해야겠군요 :)

  26. 2010/12/16 15:28 댓글주소 | 수정 | 삭제 | 댓글

    비밀댓글입니다

    • reversecore 2011/01/25 23:54 댓글주소 | 수정 | 삭제

      안녕하세요.

      C 언어 리컴파일링 말씀이신가요?

      음... 그런건 없네요. ^^

      그리고 어셈의 조건분기는 매우매우 다양합니다.
      C 컴파일러는 그 중에서 일부만 사용하는 것이지요. ^^~

      감사합니다,

  27. GGuy 2011/01/20 10:22 댓글주소 | 수정 | 삭제 | 댓글

    책 출판 과정이 얼마나 진행 되었나요? ㅠ

    • reversecore 2011/01/25 23:55 댓글주소 | 수정 | 삭제

      안녕하세요~

      마지막 챕터 작성중이라고만 말씀드릴 수 있겠네요~

      이젠 섣불리 출간 날짜를 예상하는게 무서워요~ ㅠㅠ

      감사합니다.

  28. chum 2011/02/06 17:04 댓글주소 | 수정 | 삭제 | 댓글

    책이 기대되네요.

    저는 리버싱을 그냥 재미로 배워보고 싶은데 책들이 다들 어려운거 같습니다.

    리버스코어님의 책은 그런 책이 아니었으면 좋겠네요.

  29. 아침햇살 2011/02/07 09:40 댓글주소 | 수정 | 삭제 | 댓글

    책이 언제 나올까요 너무너무 기대됩니다.~~ +.+
    얼렁 나왔으면 좋겠어요~~ 바로 질러버리겠습니다~ *.*
    대략 예상 출간 날짜라도 살짝 귀뜸좀..ㅋㅋ

    • reversecore 2011/02/09 21:41 댓글주소 | 수정 | 삭제

      안녕하세요.

      예상을 말씀드리기 어렵네요... ^^

      다만 열심히 작업중이라고 말씀드릴 수는 있습니다.

      감사합니다.

  30. 주황 2011/02/10 13:58 댓글주소 | 수정 | 삭제 | 댓글

    책 출간을 앞두고 있다니 감축 드립니다.
    책에대한 기대감도 크지만 솔직히 걱정과 우려가 앞서네요.

    우선 저같이 지극히 짧은 프로그래밍 경험을 가진 리버싱을 전혀 모르는 쌩초짜의 경우
    100% 동일하게 따라하기식을 원하고 이 싸이트 또한 그리 진행되고 있어 매우 흥미를 갖고
    시작해보았지만 초반 두어 페이지 후 진행 후 꽉막혀 잠시 뎌뎌지다가 아예 포기상황에
    이르게 됐네요.

    문제는 얼추 비슷하게는 가지만 100% 동일하지 못하다는 겁니다.
    이 블로그에서 제시한 동일 버전의 디버거를 사용하지만 블로그의 캡쳐 사진과
    실제 돌아가는 디버거는 조금씩 틀리더군요.
    물론 환경에 따라 조금씩 다른 부분이 발생할 수 있는 부분이 있겠지만
    그 이상 달랐던거 같습니다.

    하다하다 정말 모르겠고 안되서 문서로 정리하여 질문드리려던 찰나
    업무에 쫓겨 지금까지 손놓고 있었네요.

    잠시 여유가 생겨 처음부터 다시 보려고 하는데
    이번엔 안되는 부분 만나면 바로바로 정리해 보려고 합니다.
    아무쪼록 정말 쉽게 따라할 수 있고 이해할 수 있는 명저서가 되길 바랍니다.

    여기를 알게된 Inject DLL 의 경우는 VC6 에서 작업하면 되는데, VC2005 나 VC2008 에서 하면
    안됐었네요.. 제 컴퓨터가 이상했던건지.. 이것도 참 궁금하고..

    님은 누굴까 정말 궁금했는데 책이 나오면 드디어 님 정체를 알 수 있겠군요..^^

    • reversecore 2011/02/18 22:48 댓글주소 | 수정 | 삭제

      안녕하세요.

      좋은 지적 감사합니다.

      책의 완성도를 높이기 위해서 말씀하신 대로 모든 실습 예제들에 대해서 전부 확인해 봐야겠습니다.

      제 정체(?)는 평범한 회사원이랍니다. ^^

      감사합니다.

  31. blackrus 2011/02/22 23:42 댓글주소 | 수정 | 삭제 | 댓글

    드디어 책이나오는군요 ㅠㅠ너무기대됩니다...
    빨리 만나고싶네요 1권 2권 둘다 소장하겠습니다 ㅎ

  32. SERiALK 2011/02/23 13:24 댓글주소 | 수정 | 삭제 | 댓글

    reversecore님의 글에서 리버싱에 대해 많은걸 배운 저로선 책이 너무 기대되는군요.
    혹시 커널모드 디버깅에 대한 내용도 있을런지 궁금하네요.
    커널모드의 내용이 방대하고 Undocument된 내용이 많기는 하지만, 맛이라도 보고 시작할 수 있는 원동력이 될 만한 것을 찾고 있었거든요.

    • reversecore 2011/02/28 15:59 댓글주소 | 수정 | 삭제

      안녕하세요.

      아쉽게도 제가 지금 작업하는 책의 내용은 유저 영역만 다루고 있습니다. 향후 블로그에 유저 영역의 내용이 충실해졌다 싶으면 커널 내용을 슬슬 올릴 계획입니다.

      감사합니다.

  33. Atlantic 2011/03/10 11:42 댓글주소 | 수정 | 삭제 | 댓글

    안녕하세요.. 코어님 책만 눈빠지게 기다리고있습니다.. 언제나오나요? ㅜㅜ

  34. hansjang 2011/03/11 12:09 댓글주소 | 수정 | 삭제 | 댓글

    네 저도 기다립니다.

  35. Rony 2011/03/17 22:32 댓글주소 | 수정 | 삭제 | 댓글

    아.. 코어님 정말 기대하고 있습니다.. 윈도 인터널 5판 보다가 막혀서 방황하던 찰나에 다시한번 불씨를 붙혀주신 코어님글들 너무 감사합니다... 제가 술이라도 한잔 대접하고 싶은마음이네요!

    부담감도 있으시겠지만.. 그래도 기대하겠습니다^^

  36. ㅎㅎ 2011/06/19 00:41 댓글주소 | 수정 | 삭제 | 댓글

    블로그에도 이렇게 유익한 내용이 많은데........
    책은 어떨지 기대됩니다~~
    책 나오면 바로 사겠습니다
    하루빨리 나오기르1

  37. RUIN 2011/08/14 10:00 댓글주소 | 수정 | 삭제 | 댓글

    책 언제쯤 출간 되는지 여쭤봐도 될까요ㅠㅠ

    아니면 현재 상황이라도 궁금합니다

  38. GDCrow 2011/09/03 13:18 댓글주소 | 수정 | 삭제 | 댓글

    책제목이 궁금하네요 ㅇ_ㅇ;;

    회사에서 IDA 툴을 제공해줘서.. 툴에 의존하여 작업을 하다가

    기본 실력이 너무 딸리는 관계로... (기본적인 어셈블 언어만 조금 읽는정도...)

    아직 IDA라이센스 기간이 남아 있는 IDA에 관련된 내용도 마니 나오는지 궁금 하네요 +ㅁ+

    • reversecore 2011/09/03 14:07 댓글주소 | 수정 | 삭제

      안녕하세요.

      디버거는 OllyDbg 를 이용하구요.
      IDA 세부 내용은 거의 다루지 않습니다.
      저 또햔 그 많은 기능을 다 써보지도 못하였습니다. ^^~

      감사합니다. ^^~

  39. Scavenger 2011/09/14 09:44 댓글주소 | 수정 | 삭제 | 댓글

    지나가다 들릅니다. 쓰시는 책 꼭 구매하고 싶네요.

  40. zzangRC 2011/09/23 02:41 댓글주소 | 수정 | 삭제 | 댓글

    고생 많으신데...저두 오늘부터 입문 예정입니다..좋은책 기대하겠습니다.



지난주부터 "IA-32 Instruction" 챕터를 작업하는 중인데요, IA-32 Instruction 이란 쉽게 말해 아래 그림에서 빨간 박스로 표시된 부분을 말하는 것입니다.



디버거에 탑재된 Disassembler 가 저 Instruction 을 해석해서 우리가 익히 보는 (오른쪽의) Disassembly 코드를 만들어 내지요.

"IA-32 Instruction" 챕터를 작업하면서 제 노하우를 공개하였습니다. 그건 바로 Intel IA-32 Manual 에서 Instruction 을 해독하기 위해 필요한 Opcode Map(Opcode Table) 부분만 프린터로 출력한 것입니다. 저한테는 Opcode 매뉴얼인 셈이지요. (아래 그림 참고)



작업 중인 책 내용의 일부를 소개합니다. (참고 섹션 내용입니다.)

* 참고

위 출력물이 너덜너덜 해질 때쯤 여러분은 IA-32 Instruction 해석의 고수가 되어 있으실 겁니다. 저 또한 5년 동안 손 때묻은 저만의 출력물을 한 부 가지고 있습니다. 후배나 동료가 Instruction 해석에 관해서 물어오면 자랑스럽게 꺼내서 가르쳐 줍니다. 많이 참고하다 보면 어떤 내용이 대충 어느 페이지에 있다는 감이 생겨서 한번에 그곳을 펼칠 수 있습니다. (생활의 달인?)
제가 가장 존경하는 선배님도 이러한 출력물을 가지고 계셨습니다. 그 당시에도 매우 낡아 보였지요. 어찌 보면 이것이 리버서의 연륜(?)을 나타내는 하나의 척도로 볼 수 도 있겠습니다. 여러분께서도 꼭 자신만의 출력물을 한 부 만들어서 활용해 보시기 바랍니다.

이처럼 오랫동안 저랑 같이 작업한 제 손 때묻은 매뉴얼 이라서 어느덧 애정이 생겨 버렸습니다. (기술자들은 모두 그런 게 한두 개씩은 있잖아요? 자신과 오랫동안 함께 하면서 분신이 되어버린 도구 같은…)

최근 1~2년은 주로 각종 자동화 시스템의 개발/유지보수 업무를 하면서 Opcode 매뉴얼을 거의 꺼내 보지 못했었는데, 이번에 "IA-32 Instruction" 챕터를 쓰면서 다시 꺼내어 보니 감개가 무량하더군요. (그동안 소홀해서 미안해~ 이번 챕터는 다 니 덕이야~ 고마워~)

더불어 제게 처음 IA-32 Instruction 을 가르쳐 주시고(사실 개발, 분석을 다 가르쳐 주셨죠) 제가 가장 존경하는 선배님(형님)이 생각납니다. 지금은 외국에 계셔서 만나 뵙기는 힘듭니다만 오늘은 그분이 더 보고 싶네요. ^^~

Trackback Address :: http://www.reversecore.com/trackback/89 관련글 쓰기

  1. LinkC 2010/08/31 14:55 댓글주소 | 수정 | 삭제 | 댓글

    Revercore님의 중후한 내공을 느낄 수 있는 멋진 메뉴얼이네요 :D

    이런 고수분들의 글을 보며 공부 할 수 있는 기연을 얻은 저도 운이 좋은 것 같습니다

    저도 글을 포스팅 하면서 느끼는 거지만, Core님의 글솜씨에 정말 감탄하고 있습니다

    그만큼 다음 챕터도, 앞으로 나올 책도 정말 너무 기대됩니다

    p.s 1시 0분 0초에 글을 포스팅하신 Core님의 내공에 한 번 더 감탄! XD

  2. 철이 2010/09/01 08:32 댓글주소 | 수정 | 삭제 | 댓글

    아...저렇게 공부 하는거구나.

    여름은 잘 보내셨냐요? 이번 방학때 바다 공모전, 파일시스템 공부 했습니다.

    ㅎㅎ 휴학 하는데 더욱더 리버싱공부를 해야 겠습니다.

  3. SeHwa 2010/09/01 23:09 댓글주소 | 수정 | 삭제 | 댓글

    책을 쓰고 계신가요? 왜인지 구입 의욕이 훅훅 나는 책이로군요.

  4. Ethobis 2010/09/10 17:45 댓글주소 | 수정 | 삭제 | 댓글

    ㅋㅋㅋ 당장 인쇄했지만..
    보기가 어렵네요 무슨말인지 ㅠㅠ

    • reversecore 2010/09/14 00:08 댓글주소 | 수정 | 삭제

      앗, 어떤 페이지를 인쇄하셨나요?

      윗글에는 제가 Opcode 챕터를 쓰는 과정에서의 에피소드를 적어놓은 것이구요... 실제적으로 어떻게 Opcode 를 해석하는지에 대한 내용은 책에 수록될 예정입니다. ^^

  5. Ethobis 2010/09/15 22:51 댓글주소 | 수정 | 삭제 | 댓글

    Opcode 매뉴얼 페이지만 한 5장이었나 그렇게 인쇄했거든요 ㅎㅎ
    헥사값으로 어떻게읽고 어떤 오피코드인지 보는법이랑 당장에 오피코드 종류들도 그렇게 많이 알고있지 않아서 보기가 어렵네요 간단하게나마 보는 방법좀 알려주실수있나요 ㅋㅋ

    • reversecore 2010/09/16 23:16 댓글주소 | 수정 | 삭제

      네, 그러셨군요.

      설명이 조금 길어서 댓글로는 어렵겠습니다.

      Instruction 해석은 One-byte Opcode Map 에서 시작합니다.
      가령 Instruction 의 첫바이트가 50 이라면...
      One-byte Opcode Map 의 5행 0열의 PUSH EAX 명령을 의미하는 것입니다. 추가적으로 Operand 형식을 볼줄 알아야 하는데 그것도 매뉴얼에 있습니다. 그리고 ModR/M, SIB 테이블을 읽을줄 알면 됩니다. (역시 매뉴얼에 있습니다.)

      알고보면 원리는 간단합니다. (블로그에 그 내용을 올리면 좋을 텐데 말이죠.)

  6. 보름♬달★콤 2010/09/24 14:42 댓글주소 | 수정 | 삭제 | 댓글

    분석가는 아니고 개발자입니다.
    몇달 전 호기심에 어셈블리 디버거를 만들면서 디스어셈블리도 구현하다보니
    저역시 너덜너덜해진 ia32출력물을 가지게 되었네요^^;
    opcode map을 외우지는 못하지만 동작을 이해하느라 많이 보다보니 그렇게 되었지요.

    근데 opcode map을 보다보니 '틀린' 부분이 종종 있는 것 같던데..
    혼자 하다보니 확실한 지 몰라서.. 맞나요?

    • reversecore 2010/09/25 13:16 댓글주소 | 수정 | 삭제

      안녕하세요~ ^^

      호기심에 디버거를 만드신다구요? @@~~
      정말 대단하십니다~~~

      과거 디버거의 동작원리를 처음 공부할때 간단히 debug.exe 비슷한 형태의 32bit 디버거를 구현해본 적이 있습니다. 꼬박 일주일 동안 밤낮으로 매달렸었는데요... 그 이후에 OllyDbg 개발자를 맘속으로 존경하게 되었습니다. 실력과 인간성 모두를 말이죠...

      보름달콤님께서 만드신 디버거를 보고싶네요~

      opcode map 의 어떤 부분을 말씀하시는 것인지요?
      저에게도 좀 알려 주시기 바랍니다.

      제가 알고 있는 것은 해마다 기존 내용을 조금씩 수정하고 있다는 것입니다. 예를 들어 문자열 복사 명령어 A4 의 경우 MOVS Xb, Yb 로 되어 있는데, 액면 그대로 해석하면 SRC 와 DST 가 반대로 되지요. MOVS 명령어 설명을 읽어보면 Operand 순서는 중요하지 않고 크기만 중요하다고 되어 있습니다. 순서(EDI<-ESI)는 결정 되어 있단 뜻이겠지요. 그런데 2004 년 판을 찾아보면 MOV Yb, Xb 로 정확히 나와 있습니다. 어느 순간 부터 지금처럼 바뀌어 버렸지요. 이런 부분들이 좀 어려움을 주는 것 같습니다.

    • 보름♬달★콤 2010/09/27 13:14 댓글주소 | 수정 | 삭제

      아 맞아요.. 그런 부분이 저도 헷갈렸던 부분이기도 합니다.
      말씀하신 MOVS의 경우,
      instruction format으로 본다면 opcode외에 어떠한 operand도 갖지 않지만
      디스어셈블리 출력에 있어서는 operand를 표기해서 정확한 동작의 의미를 전달할 수 있게 하는 게 좋을 테고요
      그런 점에서 일반적인 src, dst가 뒤바뀐 opcode map의 표기를 그대로 따라야 하는지 등의 고민을 했었던 것 같습니다.

      map이 틀렸다고 생각했던 것들이 뭐였는지 잘 표시를 안해놓아서
      다 기억할 수는 없지만 방금 하나를 발견했네요.
      AF opcode의 경우, 어떤 경우든지 EDI(RDI)를 취하게 되는 것으로 보이는데
      opcode map에는 SCAS/W/D/Q rAX, Xv 로 표기가 되어 있습니다.
      틀린 게 아닌가요? 이런 부분이 몇몇 있었던 것 같습니다..

    • reversecore 2010/09/29 01:24 댓글주소 | 수정 | 삭제

      네, AF 의 경우도 SCAS rAX, Xv 로 표시되어 있지만 실제는 Yv 로 표시해야 정확히 [EDI] 의미가 되지요. 2004년 판에는 Yv 로 되어 있네요. 또한 명령어 자체에 rAX 에 값을 입력하라는 의미가 내포되어 있으므로 Disassembly 코드에서 rAX 는 생략해 버리는 군요.

      역시 SCAS 명령의 설명을 찾아보면 아래와 같습니다.

      "Note that the documentation provided by this form can be misleading. That is, the memory operand symbol must specify the correct type (size) of the operand (byte, word, or doubleword) but it does not have to specify the correct location. The location is always specified by ES:(E)DI."

      즉, Operand 의 크기가 중요하고 무조건 EDI 로 정해진다라고 되어 있지요.

      이런 문제들이 공통적으로 Operand 의 Addressing Method 가 X/Y 형식인 경우 발생하게 됩니다.

      말씀하신 대로 이런 내용을 잘 염두에 두고 Disassembly 코드를 만들어야 할것 같습니다. (참고로 AF Opcode 에 대해서 OllyDbg 와 WinDbg 가 동일한 Disassembly 코드를 만들어 내는 것을 확인했습니다.)

      감사합니다.

  7. 춤매 2011/01/07 22:40 댓글주소 | 수정 | 삭제 | 댓글

    님 블로그를 가끔씩 눈팅하는데,
    책을 쓰실 정도로 실력도 있으신데 겸손하신 면도 있으시고..
    존경스럽습니다..

    • reversecore 2011/01/11 10:51 댓글주소 | 수정 | 삭제

      안녕하세요.

      존경이라고 말씀하시면 제가 넘 부끄럽구요.

      책은 태어나서 첨으로 겁없이 도전하는 거랍니다.

      책을 쓰는 지금의 고통을 미리 알았더라면, 좀 더 신중하게 생각했을 겁니다. ^^

      감사합니다.

  8. 오늘도 2011/01/13 18:40 댓글주소 | 수정 | 삭제 | 댓글

    좋은 책 빨리 부탁 드립니다.

  9. blackrus 2011/02/22 23:52 댓글주소 | 수정 | 삭제 | 댓글

    제 싸이에 글좀 퍼가겠습니다 ㅠㅠ..
    실례가된다면 바로말씀해주세요
    물론 출처는 남기겠습니다 ㅎ

  10. blackrus 2011/02/25 00:23 댓글주소 | 수정 | 삭제 | 댓글

    아 넵 ㅠ
    죄송합니다 ㅠ
    바로지울께요

  11. 오곡 2012/02/21 21:18 댓글주소 | 수정 | 삭제 | 댓글

    정말 대단하십니다

    Portable Executable 개념을 발표하려고 검색하다가 들어오게 됐는데

    정말 대단하십니다...;;

    리버싱에 중요한 것도 오늘 알게 됐네요 감사합니다 ^^;;

    책 출판하신다고 했는데 꼭 사고 싶네요~

    화이팅~!


리버싱의 참 맛

column 2009/12/04 02:08


<photo : skedonk on flickr>

"끓을 만큼 끓어야 밥이 되지, 생쌀이 재촉한다고 밥이 되나."

윤오영님의 수필 [방망이 깎던 노인] 에 나오는 구절입니다.
필수적인 과정을 거쳐야 제대로 된 결과가 나온다는 뜻이지요.


리버싱을 제대로 하려면 공부해야 할 내용이 무척 많다는 것을 잘 아실 것입니다.
우리는 리버싱 공부에 시간과 노력을 쏟아야 합니다.

하지만 조급한 마음이 사람을 초조하게 만들고 반복된 실패를 참을 수 없게 만드는 것 같습니다.
리버싱을 하다 보면 매 순간마다 (내가 알지 못하는) '벽'에 부딪힙니다.
이러한 '벽'을 도전 과제로 삼고 극복하는 과정에서 희열이 느껴집니다.
제 생각에는 이게 바로 리버싱의 본질이 아닐까 생각합니다.

잘 안 된다고 스트레스 받지 마세요.
리버싱은 원래 "잘 안 되는 속성"을 가지고 있습니다.
마음을 편안하게 먹고 차근차근 정보를 수집하세요.
성공할 때까지 계속 시도해보는 겁니다.
머리 아프면 쉬었다 하세요.
중요한 건 포기하지 말고 꾸준히 하는 것입니다.

마치 퍼즐 조각을 맞추는 것과 같습니다.
해결 방법은 분명히 있습니다.
노력과 시간을 투자한다면 결국에는 성공할 수 있습니다.

어찌 보면 모든 엔지니어링의 본질적인 속성이 이와 같다고 생각됩니다.
결국 시간을 투자하고 노력할 수록 실력이 늘어나는 이치는 똑 같은 것이니까요.

"시간과 노력을 투자한 만큼 정직하게 실력이 쌓여간다."

전 이 맛에 리버싱을 하나 봅니다.

여러분은 어떠신가요?


+---+


요즘 과도한 업무에 심신이 많이 지쳤답니다.
피곤하고, 스트레스 받고, 시간에 쫓기면 사람은 초심을 잃게 되지요.
제 스스로 초심을 되새기고 목표를 향해 끊임없이 나아가고자 다짐하며 글을 올려봅니다.

ReverseCore

Trackback Address :: http://www.reversecore.com/trackback/64 관련글 쓰기

  1. 행인 2009/12/04 03:09 댓글주소 | 수정 | 삭제 | 댓글

    .. 전 일주일에 3시간씩밖에 못퍼부어서 실력이 안늘어나는것 같습니당
    ㅠㅠ

    • ReverseCore 2009/12/04 16:40 댓글주소 | 수정 | 삭제

      행인님, 안녕하세요.

      비록 적은 시간이라도 꾸준히 오래 지속하는게 중요한 것 같습니다.

      감사합니다.

  2. zXEr 2009/12/04 11:48 댓글주소 | 수정 | 삭제 | 댓글

    예전에 방망이 깎던 노인.. 프로그래머 버젼이 유행했었죠.. 리버싱 버젼으로 한번.. 만들어보는것도 재미있겠네요 ㅋㅋ 아무튼 좋은말씀 잘 보구 갑니다. 리버싱을 취미로 시작했다보니 실력두 없고.. 다른것에 치여서 끈기를 가지고 하기가 힘드네요. 여기저기 관련 글을 읽기는 많이 읽지만 제가 직접 올리를 켜본게 얼마나 되었는지..

    • ReverseCore 2009/12/04 16:43 댓글주소 | 수정 | 삭제

      zXEr님, 안녕하세요~

      다른 업무에 바쁘신가 봐요~

      꼭 리버싱 목적이 아니더라도 OS 동작 원리 같은 것들은 잘 공부해놓으면 개발 업무에도 크게 도움이 될 것입니다.

      감사합니다.

  3. RED_BIT 2009/12/04 15:49 댓글주소 | 수정 | 삭제 | 댓글

    왠지 코드를 만들어내는 사람과의 싸움... 재밌는거 같아요,
    꼭 이길 필요는 없지만, 이기면 좋은...
    마치 전략게임을 하듯이 상대방의 전략을 파악하고 공략해나가는것이 정말 중요한 포인트가 아닐까 생각해요,
    그러면서 코드는 점점 더러워지는 경향을 뛰기는 하지만 정말 잘만든 코드는 아름답더라고요...
    더려운 코드가 필수적인 과정을 거치지 않고 막아내는데 급급한 코드라면... 아름다운 코드는 오랫경험을 바탕으로 만들어진 안티코드겠죠..

    • ReverseCore 2009/12/04 16:46 댓글주소 | 수정 | 삭제

      RED BIT님, 안녕하세요.

      말씀하신대로 안티 디버깅기법을 연구하는 사람과 그걸 어떻게든 분석하려는 사람들의 전략 싸움은 정말 흥미롭죠.

      그런것들을 분석하는 과정에서 실력도 향상되고 말이죠.

      댓글을 읽어보니 RED BIT 님께서는 리버싱을 재밌게 즐기시는 분 같습니다.

      감사합니다.

  4. 철이 2009/12/05 00:32 댓글주소 | 수정 | 삭제 | 댓글

    많은 반성하고 갑니다.

  5. HS 2009/12/05 01:03 댓글주소 | 수정 | 삭제 | 댓글

    좋은글 잘 보고 갑니다..^^

  6. 늅늅 2009/12/07 09:05 댓글주소 | 수정 | 삭제 | 댓글

    월요일 아침 상큼하게 리버스코어님 블로그로 시작합니다 ^ㅡ^*

  7. 못다한꿈 2009/12/07 22:58 댓글주소 | 수정 | 삭제 | 댓글

    큰 힘이 되었습니다 앞으로 자주들릴께요!^_^

  8. lily marlene 2010/05/04 16:17 댓글주소 | 수정 | 삭제 | 댓글

    개발은 잘 못하면서 리버싱만 할 줄 알게되면, 항상 남이 짜놓은 것만 바라보게 되는 치명적인 결점을 안게 됩니다. 창의력이 엉뚱한 쪽으로 발전할 것 같습니다.
    항상 개발과 리버싱은 병행해야한다고 생각합니다.

    • reversecore 2010/05/05 21:58 댓글주소 | 수정 | 삭제

      lily marlene님, 안녕하세요.

      개발과 리버싱을 겸비하면 여러가지 장점이 무척 많지요.
      내 손에 꼭 맞는 툴을 직접 만들수도 있고요.
      다른 프로그램의 아쉬운 부분을 보강할 수도 있지요..

      저도 (가능하다면) 양쪽을 다 겸비하면 좋다고 생각합니다.

      좋은 말씀 감사합니다.

  9. 화이트해커로의도약 2011/01/31 17:03 댓글주소 | 수정 | 삭제 | 댓글

    제가 이 블로그를 알게된 경위는 요즘 이대역 중***학원에 세미해커과정에 다니면서
    리버스 기초과정 중 crackme문제풀이를 풀다가 도무지 이해가 안가서 검색하던 중
    이렇게 좋은 불로그를 찾게 되었네요^^ 영자님이 꾸며놓으신 블로그 넘넘 좋아서 즐겨
    찾기에 등록해놓고 매일매일 공부하고 있답니다. 정말 감사하게 생각하고요...리버스 정말
    처음 접했을땐 외계언어처럼 풀리지 않는 수수께끼 같았는데 기초서 부터 조금씩 조금씩
    공부하다 보니 어느새 문제를 풀고 있는 나 자신을 발견하게 되었답니다. (crackme에 나오는
    명령어들 개념파악하는데 4일걸림 ㅠ.ㅠ) 그래도 다행인건 포기하지 않고 이해안되는곳을 15번
    정도 다시 읽고 생각하고 하니깐 신기하게도 이해가 되더라고요 ㅡ0ㅡ;; 좋은 자료 올려주신
    운영자님께 다시한번 감사의 말씀 드리면서 좋은글 읽고 갑니다. 자주자주 올께요^^*

    • reversecore 2011/02/09 22:03 댓글주소 | 수정 | 삭제

      안녕하세요.

      칭찬 감사합니다. ^^

      화이트해커(보안전문가)가 되길 원하시는군요.

      공부 열심히 하셔서 꼭 바램을 이루시기 바랍니다.

      감사합니다.


UPack 의 추억

column 2009/09/21 01:12


<사진 출처 : UPack 제작자 dwing's homepage>


그 동안 총 5 회에 걸쳐서 UPack 의 PE Header 분석과 Debugging 에 대해서 연재를 하였습니다.

UPack 상세 분석 – PE Header 완전 정복 (1)
UPack 상세 분석 – PE Header 완전 정복 (2)
UPack 상세 분석 – PE Header 완전 정복 (3)
UPack 상세 분석 – PE Header 완전 정복 (4)
UPack 디버깅 - OEP 찾기


다른 Packer 도 많은데 굳이 이 UPack 에 이렇게 많은 공(?)을 들인 까닭은 제 개인적인 추억(경험) 때문입니다.

예전에 PE 공부를 마치고 PE File Format 에 자신 있던 그때에, 전혀 새로운 PE 세계가 있다는 걸 알려준 소중한 Packer 입니다. 또한 PE 스펙은 그냥 스펙일 뿐이고, 실제 구현은 PE Loader 개발자에 의해 좌우되기 때문에 OS 별로 실제 테스트를 해봐야 한다는 깨우침(?)을 주었습니다.

제 블로그를 방문하시는 여러분들께서도 저와 같은 경험과 느낌을 가져보시라는 뜻으로 UPack 을 상세히 소개하였습니다.

물론 UPack 에서 소개된 내용이 PE Header Patch 의 전부는 아닙니다.

하지만 제가 분명히 장담할 수 있는 것은 "UPack 을 정복한 사람에겐 앞으로 어떤 PE Header 변형이 나타나더라도 두렵지 않다." 는 것입니다. PE Header 에서 실제 사용되는 값들과 사용되지 않는 값들을 잘 숙지 하고 있다면 어떤 변형도 무리 없이 분석이 가능합니다. (제 경험입니다. ^^)

감사합니다.


ReverseCore


Trackback Address :: http://www.reversecore.com/trackback/53 관련글 쓰기

  1. 신화창조 2009/09/21 23:25 댓글주소 | 수정 | 삭제 | 댓글

    열심히 써주신 글들 RSS로 정말 잘 읽었습니다. ^^

    확실히 국내 몇 안되게 체계적이고 내용도 쉬운 것(!) 같습니다. 고맙습니다!

  2. Sun2Day 2009/09/22 10:01 댓글주소 | 수정 | 삭제 | 댓글

    좌절의 UPack..;;

    주말에 가지고 놀아보다가.. 안되면 문의 드리러 올께요 (+__)ㅋ

  3. 2009/09/24 01:03 댓글주소 | 수정 | 삭제 | 댓글

    비밀댓글입니다

  4. 2010/12/09 20:47 댓글주소 | 수정 | 삭제 | 댓글

    비밀댓글입니다

    • reversecore 2010/12/03 16:23 댓글주소 | 수정 | 삭제

      안녕하세요.

      사실 합법/불법을 저조차도 딱부러지게 100% 판단하기는 어렵습니다.

      다만 제 기준은 이렇습니다.

      누군가에게 피해를 끼쳤느냐 아니냐로 구분하는 것이죠.

      가령 리버싱을 해서 패커의 고유 압축 알고리즘을 공개해버리면 소중한 지식을 공개한 셈이 되지 않을까요? 제작자 입장에서는 피해를 보는 상황이라고 생각합니다.

      저는 법에 대해 문외한 이므로 참고만 하시기 바랍니다. ^^

      감사합니다.



2009년 7월 7일부터 시작된 무차별 DDoS 공격으로 인하여 나라 전체가 큰 혼란에 빠져버렸습니다.

이번 DDoS 사이버 테러를 지켜보면서 풀리지 않는 3 가지 의혹(누가? 왜? 어떻게?) 에 대해서 제 나름의 생각을 정리해 보겠습니다.



#1. Who?


누가 이러한 사이버 공격을 감행하는 걸까요?


개인? 혹은 단체?

규모있는 단체일 가능성이 높습니다.

이에 대한 근거로는 DDoS 공격에 사용된 좀비 PC 가 수 만대에 이를 정도로 널리 악성코드를 감염시켰다는 점입니다.
통상적으로 이렇게 기존 AV 제품에 걸리지 않고 단기간에 널리 퍼지기 위한 조건은 아래와 같습니다.

  • 악성코드의 제작이 마치 상용 SW 제품과 같은 단계(기획, 개발, 테스트, 배포)를 거칩니다.
    => 버그 없이 잘 동작하는 악성코드가 만들어집니다.
  • 진단을 회피하기 위하여 AV 제품들에 대한 연구가 선행되어야 합니다.
    => 많은 테스트를 거쳐서 기존 AV 제품들에게 진단되지 않을때까지 소스를 고치고 또 고칩니다.
  • 빠른 시간내에 다양한 변종을 만들어 냅니다.
    => 시간이 지나면 AV 제품들이 진단을 하기 시작합니다.
         그때 바로 변종을 퍼뜨려 추가적인 공격을 시도합니다.

위 조건들을 모두 만족하기 위해서는 각 분야의 전문가 집단이 필요할 수 밖에 없습니다.


이와 같은 사이버 테러 단체의 특징을 한번 생각해 보죠.

이들은 2009.07.09 현재까지 총 3 회의 DDoS 공격을 무차별로 퍼붓고 있습니다.
만약 경찰에 잡히기라도 하는 날에는 인생이 그대로 끝장남에도 불구하고, 지속적으로 대담하게 공격을 반복하고 있습니다.

이 사이버 테러 단체는 한 마디로 대한민국 공권력은 안중에도 없습니다.
즉, 대한민국 공권력의 영향을 받지 않는 사람들일 가능성이 높습니다.

또한 정교한 악성코드를 기획/제작/테스트/배포하는 데에는 많은 리소스(인력, 자금)가 필요하기 때문에, 이들의 배후에는 든든한 후원세력이 있다고 생각해 볼 수 있겠습니다.



#2. Why?


도대체 그들은 왜 이런 공격을 하는 걸까요?
이 공격으로 뭘 원하는 거죠?

이번 DDoS 공격 의도를 정확히 알 수는 없지만, 아래와 같이 추정해 볼 수는 있습니다.

  • 사회 혼란을 노림
  • 대한민국의 전반적인 IT 인프라 테스트
    => 인터넷 의존도, 시스템 의존도, 대한민국의 사이버 안보 능력, DDoS 대처 능력 등
  • 자신들의 공격 실력 검증
    => 악성코드 제작/배포 능력, 역추적 방지 능력 등

아직까지도 의도가 불분명합니다.
저도 확신이 서지 않습니다. 아마도 위의 3 가지 모두를 노렸다고 밖에는 생각되지 않네요.

더군다나 하드디스크의 MBR 을 날리는 기능이 포함되었다고 하는데요, 기존의 돈을 노리는 악성코드들과는 차원이 틀립니다.
말 그대로 "사이버 테러" 입니다.

하지만 이번 DDoS 사이버 테러에 의해서 우리도 큰 교훈을 얻었습니다.

우리 나라 인터넷 환경은 DDoS 공격에 매우 취약하며, 맘 먹고 달려들면 중요 사이트를 다운시키는것은 일도 아니라는 것을 말이죠.

사실 http 프로토콜 자체가 DDoS 공격에 취약하도록 설계되었기 때문에, 이것은 비단 우리 나라만의 문제라고 볼 수 는 없습니다. 단, 사후 대응 능력은 분명 짚고 넘어가야 할 것입니다. 며칠째 반복되는 공격에 속수무책으로 당하고만 있다는 건 분명 문제가 있습니다.

대표적인 예로 중국에서는 오래전부터 군대 조직내에 사이버전을 수행할 수 있는 특수부대를 양성하고 있다고 합니다. 우리나라도 이번 기회에 그에 대한 대비를 철저히 해야 할 것입니다.
인터넷도 국가 기간망(도로, 통신, 기타)으로 볼 수 있으니까요. 충분히 적들의 공격대상이 될 수 있습니다.



#3. How?


엔지니어로써 가장 궁금했던 부분입니다.

도대체 어떻게 수 만대의 PC 가 악성코드에 감염되어 DDoS 공격을 위한 좀비 PC 가 되었을까요?
사용된 악성코드들을 살펴보니 그 중에 웜(자체 전파 기능을 가짐)은 없었는데 말이죠.

아직까지도 정부기관과 AV 업체들은 좀비 PC 가 어떤 경로를 통하여 감염이 되었는지 파악하지 못하고 있습니다.
(아예 감염 경로 파악이 불가능하다는 말도 나오고 있는 실정입니다.)

잠깐 기억을 되돌려서 예전에 세상을 떠들썩하게 했던 악성코드 사건들을 생각해 보겠습니다.

  • CIH 바이러스 - 감염된 시스템은 특정 날짜에 ROM BIOS 가 날라감
    => 각 AV 업체에서 사건 발생 1년 전에 이미 대응을 마쳤으며, 지속적으로 주의 경보를 하였습니다.
    => 문제는 사람들이 경보를 무시하고 최신 엔진으로 업데이트 하지 않아서 피해가 엄청났었죠.
  • 1.25 인터넷 대란 - Slammer 웜이 MS-SQL DB Server 의 보안 취약점을 공격하여 전세계 인터넷이 마비 되었습니다.
    => MS 에서 이미 사건 발생 6 개월 전에 보안 패치를 내려보냈으며,
        각 AV 업체 또한 Slammer 웜에 대한 진단 시그니처를 가지고 있었습니다.
    => 사람들이 윈도우 보안패치와 AV 최신엔진 업데이트를 소홀히 하였기 때문에 엄청난 피해가 발생하였습니다.


위 두 사례 모두 PC 사용자들이 윈도우 보안패치AV 최신엔진 업데이트만 했었어도 충분히 막을 수 있는 사건이었습니다.

전 이번 DDoS 사이버 테러에 사용된 악성코드들 또한 (과거와 같이) 기존의 보안 취약점을 이용한 것이라고 생각합니다.

제가 생각하는 감염 시나리오는 이렇습니다.

1) 해커가 사람들이 많이 접속하는 사이트(예:포탈, 관공서 등)를 해킹하여 특정 페이지를 변조하여 IFrame 을 심어둡니다.
2) 해당 페이지에 접속한 사람들은 자신도 모르게 IFrame 에 쓰여진 주소로 이동하여 IE 취약점을 통하여 악성 파일을 다운 받아 실행하게 됩니다.
3) 해커는 역추적을 방지하기 위해 일정 시간이 지나면 변조한 페이지를 원래대로 복원시킵니다.

외부로 전파하는 기능을 가진 웜(Worm)을 사용하지 않고 단기간내에 불특정 다수를 감염시키면서, 동시에 감염 경로를 숨기기 위해서는 위 방법이 가장 좋다고 봅니다.

기존 웜을 통한 악성코드 전파 방법은 다른 시스템에 전파하기 위해 네트워크 스캐닝(윈도우 보안 취약점 패킷 전송)을 하는데, 이런 흔적은 AV 업체의 주목을 끌어 사전에 걸릴 확률이 높습니다.

따라서 이번 DDoS 사이버 테러의 경우는 매우 설계가 잘 되어 있고, 효과가 좋다고 볼 수 있습니다.
(공격자들은 프로가 맞습니다.)

좀 더 위험한 추정을 하자면 공격자는 사이트 관리자 중 한명과 내통하고 있다고 볼 수 도 있습니다.
이건 제가 영화를 너무 좋아하는 관계로 너무 지나친 비약이라고 할 수 있지요.
하지만 자고로 최고의 해킹은 내부 해킹이라고 하였습니다. 절대 발각 될 수 없지요.



+-----+

위 얘기들은 모두 제 자신의 추정일 뿐이며 사실로 밝혀진게 아닙니다. ^^

참고만 하시기 바랍니다.

마지막으로 한 말씀 드리겠습니다.

좀비 PC 가 되지 않도록 윈도우 보안 업데이트와 AV 최신 엔진 업데이트를 철저히 하도록 해야 겠습니다.




Trackback Address :: http://www.reversecore.com/trackback/39 관련글 쓰기

  1. Tracked from 인터넷과 보안 2009/10/28 09:20 삭제

    Subject: DDoS 악성코드와 배후설 그리고 전쟁의 정당화?

    http://sunbeltblog.blogspot.com/2009/07/nuttiness-has-started-show-of-force-or.html http://sunbeltblog.blogspot.com/2009/07/ddos-global-hysteria.html http://news.kukinews.com/article/view.asp?page=1&gCode=pol&arcid=0921350631&code=41111111&cp=nv1 http:/..
  1. +_+ 2009/07/11 00:35 댓글주소 | 수정 | 삭제 | 댓글

    패킹 되어있는 공개 프로그램하나 수정해볼려고 삽질하다
    여기까지 흘러오게 되었습니다...
    도움이 될만한 좋은 글들이 많아 보이네요..
    지금 아주 답답한 상황인데..ㅋ 글을 다 읽고나면 업그레이드가 될것같은 느낌입니다.

    • reversecore 2009/07/12 05:50 댓글주소 | 수정 | 삭제

      리버싱 이라는것이 원래 삽질하고, 찾아서 해결하고, 다시 삽질하고... 이러한 과정을 반복하면서 아주 조금씩 실력이 늘어난다고 생각합니다. 부디 성공하시길 빌께요 ^^

  2. maxtrain 2009/07/27 03:17 댓글주소 | 수정 | 삭제 | 댓글

    정말 좋은글 감사 드립니다.. ^^

    글쓰시느라 수고가 많으시네요..

    그림과 설명이 너무 좋습니다.. ^^

    즐겨 찾기해놨습니다~! 직장인이세요?ㅎ 직접 강좌를 듣구 싶군요 ㅎ 오프라인으로요 ㅎ

    후킹과 프로그램 개발에 관심이 많은 대학생이였습니다. ㅎ

    • reversecore 2009/07/27 08:31 댓글주소 | 수정 | 삭제

      maxtrain님, 감사합니다.
      직장인 맞구요, 오프라인 강좌는 조만간 기회가 있을것입니다.
      다음번 포스트 주제가 API 후킹입니다. 또 방문해주세요~ ^^

  3. yoozh21 2009/08/31 12:18 댓글주소 | 수정 | 삭제 | 댓글

    이번 대학 과제인데 많은 도움이 되었습니다
    감사합니다

  4. showtime 2009/10/08 13:08 댓글주소 | 수정 | 삭제 | 댓글

    잘 읽었습니다~ ^^ ㅎ



창의성과 경험에 대한 이야기를 해볼까 합니다.


“바둑 신동은 있어도 장기 신동은 없다!?”


어느 분야든 전문가가 되려면 자신만의 독창적인 스타일(창의성)과 다양하고 깊은 경험이 필요하기 마련입니다.

즉, 창의성과 경험이 모두 중요하다는데는 이의가 없습니다.

하지만 분야에 따라서는 둘 중 어느 하나가 더 중시되는 경우가 있습니다.
(둘 중에 뭐가 더 좋고 나쁘다가 아니라 둘의 성격은 이런 식으로 다르다는 뜻입니다.)




바둑과 장기


먼저 바둑을 보겠습니다.

바둑 게임이야 워낙 유명하니 따로 설명은 드리지 않겠습니다.

제가 바둑게임에서 주목하는 부분은 그 게임방법에 있습니다.

처음에 아무것도 없는 바둑판 위에 돌을 하나하나 두면서 플레이 해나가지요?

즉, 바둑게임은 빈 곳에다 뭔가를 만드는, 무에서 유를 창조하는 게임입니다.

단순한 게임 형태에서 오는 무한의 자유도가 있습니다.

어디에 어떻게 돌을 놓을지는 사람마다, 게임마다 매번 틀려집니다.

이창호, 이세돌 같은 사람들은 어려서부터(10대) 천재소리를 들으며 바둑계를 주름잡은 사람들입니다.

분명 바둑 전문가 중에는 이창호, 이세돌 보다 훨씬 오랜 기간(30년 이상) 바둑을 두어오신 분들이 계십니다.

즉, 그런 분들도 경험적으로는 이창호, 이세돌 보다 못하지 않다는 것이지요.

그렇지만 실제 바둑 대회에서 이창호, 이세돌 같은 신동들이 상을 휩쓸었던 이유는 분명 경험 외에 자신만의 독창적인 바둑세계를 가지고 있었기 때문입니다.

즉, 바둑 신동들은 남들과 다른 자신만의 창의적인 바둑을 두었기 때문에 승승장구 할 수 있었던 것입니다.

따라서 바둑은 경험보다는 창의성이 더 중요한 분야라고 말 할 수 있을 것입니다.



반면에 장기는 어떨까요?

장기라는 게임은 다양한 형태의 장기알과 장기판으로 구성되며, 게임 방법은 바둑과 비교하여 복잡합니다.

바둑과 달리 장기는 처음에 정해진 규칙대로 장기알을 배열한 후 시작하며, 도중에 장기알을 추가할 수 는 없습니다. 오로지 시작할 때 가지고 있던 장기알 만으로 게임을 진행하게 됩니다.

또한 장기게임의 첫 수는 게임마다 서로 비슷합니다. (끄트머리의 졸을 옆으로 이동하여 차의 길을 확보하고, 말을 올려 포를 궁앞에 배치하는 형태입니다.)

즉, 장기는 어떤 정해진 틀 안에서 제한된 장기알을 가지고 정해진 규칙대로 움직이는 것이지요.

따라서 게임의 자유도가 제한적입니다.

장기라는 게임은 많이 해본 사람이 무조건 이길 수 밖에 없습니다.

왜냐하면 제한된 자유도를 가졌기 때문에 플레이 패턴(정석)을 다 외워버리면 어떤 상황에서도 다음에 이어지는 패턴이 머리속에서 훤히 그려지기 때문이지요.

그래서 장기 고수들을 보면 대부분 연세가 지긋하신 분들이십니다.

따라서 장기라는 게임은 창의성 보다는 경험이 더 중요하다고 볼 수 있습니다.

* 몇 년 전에 IBM 의 DeepBlue 라는 컴퓨터가 세계 체스 챔피언을 이긴 사실을 두고 신문기사에서는 “드디어 컴퓨터가 사람을 넘어섰다.” 라고 호들갑을 떨었던 적이 있었습니다. 제한된 자유도를 가진 게임이라면 사람은 절대 컴퓨터를 이길 수 없습니다. 모든 경우의 수를 데이타베이스에 입력 후 최적화된 쿼리 알고리즘을 이용하면 사람과 비교할 수 없는 연산능력을 가진 컴퓨터가 이기는 것은 당연한 일이지요. 하지만 창의성이 요구되는 (만들어 가는 형식의) 바둑 게임은 경우의 수 자체가 없기 때문에 컴퓨터가 감히 사람에게 이길 수 없는 것입니다.




프로그래밍과 리버싱


프로그래밍
은 무에서 유를 창조한다는 의미에서 바둑게임과 비슷하다고 할 수 있습니다.

바둑 게임과 같이 프로그래밍이라는 것은 뭔가(프로그램)를 만들어내는 과정입니다.

만든다는 행위 자체에 이미 창의성의 개념이 포함되어 있지요.

프로그래밍 방법에서도 창의성이 요구되며, 그 결과물도 창의성이 크게 요구됩니다. (이미 존재하는 프로그램과 똑같은 프로그램을 만들어 봐야 크게 팔리지 않을 것입니다. 뭔가 다른 독창적인 요소가 있어야 사람들이 좋아하겠지요.)

따라서 프로그래밍은 창의성이 좀 더 중시된다고 말할 수 있습니다.



그렇다면 리버싱은 어떨까요?

이미 만들어진 프로그램을, 이미 존재하는 도구와 방법을 사용해서 분석한다는 개념으로 본다면 리버싱은 분명 장기 게임과 비슷하다고 할 수 있습니다.

또한 리버싱은 많이 해본 사람이 더 잘한다는 점에서 장기 게임과 유사합니다.

즉, 프로그래밍 신동은 있어도 리버싱 신동은 없다고 할 수 있지요.

이 말을 바꿔 말하면 아래와 같이 말 할 수 있습니다.


“내가 비록 천재가 아니지만, 열심히 노력한다면 리버싱 고수가 될 수 있다.”


네, 프로그래밍 고수가 되기 위해서는 다분히 창의성이 크게 요구됩니다. (물론 어떤 분야건 간에 창의성이 높으면 우수한 성과를 낼 수 있지요.)

하지만 리버싱 고수는 누구나 마음만 먹으면 될 수 있답니다.


+--+


Reverse Code Engineering 분야에 몸 담으신 여러분!!!

비록 처음에는 배울 것도 많고 실력도 별로 늘지 않는 것 같다고 생각되겠지만 위에서 설명 드린 바와 같이 리버싱 분야는 노력한 만큼 정직하게 성과가 나타나는 분야입니다.

계속해서 지금처럼 열심히 노력하세요. 성과가 나타나기까지 단지 시간이 필요할 뿐입니다.

www.ReverseCore.com 은 대한민국에 훌륭한 리버서가 많아질 수 있도록 작은 힘을 보태도록 하겠습니다.


모두 힘내세요! 화이팅!!! ^^

 

Trackback Address :: http://www.reversecore.com/trackback/37 관련글 쓰기

  1. HS 2009/07/07 16:48 댓글주소 | 수정 | 삭제 | 댓글

    바둑과 장기에 대한 비유.. 새롭네요~ ^^

  2. 감사 2009/07/30 17:59 댓글주소 | 수정 | 삭제 | 댓글

    댓글을 거의 안달고 웹서핑을 하는 스타일인데...
    이글을 읽고 있자니 그냥 지나칠수가 없네요 :)
    정말 좋은 비유에 이제 리버싱이란 걸 시작해 보려는 사람에게 희망을 주세요!
    감사합니다.
    좋은글 많이 쓰세요~~~

    • reversecore 2009/07/30 19:21 댓글주소 | 수정 | 삭제

      댓글 감사합니다.
      리버싱은 정말 매력적인 분야입니다.
      가끔 들러주세요~ ^^

  3. lain32 2009/08/04 20:34 댓글주소 | 수정 | 삭제 | 댓글

    개인적으로 리버스 엔지니어링을 매우 좋아하는데
    “내가 비록 천재가 아니지만, 열심히 노력한다면 리버싱 고수가 될 수 있다.”
    라는 말이 너무 마음에 드네요.

    좋은 글 감사드립니다.^^

  4. showtime 2009/10/08 13:04 댓글주소 | 수정 | 삭제 | 댓글

    참 새롭네요.
    바둑과 장기 비유 ㅎㅎ
    맘에 쏙드는군요 열심히 해봐야겠습니다~ ^^ ㅋㅋ

  5. 베리굿 2009/11/07 22:28 댓글주소 | 수정 | 삭제 | 댓글

    우와 희망적인글 감사합니다.

  6. 부자봉스 2009/11/12 00:52 댓글주소 | 수정 | 삭제 | 댓글

    지금 계속 잃으면서 느끼는건데 멋진분이시네여

  7. h0ney 2010/01/13 12:28 댓글주소 | 수정 | 삭제 | 댓글

    프로그래밍과 리버싱....
    프로그래밍이 창조의 학문이라면 리버싱은 분석의 학문이라
    사람마다 각각의 특성이 있으므로, 분석이 자신의 분야에 맞는다면
    리버싱으로 진로를 설정하는것이 좋습니다.

    리버싱도 마찬가지로 아무리 해도,
    재미가 없으면 할 맘이 들지가 않죠

    리버싱이라는 뭔가 있을 법한 이름을 찾아
    입문을 했다가, 내빼버리시는 분들을 종종 봤습니다.

    조엘 온 소프트웨어를 번역하신 박재호씨도 예전에 강의를 하다가
    "내가 디버깅 좋아하는 사람 뽀뽀해 줄게요~" 라고 할 정도로
    리버싱이라는 학문은 일반적으로 배우기 힘든 학문이 아닐까요

    그리고 프로그래밍을 모르는 사람이 과연
    리버싱을 어디까지 잘할 수 있을까요...

    • reversecore 2010/01/13 15:29 댓글주소 | 수정 | 삭제

      h0ney님, 안녕하세요.

      프로그래밍과 디버깅 모두 쉽지 않은 분야이지요.
      말씀하신대로 개인 성향에 따라 호불호가 갈릴것입니다.

      제가 아는 사람중에는 프로그래밍 경험이 거의 없지만 디버깅만 열심히 해서 뛰어난 실력을 갖춘 사람도 있습니다. 물론 그 과정에서 C 프로그래밍 실력이 자연스럽게 늘긴 했지요.

      뭐든지 자기 하기 나름인것 같아요.

      감사합니다.

  8. pico 2010/01/23 16:37 댓글주소 | 수정 | 삭제 | 댓글

    스터디 폴더를 전부 보고나서, 여기 저기 훓고 지나가다가 발자취 남깁니다. 갑자기 어셈블리가 궁금하여 구굴링하다가 우연하게 찾아왔는데 한글이라서 맘에 들어요. 더욱 맘에 드는건 원서보는 것 처럼 자세한 설명이 되어 있다는 거죠. 많은 도움 되네요. 앞으로도 좋은 글 부탁드려요.

    • reversecore 2010/01/26 20:59 댓글주소 | 수정 | 삭제

      pico님, 안녕하세요.

      칭찬 감사합니다. ^^

      좋은글 많이 올리도록 노력하겠습니다.

      자주 방문해 주세요~

  9. MetallizM 2011/05/09 09:08 댓글주소 | 수정 | 삭제 | 댓글

    리플을 안달 수가 없는 글이네요..리버스코어를 알게된건 오래되었지만...바둑과 장기에 대한 비유가 너무나 맘에 와닿습니다..이 글을 지금에서야 보다니 헐...
    보는 순간 소름이 돋더군요..

  10. 제이에스엠 2011/09/22 21:52 댓글주소 | 수정 | 삭제 | 댓글

    정말 자동으로 리플을 달게 됩니다.
    감사합니다.
    포기했었는데 다시 해야겠네요
    참고로 우리나라에서는 리버싱으로 물질을 얻거나 직업을 유지하는 데에 한계가 있을 것 입니다.

    • reversecore 2011/10/24 22:24 댓글주소 | 수정 | 삭제

      안녕하세요.

      저도 리버싱 전문가들이 개발자와 마찬가지로 전문직으로 대우받기를 바랍니다. ^^~

      감사합니다.

  11. 클레버 2011/11/23 07:14 댓글주소 | 수정 | 삭제 | 댓글

    전체적으로 옳은 말씀입니다.
    다만, 장기에서 사람이 절대 컴퓨터를 이길 수 없다는 말씀은 현실적으로는 잘 못 되었습니다.
    물론 보이는 상황으로는 옳은 말씀이지만, 실제 내막은 조금 다르다고 봅니다.
    제한된 자유도를 가졌기 때문에 플레이 패턴(정석)을 다 외워버리고, 모든 경우의 수를 데이터베이스화하고 최적의 알고리즘을 갖는다는 것은, 아이러니하게도 실제 장기판에서는 이루어지지 않는다고 생각합니다.

    물론 말씀하신 부분이 이론적으로는 장기를 최고로 잘 두는 사람 혹은 최고의 인공지능의 방향일 수는 있겠습니다. 하지만 이론과 달리 실제는 다른 점이 있습니다.
    제한된 안의 범위에서 정해진(최선이라고 나름 정의한 규칙) 일정한 방식을 정석이라고 볼 수 있습니다.
    그러나 정석은 정석일 뿐, 필승의 수가 아니라는 점입니다.
    기물 하나의 움직임에 앞으로 진행할 모든 수가 뒤바뀝니다. ( 당연하지만..-_-; )
    그래서 생각해볼 수 있는 것이 모든 경우의 수를 찾는 일인데요.
    하지만, 이건 불가능합니다.
    지금의 고성능 CPU로써도 수백 년 동안 연산해도 불가능하고, 그 수백 년이 걸리는 연산을 단지 수분 만에 처리한다는 양자컴퓨터가 존재한다고 할지라도 수백 년, 수천 년, 수만 년을 해도 불가능하다고 봅니다.
    여기에 추가로 모든 경우의 수를 찾으려 하다 보니 문제가 되는 것은 서로 기물을 취하지 않고 기물만 계속해서 움직일 수 있는 상황까지 더해서 찾아야 한다는 점인데, 이 점에서 더욱 폭발적인 경우의 수가 뒤섞이게 된다고 봅니다.

    그래서 결론은 완전하지 않은 수 연산능력은 불필요한 연산이 차지하는 비중이 크다는 것이고, 다른 차선책으로는 최적의 알고리즘을 적용하는 일이겠지요.
    그러나 이러한 규칙성을 갖는 하나의 틀 역시 조금 다른 변칙 된 수순에 의해 쉽게 돌파되어 깨져 버리고 말 것입니다.

    주위에서 기억력이 뛰어난 사람을 보면, 평소 자신이 대국했던 장기를 복귀하거나, 장기를 두다가 다른 일이 있어서 장기를 접고 나중에 다시 와서 진행하던 장기 기물의 위치를 아무일도 없던 것처럼 그대로 복귀하더군요. 하지만 장기 실력과는 비례적인 관계가 아니더군요.(물론 도움은 되겠지만요)

    글쓰신 님께서 말씀하신 바와 같이 장기 고수들을 보면 대부분 연세가 지긋하신 분들이라고 하셨습니다. 맞습니다. 다만 방대한 경험과 지식만으로는 해소될 수 없는 여지도 충분히 남아 있습니다. 아무리 자유도가 제한된 범위에서 경험과 지식을 쌓을지라도 그 지식을 끄집어내고 응용하여 가치 있는 수를 만들어 낼 수 있는 것역시 창의력과 노력의 방법 밖에는 없기 때문입니다.

    장기판은 넓게 보면 창의력이란 보이지 않는 사막과도 같습니다.
    그 사막에서 바늘을 찾는 일은 근거와 논리가 바탕이 되어야 하겠지요.
    하지만 어떠한 근거도 제시되지 않고 보이지 않는 수순을 찾아 승리의 바늘을 찾아야한다는 것은 실로 어려운 일이라고 생각합니다.

    흔히들 장기는 바둑보다 두어야 하는 수가 적다는 말을 합니다.(자유도 제한적)
    표면적으로 보여지는 부분이 그러니 틀린 말은 아니지만, 아이러니하게도 수가 적다는 말이 쉽다는 말과 같지가 않습니다. 바둑은 수를 만들어간다. 장기 역시 수를 만들어가기에는 매한가지라는 얘기가 됩니다. 다만 그 수를 찾아내는 일이 극히 제한된 루트이고 누가봐도 옳은 길이라 생각했는데, 잘 못된 길일 수도 있기에 한번 길을 잃으면 말짱 도루묵이기 때문에 어렵다고 생각합니다. 여기에 컴퓨터의 연산능력과 운영능력이 사람의 생각보다 유리한 입장에 있을 수는 있지만, 컴퓨터의 연산능력이 완전하지 않은 만큼 사람이 절대 컴퓨터를 이길 수 없다는 것 역시 잘 못 되었다고 생각합니다.(지금 현존하는 최고의 인공지능과 알고리즘을 갖춘 장기 프로그램이라고 하더라도 사람이 넘어서지 못하는 것은 아니니까요.)
    사람이 이기기 어렵다는 것이지 절대적인 기준은 아니라는 것입니다.

  12. 포쿨럼 2011/11/23 15:10 댓글주소 | 수정 | 삭제 | 댓글

    지나가다가 이글을 보게 되었는데 몇가지 비유가 조금 잘못되었네요
    위에서 클레버님도 언급하셨네요
    예를 들기 위해서 바둑과 장기를 비교하셨겠지만
    그런 비유를 통한 예는 장기류 게임의 팬들에게는 좋지 않은 느낌을 줄 수 있습니다.
    한국에서 장기류 게임을 좋아하시는 분들은 아주 않죠.
    말씀 하신것처럼 둘중에 하나가 좋고 나쁜것이 아니라 다른 것이죠 그런데 의도와 달리 바둑과 장기의 비교 때문에 그런 비교들을 보는 사람들에게 장기의 이미지가 나빠지는 경우도 많이 있었고요 그래서 글을 씁니다.

    "장기라는 게임은 많이 해본 사람이 무조건 이길 수 밖에 없습니다"
    "장기 고수들을 보면 대부분 연세가 지긋하신 분들이십니다"

    라는 하시며
    바둑은 창의력, 장기는 경험이라고 하셨는데
    그렇게 간단히 구분할 수 있는 것이 아니라고 생각합니다.

    이세돌, 이창호 같은 바둑신동들의 이야기를 하셨는데
    이건 제가 보기엔 장기류 게임과 전혀 다른것이 없는 것 같습니다.

    장기류게임은 대표적으로 장기, 체스, 샹기, 쇼기가 있습니다.
    체스, 샹기, 쇼기의 프로들을 보면 젊은 프로들이 주류입니다.
    체스만 해도 칼슨이라는 노르웨이분이 19살에 세계랭킹 1위에 올랐죠. 그전에 이미 수 많은 세계 대회에서 우승했고요.
    이제 겨우 17살인 기리라는 체스선수는 벌써 세계적인 명성을 가지고 있고 카라킨은 무려 12살때에 그랜드마스터라고 하는 체스 최고단계의 명칭을 획득하여 전 세계에 이름을 알렸었죠
    쇼기에서도 역사상 최강이라는 하부도 10대 후반에 이미 최고의 경지에 올라 수 많은 대회에서 이겼고 하부와 비슷한 시대에 태어난 쇼기프로들을
    하부세대 또는 차일드 브랜드라고 부르는데 이들은 10대 후반부터 쇼기계를 주름잡았죠. 이들은 어린 10대때부터 명성이 높았기 때문에 차일드라는 명칭이 붙었죠

    장기에서 경험을 중요시 여기셨는데
    체스 프로들이 평소에 연구를 할때 거의 모든 시간을 사용하는 것은
    오프닝(장기로 치면 포석)을 연구하는 것입니다.
    아주 유명한 체스챔피언이 "오프닝은 체스에서 가장 창의력을 발휘할 수 있는 부분이다"
    라고 하셨죠.
    체스 프로들간의 시합에서는 누가 어떤 신수(다른 사람들이 둔적이 없는 수)를 준비해서
    시합에 나오냐에 따라 승패가 달라집니다.
    즉, 누가 창의력을 더 발휘해서 , 다른 사람들이 생각하지 못한 수를 생각해 내냐에 따라 승패가 달라집니다.
    그래서 체스프로들은 대부분의 연구 시간을 오프닝에서
    창의력을 발휘해서 신수를 개발하는데 사용합니다.

    체스컴퓨터에 대해서도
    딥블루와 같은 체스컴퓨터들이 챔피언에게 이긴 것을 알고 있지만
    이 체스컴퓨터들이 그후에 아마추어들에게도 졌다는 사실은 모르시는 것 같습니다.
    사실 IBM이 이긴것은 뉴스로 자랑하지만 진 사실을 자랑하지 않겠죠.
    체스계에서는 한 평범한 아마추어가 컴퓨터를 연파해서 유명해진 일이 있었습니다.
    프로그램이 가진 한계 때문이였죠.
    히지만 이것은 어떻게 보면 꼼수라고 할 수도 있죠.
    상대가 가진 약점을 물고 늘어졌으니깐요.
    챔피언들은 자존심상 생중계되는 컴퓨터와의 시합에서 이런 방법들을 쓰지 못하죠.
    지금도 유튜브에서 찾아보시면 아마추어나 프로들이 컴퓨터를 이기는 동영상을 찾아서 볼 수 있습니다. 한번 찾아 보시기를 추천드립니다.

    딥블루 이후에 나온 최신 체스컴퓨터로 히드라 라고 하는 체스컴퓨터가 있습니다.
    유명한 체스선수를 이겼죠.
    하지만 이 컴퓨터가 좀 실력있는 아마추어들과 하루에 1수를 두는 조건으로 연습시합을 했다가
    완패했다는 사실은 잘 안 알려져 있죠.
    신문에서는 이긴게 뉴스거리가 되지 진것은 뉴스거리가 안되니깐요
    체스프로들은 컴퓨터가 전술(수읽기)가 매우 강하지만 전략적인 부분에서 약하다라는 말을
    많이 합니다.
    히드라와 아마추어 사이의 시합이 이것을 증명하고요
    사람에게 하루에 1수라고 하는 모든 전술을 계산할 수 있는 충분한 시간을 주면
    (시합에서 사람들이 실수를 하는 이유는 시합의 부족한 제한시간 때문이죠)
    전략적인 실력의 우위로 좀 실력있는 아마추어도 컴퓨터를 이길 수 있다라는 것을 증명했었죠

    반대로 바둑에서는 최근 프로그램이 발전해서
    2009년엔 9줄바둑에서는 컴퓨터가 프로들을 상대로 이겼습니다.
    19줄 바둑에서는 접바둑에서 점점 더 많이 이기고 있고요.
    http://baduk.netmarble.net/News/news_view.asp?seq=1611
    뉴스를 확인해 보세요
    바둑프로그램들도 계속 발전되도 있죠,
    바둑에서 컴퓨터가 감히 사람에게 이길 수 없다 라고 단언하시는 것은 좋지 않습니다.

  13. reversecore 2011/11/30 01:42 댓글주소 | 수정 | 삭제 | 댓글

    안녕하세요.

    클레버님과 포쿨럼님의 댓글에 감사드립니다.

    제 짧은 지식에 기반한 부족한 글에 훌륭한 댓글을 달아주시니,
    저와 다른 방문객에게도 좋은 참고가 될 것입니다.

    * 저도 최근에 우연히 체스 그랜드 마스터들이 대부분 10대, 20대라는 사실과 나이를 먹어감에 따라서 실력도 차츰 떨어진다는 사실을 알게 되었습니다. 그 이유가 지금도 참 궁금합니다. (아니면 이유는 당연한 건데도 그 나이를 한참 지난 상황에서 인정하고 싶지 않은 걸지도 모르겠습니다. ^^)

    감사합니다.

  14. lucy_han 2012/02/16 15:47 댓글주소 | 수정 | 삭제 | 댓글

    좋은글 읽고갑니다.

    프로그래밍 하다가 리버싱에 관심이 생겨서 돌아다니다가

    들럿는데 아직 고등학생이기도하긴 하지만

    국내에서 리버스 엔지니어를 필요로 하는 회사는 어떠한 회사들이있고

    들어가게 되면 어떤일을 하게되나요 ?

    또 이쪽으로 직업을 선택하려면

    알아야 할 정보라던가 알려주시면 감사하겠습니다.


Packer 와 Protector

column 2009/06/23 06:05

Packer 와 Protector 의 차이점과 각각의 사용 예에 대해서 설명하도록 하겠습니다.
리버싱 관점에서 Packer 와 Protector 의 접근방법에 대해서도 같이 짚고 넘어가겠습니다.


Packer

Packer란 이전 글에 소개했던 실행압축기를 말합니다.
정확한 명칭은 Run-Time Packer 로써 PE 파일 전문 압축기 입니다.

 

#1. 사용목적

- PE 파일의 크기를 줄이고자 하는 목적

인터넷이 발달한 요즘 시대에 파일의 크기가 작다는 것은 큰 장점 중에 하나입니다.

-참고-
 
실행 압축 (Run-Time Packer) 에 관하여
  UPX 실행 압축된 notepad 디버깅!

- PE 파일의 내부 코드와 리소스를 감추기 위한 목적

Packer를 사용하는 또 다른 이유가 바로 PE 파일 내부의 코드와 리소스(문자열, API name string) 등을 감출 수 있기 때문입니다.
압축된 데이타는 알 수 없는 형태의 바이너리로 저장되기 때문에 파일 그 자체로 놓고 보면 내부 코드와 리소스를 감춰주는 효과가 있습니다. (물론 압축이 해제된 메모리의 덤프를 뜨면 볼 수 있습니다.)

* 이 목적을 극대화 시킨 개념이 아래에 설명드릴 Protector 입니다.



#2. 사용현황

실행압축의 개념은 DOS 시절부터 존재하였습니다. 하지만 그때는 잘 쓰여지지는 않았는데요.
그 이유는 당시 PC 속도가 별로 빠르지 못했기 때문에 파일이 실행될 때마다 압축을 해제시키는 과정이 큰 오버헤드로 작용하였습니다.
하지만 현재 PC 속도는 엄청나게 빨라져서 실행 압축된 파일이나 원본 파일이나 사용자는 실행 시간차이를 느낄 수 없게 되었습니다.
그래서 최근 들어 실행압축은 유틸리티, 패치파일, 일반 프로그램 등에 널리 사용되고 있습니다.



#3. Packer 종류

유명한 Packer 들을 소개해 드리겠습니다.

크게 두 가지 종류로 나눌 수 있습니다.
평범한 PE 파일을 만들어 내는 순수한 의도의 Packer 와 원본 파일을 크게 변형하고 PE 헤더를 심하게 훼손 시키는 약간 불순한 의도의 Packer 로 나눌 수 있습니다.

여기서 말하는 불순한 의도의 Packer 는 전문적으로 악.성.코.드. 에서 사용됩니다.

여기서 순수/불순의 분류 기준은 제 경험과 VirusTotal 의 진단 결과에 의해서 분류하였습니다.

- 순수한 의도의 Packer (VirusTotal 에서 진단 안됨)

UPX, ASPack, etc

- 불순한 의도의 Packer (VirusTotal 에서 진단됨)

UPack, PESpin, NSAnti, etc

 

Protector

PE Protector 란 PE 파일을 “Reverse Code Engineering” 으로 부터 보호하기 위한 유틸리티 입니다.

즉, 단순히 일반적인 Packer 와 같이 실행 압축을 시켜주는 것 뿐만 아니라 리버싱을 막기 위한 다양한 기법들(Anti-Debugging, Anti-Emulating, Code Obfuscating, Polymorphic Code, Garbage Code, Debugger Detection, etc)이 추가 됩니다.

이러한 Protector 들로 압축된 PE 파일들의 크기는 오히려 원본 PE 파일보다 커지는 경향이 있습니다.
하지만 디버깅하기 매우 어렵습니다. (
디버깅이 어려운 것이지 불가능하지는 않습니다.)

Protector 를 상세 분석 하기 위해서는 많은 리버싱 경험이 요구됩니다.
물론 인터넷에는 온갖 편법을 이용해서 Protector 를 해제하는 방법이 많이 공개되어 있기 때문에 운이 좋으면 초보자도 원본 파일의 OEP 로 갈 수 있습니다만, 항상 그런 것은 아니지요.



#1. 사용목적

- 크래킹(Cracking) 방지

자신이 만든 프로그램이 크랙 되어 불법적으로 사용되는 걸 좋아할 사람은 없겠죠?
그런 경우 Protector 를 이용해서 PE 파일을 보호하면 꽤 도움이 됩니다.

- 코드 및 리소스 보호

Protector 는 PE 파일 자체를 보호하며 또한 파일이 실행되었을 때 프로세스 메모리를 보호하여 덤프를 뜨지 못하게 합니다. 따라서 비교적 안전하게 자신의 코드와 리소스를 보호할 수 있습니다.



#2. 사용현황

특히 크래킹에 민감한 보안 프로그램들이 이런 Protector 를 많이 사용합니다.
예를 들어 온라인 게임을 설치하면 자동으로 같이 설치되는 보안 프로그램들이 있습니다.

게임 보안 프로그램은 소위 “게임핵” 의 실행을 방지 합니다.

악의적인 게임 크래커들은 이러한 보안 프로그램을 어떻게든지 크랙하려고 시도합니다.
(크랙이 성공하면 “게임핵” 을 이용하여 금전적인 이익을 얻을 수 있기 때문입니다.)

따라서 보안 프로그램들은 크랙 방지를 위해서 Protector 를 사용하여 자신을 보호합니다.
(Protector 를 지속적으로 바꿔주면 게임 크래커 들이 짜증 좀 나겠죠?)

그리고 일반적인 악성코드(Trojan, Worm)에서 많이 사용합니다.
어떻게든 AV 제품의 진단을 막기 (혹은 늦추기) 위해서 Protector 를 사용하지요.
일부 Protector 는 “다형성 코드”를 제공하기 때문에 매번 다른 모양(하지만 같은 기능)의 코드가 생성되므로 AV 제품에서 진단하기 까다로워 집니다.



#3. Protector 종류

공개용 프로그램과 상용 프로그램이 있습니다.
또한 전문적으로 악성코드에서만 사용되는 Protector 들도 있습니다.

- 상용 Protector

ASProtect, Themida, SVKP, etc

- 공개용 Protector

UltraProtect, Morphine, etc



+---+

리버싱에서 Packer 와 Protector 는 매우 중요합니다.
원본 PE 파일의 OEP 까지 가야 분석을 시작할 수 있기 때문에 이와 같은 Packer 와 Protector 들에 대하여 잘 알고 있어야 합니다.

또한 Packer 와 Protector 자체만 분석해도 전반적인 리버싱 지식이 크게 향상됩니다.
특히 Protector 에서 사용되는 Anti-Debugging 기법들은 수준이 매우 높기 때문에 CPU 와 OS 에 대한 깊은 지식이 요구됩니다.

 

Trackback Address :: http://www.reversecore.com/trackback/36 관련글 쓰기

  1. 2010/08/16 17:02 댓글주소 | 수정 | 삭제 | 댓글

    비밀댓글입니다

    • reversecore 2010/08/20 15:22 댓글주소 | 수정 | 삭제

      안녕하세요.

      PESpin 이요?
      예전에 악성 코드에 많이 사용되던 패커입니다.
      OEP 를 확인하시는 목적이시라면 크게 어렵지 않았던 걸로 기억합니다.
      파일을 찾아서 확인 후 다시 답변 달아드릴께요.

    • reversecore 2010/08/25 13:49 댓글주소 | 수정 | 삭제

      PESpin 1.32 버전으로 간단히 테스트 (default option) 하였습니다. (XP SP3)

      그리고 OllyDbg 는 기본 상태에서 Exceptions 옵션만 전부 체크 하였습니다.

      PESpin 은 크게 대단한 Anti-Debugging 기법은 존재하지 않습니다. (물론 OEP 까지 tracing 이 쉽지는 않습니다.) 다만 소위 '코드 깨기' 기법을 이용하여 OllyDbg 에서 제대로 파싱되지 않도록 코드 사이 사이에 쓰레기 코드를 삽입한 후 JMP 명령어로 마구 뛰어다니면서 언패킹을 진행합니다.

      또한 Stolen bytes 기법을 이용해서 원본 EP 코드 (OEP 코드) 의 일부를 패커 코드 영역으로 가져와서 실행시킵니다. (원본 코드는 NULL 로 밀어버리죠.) 마지막에 JMP 명령으로 원본 코드쪽으로 넘어갑니다.

      OEP 코드로 가는 간단한 방법은... (댓글로 설명드리기는 좀 쉽지 않네요. ^^)

      PESpin 의 초기 PUSHAD 명령어 이후 스택에 HW BP 를 설치합니다.
      이 방법은 http://www.reversecore.com/35 이 글에 소개되어 있으니 참고하시면 되겠습니다.

      그후 실행하면 "예외" 가 발생하는 경우가 있습니다. Anti-Debugging 기법인데요... Shift+F9 명령으로 계속 실행합니다.

      결국 HW BP 설치한 곳에서 멈춰집니다. 이때 코드가 깨져 보일것입니다.
      마우스 우측 메뉴의 Analysis-Analyse Code (혹은 Analysis-Remove Analysis from module) 을 실행하시면 됩니다. 여기에서 조금만 더 tracing 해 나가면 OEP 의 Stolen bytes 들이 나타나고 결국 원본 EP 쪽으로 갑니다.

      문제는 PESpin 의 "Debug Blocker" 옵션인데요...
      자신을 Debug 모드로 실행해버리는 기법입니다.
      즉, 아래와 같습니다.
      PESpin.exe
      -PESpin.exe (Debuggee 프로세스)

      이 경우도 경험이 좀 있으시다면 크게 어렵지는 않지만...
      초보자의 경우 많이 힘들어 하실 수 있습니다...

      댓글만으로는 설명이 너무 힘드네요... 그림도 필요하고... 추가 설명도 많구요...
      이부분은 제가 향후에 블로그(또는 책)에 PESpin 분석 과정에 대한 설명을 올리도록 하겠습니다.

      감사합니다.

    • reversecore 2010/08/24 22:32 댓글주소 | 수정 | 삭제

      이건 제가 궁금한 내용인데요...

      직장에서 리버싱을 하신다고 말씀하셨는데요...

      혹시 어떤 일을 하시는지 알려주실 수 있나요?

    • Elephunk 2010/08/26 13:44 댓글주소 | 수정 | 삭제

      pespin은 reversecore 님이 잘 설명해 주셨는데요

      그 외에도 code redirect,code replace,간단한 anti dump 트릭등이 적용이되어 있습니다

      그리고 Debugger Blocker 가 적용이 되어 있다면
      Nanomite 역시 해결해야될 문제입니다

      언팩경험이 풍부하다고 해도 까다롭니다

    • reversecore 2010/08/28 00:26 댓글주소 | 수정 | 삭제

      Elephunk님, 안녕하세요.

      Nanomite 란게 뭘까하고 검색을 해봤네요. ^^

      unpack 프로그램을 만들자면 매우 어려운 작업입니다.
      하지만 일반적인 리버싱에서 OEP 로 가는 것은 충분히 할 수 있지요.

      실전 리버싱 실습예제 중의 하나로 PESpin 을 계획 중입니다. 저 또한 다른 분들의 방법이 매우 궁금하답니다.

      uniquej 님 덕분에 좋은 예제를 찾은 셈이지요.

      감사합니다.

  2. 낭만고양이 2011/09/22 21:24 댓글주소 | 수정 | 삭제 | 댓글

    reversecore님 안녕하세요.
    좋은 방법 감사합니다.
    yoda's protector에 대한 자료을 게시해주세요.
    감사합니다.

    • reversecore 2011/09/28 21:02 댓글주소 | 수정 | 삭제

      안녕하세요.

      책을 잘 마무리한 후에 블로그 활동을 재개할 예정인데요... 그때 간단한 protector 언팩을 다뤄볼까 합니다.

      * yoda 는 쉽지 않습니다. ^^~

      감사합니다.

  3. 낭만고양이 2011/09/29 22:30 댓글주소 | 수정 | 삭제 | 댓글

    reversecore님
    안녕하세요.
    댓글 감사합니다.
    센 protector 가 무엇인지 알고계시는지요
    궁금중에 사로 잡혀 물어보는겁니다.