반응형




"리버싱 핵심 원리" 2쇄를 찍었습니다~ 

성원해 주신 독자 여러분들께 감사드립니다~ ^^~


많은 독자분께서 블로그와 이메일을 통해 "리버싱 핵심 원리"에 대해 격려와 조언을 해주셨습니다.

정말 감사드립니다~~~



+---+



기억에 남는 이메일들이 많이 있는데요.

의외로 초/중/고 학생중에서 리버싱에 관심을 가지고 열심히 공부하시는 분들이 계시더군요.


어린 학생분들이 인생의 목표를 세우고 한 걸음씩 실천하는 모습을 보면서 가슴이 뭉클하고 절로 숙연해 졌습니다.

새삼 제 자신에 대해 돌아보게되고 삶의 자세에 대해 많이 생각할 수 있었습니다.

덕분에 많이 배웠습니다.



+---+



제 주변에도 제 책으로 공부하시는 분들이 계신데요.

1/3 분량 정도부터 어려움을 느끼시더군요. 

생소한 Win32 API 설명이 나오면서 그 부분이 좀 힘드셨나봐요.


Windows 리버싱이란 API 위주로 프로그램의 동작을 파악해가는 과정의 연속이기 때문에...

API 공부를 피할 수는 없습니다.


한 가지 팁을 알려드리자면 책과 구글 검색을 통해 API에 대한 대략적인 설명을 접한 후 디버깅 실습까지 진행해 보세요.

하나하나 디버깅 하면서 해당 API 의 기능을 익혀 보시기 바랍니다. 억지로 외울 필요 없습니다.

자주 반복해서 나타나기 때문에 나중에 가면 저절로 외워진답니다.


이렇게 하나씩 장애물을 넘어가다보면 자연스럽게 '리버서'가 되는 것입니다.


그리고 어려울땐 질문을 해보세요~

같이 고민하다보면 꼭 해결할 수 있을겁니다~



모두 화이팅 하세요~~~

여러분의 꿈이 다 이루어지길 기원합니다~ ^^



반응형
반응형


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



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


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

대학 시절부터 컴퓨터 프로그래밍에 매력을 느껴 공부를 했던 계기로 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


반응형
반응형
(2021.07.08) github.com 에도 제 계정을 생성하여 소스코드 및 실습예제를 올렸습니다.
github 에 익숙하신 분들께서는 이곳을 이용하시면 됩니다.

https://github.com/reversecore/book

 

1. 소스 코드 (ver 1.0.2)

 

소스코드.zip
0.25MB

* 암호 : reversecore

< 릴리즈 히스토리 >

ver 1.0.2 - "44장 InjDll.exe - DLL 인젝션 전용 도구" InjDll.cpp 오류 수정 (20121110)

ver 1.0.1 - "33장 스텔스 프로세스" 프로젝트 소스 보기 오류 수정 (20121008)

ver 1.0.0 - 첫 릴리즈 (20120928) 

 

< 참고 >

 

* 모든 소스 코드는 MS Visual C++ Express 2010 으로 개발되었습니다.

* 소스 코드를 이용하여 빌드한 결과 파일은 사용자 환경에 따라 약간씩 달라질 수 있습니다.

* 책의 설명과 동일하게 디버깅 하기 위해서는 첨부한 예제 파일을 사용하시기 바랍니다. 

 

2. 실습 예제 파일 (ver 1.0.1)

 

* 2중 압축 되어 있습니다. (압축 풀면 실습예제.zip 이 생성됩니다. 이를 다시 압축 해제 해주세요.)

* 암호 : reversecore

 

< 릴리즈 히스토리 >

 

ver 1.0.1 - "1장 리버싱 스토리" 예제 변경 (20130401)

ver 1.0.0 - 첫 릴리즈 (20120928)

< 참고 >

* "실습예제.zip" 파일은 Anti-Virus 제품의 실시간 검사를 피하기 위하여 2중 압축 되어 있습니다.

* "5부 - 64비트 & Windows Kernel 6" 의 실습 예제 파일을 실습 하기 위해서는 Windows XP/Vista/7 64bit 환경이 필요합니다.

* 5부를 제외한 나머지 모든 실습 예제 파일은 MS Windows XP SP3 32bit & Windows 7 32bit 에서 테스트 되었습니다.

* 만약 64bit 환경에서 실습을 진행하기 위해서는 다음 포스팅에 나타난 방법을 참고하시기 바랍니다.

 

    64bit 환경에서 OllyDbg 사용할 수 있는 방법

* 중요!!!

일부 Anti-Virus 제품에서 실습 예제 파일의 일부가 악성 파일로 진단될 수 있습니다.

그 이유는 예제에서 사용된 기법들이 기존의 악성 파일에서 사용된 기법과 동일하기 때문에 AV 휴리스틱 엔진에서 그 부분을 탐지하여 악성 파일로 잘 못 진단할 수 있기 때문입니다.

 

전혀 악성 파일이 아니므로 아래 설명을 잘 읽어 보시고 실습해 보시기 바랍니다.

 

1) UPack 패커와 UPack 으로 패킹된 실습 예제가 진단될 수 있습니다.

이는 패커 자체가 PE 헤더를 심하게 훼손시켜서 Black 리스트에 포함되었고, 또한 몇 년전에 많은 악성 코드들이 UPack 으로 실행압축 되었기 때문에 이젠 대부분의 AV 에서 UPack 자체만으로도 악성 파일로 진단해 버립니다.

그렇다고 UPack 자체와 이걸로 패킹된 실습 예제가 악성 파일은 아닙니다. 

다만 리버싱 기술 설명을 위해 AV 업계의 권고사항을 따르지 않은것 뿐입니다.

PE 파일 설명에 UPack 만큼 좋은 예제가 드물기 때문에 이런 불편함에도 예제로 사용하였습니다.

 

2) '고급 리버싱', '안티 디버깅' 예제 일부가 악성 파일로 진단될 수 있습니다.

이 예제 파일 역시 악성 파일에서 사용되는 것과 동일한 기법을 사용했기 때문에 AV 휴리스틱 엔진에서 그 부분을 탐지한 것입니다.

실습 파일 자체는 아무런 악성 행위를 하지 않는 정상 파일입니다.

3) 시간이 지난 후에 멀쩡한 예제 파일들이 악성으로 진단될 수 있습니다.
예제 파일이 퍼져서 AV 업체에 접수되어 자동 분류 시스템에 의해 만에 하나 '악성'으로 분류될 수도 있습니다.악성 파일에서 안티 디버깅에 사용되는 SEH, TLS Callback 기법을 구현하였기 때문입니다.이 기법 자체만으로는 아무런 악성 증상이 없습니다. 다만 AV 엔진의 휴리스틱 진단에서 이 부분을 탐지 할 가능성이 있다는 것이죠.

4) 그렇다면 진짜 악성 파일이란 어떤 것일까요?

사용자 몰래 시스템에 숨어 들어서, 자동으로 실행 되며, 개인 정보를 무단으로 수집하고, 수집한 정보를 외부로 유출하는 등의 악의적인 행위를 하는 파일들입니다. 

즉, 악성 파일이란 사용자에게 크던 작던 피해를 입히는 파일들을 말하는 것이죠.

실습 예제 파일들은 특정 리버싱 기법을 위해 만들어진 단순한 파일들 입니다. 악성 증상은 전혀 없습니다. ^^~

 

5) 실습 환경 PC 에서는 잠시 AV 제품의 "실시간 감시" 기능을 꺼두시기 바랍니다.

물론 실습을 마치셨다면 실시간 감시를 다시 켜주시는 것이 좋습니다.

 

6) Windows 7 에서 실습을 하시는 경우 UAC(User Access Control) 기능을 끄고 하시면 편리합니다.

 

 

혹시 다운로드가 잘 안되거나 AV 진단 관련하여 궁금하신 점은 이곳에 질문해 주세요~

 

감사합니다.

 

반응형
반응형




제 책을 담당해 주시는 '전설의 에디터'님께서 보내주신 조판용 원고입니다. 

실제 책을 펼친 모양과 거의 같다고 보시면 될꺼에요~ 


이 엄청난 분량을 작업하시느라 고생하셨을 에디터님께 감사의 마음을 전합니다. ^^


제가 좋아하는 [연금술사] 책을 올려보았습니다. 

대략 분량이 가늠되시나요? 

1차로 180 페이지 정도를 끝낸 나머지 모든 분량입니다.


열심히 저자 검토중이고요. 

주로 제목, 레이아웃, 그림, 내용, 오탈자 위주로 보고 있습니다.


이제 출판 작업도 반환점을 돌아 결승선이 희미하게 보이기 시작합니다. 막 두근거려요~ ^^


반응형
반응형


리버싱 기술을 이용하면 기존 어플리케이션의 버그를 수정하거나, 새로운 기능을 추가시킬 수 있습니다. 간단한 실습 예제를 통하여 동작원리를 소개하도록 하겠습니다.





리버싱 기술의 활용



리버싱 기술이 꼭 다른 프로그램을 분석하는 용도로만 사용되는 것은 아닙니다. 약간의 아이디어와 끈기만 있다면 여기서 조금 더 나아가 개발자들이 시도하지 않는 방법으로 작업을 진행할 수 있답니다. '개발 관점' 에서는 어렵게 보이는 문제이지만 오히려 '리버싱 관점' 에서는 쉽게 해결할 수 있는 경우도 있습니다.


* 참고


어플리케이션에 추가 기능을 삽입하는 것은 마치 "API Hooking - 계산기, 한글을 배우다. (1)" 와 비슷한 맥락의 작업 이라고 볼 수 있습니다.


자신이 개발하지 않은 (소스 코드를 가지고 있지 않은) 다른 어플리케이션의 버그 수정이나 전혀 새로운 기능 추가 같은 작업이 바로 그 좋은 예입니다. 이러한 작업의 핵심기술은 "Debugging""Injection" 그리고 "Hooking" 입니다. 또한 어셈블리 언어, PE File Format 등의 지식도 매우 중요합니다.


1) Debugging 


디버깅 기술은 매우 다양하게 사용됩니다. 먼저 작업 설계 단계에서 문제를 파악하고 해결 아이디어를 검증하고 구체화 시키는데 필수적으로 사용됩니다. 구현 단계에서 단위 모듈을 검증하는데에도 사용되고, 마지막 테스트와 버그 파악에 빠져서는 안되는 가장 중요한 기술입니다.


2) Injection


다른 프로세스를 수정하려면 일단 그 프로세스 메모리 영역으로 침투해야 합니다. 이게 바로 인젝션 기술의 역할입니다. 일단 프로세스 메모리에 침투하기만 하면 절반은 성공이라고 볼 수 있습니다.


3) Hooking


기존 코드와 다르게 동작시키려면 후킹 기술을 사용하면 됩니다. 기존에 있던 코드의 흐름을 변경시켜 사용하지 못하게 할 수 도 있고, 새로운 코드를 추가하여 전혀 다르게 동작시킬 수 도 있습니다. 


이제 간단한 실습 예제를 분석하면서 "기존 응용프로그램에 새로운 기능을 추가시키는 방법" 에 대해서 알아보도록 하겠습니다. 제가 아이디어를 내고 구체화 시키고 검증하는 과정, 그리고 실제로 구현하면서 부딪쳤던 문제들과 해결 과정에 대해 자세히 보여드릴 겁니다. 향후 여러분께서 리버싱 기술을 실무에 적용하실 때 작은 도움이 될 것입니다.




실습 프로그램 - HxD.exe 




<그림 1 - HxD.exe>


위 그림은 제가 평소 애용하는 헥스 에디터 HxD.exe 의 실행 화면입니다. dummy32.dll 라는 이름의 PE 파일을 열고 있네요. 


문득 "화면 좌측 하단의 Offset 표시 영역에 RVA 를 계산해서 같이 표시해 주면 어떨까?" 라는 아이디어가 떠올랐습니다. 아이디어의 유용성 여부를 떠나서 일단 재미있어 보였고, 어플리케이션 기능 추가라는 주제에 잘 맞을거 같다는 생각이 들었습니다.


여러차례 시도 끝에 결국 아래와 같이 성공할 수 있었습니다.



<그림 2 - PE 파일의 RVA 표시 기능이 추가된 HxD.exe>


먼저 Offset 과 RVA 를 동시에 표시하기 위해 status bar 의 좌측 하단 영역의 길이를 조금 늘렸습니다. 그리고 글씨를 출력하는 API 를 후킹하기 위한 hxdhook.dll 을 인젝션 시켰습니다. 또한 Offset <-> RVA 변환 계산 모듈 PEInfo.dll 을 로딩하여 계산을 수행하도록 만들었습니다. 이제 HxD.exe 에서 PE 파일을 열고 커서 위치가 변할 때마다 해당 파일 Offset 과 RVA 가 자동으로 표시됩니다.


다음 포스트에서 구체적인 작업 내용과 동작 원리에 대해 알아보도록 하겠습니다.



* 참고


위 실습 예제 파일은 "HxD.exe 기능 추가" 페이지에서 다운 받으실 수 있습니다.




ReverseCore


반응형

+ Recent posts