본문 바로가기

전체 글

- OllyDbg , IDA , GDB를 이용한 간단한 실행 파일 디버깅 # 이번 포스팅에서는 디버깅시에 자주 쓰이는 OllyDbg, IDA Pro, GDB를 이용하여 Window 및 Linux 환경에서 간단한 실행 파일 디버깅해보겠습니다. 리버싱 공부를 시작한지 얼마안되서 틀린 내용이나 부족한 부분이 많을 수 있으니, 그러한 점은 양해부탁드립니다. (틀린 내용이 있을 시 지적해주시면 정말 감사하겠습니다 ^^) 우선 Visual Studio를 이용하여 C 언어로 "Hello World!" 라는 문구를 출력하는 프로그램을 작성했습니다. [ 그림 1 ] "Hello World!" 문구를 출력하는 콘솔 프로그램 작성 1. 첫 번째로 OllyDbg를 이용하여 디버깅해보도록 하겠습니다. [ 그림 2 ] OllyDbg를 이용하여 "Hello World.exe" 파일 불러오기- OllyD.. 더보기
- 함수 호출 규약 (Calling Convention) 더보기
- 아주 간단한 Crack me 샘플 분석 (abex' crackme#2) # 아주 간단한 Crack me 샘플 분석 (abex' crackme#2) 1. 우선 해당 크랙미 파일이 어떤 동작을 하는지 실행시켜 본다.2. 파일을 실행시켜 실마리를 찾고, 디버깅을 할 때 참고한다.3. 크랙미 파일에서 요구하는 부분을 만족 시키기 위한 패치를 하거나 혹은 디버깅을 통하여 필요한 정보를 확인한다. [ 그림 1 ] abex' crackme#2 파일 실행- 파일을 실행시켰더니, Name 그리고 Serial 이란 입력란이 있고, 3가지 버튼이 존재했다. - 이번 크랙미 문제는 시리얼 번호를 알아내야하는 문제인것으로 예상된다. - 임의의 입력값들을 주고 Check 버튼을 눌러보도록 하자. [ 그림 2 ] 임의의 입력값을 주고 Check 버튼을 눌러본 경우- Name의 값은 적어도 4글자 이상.. 더보기
- 아주 간단한 Crack me 샘플 분석 (abex' crackme#1) # abex' crackme #1 분석 1. 우선 abex' crackme #1 파일이 어떤 동작을 하는지 확인하기 위해 실행 시켜본다.2. Crack me 파일에서 수정해야 할 부분들을 패치해준다. (조건에 맞도록) [ 그림 1 ] abex' crackme 파일을 실행 시킨 화면 (왼쪽에서 오른쪽으로 순차) - 파일을 실행 시키니까 "Make me think your HD is a CD-Rom"이란 문자열을 포함한 메시지 박스가 뜨고, 확인 버튼을 누르자, "Nah... This is not a CD-ROM Drive!" 라는 문자열을 포함한 에러 메시지 박스가 떳다. - 이 크랙미 문제는 현재 인식하고 있는 하드 디스크를 CD-ROM 드라이브로 인식하게끔 만들어 달라는 문제로 파악이 된다. - 이제 .. 더보기
- PE File Format # PE File Format - PE(Portable Executable) 파일의 의미를 영단어대로 해석해보면 [Portable=이식가능한, Executable=실행가능한] 대략 이식이 가능한 실행 파일 정도로 해석이 가능합니다. 처음 PE 파일이 만들어질 때는 다른 운영체제에 이식성을 좋게 하려했으나 의도대로 되지 않고, 실제로는 Windows 계열의 운영체제에서만 사용되고 있다고 합니다. 다시 말해, PE File Format은 Windows 운영체제에서만 사용되는 실행 파일의 형식입니다. 이 PE File Format은 기존 UNIX에서 사용되는 COFF(Common Object File Format)를 기반으로 Microsoft 사에서 만들었습니다. PE 파일은 32비트 형태의 실행 파일을 의미.. 더보기
- 간단한 실행 파일 디버깅하기 (문자열패치) # C++로 작성한 간단한 프로그램 디버깅 하기 ① HelloWorld.exe 파일을 디버깅하여, 메시지 박스에 뜨는 문자열을 패치하는 실습. [ 그림 1 ] 메시지 박스를 띄우는 간단한 C++ 코드- C++을 이용하여 간단한 프로그램을 하나 생성한다. [ 그림 2 ] OllyDbg를 이용하여 HelloWorld.exe 파일을 불러온 모습- 문자열을 패치하기 위해서는 문자열이 존재하는 메인 함수를 우선적으로 찾아야한다.- 메인 함수를 좀 더 쉽게 찾기 위해서 메인 함수에서 사용되었던 MessageBox API라던가, 문자열을 참조하면 쉽게 메인 함수를 찾아갈 수 있다. [ 그림 3 ] 문자열 검색 방법으로 메인함수를 찾은 경우- 문자열 검색 방법을 이용하여 C++에서 작성된 문자열을 확인하여 메인 함수를.. 더보기
- OllyDbg 사용법 및 단축키 # OllyDbg 기본적인 사용법 - OllyDbg란 일반적으로 소스코드가 없는 실행 파일을 분석할 때, 디버깅(Debugging)하여 사람이 이해할 수 있는 어셈블리 언어로 변환해주는 디버거 툴이다.- OllyDbg는 무료로 제공되며 가볍고 빨라서 많은 리버서들이 사용하는 디버거 중 하나이다. [ 그림 1 ] OllyDbg 첫 화면 - Code Window : 기본적으로 disassembly code를 표시해주는 창이다.- Register Window : CPU register 값을 실시간으로 표시하며 특정 register들은 이 창에서 수정도 가능하다.- Dump Window : 프로세스에서 원하는 memory 주소 위치를 Hex와 ASCII/유니코드 값으로 표시하고 수정도 가능하다.- Stack W.. 더보기
- 리버싱 기초 # 리버스 코드 엔지니어링 (Reverse Code Enginerring) - 말 그대로 완성된 소프트웨어의 코드를 역으로 분석하는 것이다.- RCE, RE, 리버싱이라고 불리기도 한다.- 소프트웨어를 역공학하는 것, 즉 분석 혹은 상세 분석하는 것이다. ( 이미지 출처 : http://chrispinionlive.com/?p=2276 ) # 리버싱(분석) 방법 - 실행 파일의 분석방법에는 크게 2가지 방법이 있다. ( 정적 분석, 동적 분석 ) 1. 정적 분석 - 파일의 겉 모습을 관찰하여 분석하는 방법이다. - 정적 분석 단계에서는 파일을 실행하지 않는다. - 파일의 종류(EXE, DLL, DOC, ZIP등), 크기, 헤더(PE) 정보, Import/Export API, 내부 문자열, 실행 압축 여부.. 더보기