보안/리버싱(14)
-
[Reversing] 리버싱 핵심원리 [12]. PE 헤더 1
내용 : Windows 운영체제의 PE File Format에 대해 공부한다. Windows 운영체제의 가장 핵심적인 부분인 Process, Memory, DLL 등에 대한 내용을 정리한다. PE File Format 기본 구조 PE 헤더 -> DOS 헤더, DOS Stup, NT 헤더, Section 헤더 DOS 헤더 제작 당시 DOS 파일에 대한 하위 호환성을 고려하여 제작함 / 가장 먼저 나오는 부분. IMAGE_DOS_HEADER 구조체가 존재함 typedef struct _IMAGE_DOS_HEADER { WORD e_magic;//DOS signature {4D5A} WORD e_cblp; WORD e_cp; WORD e_crlc; WORD e_cparhdr; WORD e_minalloc; W..
2020.04.02 -
[Reversing] 리버싱 핵심원리 [11]. abex' Crack Me 4 풀이
내용 : abex' crack me 4를 분석하고 정답 messagebox를 출력한다. 1. 분석 Registered 버튼이 막혀있는 VisualBasic 형식의 파일이 하나 있다. 시리얼을 입력하는 창에 아무리 텍스트를 작성해봐도 활성화되지 않는다. abex' crackme2 처럼 내부에서 시리얼을 생성을 하거나, 이미 내부에 저장된 시리얼과 비교후 Register 버튼이 열릴것으로 추측하였다. 필요한 API로는 strcmp가 있을것이다. (문자열을 비교하기 위해서) 더이상 할수 있는 동적분석이 없으므로 OllyDbg를 이용하여 분석한다. 2. OllyDbg 이용하기 프로그램 내에서 호출되는 모든 API 목록을 보기 위해 해당 항목으로 들어갔다. 예상했던대로 vbsStrCmp를 호출하는 부분이 존재했고..
2020.03.15 -
[Reversing] 리버싱 핵심원리 [10]. abex' Crack Me 3 풀이
내용 : abex' Crack Me3 를 분석하고 패치해본다. 1. 분석 keyfile을 확인 하기 위해서는 OK 버튼을 누르라고 지시한다. 일단 시키는 대로 눌러보면 파일을 찾을 수 없다는 Error 창이 뜨게 된다. 이후 OK를 누르면 종료된다. 2. OllyDbg로 디버깅하기 [F9]를 이용하여 메시지 박스를 호출하는 부분으로 타고 들어왔다. 우선 00401002 번지 주소를 보면 맨 처음 프로그램을 실행시키면 나오는 메시지 박스를 호출하는 부분이 보이고, 그 아래 CreateFileA 라는 API 가 호출되는 것을 볼 수 있다. 처음보는 API이므로 검색을 해보았다. HANDLE CreateFileA( LPCSTR lpFileName, DWORD dwDesiredAccess, DWORD dwSha..
2020.03.15 -
[Reversing] 리버싱 핵심원리 [9]. Lena's Reversing for Newbies 1
내용 : https://www.tuts4you.com/ 에 있는 crackme 문제 중 1번을 풀이한다. 가. 프로그램 살피기 1. Nag Screen Nag를 없애고, registration코드를 찾아라! 라는 화면이 나오고, 이 창의 이름은 Nag Screen이다. 즉 현재창이 나오는 것을 지우라는 뜻인것 같다. 1-1. 확인 2. 로 이동한다. 1-2. 취소 [프로그램 종료] 로 이동한다. 2. Regcode 입력창 Use SmartCheck to reg!를 보니 SmartCheck라는것을 사용하라는 힌트로 보인다. SmartCheck는 Numega 사이트에서 만든 유틸리티이며 크래커들이 애용하는 툴 중 하나라고 한다. 2-1. Program Exit이 쓰인 선택창이 나오고 이를 누르면 [프로그램 ..
2020.03.12 -
[Reversing] 리버싱 핵심원리 [8]. 함수 호출 규약
내용 : 함수 호출 규약에 대한 정리 함수 호출 규약 함수를 호출 할 때 파라미터를 어떤 식으로 전달하는가? 에 대한 일종의 약속 함수호출 전 파라미터를 스택을 통해서 전달한다. PE헤더에 크기가 명시되어 있어, 프로세스가 실행될 때 스택 메모리의 크기가 결정됨. 스택에 저장된 값은 임시로 사용하는 값임, 더이상 사용하지 않더라도 값을 지우지 않음 (불필요한 CPU 자원을 소모하게 되므로..) 또한 스택 메모리는 이미 고정되어있으므로 메모리 해제가 불가능함. 용어 설명 ※ caller : 함수를 호출한 쪽 ※ callee : 호출을 당한 함수 ex) main() 함수에서 printf() 함수를 호출했다면, Caller : main() | Callee : printf() 이다. 호출 규약 종류 [cdecl..
2020.03.03 -
[Reversing] 리버싱 핵심원리 [7 - 2]. abex' 2nd crackme 풀이 - 시리얼코드 생성 함수 분석
내용 : 시리얼 코드를 생성하는 함수부분을 분석하였다 -> Visual Basic에 문외한 및 실력,, 때문에 책을 많이 참고 하였다. 1. check 버튼 이벤트 핸들러 시작지점 찾기 이벤트 핸들러의 구조의 결과로 MessageBox를 출력하는 지점에서 함수 처음의 스택 프레임을 형성하는 지점을 찾는다. 해당 부분에서 아래로 내리다 보면 루프가 시작되는 지점이 나오는데, MOV EBX, 4 위와 같은 명령어가 보이는데, 4번의 루프 반복을 통해 시리얼을 만든다. ######################################################################################## 아래부터는 이해하지 못한 내용이라 공부 한 이후에 추가할 예정,,, #########..
2020.03.02