Notice
Recent Posts
Recent Comments
Link
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | 5 | 6 | 7 |
8 | 9 | 10 | 11 | 12 | 13 | 14 |
15 | 16 | 17 | 18 | 19 | 20 | 21 |
22 | 23 | 24 | 25 | 26 | 27 | 28 |
29 | 30 | 31 |
Tags
- dreamhack reversing
- 위니브
- 인프런 강의 추천
- 강의 체험단 1기
- 안드로이드 adb start-server
- 리버싱 플래그
- 자바스크립트강의 후기
- 자바스크립트 강의 추천
- adb
- 자바스크립트 강의
- 오블완
- 리버싱 핵심 원리
- rev-basic 풀이
- 드림핵 리버싱
- 안드로이드 adb
- 드림핵 리버싱 풀이
- 리버싱 입문
- 리버싱 초보
- 제주ICT
- 안드로이드 리버싱
- 자바스크립트
- 리버싱핵심원리
- 티스토리챌린지
- 드림핵 플래그
- 더오름
- adb 옵션
- 제주코딩베이스캠프
- 리버싱 스터디
- 리버싱
- 안드로이드 모바일 앱 모의해킹
Archives
- Today
- Total
해보자고
[드림핵] rev-basic7 본문
# 문제
문제 링크 | https://dreamhack.io/wargame/challenges/21
이 문제는 사용자에게 문자열 입력을 받아 정해진 방법으로 입력값을 검증하여 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!