반응형




안녕들 하시죠 !


오늘은 HelloWolrd.exe 파일을 가지고 리버싱 첫번째 공부를 시작해 보려 합니다.

 

우선 아래 보이는 이미지처럼 Hello World !MessageBox로 출력되는 코드를 하나 작성해주세요.


코드는 아래에 있는 텍스트 파일을 받으시면됩니다.


HelloWorld !.txt





코드를 작성하신 후에 위에있는 이미지의 노란부분을 Release로 바꾸신 후에 빌드를 해주시면 HelloWorld.exe 가 생성됩니다.

( Release 모드로 빌드하면 코드가 더 간결해져서 디버깅하기에 편하다고합니다 ! )

 

HelloWorld.exe가 어디에 있는지 잘 모르시겠다면 윈도우의 검색기능을 통해서 찾아보세요

( 혹은 제 블로그 꿀팁 카테고리에 있는 Search Everything 설치를 봐주세요 ! )

 

, 이제 드디어 Ollydbg로 가봅니다.

Ollydbg를 실행시킨후에, File -> Open 하신 후에 HelloWorld.exe 파일의 경로로 들어가 열어줍니다


그럼 아래와 같은 화면이 나오게 됩니다.




1.     16진수 메모리 주소 창


2.     기계어를 보여주는 창 ( IA32 CPU명령어 )


3.     어셈블리어( OP code를 어셈블리로 변환한 코드 ) ( 왼쪽 ), 주석( 오른쪽 )


4.     레지스터


5.     덤프


6.     스택

 


아래에는 알아둬야할 Ollydbg 기본 명령어





, 그럼 이제 main문을 찾는 것을 목표로 삼고 진행해 보겠습니다.


이제 여기서 실행( F9 )를 누르게 되면 다음과 같은 화면이 나옵니다.




맨위에 2줄을 보면 이런식으로 나타나게됩니다. 이 내용을 해석해보자면


“2F284C 주소의 함수를 CALL한 후 2F104F 주소로 점프(JMP) 해라 라는 뜻입니다.

 

혹시, 주소가 아래와같이 나오신다면 명령어부분(CALL HelloWor.__security_init_cookie) 이부분을 더블클릭 하시면 아래 이미지처럼 주소가 

나옵니다.




, 그럼 F7을 눌러 이 코드안으로 들어가봅시다.




뭔가 알수없는 코드들이 나왔습니다.

여기에서 가장 오른쪽에 빨간글씨가 있는 부분 보이시죠? 이부분이 주석(comment) 부분 입니다.


이 빨간색 글씨로 된 부분은 코드에서 호출되는 API 함수 이름이라고 합니다.

이름만 살펴보게되면 원본 코드에서 사용된적 없는 API들이 호출되고있습니다.

책에 있는 설명을 보면 지금 우리가 들어와있는 이 공간은 Visual C++ 에서 프로그램 실행을 위해 추가시킨 Stub Code 라고 합니다.

 

Stub Code ?


사용자가 추가한 코드가 아닌 컴파일러가 프로그램을 만들때 추가한 코드라고 합니다.

실행 정보를 가져오고 프로그램을 실행하는데 필요한 정보를 얻어오는 코드라고 합니다.

그러니, 우리는 Stub Code를 구분하여 넘기고 Main 함수를 찾는 연습을 해봐야할 것 같습니다.

 

.

스크롤을 아래로 조금만 내려보면 RETN 명령어가 보입니다.



RETN 명령어는 우리가 알던것처럼 함수의 끝에서 사용되며 이 함수를 실행하게되면 다시 원래의 주소쪽으로 되돌아갑니다.

아마 이 Stub Code가 있는 공간을 탈출하는 것 같습니다.

 

, 그럼 RETN 명령어 위치까지 Ctrl + 9로 한방에 가보겠습니다

그리고 F8을 눌러 RETN을 실행하겠습니다.




그럼 처음에 봤던 2F11A6주소로 돌아오게되었습니다.

이제, F8을 눌러 JMP 2F104F 명령을 실행해 보겠습니다.




JMP 2F104F 명령을 실행하고나니 2F104F 주소로 이동하게되었습니다. 이또한 Stub Code라고합니다.

 

그럼 이제부터는 조금 무식한 방법으로 함수호출 명령어를 하나하나 따라가 보며 찾고있는 Main문을 향해 가보는 연습을 해보겠습니다.

 

F7로 들어가서 Stub Code들을 만나면 Ctrl + 9를 눌러 빠져나오고 또 F8삽질에 삽질을 반복 또 반복 하다보니 아래 이미지의 코드를 지나고 나면 MessageBox가 실행이 되는걸 파악했습니다.





F7로 들어가보게되면




찾은 것 같습니다 !

 

2F1000 이라는 주소에 MessageBoxW() API 호출 코드가 있고 PUSH를 통해 MessageBox에 표시될 문자열들을 스택에 저장하는 부분을 보니 맞네요.

 

역시 쉽지가 않네요ㅠㅠ

하지만 직접 해보는 내내 너무 흥미롭고 재밌다는 생각이 들었습니다.

 

다음 글에서는 베이스캠프를 설치하고, 원하는 코드를 빨리 찾아내는 방법을 사용하여 더 능숙하게 다루는 연습을 해보겠습니다.


오늘은 여기까지입니다 감사합니다 !



참고서적 이승원 「리버싱 핵심원리」 인사이트(2018) p13~23

반응형




안녕들 하시죠 !

 

우선 이번 포스팅에서는 리버싱 툴 설치법부터 다뤄보겠습니다.


리버싱 툴의 종류에는 디버깅툴, 정적툴, 동적툴등등 엄청나게 많은 종류가 있더군요.

저는 Ollydbg 를 설치하여 진행했습니다.

 

우선 Ollydbg 홈으로 들어가셔서 http://www.ollydbg.de/

아래 이미지에서 화살표로 가리키고있는 Odbg110.zip 을 클릭하시면 됩니다.




누르시게 되면 바로 알집이 다운로드 되구요, 다운로드 완료된 후에 알집을 풀어주세요.

 

 

그 다음, 아래 이미지처럼 UDD 폴더Plugin 폴더를 만들어줍니다.


Plugin : 추가기능, 각종 플러그인들이 담기는 폴더

UDD : 백업파일, break point 등등 의 정보가 담기는 폴더



, 이제 OLLYDBG.EXE를 실행시켜 주세요.



처음엔 이렇게 에러가 뜨는데 그냥 확인 누르고 넘어가시면 됩니다.

 

이제 설정을 바꿔볼껀데요.

 

OllyDbg 맨위의 탭중에서 ‘Options’ 클릭 -> Appearance -> Directories 로 들어가셔서 아래의 이미지와 같이 UDD path : , Plugin path : 를 

수정해주시면 됩니다.




이번에는 파일을 열었을 때 Entry Point 부터 시작하게 해주는 설정을 바꿔보겠습니다.

 

위와 동일하게 Options 클릭 -> Debugging options -> Events -> Entry point of main module 선택 -> OK



이제 마지막 설정입니다 !

Jmp문 같은경우 조금 더 보기 좋게 설정이 된다고 하네요.

아까 설치하신 폴더의 ollydbg.ini 파일을 메모장으로 여시구요.



Ctrl + F(검색) 키를 눌러 Show jump 라고 검색하신 후에,




노랑색으로 표시되어 있는 부분의 숫자를 전부다 1로 바꿔줍니다.

그 다음 저장을 위해 ctrl + s (저장) 눌러주시고 나오시면 끝나게 됩니다.



이제 모든 설정이 끝났습니다앞으로 같이 리버싱을 정복해 봅시다.

 

오늘은 여기까지입니다 감사합니다 !


반응형




안녕들 하시죠 !

 

정보보호 공부를 하면서 리버싱이라는 단어는 자주 들어왔는데요.

리버싱?  분석할 때 쓰는거? 그거 디버깅 아니야?  라는 생각만 하고 살았는데 직접 책을 펴고 공부해보니 어렵지만 흥미로운 분야인 것 같습니다.


너무도 유명한 책 리버싱 핵심원리일명 나뭇잎 책이라고도 불리는데 이 책을 가지고 하나하나 따라해보고 있습니다.

 

 

리버싱 공부에 들어가기에 앞서 리버싱이 도대체 뭘 뜻하는지에 대해서 알아보고 들어가려고합니다.

 


버스 엔지니어링[reverse engineering]

완성된 제품을 분석하여 제품의 기본적인 설계 개념과 적용 기술을 파악하고 재현하는 것.

실행파일을 수정하거나 프로그램의 동작을 변경할 수 있고, 또 유사한 동작의 복제 프로그램이나 보다 기능이 향상된 프로그램도 개발할 수 있다.

 


 

리버싱 분석 방법에는 크게 2가지가 있습니다.

 

첫째, 정적분석 


파일을 실행시키지 않고 겉모습을 관찰.

파일의 종류, 크기, 헤더, 등록정보 등의 다양한 내용 확인.

내부 코드와 그 구조를 확인.

위의 내용을 가지고 동적분석에 활용.


둘째동적분석


파일을 직접 실행해 파일, 레지스트리, 네트워크 등을 관찰하여 프로그램의 행위를 분석한다.



 

2진수 (Binary) -> 16진수 (Hex) -> 어셈블리(Assembly)



일반적으로 우리가 작성한 소스코드를 빌드하게되면 .exe 실행파일이 생성되게됩니다.

이러한 .exe 실행파일2진수(Binary)로 되어있습니다.







2진수라하면 01로 되어있는데 사람이 보고 분석하기에는 너무 어려워 2진수에서 16진수(Hex)로 변환을 시켜줍니다.

 



이렇게 변환시킨 Hex Code(16진수) 또한 사람이 보기에 직관적이지 못하니 좀더 쉽게 파악하기위해

Hex Code(16진수) Disassemble과정을 거쳐 어셈블리(Assembly)코드 형태로 변환시켜줍니다.




우리는 앞으로 이 어셈블리 코드를 가지고 분석을 하게 될 것 입니다.

 

분석을 위해서는 Ollydbg라는 디버거가 필요한데요.

다음시간에는 Ollydbg의 설치와 설정과정에 대해 알아보겠습니다. 


오늘은 여기까지입니다 감사합니다 !




참고서적 이승원 「리버싱 핵심원리」 인사이트(2018) p3~11

+ Recent posts