리버싱이란 무엇일까요?

예를 들어서 저희가 스마트폰을 만든다고 가정을 한다면, 설계도를 그려서 재료를 구하고 공장에서 만든 다음,

제품으로 출시를 할 것입니다. 이것을 반대로 한다고 생각하면 되는데, 이해하기 쉽게 구조를 한번 도식화 해보겠습니다.

 

우리가 알고 있는 공학이 정방향이라면 리버싱은 역방향이라고 보시면 됩니다.

1. 앞의 예시처럼 스마트폰을 하나 만든다고 가정했을때, 스마트폰을 만들 설계도가 있어야 할것입니다. 

2. 설계도에서 제시한 스마트폰을 만들수 있는 재료들이 필요할 것입니다. 

3. 재료를 얻었다면 재료들을 이용해서 설계도에 조건에 맞게 스마트폰을 제작을 할 것입니다. 

4. 마지막으로 스마트폰 제조가 완료가 된다면 제품화를 시켜서 시장에 출시를 하게 될것입니다.

--> 여기까지가 우리가 알고 있는 공학 : 엔지니어링 이라는 예시 입니다. 

 

--> 그렇다면 지금부터는 역공학 : 리버스 엔지니어링에 대한 관점에서 한번 이야기 해보도록 하겠습니다.

1. 스마트폰 제품을 확인하고 제품의 조립상태나 디자인, 부품 및 제조사 등의  재료들을 파악해야 할 것입니다.

2. 그 내용을 바탕으로 어떠한 방식으로 만들어졌는지, 어디서 만들어졌는지, 제작과정을 연구를 할 것입니다.

3. 제작과정을 완전히 알아낸다면 똑같은 설계도를 구현할 수 있을 것입니다.

--> 이러한 리버스 엔지니어링(리버싱)을 전문적으로 하는 사람들을 통틀어서 리버서 라고 합니다.

 

소프트웨어 개발자(Software Developer)리버서(Reverser)는 서로 반대되는 입장이라고 생각하면 됩니다.

 

분석방법 

리버스엔지니어링에도 분석방법이 여러가지가 있는데 크게 2가지로 정적분석과 동적분석이 있습니다.

1. 정적분석은 프로그램이나 파일을 실행하지 않은 상태에서 분석하는 방법을 의미합니다.

--> 간단하게 말해서 파일이나 프로그램의 겉모습만 보고 분석을 하는 방법입니다.

 

2. 동적분석은 프로그램이나 파일을 실행한 상태에서 동작들을 분석하는 방법을 의미합니다.

--> 동적분석은 파일이나 프로그램의 깊숙한 곳에 들어가서 동작원리를 관찰하고 분석하는 방법입니다.

 

그렇다면 왜 사용하는 것일까? (동적분석  vs 정적분석) 

분명히 사용하는데에는 이유가 있겠죠? 하나씩 설명해드리겠습니다.

먼저 정적분석의 경우 프로그램을 직접 실행하지 않은 상태에서 분석을 하기 때문에

자세하고 세부적이거나 내부적인 것들을 분석하는데 분명히 한계가 존재합니다.

하지만, 만약에 내가 분석해야할 프로그램이 악성코드나 랜섬웨어 같이 악성 프로그램이라면??

(동적분석 보다는 정적분석이 안전할 것입니다.)

 

자, 그럼 동적분석이 사용되는데에는 어떠한 것들이 있을까요?

동적분석은 프로그램을 실행한 뒤 실행한 상태에서 분석을 하기 때문에 정적분석 보다 해당 프로그램이나 파일에 대해

깊이 파고들어서 내부에서만 실행되는 동작이나 특수한 기능을 하는 동작들을 정적분석 보다 쉽게 파악할 수 있고, 

조금더 정확하게 분석이 가능합니다. 위의 예시처럼 악성코드나 랜섬웨어 같이 악성프로그램은 정적분석이 안전하겠지만,

게임이나 메신저 프로그램 같은 것들을 분석할때는 정적분석보다 동적분석이 정확하게 분석이 가능할 것입니다. 

(정확한 분석이 필요할때 사용을 한다고 생각하면 좋을 것 같습니다.)

 

정적분석과 동적분석이 사용되는 이유와 사용되는 방식을 한번 알아보았습니다.

지금부터는 리버서들이 많이 사용하는 리버싱 도구들을 몇가지 소개해 드리도록 하겠습니다. 

 

1. Ollydbg

정적분석과 동적분석이 모두 가능한 도구라서 리버싱에 기본적으로 사용됩니다.

무료이고 입문할때 많이 사용되는 도구입니다. 하지만 32bit에 국한되는 단점도 존재합니다. 

따라서 리버싱을 입문하는 용도로 많이 사용되고 있습니다.

https://www.ollydbg.de/

 

OllyDbg v1.10

 

www.ollydbg.de

 

2. x64dbg / x32dbg

Ollydbg와 매우 유사한 도구이지만 개인적인 생각으로는 Ollydbg의 단점들을 잘 보완해놓은 도구입니다.

무료이고 Ollydbg 같은경우는 영어로 되어있지만 x64dbg / x32dbg 같은 경우, 한국어로도 사용이 가능합니다.

그리고 Ollydbg는 32bit에서만 사용이 가능하지만 x64dbg는 64bit에서도 사용이 가능합니다. 

 https://sourceforge.net/projects/x64dbg/

 

x64dbg

Download x64dbg for free. An open-source x64/x32 debugger for windows. An open-source x64/x32 debugger for windows. Development is done on GitHub (https://github.com/x64dbg/x64dbg).

sourceforge.net

 

3. IDA pro

강력한 기능을 가지고 있는 도구이지만,  유료라는 단점이 있습니다. 

하지만 다른도구들과는 달리 유용한 기능이 정말 많기 때문에 유료이지만 리버서들이 애용하는 도구들 중 하나 입니다.

https://hex-rays.com/ida-pro/

 

Hex Rays - State-of-the-art binary code analysis solutions

Substantial changes Is to be expected in every release: new features, supported processors, etc which are all added after deliberation and discussion.

hex-rays.com

 

4. Ghidra

미국의 국가안보국 (NSA)에서 만든 리버싱 도구 입니다. (IDA의 대체제로 많이 사용되는 것 같습니다.)

위의 IDA pro에 비해 부족한 기능들도 있기는 하지만 무료인점을 감안하면 괜찮은 도구라고 생각합니다.

기존의 IDApro에 적응을 하신 분들이라면 처음에는 불편할 수 있을 것 같습니다.

https://github.com/NationalSecurityAgency/ghidra

 

GitHub - NationalSecurityAgency/ghidra: Ghidra is a software reverse engineering (SRE) framework

Ghidra is a software reverse engineering (SRE) framework - GitHub - NationalSecurityAgency/ghidra: Ghidra is a software reverse engineering (SRE) framework

github.com

 

5. GDB

유닉스기반 운영체제에서 사용되는 도구입니다. 

리눅스에 익숙하신분들은 사용해보셔도 좋을 것 같습니다. 

(GDB 같은경우 거의 리눅스에서 사용을 하고 있어서 자세한 부분은 Pwnable쪽에 업로드 했으니 확인하시면 됩니다.)

sudo apt-get install gdb

+ Recent posts