우선 이 문제는 50점짜리랑 난이도가 비슷했다
음.... 그냥 80점 이지크랙이 좀 더 시간 잡았다
아이디 비교전 함수가 3개 보이는데
1번은 id와 pw를 입력받는 곳이다.
2번째는 내가 입력한 값을 연산해서 저장한다.
3번째는 2에서 연산한 결과에 다시 또 연산한다.
이 값을 G@ytOr!es 이거와 비교한다.
그렇다면 역연산을 짜고 돌리면 ID를 알 수 있다.
그 후에 패스워드를 비교하는 함수안으로 들어가게 된다.
이게 패스워드를 비교하는 부분인데 아이디와 마찬가지로 함수 2개의 연산을 거친 후
저 이상한 값과 비교를한다.
근데 첫 번째 함수를 보면 저기 *(v4 + 1LL + a1) 이 값을 알 수 없다
그래서 디버깅을 해봤는데 ID에서 적은 값을 바탕으로 가져오게 된다.
그 다음 첫 번째에서 연산한 값을 가지고 또 다시 연산을 한다
이렇게 해서 최종적으로 가지는 답은
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 | a1 = ['G', '@', 'y', 't', 'O', 'r', '!', 'e', 's'] a2 = ['u', '1', '|', 'g', '%', 'e', 'H', 'e', 'y'] for x in range(8, -2, -2): a1[x] = chr(ord(a1[x]) ^ 0x1a) for x in range(8, -2, -2): a1[x] = chr(ord(a1[x]) + 16) print "".join(a1) for y in range(8, -2, -2): a2[y] = chr(ord(a2[y]) ^ 0x66) for y in range(6, -2, -2): a2[y] = chr(ord(a2[y]) ^ ord(a1[y+1])) print "".join(a2) | cs |
이렇게 역연산을 4번 거치고 나면 아이디와 패스워드를 알 수 있다.
ID: m@sterKey
PW: S1ng1eKe
그리고 약간 실수가 있었는데
PW 끝에 마지막한자리가 제대로 안나왔다.
하지만 위아래 게싱을 안해도 바로 y라는걸 알 수 있기때문에 그냥 코드를
고대로 쓰면된다.
NOE{L0g1n_SystEm_R3verS1nG}
'WARGAME > Noe.systems' 카테고리의 다른 글
[Noe.systems] The Shape of Voice [Forensic] (0) | 2017.05.10 |
---|---|
[Noe.systems] card [Pwnable] (0) | 2017.05.10 |
[Noe.systems] Easy keygen [Reversing] (0) | 2017.05.10 |
[Noe.systems] Break Time [Reversing] (0) | 2017.05.10 |
[Noe.systems] Double Double [Misc] (0) | 2017.05.10 |