정리/Reverse Engineering
리버스 엔지니어링 스터디 3편. 인라인 코드 패치(Inline Code Patch)
리버스 엔지니어링 스터디 3편. 인라인 코드 패치(Inline Code Patch)
2014.05.11[리버스 엔지니어링 스터디][이 글은 저자인 이승원씨가 작성한 '리버싱 핵심원리: 악성 코드 분석가의 리버싱 이야기'를 참고하여 쓰여졌습니다.] 코드 케이브를 삽입 후 프로그램을 패치한다!인라인 코드 패치(Inline Code Patch) 오늘은 인라인 코드 패치(Inline Code Patch)에 대해서 공부해보도록 하겠습니다. 인라인 코드 패치란 원하는 위치에 있는 코드를 직접 패치하기 어려울 때 코드 케이브(Code Cave)라고 하는 패치 코드를 삽입한 후 실행하여 프로그램을 패치시키는 기법이라 합니다. 주로 패킹 혹은 암호화된 프로그램은 EP(Entry Point)에서 OEP(Original Entry Point) 코드를 복호화 시킨 뒤, 복호화 된 OEP 부분으로 이동합니다. 만약, 우리가 패..
리버스 엔지니어링 스터디 2편. 스택 프레임(Stack Frame)
리버스 엔지니어링 스터디 2편. 스택 프레임(Stack Frame)
2014.05.05[리버스 엔지니어링 스터디] 함수 호출시 할당되는 메모리 블록 스택 프레임(Stack Frame) 스택에 저장되는 함수의 호출 정보를 스택 프레임(Stack Frame)라고 하며, 이러한 스택 프레임에는 함수로 전달되는 인수와, 함수 실행 모두 마치면 돌아올 복귀 주소와 지역 변수 등의 정보가 들어갑니다. 빠르고 손쉽게 지역 변수 혹은 인수 등에 접근하기 위해 EBP 레지스터를 통하여 스택 프레임을 참조할 수 있습니다. 더욱 파고들기 위해서, 함수 호출 시 스택 프레임이 어떠한 형태로 생성이 되고 소멸은 또 어떻게 되는지 한번 확인해보도록 하겠습니다. 먼저, C언어로 작성된 아래 예제의 코드를 빌드한 후 올리 디버거를 통하여 살펴보도록 합시다. #include int sum(int a, int b) { ..
Babylon Keygenme(바빌론 키젠미)를 크랙해보자.
Babylon Keygenme(바빌론 키젠미)를 크랙해보자.
2014.03.03이번에는 바빌론 키젠미(Babylon Keygenme) 프로그램을 리버싱 해보도록 하겠습니다. 상당히 쉬운 편이며, 프로그램은 C언어로 만들어졌다고 합니다. 패킹은 되어있지 않은 상태이구요. 우선은 아래 파일을 다운로드 받아 Babylon Keygenme.exe를 실행시켜 보도록 합시다. 실행 파일을 실행시키시면 아래와 같은 화면이 보여질 것입니다. 우선은 아무렇게나 입력을 한 뒤에 결과를 확인해볼까요? 번역기로 저 문장을 해석해보니 잘못된 패스워드라고 합니다. 우선은 올리디버거를 열어 이 파일을 열어보도록 합시다. (필자는 이뮤니티 디버거를 사용했습니다. 올리 디버거를 쓰셔도 무방합니다.) 디버거로 파일을 열었으면 어셈블리 코드가 보이는 창에 우클릭을 하여 팝업 메뉴에서 Search for -> All..
리버스 엔지니어링 스터디 1편. PE(Portable Executable) 구조
리버스 엔지니어링 스터디 1편. PE(Portable Executable) 구조
2013.08.11[리버스 엔지니어링 스터디] Win32의 기본적인 파일 형식 PE(Portable Executable) 구조 오늘은 PE(Portable Executable)에 대해서 알아보도록 하겠습니다. PE라는 말을 들어보신 적이 있나요? 아마 이 글을 보고 계시는 분들 중에 리버싱 경험이 있으신 분들은 PE란 말을 이미 알고 계실겁니다. 우리가 쓰고 있는 윈도우즈 환경의 실행 파일 포맷을 PE라고 하며, "Portable"의 단어 뜻 그대로 의식성이 있으며 플랫폼에 독립적입니다. PE 파일은 굳이 확장자가 EXE인 파일만 일컫는게 아니며 SCR, SYS, DLL, OCX 등도 포함이 되고, 중간 파일인 OBJ 파일도 PE 파일이라고 간주합니다. PE 구조의 이해는 API 후킹, 압축 실행 파일 등과 같은 고급 리..
Abex Crack-Me 1번문제.
Abex Crack-Me 1번문제.
2012.08.16Abex Crack-Me 1번문제는 Immunity Debugger를 사용하여 풀었습니다. 우선 위의 apexcrackme를 다운받고 실행해봅시다. '나를 CD-ROM으로 생각하게 만들어라' 그리고 확인을 누르게되면, '아냐... 이것은 CD-ROM 드라이브가 아니다!' 아마도 CD-ROM인지 아닌지에 따라 각각 성공했을 때와 실패했을때의 메세지 박스가 뜰것이며, 이것을 우회하여 성공 메세지 박스를 띄우게 만들어야 하는 문제 같습니다. 그럼 이제 디버거를 실행하여 파일을 열어봅시다. 디버거를 실행하면, 주소 창, 옵코드 창, 디스어셈블리 창, 레지스터 창, 스택 창, 메모리 덤프창 등이 보이죠.우선 F8(Step over)키를 이용해서 한줄 한줄 실행해보도록 하겠습니다. (F7(Step info)키와 차..