본문 바로가기

0x00

- 서버 DB 강좌 http://www.sqler.com/ 더보기
- GetModuleFileName Function # GetModuleFileName Function- Description : 현재 로딩된(실행중인) 프로세스의 경로를 찾아오는 함수입니다. # Parameters (1) hModule- Null 값 혹은 경로를 찾을 프로세스의 핸들값을 인자값으로 합니다.- Null 값이 올 경우에는 현재 자신의 프로세스 경로를 찾아옵니다. - 특정 프로세스의 핸들값을 인자로 주면 그 프로세스의 경로를 찾아옵니다. (2) lpFilename- 경로를 리턴받을 포인터를 인자로 합니다. (3) nSize- lpFilename에 인자로 주었던 포인터의 버퍼 크기를 인자로 합니다. # Return Value- Description : 함수 호출이 성공했을 경우, 경로의 길이를 리턴합니다. 더보기
- SetWindowsHookEx() API를 이용한 메시지 후킹 # 바로 앞에 포스팅한 Windows 메시지 후킹 실습으로, SetWindowsHookEx() API를 이용하여 메시지 후킹 실습을 해보겠습니다. 본 내용은 리버싱 핵심원리에 나와 있는 내용을 참고하여 했습니다. # SetWindowsHookEx() API를 사용하여 메시지 후킹을 한다고 했는데요. 해당 API 함수를 정리해두었습니다. 참고하실분들은 참고 하세요. [ http://yokang90.tistory.com/48 ] # 해당 실습에 사용된 파일 HookMain.cpp / KeyHook.cpp 2개의 파일입니다. (리버싱핵심원리에서 제공되어진 소스파일입니다)- HookMain.cpp 은 키보드 훅을 설치하는 파일 소스입니다.- KeyHook.cpp 은 키보드 후킹을 실제로 하는 파일 소스입니다. .. 더보기
- 3월 11일 주의 파일 안내입니다. (출처:바이러스제로시즌2) # 바이러스 제로 시즌2 카페에서 퍼온 3월 11일 주의 파일 안내입니다. 참고하시면 좋을 것 같아서 퍼왔습니다. 출처 URL http://cafe.naver.com/malzero/107968 더보기
- Windows 메시지 후킹 # Windows 메시지 후킹 정리. 1. Hook (훅)- 갈고리, 낚시바늘과 같은 뜻을 의미하며, Windows 메시지 후킹에서 의미하는 훅의 의미는 정보를 엿보거나 가로채는 경우를 Hook이라는 말을 사용합니다. # 중간에서 오고가는 정보를 엿보거나 가로채기 위해 초소를 설치하는 일을 훅(Hook)을 건다라고 하고, 실제로 정보를 엿보고 조작하는 행위를 후킹(Hooking)한다 라고 말합니다. 2. 메시지 훅- Windows 운영체제는 사용자에게 GUI(Graphic User Interface)를 제공해주고, 사용자는 제공받은 GUI를 이용하여 하고자하는 행위를 하게 됩니다. 예를 들면, 게임을 한다던가, 음악을 듣는다던가 이러한 행위는 Windows 운영체제에서 Event Driven 방식 처리를.. 더보기
- 실전 악성코드와 멀웨어 분석 Chap.1 [실습 1-3] # 실전 악성코드와 멀웨어 분석에서 제공하는 실습 파일을 이용한 악성코드 분석 연습. # 실습 1-3 Lab01-03.exe 파일 분석 # 질문 (1)- Http://www.VirusTotal.com/에 Lab01-02.exe 파일을 업로드하자. 기존 안티바이러스에 정의된 것과 일치하는가? [ 그림 1 ] VirustToTal 진단 결과- 안티바이러스 제품 57개중 43개에서 이미 분석되었던것으로 확인할 수 있었습니다. # 질문 (2)- 이 파일이 패킹되거나 난독화된 징후가 있는가? 그렇다면 무엇으로 판단했는가? 파일이 패킹돼 있다면 언패킹해보자. [ 그림 2 ] 패킹 유무 확인 도구를 이용한 패킹 확인- FSG 1.0 패커에 의해 패킹되어 있다는 것을 확인할 수 있었으며, FSG가 'Fast Small.. 더보기
- 실전 악성코드와 멀웨어 분석 Chap.1 [실습 1-2] # 실전 악성코드와 멀웨어 분석에서 제공하는 실습 파일을 이용한 악성코드 분석 연습. 해당 실습 파일들은 http://practicalmalwareanalysis.com/labs/ 에서 제공되고 있습니다. # 실습 1-2 Lab01-02.exe 파일 분석 # 질문 (1)- Http://www.VirusTotal.com/에 Lab01-02.exe 파일을 업로드하자. 기존 안티바이러스에 정의된 것과 일치하는가? [ 그림 1 ] VirustToTal 진단 결과- 기존 안티바이러스 29개에서 분석이되어 진단된 것을 확인할 수 있었습니다. # 질문 (2)- 이 파일이 패킹되거나 난독화된 징후가 있는가? 그렇다면 무엇으로 판단했는가? 파일이 패킹돼 있다면 언패킹해보자. [ 그림 2 ] Lab01-02.exe 패킹 .. 더보기
- 실전 악성코드와 멀웨어 분석 Chap.1 [실습 1-1] # 실전 악성코드와 멀웨어 분석에서 제공하는 실습 파일을 이용한 악성코드 분석 연습. 해당 실습 파일들은 http://practicalmalwareanalysis.com/labs/ 에서 제공되고 있습니다. # 실습 1-1 Lab01-01.exe / Lab01-01.dll 파일 분석 # 질문 (1)- Http://www.VirusTotal.com/에 파일을 업로드한 후 보고서를 보자. 기존 안티바이러스 시그니처에 일치하는 파일이 존재하는가? [ 그림 1 ] Lab01-01.exe VirusTotal 분석- 해당 파일이 최초로 2012-02-16 에 이미 분석됬다는 것을 확인할 수 있었다. [ 그림 2 ] Lab01-01.exe VirusTotal 분석 결과- 기존 안티바이러스 시그니처 존재하는 파일이였으며.. 더보기
- 악성코드 (MaxRootkit_2011_1.exe) 분석 - 미완. # Malware File Name : MaxRootkit_2011_1.ex # 분석환경- Windows XP SP3 x86- Ubuntu x64 1. 초기분석 1.1 안티바이러스 스캐닝 ( VirusToTal) [ 그림 1 ] MaxRootkit_2011_1.ex Virustotal 안티바이러스 스캐닝 결과 (진단 결과)- Trojan / Rootkit / Downloader 등으로 진단- 위와 같은 내용을 통해서, 루트권한을 획득한 공격자가 피해자의 PC에 악성코드를 은폐시키고, 추가적인 악성코드를 다운받는 식의 행위가 예상된다. [ 그림 2 ] MaxRootkit_2011_1.ex Virustotal 안티바이러스 스캐닝 결과 - File detail 정보- import DLL (ADVAPI32.dl.. 더보기
- 악성코드 분석 환경 구축 (VMware) # 쉬운 악성코드부터 차근 차근 악성코드 분석 연습을 해보려고, 악성코드 분석 환경을 구축해보았습니다. # 가상머신 소프트웨어 : Vmware 11 # Guest PC OS - Ubuntu 13.10 x64 : 아래 3개의 PC에서 악성코드를 실행시켰을 시, 발생하는 네트워크 트래픽을 모니터링하는 역할 - Windows 7 professional k x86- Windows 7 Ultimate k x64- Windows XP SP3 x86 : 실제로 악성코드를 실행 시킬 Guest PC - 총 4개의 Guest OS (NAT 방식으로 네트워크 설정) / Ubuntu OS의 IP 주소를 기본 게이트웨이 주소로 설정해주어서, 트래픽을 모니터링할 Ubuntu OS를 거쳐 인터넷이 가능하도록 설정하였습니다. - .. 더보기
- SetWindowsHookEx Function # Windows 메시지 후킹 부분을 공부하다가 보게 된 Windows API 함수이다. 공부하면서 모르는 함수 나올때 마다 블로깅하면서 정리해두면 나중에 도움이 될 것 같다. # Parameters (1) idHook- Type : int- Description : Hook Type (어떤 종류의 프로시저에 Hook 할건지에 대한 변수)- Value : idHook 변수에 올 수 있는 값 (Hook 할 프로시저 종류에 대한 상수 값) (2) lpfn- Type : HOOKPROC- Description : 운영체제가 호출해줄 콜백 함수, DLL 내부에 존재하는 hook procedure (3) hMod- Type : HINSTANCE- Description : hook procedure 가 속해 있는 .. 더보기
- 우분투(Ubuntu) Git & GitHub 설치 및 사용법 # 우분투 환경에서 Git & GitHub 사용을 처음 해봐서 찾아보다가 정리해두면 좋을 것 같아서... 1. Git 설치 및 설정 sudo apt-get install git-core - 'apt-get' 이용하여 설치 git config --list - 기본 설정 리스트 git config --global user.name "이름" git config --global user.email "이메일주소"- 사용자 정보 추가 git config --global color.ui "auto"- 변환된 소스(추가, 수정, 삭제) 쉽게 판별하기 위한 컬러 설정 2. Git 프로젝트 생성 mkdir TestProject- 새로운 폴더를 하나 생성 git init- 위에서 생성한 폴더 안에서 새로운 git 저장소 생.. 더보기
- C 프로그래밍 의사코드 연습 2 # 이번에는 scanf 함수 의사코드 연습- 총 4개 샘플 파일을 가지고 해봤습니다. 1.1 혁재가 짠 코드 실행모습- 정수 입력시 총 5번의 입력을 받는 것을 확인할 수 있었음.- 문자 입력시 총 1번의 입력만을 받았음. 1.2 혁재 파일 디버깅 - 우선 메인함수 내에서 4Byte 크기의 지역변수 3개를 선언한 것을 확인할 수 있었음.- 총 4번의 scanf 함수를 사용하였고, 1~3 번째는 정수를 한번씩 받아서, 각 순서대로 변수에 대입.- 마지막 scanf 함수에서는 3개의 정수를 받아서, 앞에서 받아 저장했던 값들을 모두 덮어씌어버림.- scanf 함수를 호출하는 caller(메인함수)가 전달한 인자를 정리하는 것과 인자가 오른쪽에서 왼쪽 편으로 전달되는 것을 보면 cdecl 호출규약이라는 것 또.. 더보기
- C 프로그래밍 의사코드 연습 1 # Reversing Study- printf 함수 & 함수 호출 규약에 대한 C 코드를 어셈블리어로 디버깅하여 의사코드 작성하기.- Study 내용 : 간단한 C 코드 작성 후 컴파일한 파일을 Study 원들에게 배포. Ollydbg 등으로 디버깅한 내용으로 C 의사코드 작성. 함수호출규약에 대해서 잘 모르시는 분들은 아래 링크 참고하시길.http://yokang90.tistory.com/9 총 5가지 파일을 가지고, 의사코드를 작성.1. RS_1.exe (지훈이)2. re_printf.exe (현민이)3. reversing1.exe (건이)4. reversing2.exe (혁재)5. taeyoul.exe (태열이) 1.1. RS_1.exe 실행 모습- 간단하게 4줄에 걸쳐 printf 함수를 이용하여.. 더보기
- 악성코드의 유형 * 백도어 (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++에서 작성된 문자열을 확인하여 메인 함수를.. 더보기