티스토리 뷰
부동아리 POSIX 면접에서 출제된 리버싱 문제 풀이들입니다.
hard.exe
hard.exe는 제가 출제한 문제입니다.
먼저 바이너리를 보니 아무리봐도 배열처럼 생긴 값들이 있군요.
일단 'y'버튼을 이용해서 배열로 만들어줍시다.
그리고 이제 아래 루틴을 분석해보면 입력한 문자열의 각 인덱스에 2019를 더한 후에 0x191을 xor한 결과가 배열과 같으면 입력한 문자가 플래그라고 하네요.그렇다면 배열에서 각 인덱스에 0x191을 xor 해준 후에 2019를 빼주면 플래그를 구할 수 있습니다.
1 2 3 | arr=[2466, 2434, 2471, 2437, 2474, 2511, 2524, 2525, 2496, 2522, 2505, 2496, 2515, 2518, 2499, 2515, 2496, 2499, 2502, 2515, 2503, 2502, 2517, 2509, 2515, 2517, 2526, 2499, 2496, 2521, 2545] print(''.join(chr((i^0x191)-2019)for i in arr)) | cs |
플래그:P0S1X{jinhun_do_not_stay_alone}
-------------------------------------------------------------------------------
브루트포스 풀이 추가
1 2 3 4 5 6 7 8 | import string arr=[2466, 2434, 2471, 2437, 2474, 2511, 2524, 2525, 2496, 2522, 2505, 2496, 2515, 2518, 2499, 2515, 2496, 2499, 2502, 2515, 2503, 2502, 2517, 2509, 2515, 2517, 2526, 2499, 2496, 2521, 2545] for i in range(len(arr)): for j in string.printable: m=ord(j)+2019 m^=0x191 if m==arr[i]: print(j,end="") | cs |
-----------------------------------------------------------------------------------------------------------------------------------------------------
reversing.exe
reversing.exe는 면접에서 출제되었던 것보다 조금더 어려운 버전의 바이너리입니다.
바이너리를 열고 봐야할 부분은 이부분입니다.
input에 어떤 수를 입력하냐에 따라서 출력값이 바뀝니다.
hex29의 값은 로컬디버깅을 통해서 0x29임을 알 수 있습니다.
플래그 형식이 P0S1X{}인 것을 이용해서 ord('}') - a - 45의 값은 39이므로 input에 39가 들어가면 정확한 플래그를 얻을 수 있다는 것을 알 수 있습니다.
exe를 실행한후에 39를 입력하면 플래그를 얻을 수 있습니다.
1 2 3 4 5 6 7 8 | a=0x29 print("input:",ord("}")-a-45) arr=[0,-32,+35,-31,+40,+15,-12,-28,+41,+45] print("P0S1X{",end="") for j in range(len(arr)): print(chr(a+arr[j]+39),end="") print("\n") | cs |
위 코드와 같은 결과입니다.
플래그:P0S1X{P0s1x_D4y}
-----------------------------------------------------------------------------------브루트 포스 풀이 추가
1 2 3 4 5 6 7 8 9 10 11 12 13 | a=0x29 arr=[0,-32,+35,-31,+40,+15,-12,-28,+41,+45] i=0 while(1): flag="" for j in range(len(arr)): flag+=chr(arr[j]+i+a) if flag[len(arr)-1]=='}': print("P0S1X{"+flag) break i+=1 | cs |
---------------------------------------------------------------------------------
후기:삐빅!! 문제 난이도 조절에 실패한 것 같습니다!!......