본문 바로가기

dreamhack3

dreamhack : rev-basic-5 문제 이 문제는 사용자에게 문자열 입력을 받아 정해진 방법으로 입력값을 검증하여 correct 또는 wrong을 출력하는 프로그램이 주어집니다. 해당 바이너리를 분석하여 correct를 출력하는 입력값을 알아내세요. 풀이과정 분석 대상 함수인 7FF ~ 1000 으로 들어간다. 알아내야 하는 값 (= 내가 입력해야 하는 값 = 플래그)을 input이라는 문자열이라고 하고, 버퍼에 저장된 값을 buffer라고 하면 결국 코드들의 큰 흐름을 봤을 때 input[i] + input[i+1] == buffer[i]인 input값을 찾아내야 한다. 이때 i는 0x18, 즉 24 전까지 반복된다. 0x00 input[0] = buffer[0] - buffer[1] + ... - buffer[23] => input[.. 2023. 11. 5.
dreamhack : rev-basic-6 문제 이 문제는 사용자에게 문자열 입력을 받아 정해진 방법으로 입력값을 검증하여 correct 또는 wrong을 출력하는 프로그램이 주어집니다. 해당 바이너리를 분석하여 correct를 출력하는 입력값을 알아내세요. 풀이과정 분석함수인 7FF ~ 1000 으로 들어가서 6번은 어떤 코드를 작성해야 하는 문제인지 알아보도록 한다. ret까지의 코드들의 큰 흐름을 살펴보니, 7FF~3020 주소에 저장된 문자열을 str, 7FF~3000 주소에 저장된 문자열을 buff라고 하고 사용자가 입력하는 문자열을 input이라고 한다면 str의 input[i]번째 문자 = buff의 i번째 문자가 되도록 하는 input값을 찾아내야 하는 것 같다. 그니까 내가 입력한 input이라는 문자열의 i번째 문자가 특정한 값.. 2023. 11. 5.
dreamhack : rev_basic_7 문제 이 문제는 사용자에게 문자열 입력을 받아 정해진 방법으로 입력값을 검증하여 correct 또는 wrong을 출력하는 프로그램이 주어집니다. 해당 바이너리를 분석하여 correct를 출력하는 입력값을 알아내세요. 풀이과정 전의 문제들과 같이, wrong이 저장된 코드로 들어가서 분석함수에 진입한다. 10DE 주소에 정의된 7FF ~ 1000 함수 들어가기 옆에 주석을 달아놨다~ 결국 함수의 전체 흐름을 살펴보면, (입력값의 i번째 문자를 i&7만큼 rol한 값) ^ i 의 값이 (버퍼에 미리 저장된 str 문자열의 i번째 값) 인 입력값을 찾아내면 되는 것이다. 이때 A ^ B = C 에서 xor 연산자의 특성을 이용하면 B ^ C = A, A ^C = B 이므로 => (입력값의 i번째 문자를 i&7.. 2023. 11. 4.