본문 바로가기
étude/reverse engineering

dreamhack : rev_basic_7

by mummoo 2023. 11. 4.

문제

이 문제는 사용자에게 문자열 입력을 받아

정해진 방법으로 입력값을 검증하여

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만큼 rol한 값) = (버퍼에 미리 저장된 str 문자열의 i번째 값) ^ i

 

=> 입력값의 i번째 문자 = (버퍼에 미리 저장된 str 문자열의 i번째 값) ^ i 를 i&7만큼 ror 한 값 

이 된다. 

우리가 구해야 하는 것은 결국 어떠한 값을 입력해야 하는지이기 때문에, 

따라서 이 부분을 연산하는 역연산 코드를 짜보았다. 

 

 

ror 함수를 먼저 짠 뒤, 

메인 함수에서 ror을 이용했다. 

 

ror, rol에 대한 자세한 설명은

https://ychxnn.tistory.com/27

 

shift / ROL, ROR

이해 될 때까지 공부한다.... 정의 ROL = Rotate Left ; 어셈블리에서 왼쪽으로 shift해주는 연산 ROR = Rotate Right ; 어셈블리에서 오른쪽으로 shift 해주는 연산 일반적인 shift 연산 일반적인 shift 연산에서,

ychxnn.tistory.com

따로 자세히 써놨당

 

쨘~

 

플래그 : Roll_the_left!_Roll_the_right!>

'étude > reverse engineering' 카테고리의 다른 글

dreamhack : rev-basic-5  (0) 2023.11.05
dreamhack : rev-basic-6  (0) 2023.11.05
dreamhack : rev_basic_3  (2) 2023.08.06
dreamhack : rev_basic_2  (1) 2023.08.05
dreamhack : rev_basic_1  (2) 2023.01.12