Reversing.kr Position
by St1tch
키젠 문제로 Serial이 76876-77776일때의 name값을 찾아야한다.
끝 글자는 'p'로 힌트가 주어져있다.
serial을 만드는 루틴을 찾아 코드를 다시 짜면 될 거 같은 느낌이 든다.
우선 Correct 부분으로 가면 바로 위에 어떤 함수를 호출하고 리턴값이 1이여야 Correct가 되는 것을 볼 수 있다.
이 함수 안을 살펴보았다.
우선 첫번째 루프가 나타난다.
이 루프에서는 name에 입력한 4글자가 알파벳 소문자인지 확인을 하는 루틴이다.
그리고 다음 루프가 나타난다.
이중 루프로 되어있는 구조이다.
간단히 설명하자면 name의 각각의 글자가 서로 같은글자가 있는지 확인을 하는 루틴이다.
그리고 이후에 본격적으로 name을 이용해 serial을 만드는 루틴이 나온다.
ida를 참고하여 python으로 serial만드는 코드를 짯다.
import string maps = string.ascii_letters[:26] name = "" input_serial = "76876-77776" for i in maps : if i == 'p' : continue for j in maps : if i == j or j == 'p' : continue for k in maps : if k == j or k == i or k == 'p' : continue name = i + j + k + 'p' serial = "" tmp = "" a = ord(name[0]) v8 = (a & 1) + 5; v59 = ((a >> 4) & 1) + 5; v53 = ((a >> 1) & 1) + 5; v55 = ((a >> 2) & 1) + 5; v57 = ((a >> 3) & 1) + 5; b = ord(name[1]) v45 = (b & 1) + 1; v51 = ((b >> 4) & 1) + 1; v47 = ((b >> 1) & 1) + 1; v10 = ((b >> 2) & 1) + 1; v49 = ((b >> 3) & 1) + 1; tmp = str(v8 + v10) v13 = input_serial[0] if v13 == tmp : serial += tmp tmp = str(v57 + v49) v15 = input_serial[1] if v15 == tmp : serial += tmp tmp = str(v53 + v51) v18 = input_serial[2] if v18 == tmp : serial += tmp tmp = str(v55 + v45) v21 = input_serial[3] if v21 == tmp : serial += tmp tmp = str(v59 + v47) v24 = input_serial[4] if v24 == tmp : serial += tmp serial += '-' c = ord(name[2]) v27 = (c & 1) + 5; v60 = ((c >> 4) & 1) + 5; v54 = ((c >> 1) & 1) + 5; v56 = ((c >> 2) & 1) + 5; v58 = ((c >> 3) & 1) + 5; d = ord(name[3]) v46 = (d & 1) + 1; v52 = ((d >> 4) & 1) + 1; v48 = ((d >> 1) & 1) + 1; v29 = ((d >> 2) & 1) + 1; v50 = ((d >> 3) & 1) + 1; tmp = str(v27 + v29) v31 = input_serial[6] if v31 == tmp : serial += tmp tmp = str(v58 + v50) v34 = input_serial[7] if v34 == tmp : serial += tmp tmp = str(v54 + v52) v37 = input_serial[8] if v37 == tmp : serial += tmp tmp = str(v56 + v46) v40 = input_serial[9] if v40 == tmp : serial += tmp tmp = str(v60 + v48) v43 = input_serial[10] if v43 == tmp : serial += tmp print name
이렇게 코드를 짠 뒤 돌리면 3개의 값이 나왔다.
제일 첫번째 나온 값으로 인증하니 답이였다.
블로그의 정보
튜기's blogg(st1tch)
St1tch