본문 바로가기

전체 글

(48)
[Dreamhack]rev-basic-1 WriteUp ida로 rev-basic-1을 연 사진이다. 무지성 F5(PseudoCode)를 눌러본다. 분기문을 분석하기 위해 안에 들어있는 sub_14 ~를 열었다. 무수히 많은 아스키코드들이 보인다. 모두 정리해서 cyberchef를 돌린다. 익스 성공
x86, x64 Calling Convention(함수 호출 규약) 차이점 정리 32비트 함수 호출 규약 cdeclC언어에서 사용되는 방식으로 call하는 쪽에서 스택을 정리한다. stdcallcdecl과 반대로 호출된 함수에서 스택을 정리한다. fastcallstdcall 방식과 같되 함수에 전달하는 파라미터 일부를 스택이 아닌 레지스터를 이용한다. 64비트 함수 호출 규약fastcall 방식 하나만을 이용한다.다만 변형된 fastcall 방식으로 함수 파라미터 4개까지 레지스터에 저장하여 전달한다.
x86_64 함수 호출 규약 프롤로그, 에필로그 정리 스택 프레임이란 함수가 호출되었을 때 그 함수가 가지는 공간 구조이다. 함수가 동작을 종료하고 복귀 주소로 돌아갈 때 스택 프레임은 소멸된다. ESP 레지스터는 스택 포인터 역할을 하고, EBP 레지스터는 베이스 포인터 역할을 한다. ESP 레지스터의 값은 프로그램 안에서 수시로 변경되기 때문에 스택에 저장된 변수, 파라미터에 접근하고자 할 때 ESP 값을 기준으로 하면 프로그램을 만들기 어려워진다. 따라서 어떤 기준 시점 (함수 시작) 의 ESP 값을 EBP에 저장하고 이를 함수 내에서 유지해주면, ESP 값이 아무리 바뀌어도 EBP 를 기준으로 안전하게 해당 함수의 변수, 파라미터, 복귀 주소에 접근할 수 있게 된다. 1. 함수가 사용할 파라미터를 스택에 넣고 함수 시작지점으로 점프 (함수 호출) 한..