본문 바로가기

공부

(12)
리버싱 공부 13 로 공부하였다. 2부 PE File Format https://msdn.microsoft.com/en-us/library/ms809762.aspx 13 PE File Format 1. PE 파일 : Windows 운영체제에서 사용되는 실행 파일 형식(원래는 다른 운영체제에 이식성을 좋게 하려는 의도였음) 32비트 형태 : PE 파일, PE32 / 64비트 형태 : PE+, PE32+라고 부른다. 2. PE File Format PE 파일의 종류는 다음과 같다. 종류 주요 확장자 실행 계열 EXE, SCR 라이브러리 계열 DLL, OCX, CPL, DRV 드라이버 계열 SYS, VXD 오브젝트 파일 계열 OBJ 이 중 OBJ 파일 제외하고 모두 실행 가능하다. 실행 계열이 아닌 것들은 다른 형태의 방법(디..
리버싱 공부 11 로 공부하였다. 11 Lena's Reversing for Nebies https://forum.tuts4you.com/files/file/1307-lenas-reversing-for-newbies/ 이 링크에서 40개의 crackme를 다운 받을 수 있다. 강의도 있다고 했는데 플래시였어서 그런지 나한테는 보이지 않았다. 책 속에서 한 실습은 10번째 파일 속 Tut.ReverseMe1 파일이었다. 11.1. 실행 처음에 실행이 안됐는데 MSVBVM50.DLL 파일을 다운 받아 실습할 파일과 같은 폴더에 위치시켜주니까 해결되었다. 일단 처음에 실행하면 위 화면처럼 나온다. 모든 Nag를 없애고 registration code를 찾으라고 한다. OK를 누르면 다음 화면이 뜬다. registration을 ..
리버싱 공부 10 로 공부하였다. 10 함수 호출 규약 = Calling Convention '함수를 호출할 때 파라미터를 어떤 식으로 전달하는가?'에 대한 일종의 약속. 함수 호출 전에 파라미터를 스택(프로세스에서 정의된 메모리 공간)으로 전달. PE 헤더에 크기가 명시돼있음. => 프로세스가 실행될 때 스택 메모리의 크기가 결정! (≠ malloc/new 동적 메모리 할당) 함수 실행 완료 시 스택에 남아있는 파라미터는 그대로 놔둔다! =>값을 지우는데 불필요하게 cpu 자원을 소모한다/저절로 덮어써짐 /스택 메모리는 이미 고정돼있기 때문에 메모리 해제를 할 수도 없고 할 필요도 없다. 함수 실행 완료 시 ESP(스택 포인터)는 어떻게 되나? => ESP 값은 함수 호출 전으로 복원돼야 한다. 그래야 참조 가능한 스택..
리버싱 공부 09 로 공부하였다. 09 Process Explorer - 최고의 작업 관리자 9.1 Process Explorer 왼쪽은 현재 실행 중인 프로세스들을 계층적으로 표시, 오른쪽은 프로세스 각각의 PID, CPU 점유율, 등록정보 등 표시. 화면 아래는 선택된 프로세스에 로딩된 DLL 정보 또는 해당 프로세스에서 오픈한 object handle 표시. 9.2. Process Explorer의 장점 ① Parent/Child 프로세스 트리 구조 ② 프로세스 실행/종료 시 각각의 색깔로 표시 ③ 프로세스 Suspend/Resume 기능(실행 중지/재개) ④ 프로세스 종료 기능 ⑤ DLL/Handle 검색(프로세스에 로딩된 DLL 또는 프로세스에서 점유하는 Handle 검색) ⑥ 꾸준한 업데이트 9.3. sysin..
리버싱 공부 08 로 공부하였다. 08 abex' crackme #2 8.1. abex' crackme #2 실행 일단 바로 실행시켜보았다. 이름과 시리얼 키를 입력하는 칸이 있고 체크, about, 나가기 버튼이 있다. 아무것도 입력하지 않고 check를 누르면 위 대화 상자가 뜬다. 다시 4글자 이상 치고 시리얼키를 0글자 이상 친 후 check를 누르면 위 대화 상자가 뜬다. (틀렸을 때의 대화 상자겠지) About 버튼을 누르면 위의 대화상자가 뜨고, Quit 버튼을 누르면 프로그램이 종료된다. 대략적인 구성은 알았으니 이제 디버거를 통해 확인해 보자. 8.2. Visual Basic 파일 특징 그 전에 abex' 2nd crackme 파일은 Visual Basic으로 제작되었다고 한다. Visual Basic 파..
리버싱 공부 07 로 공부하였다. 07 스택 프레임 목표 - 스택 프레임의 동작 원리를 이해 - 간단한 프로그램을 만들고 디버거를 이용해서 스택 프레임을 확인 - 간단한 어셈블리 명령어의 상세설명 7.1. 스택 프레임 : ESP가 아닌 EBP를 이용해 스택 내의 로컬 변수, 파라미터, 복귀 주소에 접근하는 기법ESP : 스택 포인터, EBP : 베이스 포인터ESP 값은 수시로 변경되기 때문에 스택에 저장된 변수나 파라미터에 접근하려고 할 때 ESP 값을 기준으로 하면 프로그램을 만들기 힘들고, CPU가 정확한 위치를 참고할 때 어려움이 있다. 이를 보완하기 위해 어떤 기준 시점의 ESP 값을 EBP에 저장하고 유지한다면 ESP가 변하더라도 EBP를 기준으로 안전하게 변수, 파라미터, 복귀 주소에 접근 가능하다.어셈블리 코..
리버싱 공부 06 로 공부하였다. 06 abex' crackme #1 분석 관련 이전 게시물 : https://pepperhaneul.tistory.com/84?category=890252 일단 처음에 한 번 실행해보았다. 그럼 위와 같은 대화상자가 뜬다. OK를 눌러보았다. 위와 같이 Error 메시지 박스가 떴다. 여기서 OK를 누르면 종료된다. 이제 디버거에서 디스어셈 코드를 확인해보자. 위 코드를 한 줄 한 줄 분석해보자. 401000~40100E : MessageBoxA() 호출 401013~401018 : GetDriveTypeA() 호출 ESI = 1 (환경에 따라 첫 시작 값이 다르다면 다른 값이 나올 수도 있다. 아래도 마찬가지) EAX = 2 의미 없는 JMP 명령 ESI = 2 ESI = 3 EAX =..
리버싱 공부 05 로 공부하였다. 05 스택 5.1. 스택 스택의 역할 1. 함수 내의 로컬 변수 임시 저장 2. 함수 호출 시 파라미터 전달 3. 복귀 주소 저장 위 역할을 수행하기 위해 FILO 구조가 유용함. 5.1.1. 스택의 특징 프로세스에서 스택 포인터의 초기값은 아래쪽에 가깝다. PUSH 명령에 의해서 Stack에 값이 추가되면 스택 포인터는 위쪽으로 움직이고 POP 명령에 의해 스택에서 값이 제거되면 스택 포인터는 아래쪽으로 움직인다. 그림상으로는 아래에서 윗 방향이지만 주소상으로는 큰 수에서 작은 수로, 즉, 높은 주소에서 낮은 주소 방향으로 스택이 자란다. 5.1.2. 스택 동작 예제 https://github.com/reversecore/book/blob/master/%EC%8B%A4%EC%8A%B5%..