본문 바로가기

리버싱2

리버싱 기초- 간단한 C코드로 코드분석 여기 아주 매우 그것도 엄청 실눈떠도 무슨 코드인지 아는 유아 수준의 간단한 코드가 있다. 보통 사람이 해석하기 편한 언어를 High Level Language라고 부른다. disas를 이용하여 main()를 disassemble하였다. 여기서 코드하나하나가 어떻게 동작하는지 살펴보자. 먼저 rbp값을 push해준다 그 다음 mov로 rsp값과 rbp값을 같게 해준다. 여기서 rsp가 시작지점이다. 그 다음 sub를 이용하여 0x10 만큼의 크기를 뺴준다. 그리고 16byte 공간에 C에서 선언한 변수들이 들어간다. 그 다음 0x5를 [rbp-0x4]만큼 떨어진 곳에 4byte 크기로 넣어준다 여기서 DWORD는 4byte이다. 똑같이 0xa를 [rbp-0x8]만큼 떨어진 곳에 4byt 크기로 넣어준다... 2020. 4. 17.
pwnable-Bof write up 이번 시간에는 pwnable.kr에서 bof문제에 대해 write up해보겠다. 해당 bof writeup을 하기 전 간단하게 assembly 언어의 기본 명령어 부터 숙지하자. opcode(CPU에서 실행할 수 있는 단일 명령어) push -스택에 값을 넣음 pop - 스택에 값을 뺀다 add - 값을 더한다. sub - 값을 뺀다. mov - 값을 넣음 ex) a=b ebp=esp lea - 값 대신 주소를 넣음 cmp - 두값을 비교 call - 함수를 호출 ret - call로 호출된 함수를 종료하고 그 다음 명령줄로 이동하는 명령어 operand(피연산자) eax - 함수의 리턴값이 여기에 들어감(+,- 연산) edx - eax와 역할은 같지만 함수의 리턴값이 없음 ecx - 카운터 역할(ex .. 2020. 4. 16.