2014/05
리버스 엔지니어링 스터디 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) { ..