본문 바로가기

반응형

정보보호/리버스엔지니어링

(7)
[리버싱] Ollydbg 단축어와 여러 가지 팁 정리 1. Code Window에서 동작하는 단축어 명령어 단축키 설명 Restart [Ctrl+F2] 현재 프로세스의 디버깅을 다시 시작 Step Into [F7] 코드 한 줄을 실행 Step Over [F8] Step Into와 달리, 함수에 들어가지 않고 리턴값만 받음 Execute Until Return [Ctrl+F9] 함수 코드 내에서 RETN명령어까지 실행(함수 탈출 목적) Go to [Ctrl+G] 원하는 주소로 이동 Excute till curser [F4] 커서가 위치한 곳으로 이동 Set/Reset Break Point [F2] BP 설정/해제 Run [F9] BP 설정 되어 있는 곳까지 실행 Preview CALL/JMP address [Enter] 커서가 CALL/JMP 명령어에 있으면..
[리버싱] Windows 환경에서 파일과 메모리에서의 주소체계 용어 설명 리버싱에서의 주소계산은 "파일"과 "메모리" 관점에서 이루어집니다. 파일 안에서 절대주소는 OFFSET이라고 합니다. 메모리 안에서의 절대주소는 VA라고 합니다. 또한, 파일이나 메모리에는 여러 종류의 공간이 존재합니다. 예를 들어 Header 같은 공간이나 Section 같은 공간들이 존재합니다. 이런 공간들은 용도에 따라 나뉘어져 있으며, 공간의 시작점은 파일에서는 "PointerToRawData" (OFFSET값), 메모리에서는 "VirtualAddress" (VA값)이라고 합니다. 또한, 공간 내 특정 주소를 지칭하는 용어도 있습니다. 파일에서는 "RAW" (OFFSET값), 메모리에서는 "RVA" (VA값)이라고 합니다. (이를 변환하는 것은 밑에서 다룹니다.) 정리하자면, 파일이나 ..
[PWN] pwnable.kr collision 문제풀이 1. 문제 풀이 환경 접속하기 ssh를 통해, 문제 풀이 환경에 접속 할 수 있다. 접속을 하면, 아래 사진과 같은 화면이 출력된다. 또한, 'ls'명령을 통해, 디렉토리에 소스코드가 있음을 알 수 있다. 2. 소스코드 살펴보기 2.1. 소스코드 들어가보기 소스코드에 들어가면, 다음과 같이 소스코드를 볼 수 있다. #include #include unsigned long hashcode = 0x21DD09EC; unsigned long check_password(const char* p){ int* ip = (int*)p; int i; int res=0; for(i=0; i
[PWN] pwnable.kr fd 문제풀이 1. 문제 풀이 환경 접속하기 ssh를 통해, 문제 풀이 환경에 접속 할 수 있다. 접속을 하면, 아래 사진과 같은 화면이 출력된다. 2. 소스코드 살펴보기 2.1. 소스코드 들어가보기 'ls'명령을 통해, 디렉터리에 무엇이 있는지 살펴보자. 소스코드가 있다. 출제자의 의도는 소스코드를 보고 문제를 풀이하라는 것 같다. 소스코드로 들어가보자. 위 명령어를 사용해서 소스코드에 들어가면, 다음과 같이 소스코드를 볼 수 있다. #include #include #include char buf[32]; int main(int argc, char* argv[], char* envp[]){ if(argc
[F-Security] Level1. 문제 풀이 STEP1. 해당 실행 파일의 패킹여부를 조사한다. 실행파일이 패킹이 되어있다면, 본격적인 리버싱을 하기 이전에 언패킹을 수행해야 하기 때문이다. 여기서는 PEiD와 IAT를 확인하여, 패킹여부를 확인한다. 웬만한 패킹은 PEiD를 통해 검출이 가능하나, 검출이 안 되는 경우가 있으므로 IAT를 조사하여 교차검증을 한다. [그림 1. PEiD로 패킹여부 검사하기] [그림 2. IAT가 정상적인지 확인하기] STEP2. EP(EntryPoint)를 찾는다. 보통 EP는 프로그램의 메인루틴이 실행되는 곳이기 때문에, 이곳의 주소를 찾으면 메인루틴을 찾는데 많은 도움이 된다. EP를 찾는 공식은 다음과 같다: EntryPoint = ImageBase + Base of Code 여기서는 다음과 같이 적용할 수 ..
STOS / STOSB / STOSW / STOSD 이야기 STOS / STOSB / STOSW / STOSD 명령은 문자별 테마를 지정된 주소에 저장하는 역할을 수행합니다. 일부 명령을 자세히 살펴보면 다음과 같습니다: A. STOSB: AL을 ES: (E)DI 주소에 저장 B. STOSB: AX를 ES: (E)DI 주소에 저장 C. STOSB: EAX를 ES: (E)DI 주소에 저장 BYTE, WORD, DOUBLE BYTE를 각각 AL, AX, EAX 저장 Operand에 저장합니다. 저장 Operand는 메모리 주소에 있고, 이 주소는 (명령의 주소 체계, 즉 32 혹은 16비트에 따라서) 각각 ES: EDI 혹은 ES: DI에서 읽을 수 있게 됩니다. ES 세그먼트는 세그먼트 Override Prefix로 Override 할 수 없습니다. 어셈블리 코드..
Windows Data Type 이야기 개요 윈도우 API를 보면, 흔히보게 되는 int 혹은 char 같은 자료형이 아닌 이상한 자료형들이 있다. 개인적으로 궁금해서, Windows 개발 문서 를 찾아보았다. 위 문서를 보고 얻은 결론 기존에 있던 자료형을 typedef나 define을 통해 이름을 바꾸거나 조합을 했을 뿐이다. 앞에 P나 LP가 들어가는 것은 포인터 자료형이다. 조합된 자료형이 또 다른 자료형으로 되기도 한다. 이러한 자료형은 C혹은 C++을 기반으로 제작되었다. 예시 1, 2번 결론에 대한 예시 예를 들어, "LPDWORD"는 "LP+DWORD"이다. "DWORD"는 unsigned long을 typedef 선언한 것이며, "LP"는 이런 unsigned long을 포인터로 만든 것이다. 결론적으로, "LPDWORD"는 ..

반응형