리버스 엔지니어링이란 물건이나 기계장치 혹은 시스템 등의 구조, 기능, 동작 등을 분석하여
그 원리를 이해하며 단점을 보완하고 새로운 아이디어를 추가하는 작업.
리버싱 방법
1.정적 분석
파일의 겉모습을 관찰하여 분석하는 방법. 정적 분석의 단계에서는 파일을 실행하지 않고 종류, 크기, 헤더정보, Import/Export API, 내부 문자열, 실행 압축 여부, 등록 정보, 디버깅 정보, 디지털 인증서 등의 다양한 내용을 확인하는 것. 그리고 디스어셈블러를 이용하여 내부 코드와 그 구조를 확인하는 것.
2.동적 분석
파일을 직접 실행시켜 그 행위를 분석하고, 디버깅을 통하여 코드 흐름과 메모리 상태 등을 자세히 살펴보는 방법. 파일, 레지스트리, 네트워크 등을 관찰하면서 프로그램의 행위를 분석. 또한 디버거를 이용하여 프로그램 내부 구조와 동작 원리를 분석.
두 가지 방법을 잘 활용하면 프로그램을 리버싱할 때 시간을 많이 단축시킬 수 있고, 더 효과적인 분석이 가능.
함수 호출 규약
caller - 함수를 호출하는 쪽
callee - 호출 받는쪽
1.cdecl
함수를 호출한 쪽이 stack을 정리
2.stdcall
호출을 당한 쪽이 stack을 정리
3.fastcall
참고 - http://www.slideshare.net/H4C/ss-59722847