본문 바로가기

Study/Reversing9

[Reversing] UPX packing & unpacking 이번 실습의 내용은 32bit notepad를 UPX로 패킹하고 이를 디버거를 통해 패킹을 푸는 것이다. 이 실습에서 사용할 패커는 제목에서 알 수 있듯 UPX이다. 우선 UPX를 패킹하기 위해서는 아래 사이트에서 UPX를 다운받아야 한다. https://github.com/upx/upx/releases/tag/v3.96 Release UPX 3.96 · upx/upx Please see the file NEWS for a detailed list of changes. Note: all versions are functionally equivalent, i.e. each version can handle all executable formats, so you only need the file that r.. 2020. 10. 26.
[Reversing] IAT와 EAT 로딩 과정 IAT 로딩 과정 DLL이란? Dynamic Link Library, 동적링크로 실행파일에서 해당 라이브러리 기능을 사용시에만 참조해 기능을 호출할 수 있는 방법이다. 여러 프로세스에서 공유하며 쓰는 라이브러리로 멀티태스킹 환경에서 각 프로세스마다 라이브러리를 갖고 그 용량을 차지하는 것보다 메모리에 한 번 로딩시켜 프로세스마다 공유시키면 메모리를 더 효율적을 사용할 수 있다. IAT란? Import Address Table, 프로그램이 어떤 라이브러리에서 어떤 함수를 사용하는지에 대해 적은 테이블이다. 이는 Implicit Linking에 대한 메커니즘을 제공하는 역할로 프로그램이 시작할 때 같이 로딩되어 종료할 때 메모리에서 해제된다. IAT는 PE 파일이 어떤 라이브러리를 import하고 있는지에 .. 2020. 10. 13.
[Reversing] 어셈블리어 C로 변환하기 #2 주어진 어셈블리어 main의 명령은 0으로 초기화를 한 변수 3개를 선언하는 것이다. int a, b, c = 0; main에서 L2로 점프하므로 아래 명령으로 이동한다. 그럼 [rbp-12]의 값과 9를 비교하는데 [rbp-12]는 c이다. jle는 만약 앞의 값이 뒤의 값보다 작거나 같으면 점프하라는 의미다. 그러므로 if문을 사용해 표현할 수 있다. 그런데 C언어에서는 jle를 으로 표현해야 한다고 한다. * http://blog.naver.com/PostView.nhn?blogId=67sooon&logNo=10166748134 if (c > 9) c는 9보다 작음으로 조건에 만족해 L5로 점프하게 된다. eax에 c를 넣어 0으로 만든 다음 cdq를 이용해 eax와 edx를 확장한다. 그리고 sh.. 2020. 9. 22.
[Reversing] PE Header 개념 정리 & wow64 fs redirection PE 파일 PE는 Portable Executable은 이식 가능한 실행 파일이라는 뜻으로 하나의 실행 파일을 여러 운영체제에서 실행 가능하다는 의미다. 유닉스 실행 파일 형식인 COFF(Common Object File Format)을 기반으로 exe, dll, obj, sys 등의 확장자를 가진 파일들이 이에 해당한다고 볼 수 있다. PE 파일 종류 1. 실행 계열 : exe, scr 2. 드라이버 계열 : sys, vxd 3. 라이브러리 계열 : dll, ocx, cpl, drv 4. 오브젝트 계열 : obj VA와 RVA VA > 프로세스 가상 메모리의 절대주소 RVA > ImageBase로부터의 상대주소 (메모리에 로딩된 상태) > PE 메모리에 적재되기 전 기본 ImageBase는 0이다. 그.. 2020. 9. 21.
[Reversing] 어셈블리어 C언어로 변환하기 #1 주어진 어셈블리어 main() - 1 push rbp rbp는 스택의 첫 시작 주소가 저장되는 포인터 레지스터다. 그래서 push rbp를 통해 main 함수의 시작 주소가 스택에 저장된다. mov rbp, rsp Rsp는 항상 스택의 끝 지점 주소를 갖고 있는 포인터 레지스터다. 현재 main을 호출한 상태이므로 가장 끝 지점과 시작 주소가 같을 것이다. 그래서 rsp에 rbp 값을 넣어주어 rbp는 항상 시작 주소를 갖고 있고 rsp는 계속 움직이며 스택의 끝 지점을 가리키고 있게 된다. sub rsp, 16 이 명령어는 현재 rsp가 가리키는 주소를 16byte만큼 빼 스택을 사용할 수 있도록 준비하는 것이다. (지역변수 공간 확보) mov DWORD PTR [rbp-4], 1 rbp – 4 주소에.. 2020. 9. 14.
[Reversing] abex' Crackme #1 exe 파일을 실행시키면 다음과같이 나온다 코드를 살펴보면 위 에러가 출력되게 하는 메시지 박스와 YEAH! Ok, I really think that your HD is a CD-ROM! :p이 있다. 아마 이 문장이 출력되는 메시지 박스를 띄워야 하는 것 같다. * MessageBoxA int MessageBoxA( HWND hWnd, LPCSTR lpText, LPCSTR lpCaption, UINT uType ); MessageBoxA(핸들, 내용, 제목, 박스 종류) 함수로 메시지 박스는 총 4개의 인수를 가진다. * GetDirveType 함수를 호출하기 바로 전에 'c:\\'로 설정했기 때문에 함수에서 반환 값이 3이 되어 고정 미디어라는 것을 알 수 있다. UINT GetDriveTypeA.. 2020. 9. 14.