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

리버싱 공부

by 겸손하게 빚진자로, 밝게 인사 2014. 12. 9.
728x90

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)
  • // 메모리 덤프를 확인하여 변경
반응형

'자격증 > 정보보안기사' 카테고리의 다른 글

[정보보안기사 실기] 시스템보안③  (0) 2016.04.18
[정보보안기사 실기] 시스템보안②  (0) 2016.04.17
[정보보안기사 실기] 시스템보안①  (0) 2016.04.16
gdb 명령어  (0) 2014.12.10
ASM to C (1)  (0) 2014.12.10