본문 바로가기

분류 전체보기

- 악성코드의 유형 * 백도어 (backdoor)- 공격자의 접근을 허용할 목적으로 컴퓨터에 자기 자신을 설치하는 악성코드다. 백도어는 공격자가 부분인증이나 무인증으로 컴퓨터에 접속해 로컬 시스템에서 명령어를 실행할 수 있게 된다. * 봇넷 (botnet)- 공격자가 시스템에 접속할 수 있다는 점에서 백도어와 유사하지만, 동일한 봇넷에 감염된 모든 컴퓨터가 하나의 명령 제어(C&C) 서버로부터 동일한 명령어를 수신한다. * 다운로더 (downloader)- 다른 악성 코드를 다운로드할 목적만으로 존재하는 악성 코드로, 흔히 시스템에 처음으로 접근 권한을 얻으면 공격자는 다운로더를 설치한다. 다운로더 프로그램은 추가 악성코드를 다운로드하고 설치한다. * 정보 유출 악성코드 (information-stealing malware.. 더보기
- Reversing.kr Challenge (2) Easy KeygenMe # Reversing.kr 100점짜리 문제인 Easy KeygenMe 문제 풀이입니다. 1. 우선 어떤 문제인지 살펴보도록 하겠습니다. - ReadMe.txt 파일이 주어지고, 내용은 보시는 것과 같습니다. Serial 값이 "5B134977135E7D13"이 되는 Name 명을 찾는 것입니다.- 임의의 Name 명을 주고, 주어진 Serial 값을 입력했더니 "Wrong" 이라는 문자를 출력하고 종료되었습니다. 2. 디버깅을 하기에 앞서 주어진 KeygenMe의 동작 흐름을 추측해보겠습니다.- 조금만 생각해보면, 이 키젠미 프로그램의 실행 흐름을 추측할 수 있습니다.- 정확하진 않지만, 다음과 같은 흐름으로 진행될것으로 추측됩니다. (1) 사용자에게 Name 값을 입력 받는다. (2) 사용자에게 입력.. 더보기
- Reversing.kr Challenge (1) Easy Crack # Reversing.kr 에 있는 워게임 문제 풀이입니다. Easy Crack 100점 짜리 문제이구요. 사람들이 가장 많이 푼 문제이기도 해요.ㅎ 앞으로 꾸준히 문제를 풀어보려구요. 그럼 Easy Crack 문제 풀이 시작할게요. 1. 문제 의도 파악- 처음 Easy Crack 파일을 실행시키면 아래와 같은 윈도우 창이 하나 뜹니다. - 윈도우 창이 하나뜨고 그 안에 아무 값이나 넣고 확인 버튼을 누르니, 패스워드가 틀렸다고 나오네요.- 이 문제는 패스워드를 찾는 문제인것같네요. 2. Ollydbg를 이용하여 디버깅- 키 값을 찾기 위해서, 사용자가 입력한 값과 비교하는 부분을 찾아봐야겠네요.- 우선, Search for - All referenced strings 기능을 이용해서 이 프로그램에서 사.. 더보기
- 실행 압축 # 이번에는 실행 압축이라는 내용입니다. # 실행 압축 - 실행 압축은 말 그대로 실행 파일을 압축하는 것을 의미합니다. 실행 파일 압축을 줄여 실행 압축이라고도 부릅니다. 시중에 수많은 실행 파일 압축 프로그램이 존재하며, 이러한 프로그램들은 MS-DOS 시절부터 존재했다고 합니다. 그리고 실행 압축으로 압축된 실행 파일은 일반 압축 파일과는 다르게 압축을 직접 풀어주지 않고, 압축이 된 상태로 실행이 가능합니다. [ 일반 압축과 실행 압축의 비교 - 출처 : 리버싱핵심원리 ] # 실행 압축 목적- 원래 실행 압축은 옛날 DOS OS를 주로 사용하던 시절에 부족한 보조기억장치(HDD,FDD) 공간을 조금이나마 더 확보하기 위한 목적으로 사용되었다고 합니다. 그러나 현재는 하드디스크 및 장치들이 많이 좋.. 더보기
- 데이터 압축 (비손실 압축, 손실 압축) # 이번 포스팅 내용은 데이터 압축에 대해서 알아보겠습니다. # 데이터 압축 - 말 그대로, 데이터를 압축하는거에요. 어떤 형태의 파일이라도 내부는 바이너리 0 혹은 1로 구성되어 있습니다. 이 내부의 바이너리를 적절한 알고리즘을 이용하여 크기를 줄이는 것이 데이터 압축입니다. 데이터 압축에도 2가지 종류가 있는데요. 1. 비손실 압축 (Lossless Data Compression) 2. 손실 압축 (Loss Data Compression) 요렇게 2가지가 있습니다. 첫번째 비손실 압축은 말 그대로 손실이 없다는 것을 의미합니다. 어떤 파일을 압축을 하고(인코딩), 그 파일을 다시복원 시켰을 때(디코딩), 압축전과 100% 일치하는 파일로 복원이 가능하다면 비손실 압축이라고 합니다.흔히들 사용하시는 압.. 더보기
- Codegate 2013 예선 - Misc 200 # 문제 : 82d3fdd1f294d8397f1966a3a2f207f0.7z 압축파일 제공 압축을 풀어보니, 2가지 파일이 존재 ( encoded.key , source.php ) [ 그림 1 ] source.php- source.php 파일의 소스코드인데, 문자열을 해당 코드의 알고리즘을 이용하여 인코딩하는 내용이라는 것을 파악했다. [ 그림 2 ] encoded.key- encoded.key 파일을 열어봤더니, 엄청 많은 양의 문자가 인코딩되어 있었다. # 앞의 2개의 파일을 확인해 본 결과, 우선 인코딩 원리를 파악하고, 디코딩 코드를 작성하여 인코딩된 문자들을 디코딩하여 원래의 문자들을 확인해봐야 할 것 같다. # 인코딩 알고리즘 분석 - 우선 인코딩하는 부분의 코드를 살펴보면 인코딩할 문자열에서.. 더보기
- EAT (Export Address Table / PE File 관련) # 이번 포스팅은 "EAT(Export Address Table)" 입니다. 한동안 공부를 더럽게 안하다가 다시 책을 펼쳐 공부를 시작하기로 했습니다.ㅎ 마지막 포스팅이 PE File의 IAT(Import Address Table) 이였었죠. 라이브러리에서 사용할 함수등에 대한 정보를 기재하고 있는 테이블에 대한 내용이었습니다. 이번에는 라이브러리 파일에서 제공하는 함 수를 다른 프로그램에서 가져다 사용할 수 있도록 해주는 EAT에 대해서 알아보도록 하겠습니다. # EAT (Export Address Table) - Export는 라이브러리 자신이 가지고 있는 함수를 다른 PE 파일에게 제공하는 것을 의미합니다. 만약 다른 PE 파일에서 "kernel32.dll"이라는 라이브러리에 존재하는 함수를 사용하.. 더보기
- Docx File Steganography (Codegate 2013 예선 - Forensic 300) # 해킹 대회 문제 풀이 할 때, 문서화 해두었던 문제- 제공되었던 파일 더보기
- IAT (Import Address Table / PE File 관련) # 이번 포스팅 내용은 "IAT(Import Address Table)" 입니다. 이전에 "RVA to RAW" 라고, PE 파일이 메모리상에 로딩된 주소인 RVA(프로세스 가상 메모리의 절대주소)를 RAW(File Offset)으로 바꾸는 연습을 했습니다. 이번 포스팅 주제인 IAT 내용을 잘 이해하시기 위해서는 RVA를 RAW로 바꾸는데 어려움이 없으셔야 합니다. PE File Format에서 사용되는 구조체에서는 대부분이 RVA로 주소값들을 명시하기 때문입니다. # IAT (Import Address Table) - 우선 IAT가 무엇인지 알아야겠죠? IAT는 "Import Address Table"의 약어입니다. 영단어 그대로 해석해보면 [ Import : (컴퓨터) (다른 프로그램 에서 데이터를.. 더보기
- RVA to RAW (PE File 관련) # 이번에는 "RVA to RAW"에 대해서 포스팅하도록 하겠습니다. "RVA to RAW"를 간단하게 설명하자면, RVA to RAW 는 PE 파일이 메모리에 로딩되었을 때 각 섹션에서 메모리의 주소(RVA)와 File Offset(RAW)을 매핑하는 것을 말합니다. 이전 PE File Format 포스팅에서 언급했던 VA와 RVA에 대해서 간단하게 다시 얘기하고 시작하도록 하겠습니다. RVA ↔ RAW(File Offset) 변환 작업은 PE 헤더를 공부할 때 가장 기본이 되는 개념이므로 잘 숙지하도록 합시다. # RVA to RAW - RVA는 PE 파일이 메모리에 로딩되었을 때의 메모리 주소를 의미하고, RAW는 PE 파일이 로딩되기 전에 File Offset을 의미합니다. - RVA to RAW.. 더보기
- 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, 내부 문자열, 실행 압축 여부.. 더보기