본문 바로가기
⑥ IT 자격증/정보보안기사

리버싱 공부

by ->^_^<- 2014. 12. 9.

1. 메모리 쓰는 방법과 레지스터 쓰는 방법

2. EIP, ESP, EBP는 항상 목적에 맞게 사용해야 한다.

3. 컴퓨터가 메모리를 어떻게 사용하는지 달달 외우고 있어야 한다.

4. 어셈블리어를 C언어로 고치는 연습방법

  • 리눅스에서 C언어 작성 후 Compile 후 GDB를 이용하여 디버깅

    gcc -o test test.c -m32 -mpreferred-stack-boundary=2 -fno-stack-protector
    gdb ./test

     

     

  • 리눅스에서 C언어 작성 후 어셈블리어로 변경하여 코드 비교  

    gcc -S test.c
    cat test.s

     
  • 코드 분석 시 중요한 것이 변수명과 함수명인데… 어셈에서는 이름을 알기 어려움
  • 인자면 a 라는 변수로 치환
  • 지역변수면 v 라는 변수로 치환
  • 전역변수면 g 라는 변수로 치환
  • EBP를 기준으로 – 한 값 : EBP-0x4는 v4, EBP-0x8은 v8
  • EBP를 기준으로 + 한 값 : EBP+0x4는 a1, EBP+0x8은 a2,
  • ESP를 기준으로 한 값은 아래에 Call문이 나오며, 함수로 전달되는 파라미터(순서는 역순)
  • leave : 지역변수가 있으면 leave로 끝나고 없으면 지역변수가 없으면 pop으로 끝남
  • 첫부분에 stack에서 sub를 하는 경우 : 지역변수가 있는 경우
  • //esp를 기준으로 위치가 나오면 call까지 잘라서 함수로 변경
  • //괄호가 있을 경우는 v4이지만 mov로 바꾸면서 괄호를 바꾸면 v4가 아님
  • // 맨 마지막까지 변경이 안되는 부분은 C 문법적으로 맞춰준다.
  • // lea가 붙으면 변수값을 가져온다고 보면 된다.
  • // 프롤로그와 변수정의는 변경 후 삭제
  • // 어셈의 표현이 남아있으면 남겨 둔다.
  • // lea는 mov로 변경 후 괄호 삭제
  • // 괄호의 값은 포인터값
  • // 어셈적 표현이 없을 때만 지워나간다.
  • // 함수가 끝날 때는 eax에 값이 남아있는지 항상 확인하여 return되는 값이 있는지 체크
  • // 이게 뭐하는 프로그램인지는 C로 바꾸고 나서 생각할 것
  • // @plt는 다른 라이브러리에 있는 함수를 import한 함수다. ex) printf("%d", a1)
  • // 메모리 덤프를 확인하여 변경
728x90
반응형