본문 바로가기

정보보안/리버싱 입문

지뢰찾기 게임해킹 최종 실습으로 먼저 가상환경으로 윈도우7을 설치 했다. 예전에 우리가 봤던 지뢰찾기 게임을 볼 수 있다. 책에서는 먼저 작동 방식을 가정하고 시작한다. 예를들자면 시간을 조절하는 함수 같은경우에 setTimer를 사용했다는 가정이다. ollydbg로 지뢰찾기를 실행하고 함수 목록을 보면 setTimer가 있다. 이 주소 부터 시작하면 setTimer에 들어가는 매개변수부터 본다면 Timer에 uElapse가 시간의 간격을 조절한다. 1000일때 1초를 의미한다. 디버거에서도 보면 그에 해당하는 인자가 들어간다. 그래서 이 1000을 5000으로 바꿔준다면 사진으로는 안느껴지겠지만 1초가 5초에한번 씩 흐른다. 다음으로 해볼 내용은 지뢰가 있는 위치를 만드는 맵핵을 만드는것이다. 이것을 만들기 위해서는 게..
리버싱의 어려운 문제들 패킹 - 프로그램 코드 크기를 줄이기 위해 압축하거나 프로그램분석을 어렵게 하기위해 암호화하는것 - Compressing 압축 ex) Petite ASPack MEW FSG UPX - Protecting 암호화 ex) Themeda Yoda ASProtect armadillo UPX(Ultimate Packer for Executables) - 오픈소스실행압축파일 upx를 이용해서 전에 쓴 abexcrackme1을 압축한 모습이다. 각 파일을 Detect It Easy로 확인해보면 그 차이를 비교해 볼 수 있다. 코드를 언패킹 할 Entry Point가 달라진다. 패킹된 프로그램을 언패킹된 상태에서 저장할 수도 있지만 중요한 것은 실제 엔트리 포인터를 찾아야 된다는것이다. 그중 Original Entry..
리버싱, 좀 더 깊숙이 이번장에서는 예전에 봤던 Lena강의에 대해서 나온다. 유명한(?) 리버싱 입문 강의이다. 이번장에서는 15, 17, 20강을 보는데 나중에 1~40까지 다 봐야할 것 같다. 15강 프로그램을 실행하면 이상한 창이 떠있다. Nag창을 없애는것이 이번 목표인 것같다. 콜 스택 - 서브루틴간 호출 순서를 추적하기 위해 사용 - Return Address는 서브루틴 이후에 있음 - Stack Frame : 프레임포인터, 스택포인터 사이 - Stack Pointer : 서브루틴의 최상위 스택값 Alt + K : 콜 스택 창 책에 있는대로 실습을 하려했는데 콜스택창에 함수가 안뜬다; (원인은 나중에 더 강해져서 찾아보자) 그래서 그냥 읽고 넘어가기로 했다. Code Cave : 작은공간에 큰 코드를 넣기 위한 기..
리버싱에 익숙해지기 abex' crackme 3번 예제를 이어서 공부해본다. 시작전에 detect it easy 프로그램을 이용하면 이 프로그램에 관한 정보를 얻을 수 있다. 함수 호출 규약 : 인자를 전달하는 방식이나, 함수 실행이 끝나고 스택을 정리하는 방식에대한 약속 -cdecl : 오른쪽->왼쪽 스택전달, 함수가 종료될때 호출자가 스택프레임 정리 -stdcall : 오른쪽->왼쪽 스택전달, 함수가 종료될때 피호출자가 스스로 스택프레임 정리 -fastcall : 오른쪽->왼쪽 레지스터전달, 레지스터를 사용해서 스택정리 x 시작 부분에서 모든 분기점을 한눈에 볼 수 있다. CreateFileA에서 파일여부를 확인하고 GetFileSize에서 파일사이즈를 확인해서 통과시키는것같다. CMP EAX,12 인걸 보니 사이즈 1..
리버싱시작하기(2) abex' crackme 2번 예제를 이어서 공부해본다. 아무알파벳을 입력해보니 오류창이 뜬다. 마찬가지로 ollydbg에서 이를 열고 실행해 보았다. ollydbg에서는 문자열에 따라서 검색하는 기능이 존재한다. 아마 저부분이 정답일 때 나오는 키워드 인것같다. 하지만 보면 다른 주소에도 같은 키워드가 존재한다. 이를 따라가보면 한곳은 정의하고 한곳은 사용하는 부분이다. 필요한 부분에서 breakpoint를 걸어서 자세한 정보를 확인 할 수 있다. 다음과같이 breakpoint를 걸고 동작시키면서 분석해볼 것이다. ESP -> 현재 스택의 위치 EIP -> 다음 작동 명령어 주소 위치 EBP-0E4에 ERROR 문자열이 저장된 004023D0를 0040237C로 변경하면 다음과같이 저장되 있는 문자열이..
리버싱 시작하기(1) abex' crackme 1번 예제를 공부해본다. 하드디스크를 CDRom처럼 생각하게 하라는것이다. PEView로 봤을때 다음과 같다. EP(Entry Point) : 운영체제가 최초로 제어를 프로그램으로 넘기는 지점 PE구조는 상대주소로 지정 : Base Address + RVA 따라서 시작점은 Image Base 400000 + Address of Entry Point 1000 Ollydbg로 열어봤을때 401000에서 시작한다. F8 스텝오버 : 한줄씩 실행 F7 스텝인투 : 실행하되 실행명령어 주소에 있는 서브루틴으로 들어감 F2 브레이크포인트 : 중단점 F9 프로그램 실행 : 실행 ctrl + F2 프로그램 재실행 NumLock + : 전진 NumLock - : 후진 IAT 테이블의 API를 부..
리버싱을 위한 기초 지식 리버싱을 공부하기 위해 "리버싱 입문"이라는 책을 피게 되었다. 컴퓨터 구성요소 : CPU Memory 하드디스크 PE파일(Portable Executable) : 윈도우의 실행파일 -Header : 프로그램실행 정보, 메모리 어디에 저장 할 배치 정보 -Body : 코드, 데이터 ex) exe, dll, ocx exe파일 누르면 운영체제의 Loader가 메모리에 배치 메모리 안에서 구성요소마다 Heap, Data, Stack 영역등에 구성 이를 CPU의 CU, ALU가 실행 여러가지 일을 동시에 하기 위해서 사용하는 레지스터를 메모리 영역에 넣는것 : Context Switching 인텔 x86 CPU 기본구조 IA-32 아키텍쳐 범용레지스터 EAX : 곱셈,나눗셈 명령, 함수의 반환값 저장 EBX :..