본문 바로가기

WARGAME/Noe.systems

[Noe.systems] LoginSystem [Reversing]

우선 이 문제는 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}