.EXE 파일의 분석(Assembly)
Reversing Engineering

.EXE 파일의 분석(Assembly)

연구소 인턴 2023. 8. 8.
300x250
반응형

<이론>

역(逆)공학
리버스 엔지니어링(Reverse Engineering)은 설정된 소프트웨어나 설치된 하드웨어를 역(逆)으로 접근해서 그 원리를 이해한 다음, 복제하거나 성능 개선을 위해서 시스템적으로 혹은 구조적으로 분석하는 공학이다. 완제품을 가지고 역으로 그 설계도를 얻는 것에 종종 비유된다. 리버스 엔지니어링 기법은 우리의 일상생활과 회사의 제품 개발 등에서 좋은 쪽이든 나쁜 쪽이든 많이 적용되어 사용되고 있다. 하드웨어인 경우 신제품을 위해서 자동차나 TV, 컴퓨터 등을 분해해서 크기, 재질 등을 점검해볼 수도 있고 소프트웨어인 경우 해당 프로그램이 실행되는 메모리나 CPU의 상태를 분석할 수도 있다.

조직에서 많은 시간과 개발비를 들여서 멋진 소프트웨어 프로그램을 개발했다면 프로그래밍적 성능만 점검하지말고 구조적 취약점이 있는지 점검해보는 BlueHat을 시도해 보아야 한다. BlueHat은 조직에서 자사 제품의 취약점을 점검하는 해킹인데 대부분 이 역공학을 사용한다. Black hat(hacker), Gray hat(pen tester), White hat(pen tester), Blue hat(tester) 등의 용어가 있다.


Debugging 도구
프로그래밍에서 디버깅을 하는 이유는 프로그램 실행의 논리적 검토를 위한 과정이지만, 해킹에서는 이런 프로그래밍 로직을 이용해서 해당 프로그램에서 요구하는 패스워드 검증을 우회하거나 시리얼 키 등 감춰진 문자열을 찾아낼 때 사용하기도 한다. 
디버깅 도구로 OllyDbg와 IDA 디버거를 많이 사용한다.

(저는 추가적으로 IDA Freeware 8.3를 사용하기도 합니다. OllyDbg에서 열리지 않는 프로그램이 종종 있어서...)

 

리버스 엔지니어링으로 얻을 수 있는 것은 프로그램의 실행 구조와 로직이다. 기존 프로그램의 실행구조를 변경해서 불필요한 부분은 제거하고 필요한 부분은 덧붙이거나, 파악한 로직을 통해서 해당 프로그램의 약점이 보이면 보완해주는 패치와 같은 프로그램을 짤 수도 있다. 이렇듯 프로그램의 실행구조와 로직의 변경을 통해서 할 수 있는 작업은 무궁하다. 
  해킹 분야에서 관심을 가져야 할 리버스 엔지니어링 부분은 작업 실행을 지시하는 함수 찾는 일이다. 이를 위해서 가장 일반적으로 먼저 시도해보는 것이 문자열 찾기인데 ASCII 문자, 입력값을 보이는 scanf()나 출력값을 보이는 printf(), 문자열을 비교하는 strcmp()와 같은 함수_명, 프로그램 안에 존재하는 파일_명, 그리고 출력문 등을 주로 찾는다


<실습>

실습 환경 : Windows 7 (VMware)

 

windows 7에서 OllyDbg를 다운을 받습니다.

http://www.ollydbg.de/odbg110.zip

압축을 풀어준 화면입니다.

OllyDbg를 실행할 때는 관리자 권한으로 실행하는 것을 권장합니다.

사용자 계정을 Adminitstrator로 변경합니다.

변경 방법은 아래 사이트를 참고하시면 됩니다.

∨∨∨∨∨∨∨∨∨∨∨∨∨∨∨∨∨∨∨∨∨∨∨∨∨∨∨∨∨∨∨∨∨∨∨∨∨∨∨∨∨∨∨∨∨∨∨∨∨∨∨∨∨∨∨∨∨∨∨∨∨∨∨∨∨∨∨∨∨∨∨∨∨∨∨∨∨∨

 

Windows에서 Administrator 계정 활성화 및 패스워드 변경

Windows를 사용하다 보면 관리자 권한으로 사용하는 것이 편할 때가 있는데요. 보통 컴퓨터를 처음 사시면 관리자는 잠겨있는 것을 알 수 있습니다. 그 잠겨 있는 Administrator를 활성화 하는 법을 알

area51.tistory.com

∧∧∧∧∧∧∧∧∧∧∧∧∧∧∧∧∧∧∧∧∧∧∧∧∧∧∧∧∧∧∧∧∧∧∧∧∧∧∧∧∧∧∧∧∧∧∧∧∧∧∧∧∧∧∧∧∧∧∧∧∧∧∧∧∧∧∧∧∧∧∧∧∧∧∧∧∧∧

 

 

이번에 분석할 파일은 Helloworld를 출력하는 exe파일입니다.

실습을 위해 파일이 필요하신 분들은 댓글에 이메일 남겨주시면 보내드리겠습니다.

OllyDbg를 사용하여 helloworld.exe파일을 열어줍니다.

단축키는 F3입니다.

열게된다면 Process still active라는 알림창이 나오게 되는데, 저는 bpk를 분석하던 것이 있어서 나오는 것입니다.

만약 나오시는 분들은 상관없으니 예(Y)를 누르시면 됩니다.

상단 좌측이 Memory address, 그 옆이 Assembly code, 그 옆이 comment,이고, 상단 우측창이 Register & Plag value, 좌측 상단과 하단 사이가 variable value가 있는 곳이며, 하단 좌측이 Hex dump이고, 하단 우측이 Stack memory 구조입니다.


Register는 CPU와 RAM의 연결 통로이다. CPU의 핀 하나하나가 레지스터로써 메모리의 각 주소와 연계되어져 있습니다.
  
메모리는 보통 Stack과 Heap으로 나뉩니다.

 

실행한 초기 화면은 아래와 같습니다.

F9(Run 코드블록의 breakpoint나 예외처리의 exception이 있을 때까지 디버깅을 실행시키는 단축키)를 누르면 

CALL hellowor.0040270C에서 멈추게 됩니다.

여기서 0040270C는 메모리에 올라간 주소입니다.

F8(Step over  Step into처럼 한 줄씩 디버깅을 실행하지만 Call(함수호출)이나 Rep(반복문)을 만나도 내부로 들어가지 않고 계속 실행하는 단축키)을 계속 누르고 있으면 아래와 같이 프로그램이 실행됩니다.

Ctrl + F2(Restart 처음부터 디버깅을 재실행시키는 단축키)를 누르면 다시 프로그램이 실행되는데, F9를 누르면 이전 화면과 같이 나오는데.

Search for - All referenced text strings를 누릅니다.

그러면 출력되었던 Hello world!가 UNICODE로 되어 있는 부분을 찾을 수 있습니다.

 

300x250
반응형

댓글