본문 바로가기
Reverse engineering/리버싱 분석 강의 정리

리버싱#1 - gdb 명령어 사용하는 방법!

by grey-hat hacker 2021. 3. 1.
728x90

- 먼저 작성 코드 확인

- gdb a.out 실행

 - disassemble = disas 명령어 실행

여기서 % = AT&T 방식의 경우 레지스터를 %형식으로 사용  

인텔 방식을 사용할 경우에는 표현 방식을 변경 해 주어야 한다.

 

run으로 프로그램을 시작해보면, Segmentation fault 에러 발생!!

그래서 Breakpoint를 만들어 주어야한다!  0x08048060 첫 번째 줄에 breakpoint가 걸렸다!

tip - breakpoint 할 때 b main+7 하면 오류!! 위치를 지정할 시! *main+7 이렇게 해야 한다!

 

현재 지금 프로그램의 문맥의 위치가 화살표로 표시되어있다! 아직 저 push 명령어 실행 전!

 

현재 문맥에서의 register의 값들이

다 나오게 된다!

 

eip - 다음 실행할 명령어를 가르킨다!

-> 여기에서는 push 가리킴!

 

esp - 스택의 위치!

 

tip) info reg $eax 

-> 내가 원하는 특정 레지스터에 들어가있는 값만 보고 싶을 때

 

esp(start point) - > 0xbffff0a0

현재 스택이 가르키는 곳에 들어있는 데이터 값을 알고 싶을 때! 

여기서 

x/x <- data 값을 확인하겠다!

x/s <- string 을 확인하겠다!

x/i <- instruction을 확인하겠다!

결과가 같은 걸을 알 수 있다!

x/i 는 main 함수에 포함된 값을 보여 달라는 뜻!

1 -> 10 -> 1234678 값으로 하나씩 들어가는 것을 확인 할 있다!

pop 명령어를 통해서 stack point의 위치를 변경했다! 

eax 의 값에는 12345678 값이 들어가서 값은 있지만 결국 쓰레기 값이다!

 

위에서 사용한 명령어 정리!

r - execute

b - breakpoint

info reg

ni - next instruction 

728x90
반응형

댓글