본문 바로가기

분류 전체보기

(35)
[리버싱 핵심원리] 22장 - 악의적인 목적으로 사용되는 키로거 22.1 악성 키로거의 목표 는 바로 '돈'이다. 키로거는 사용자가 입력한 키보드 정보를 빼돌리는 기능을 한다. 정보화 시대에서 정보는 돈이기 때문에 나쁜 의도로 키로거를 사용한다. 몇 가지 사례를 알아보자. 1. 온라인 게임 PC방 아무곳이나 가서 키로거를 설치하면, 키로거가 설치된 컴퓨터를 사용하는 사람의 계정이 몰래 저장되어 해커의 메일로 전송된다. 수집한 계정에 접속해 게임 머니와 아이템을 현금으로 교환한다. 2. 인터넷 뱅킹 게임을 안하는 사람들도 예외는 아니다. 만약 누군가 인터넷 뱅킹 계정 정보를 빼간다면, 어느 순간 통장의 잔고가 0이 될 수 있다. 이 예시는 실제로 국내외에서 벌어지고 있는 일이라고 한다. 우리나라는 인터넷 뱅킹을 하기 위해서는 대부분 IE를 사용해 접속해야 하고, 은행 ..
[리버싱 핵심원리] 21장 - Windows 메시지 후킹 21.1 훅(Hook) 원하는 것을 낚아채고 싶을 때 사용하는 도구인 갈고리를 말한다. 이 뜻이 확장되어 정보를 엿보거나 가로채는 경우에도 '훅'이라는 말을 쓴다. 중간에서 오고가는 정보를 엿보거나 가로채기 위해 초소를 설치하는 일을 훅을 건다(설치한다)라고 하고, 실제로 정보를 엿보고 조작하는 행위를 후킹(hooking)한다 라고 말한다. 컴퓨터 분야에서도 광범위하게 사용된다. 'OS - 애플리케이션 - 사용자' 사이에 오고가는 정보를 전부 엿보고 조작할 수 있다.(사용자 몰래도 가능하다...) 여러 방식 중 기본적인 메시지 훅에 대해 알아보자. 21.2 메시지 훅 Windows 운영체제는 GUI를 제공하고, 이는 Event Driven 방식으로 동작한다. 이번트가 발생할 때 OS는 미리 정의된 메시지..
[리버싱 핵심원리] 11장 - Lena's Reversing for Newbies 11.1 실행 크랙하려는 파일을 먼저 실행해보면 위와 같은 화면이 출력된다. [확인] 버튼을 누르면 아래와 같은 창이 나온다. 전형적인 serial crackme이다. 화면의 파란 글씨를 읽어보면 registration을 위해 'SmartCheck'을 사용하라고 되어있다. 그리고 처음 나오는 nags를 없애라는 말도 같이 써있다. 실행을 통해 우리가 해야하는 것이 2가지임을 알 수 있다. 1. Nags 화면 없애기(메시지 박스 제거) 2. Regcode 찾기 11.2 분석 1. 목표(1) - 메시지 박스 제거 Nags화면(메시지 박스)는 파일을 처음 실행시킬 때와 Nags 버튼을 눌렀을 때 출력이 된다. OllyDbg로 파일을 열면 8장 실습에서 보았던 Visual Basic 코드를 볼 수 있다. 해당 ..
[리버싱 핵심원리] 10장 - 함수 호출 규약 10.1 함수 호출 규약 Calling Convention은 '함수 호출 규약'이라고 한다. 이것은 '함수를 호출할 때 파라미터를 어떤 식으로 전달하는가'에 대한 일종의 약속이다. 함수 호출 전에 파라미터를 스택을 통해 전달한다는 것을 알고 있다. 스택이란 프로세스에서 정의된 메모리 공간이며 아래 방향(주소가 줄어드는 방향)으로 자란다. 또한 PE 헤더에 그 크기가 명시되어 있다. 즉 프로세스가 실행될 때 스택 메모리의 크기가 결정된다.(동적 메모리 할당과는 다르다.) 스택에 저장된 값은 임시로 사용하는 값이기 때문에 더 이상 사용하지 않는다고 하더라도 값을 지우거나 하면 불필요하게 CPU 자원을 소모한다. 어차피 다음 스택에 다른 값을 입력할 때 저절로 덮어쓰고 스택 메모리는 이미 고정되어 있기 때무에..
[리버싱 핵심원리] 8장 - abex' crackme #2 8.1 abex' crackme #2 실행 전형적인 crackme의 형태의 시리얼 키(serial key)를 알아내는 프로그램이다. Name과 serial값을 각각 입력받고 있다. 각각 값을 적절히 넣고 실행시켜보면, 아래와 같은 메시지 박스가 출력된다. 8.2 Visual Basic 파일 특징 디버깅 실습을 할 abex' 2nd crackme 파일은 Visual Basic으로 제작되었다. 먼저 Visual Basic 파일의 특징을 살펴보자. 1. VB 전용 엔진 VB 파일은 MSVBVM60.dll (Microsoft Visual Basic Virtual Machine 6.0)이라는 VB 전용 엔진을 사용한다. (The Thunder Runtime Engine이라는 이름으로도 불린다.) VB 엔진의 사용..
[리버싱 핵심원리] 7장 - 스택 프레임 스택 프레임이란 ESP(스택 포인터)가 아닌 EBP(베이스 포인터)레지스터를 사용하여 스택 내의 로컬 변수, 파라미터, 복귀주소에 접근하는 기법을 말한다. ESP 레지스터의 값은 프로그램 안에서 수시로 변경된다. 따라서 스택에 저장된 변수, 파라미터에 접근하고자 할 때 ESP 값을 기준으로 하면 프로그램을 만들기 어렵고 CPU가 정확한 위치를 참고할 때 어려움이 있다. 함수를 시작할 때 ESP의 값을 EBP에 저장하고 이를 함수 내에서 유지해 아무리 ESP 값이 바뀌어도 EBP를 기준으로 안전하게 해당 함수의 변수, 파라미터, 복귀 주소에 접근할 수 있다. 7.1 스택 프레임의 구조 구조를 자세히 정리하면 아래와 같다. POP EBP : 함수 시작 (EBP값을 저장) MOV EBP, ESP : 현재 ES..
[리버싱 핵심원리] 5장 - 스택 5.1 스택 프로세스에서 스택 메모리의 역할은 아래와 같다. 1. 함수 내의 로컬 변수 임시 저장 2. 함수 호출 시 파라미터 전달 3. 복귀 주소(return address) 저장 1. 스택의 특징 일반적으로 스택 메모리는 위와 같이 표현한다. 프로세스에서 스택 포인터(ESP)의 초기 값은 Stack Bottom쪽에 가깝고 PUSH 명령어에 의해 Stack 값이 추가되며 Stack Top쪽에 가까워진다. 반대로 POP 명령어에 의해 Stack 값이 제거되면 Stack Bottom 쪽에 가까워진다. 즉 스택은 높은 주소에서 낮은 주소 방향으로 자란다. 위 그림을 보면 스택은 아래에서 위로 자라는 것을 알 수 있고 이러한 특성 때문에 "스택은 거꾸로 자란다"라는 표현을 쓰기도 한다. 2. 스택 동작 예제 ..
[리버싱 핵심원리] 20장 - 인라인 패치 실습 20.1 인라인 패치 인라인 코드 패치(Inline Code Patch) 혹은 줄여서 인라인 패치(Inline Patch)라고 하는 기법은 원하는 코드를 직접 수정하기 어려울 때 간단히 코드 케이브(Code Cave)라고 하는 패치 코드를 삽입한 후 실행해 프로그램을 패치시키는 기법이다. 주로 대상 프로그램이 실행 압축(혹은 암호화)되어 있어서 파일을 직접 수정하기 어려운 경우 많이 사용하는 기법이다. 실행 압축(혹은 암호화)된 파일은 EP코드에서 해당 파일을 디코딩하고 디코딩이 완료되면 파일의 원본 EP코드 (OEP)로 이동해 실행된다. 만약 패치하길 원하는 코드가 암호화된 OEP코드에 존재한다면 패치시키기 어렵다. 복호화 과정에서 엉뚱하게 복호화 될 수 있기 때문이다. 따라서 EP코드에서 디코딩이 완..