[1주] 02장-디버거

Posted by dw0rdptr
2015. 1. 12. 17:31 Study/파이썬 해킹 프로그래밍

디버거 

디버거는 실행중인 프로세스를 트레이스하거나 동적 분석을 할수 있게 도와준다.

특히 동적분석은 악성코드 조사나 퍼저 적용에 있어 필수적이기 때문에 해커에게 디버거는 매우 중요하다고 볼 수 있다


디버거에는 화이트박스 디버거와 블랙박스 디버거가 있다.

화이트박스 디버거 : 개발플랫폼이나 IDE 등이 개발자가 자신이 작성한 코드를 디버그할 수 있게 자체적으로                             내장하고 있는 디버거이다.

블랙박스 디버거 : 리버스 엔지니어링이나 버그를 찾아내는 등 원본 소스코드가 없는 상태에서 분석을 목적으로                         사용되는 디버거이다.




범용 CPU 레지스터

레지스터는 CPU 내의 작은 저장공간으로 매우 빠르다.x86 아키텍처에서 CPU는                                       다음 8개의 범용 레지스터를 사용한다.


EAX : 산술 연산을 수행하기위해 또는 함수의 리턴값을 전달하기 위해 사용

EDX : 복잡한 연산을 위해 추가적으로 데이터를 저장할때 사용(또는 범용목적의 저장소)

ECX : 반복적으로 수행되는 연산에 주로 사용(미리 반복할 값을 넣어두고 감소시키면서 카운트를 셈)

ESI  : 시작지 인덱스(Source Index)

EDI  : 목적지 인덱스(Destination Index)

EBX : 특정한 목적이 없으므로 사용자가 목적에 맞게 씀

스택 레지스터

EBP : base pointer 레지스터. 스택을 위에서부터 아래로 자란다고 할때, 가장 위쪽이되는 위치를 가리키는 레지스터

ESP : stack pointer레지스터, 스택을 위에서부터 아래로 자란다고 할때, 스택의 가장 낮은 위치를 가리키는 레지스터



스택

스택은 FILO 구조이며 보통 스택을 아래에서부터 쌓아올리는 방식으로 표현하는데, 실제로 스택은 메모리를 효율적으로 쓰기 위해 높은주소부터 낮은주소로 쌓이므로 고드름처럼 자라는 방식으로 이해했다.

예시는 1장에서 함수호출규약을 정리할때 쓴 소스이다


ex) int c_fun(a,b,c){

int a_fun

{
        

         

cdecl 호출규약을 기준으로 파라미터 c,b,a 순서대로 push되고 지역변수 a_fun 을 선언했을때 스택프레임 모습이다.