딩굴댕굴

Reverse Engineering - 01. 리버스 엔지니어링

by jennysgap

BOX

리버스 엔지니어링


1. 리버싱 (Reversing)
리버스 엔지니어링(Reverse Engineering)은 인조물로 부터 청사진을 얻는 것에서 유래되었다.

1.1 리버스 엔지니어링이란?

이진 코드로 되어 있는 실행 파일을 분석하려는 일련의 행위이다.


1,2 리버스 엔지니어링의 종류

보안적 관점

• 소프트웨어를 개발 후 개발된 제품에 대해 암호화 알고리즘과 관련된 보안의 평가

• 해커들이 운영체제/애플리케이션의 취약점을 분석 후 바이러스 또는 악성코드를 제작하는데 사용

• 백신업체에서 바이러스 또는 악성코드를 분석 후 백신을 만들기 위해 사용

• 소프트웨어에서 사용된 암호화 알고리즘을 분석하기 위해 사용

개발적 관점

• 소프트웨어 개발시 필요한 지식을 습득하기 위해 다른 소프트웨어를 분석하는데 사용


2. 용어

• CPU (Central Processing Unit)

• MEMORY

• Register




레지스터

• 실행 중인 명령어를 제어
• 메모리 번지를 지정
• 산술연산을 수행
• 시스템을 제어하는 CPU에 존재하는 메모리


2.1 포인터 레지스터(Pointer Register)

• EBP(Base Pointer) : 함수의 파라미터나 변수의 위치를 얻어오는데 간접적으로 사용(스택 메모리를 가리킴). 

• ESP(Stak Pointer) : 스택(stack)의 맨 꼭대기를 가리키는데 사용, 

    그러나 프로그램 안에서 수시로 변경되기 때문에 특정 기준 시점을 잡아 ESP값을 EBP에 저장하여 

    EBP를 기준으로 변수나 패러미터에 접근. SS 레지스터와 함께 사용되며, 스택의 가장 끝 주소를 가리킴.

• EIP(Instruction Pointer) : 현재 수행중인 코드를 가리킴.


2.2 범용레지스터(General-Purpose Registers) 32bit만 표시

• EAX(Accumulator, 누산기)

    어큐물레이터(Accumulator): 모든 연산 명령에 사용되는 레지스터, 산술연산, 입출력, 

    Translate명령어, 주로 산술 연산에 사용(함수의 결과값 저장)

• EBX(Base Register, 베이스 레지스터)

    임의의 번지 지정에 사용되는 어드레스 레지스터, offset, 특정 주소 저장

    (주소 지정을 확대하기 위한 인덱스로 사용)

• ECX(Count Register, 카운트 레지스터)

    스트링 조작 명령이나 반복 루프의 계수기로 사용, 반복적으로 실행되는 특정 명령에 사용

    (루프의 반복 횟수나 좌우 방향 시프트 비트 수 기억)

• EDX(Data Register, 데이터 레지스터)

    산술연산, EAX와 함께 자주 사용, 일반 자료 저장(입출력 동작에 사용)

반응형

블로그의 정보

jennysgap

jennysgap

활동하기