본문 바로가기

Return to csu

(2)
[ROP_64bit] codegate2018 Qual BaskinRobbins31 1. 바이너리 파일 2. 바이너리 분석 본 글은 ghidra 툴을 이용하여, 분석하였다. ( 아래는 main에 대한 코드만 넣어두었다. 좀 더 자세한 사항은 디컴파일하여 확인해 보는 것을 추천한다. ) 해당 바이너리는 베스킨라빈스31게임과 비슷한 것으로, 횟수 31에서 입력한 값만큼 차감하면서 0이 되면 loss하는 게임이다. 단, 입력값은 1~3중에 입력해야 하는 조건이 존재한다. your_turn() : 사용자가 입력한 값을 필터링하는 함수이다. my_turn() : 컴퓨터가 입력하는 값을 의미하는 함수이다. - 남은 기회가 4일 경우, 컴퓨터가 이기게 된다. - 남은 기회가 0미만 3이상일 경우, 남은 기회에서 -1 된다. - 남은 기회가 1~3일 경우, 컴퓨터가 이기게 된다. undefined8 ..
RTC (Return To CSU) 1. 정의 _ _libc_csu_init() 함수의 일부 코드를 Gadget으로 사용하는 기법이다. gadget이 모자라거나 없는 경우, RTC기법을 사용한다. 2. _ _libc_csu_init() 함수 정의 프로그램 실행 시, _init() 함수와 _ _preint_array, _ _init_array에 설정된 포인터를 읽어서 함수를 호출한다. 3. _ _libc_csu_init에 존재하는 Gadget _ _libc_csu_init()에서 가젯으로 사용하는 부분이다. ① Gadget 1 RBX, RBP, R12, R13, R14, R15 레지스터에 값을 저장할 수 있다. ② Gadget 2 Gadget 1에서 저장한 레지스터를 이용해서 함수의 인자값으로 전달한다. R13, R14, R15 레지스터에 ..