728x90

*아래 내용은 동아리 스터디 중 공유받은 내용이며 실행했던 코드는 별도로 공개하지 않습니다.*

 

1. visual tudio를 이용한 코드 실행 확인

먼저 c++코드를 받아서 visual studio로 실행을 시켰다.

결과는 각각 키를 입력할 때마다 그 키값이 화면에 출력되었다.

 

2. x32dbg.exe로 확인하기

visual tudio에서 실행했던 파일을 찾아서 불러왔다. 

 

그리고 설정을 수정하면 좋다고 해서 해보았다.

설정-환경설정으로 들어가서 시스템 중단점, 진입점 중단점, TLS 풀백에 체크가 되어있는 것을 시스템 중단점, TLS 풀백 체크를 해제 시켜준다.

 

그리고 현재 실행중인 화면에서 F8을 누르고 함수 호출하는 코드를 찾아 누르게 되면 실행하게 된다. 그리고 클릭해 마우스 오른쪽을 눌러서 다음을 찾기-모든 모듈-문자열 참조를 가면 창이 뜨게 되고 key라는 것을 볼 수 있다. key는 주소를 확인할 수 있다. 그리고 여기서 브레이크 포인트를 걸어서 진입을 해볼 수 있다. 메인함수를 진입해 F8을 눌러서 실행하도록 만들어주고 그렇게되면 메인함수에서 어떤게 실행되고 있는지 확인할 수 있다. 그리고 snowman 확장자를 실행해본다. x32dbg plugin에 다운받아 넣어서 c언어에서 어떻게 생겼는지 볼 수 있다.

 

다음으로는 스택공간을 확보하는 것이다. 일단 여기서 중요한 것은 cell로 불러들이는 함수, jump부분이다. 이것이 중요한 이유는 F8을 누르다보면 반복문에서 반복이 되는 것을 볼 수 있기 때문이다. 성립하는지 검사해주는 것이다. 그리고 클릭이벤트가 발생한 지점엣 F9을 누르게 되면 jump한 것들이 어떻게 되어있는지 확인할 수 있다.

 

+)쉽게 해주는 단축키

  • F7: 함수불러올 때 그 함수 안으로 들어가게 해주는 키이다.
  • F8: 한줄한줄씩 실행을 시킨다.
  • F9: F2로 정해진 곳까지만 실행하고 멈춘다.
  • F2: Break Point를 건다. 멈추는 곳을 지정한다.
  • F10: 처음부터 끝까지 실행한다.
  • 8+shift+F8을 하면 현 위치로간다. 자기자신의 위치를 보여준다.
  • ctrl+F2: 현재 하고 있는 것을 보여준다.
  • Ctrl+G: 따라갈 표현식 입력 창이 뜬다. 주소입력해서 갈 수 있다.
  • Space: 어셈블을 보여준다.
    되돌아가기 버튼: 재실행을 시켜준다.

 

+)기억해야 할 코드

  • je, jge, jmp,push, ,mov 이것이 중요하다. ->숙지
  • push: 스택 영역에 저장시켜 놓는 것이고 주로 지역변수나 call함수 했을 때 다시 돌아와
    야 하기 때문에 스택영역에 저장해두는 경우가 있는데 이때 활용되는 것이다.
  • pop: push에 같이 오는 것, 저장되어있던 것을 가져와서 쓴다.
  • mov: edp, esp 두 인자의 값을 넣는다.
  • edq: 주소를 저장해 놓는 레지스터
  • esp: 스택의 포인터, 스택의 위치 알려준다.
  • cx: 카운터 레지스터-> 반복문 1씩 증가시킬 때 이것을 1씩 증가시킨다.
  • je: z플래그가 있는데 결과값이 0일 때 설정됨-> 1 아닐때는 0이 된다. jump와 비슷한
    것이다.
  • jge: eax가 크거나 같거나 할 때 발동이 돼서 넘어간다.
  • call: 함수를 불러올 때 사용하는 명령어이다.
728x90

+ Recent posts