해보자고

[드림핵] rev-basic7 본문

카테고리 없음

[드림핵] rev-basic7

초코맛동산 2024. 5. 12. 17:09

# 문제

문제 링크 | https://dreamhack.io/wargame/challenges/21

 

rev-basic-7

Reversing Basic Challenge #7 이 문제는 사용자에게 문자열 입력을 받아 정해진 방법으로 입력값을 검증하여 correct 또는 wrong을 출력하는 프로그램이 주어집니다. 해당 바이너리를 분석하여 correct를 출

dreamhack.io

이 문제는 사용자에게 문자열 입력을 받아 정해진 방법으로 입력값을 검증하여 correct 또는 wrong을 출력하는 프로그램이 주어집니다.
해당 바이너리를 분석하여 correct를 출력하는 입력값을 찾으세요!

 


 

(도저히 잘 모르겠어서 블로그를 여럿 참조하였음을 알립니다....)

 

 

 

correct와 wrong으로 나뉘는 분기문을 찾아서 들어가 보았다. (call sub_140011B0임을 이전까지의 문제풀이를 통해서 알 수 있다.) f5 키와 함께 해당 함수를 디스어셈블리하여 살펴보았다.

 

 

 

 

 해당 식은 i xor rol(input[i] , (i & 7) ) = 저장된 문자열[i] 이 되어야 if문에 조건이 맞지 않는다. 해당 식을 조금 더 간편하게 만들어보는 작업을 거쳐보자. 

 

해당 식의 양쪽에 xor i를 해주고 (i and 7) 만큼 ror 해주면 아래와 같은 식이 된다.

 

input[i] = ror(i xor buf[i] , i & 7)

- 양 쪽에 역연산 i와 i & 7만큼 ror 한 식

 

input[i] = ((i xor buf[i]) >> (i and 7)) + ((i xor buf[i]) << ((8-i) and 7) 

 

 

 

답: Roll_the_left!_Roll_the_right!