정해진 시리얼키에 해당하는 name값을 알아내면 되는 문제다.

 

올리디버거로 좀 보다가 루틴이 생각보다 복잡해서 ida로 까서 분석했다.

 

일단 맨 처음 name값의 길이가 4인지 체크한다.

 

 

그 다음 name값이 모두 알파벳 소문자로 이루어졌는지 확인한다.

 

 

그 다음 name값 중 서로 같은값이 존재하는지 확인한다.

 

 

그 다음 serial값이 11글자이고 6번째 값이 - 인지 확인한다.

 

 

여기까지 모든 조건이 일치하면 이제 입력받은 name값을 통해 특정 연산들을 거쳐 구한 값들과 serial이 일치하는지 확인한다.

 

연산로직은 크게 2가지로 이루어지는데 name의 첫번째 두번째 값을 통해 serial의 앞 5번째 값과 비교하고 name의 세번째 네번째 값을 통해 serial의 뒤 5번째 값과 비교한다.

 

 

 

 

 

이제 위의 코드를 토대로 파이썬으로 스크립트짜서 brute forcing해주면 된다. 이 때 readme 파일에서 name의 마지막 값이 p라고 했으니 이를 토대로 구해주면 된다.

 

serial = [7,6,8,7,6,7,7,7,7,6]

for i in range(ord('a'),ord('z')+1):
for j in range(ord('a'),ord('z')+1):
name_0 = i
name_1 = j
v7 = (name_0 & 1) + 5;
v48 = ((name_0 >> 4) & 1) + 5;
v42 = ((name_0 >> 1) & 1) + 5;
v44 = ((name_0 >> 2) & 1) + 5;
v46 = ((name_0 >> 3) & 1) + 5;
v34 = (name_1 & 1) + 1;
v40 = ((name_1 >> 4) & 1) + 1;
v36 = ((name_1 >> 1) & 1) + 1;
v9 = ((name_1 >> 2) & 1) + 1;
v38 = ((name_1 >> 3) & 1) + 1;

if v7 + v9==serial[0] and v46 + v38==serial[1] and v42 + v40==serial[2] and v44 + v34==serial[3] and v48 + v36==serial[4]:
print "name[0]="+chr(i)+" name[1]"+chr(j)

for i in range(ord('a'),ord('z')+1):
for j in range(ord('a'),ord('z')+1):
name_2 = i
name_3 = j
v21 = (name_2 & 1) + 5;
v49 = ((name_2 >> 4) & 1) + 5;
v43 = ((name_2 >> 1) & 1) + 5;
v45 = ((name_2 >> 2) & 1) + 5;
v47 = ((name_2 >> 3) & 1) + 5;
v35 = (name_3 & 1) + 1;
v41 = ((name_3 >> 4) & 1) + 1;
v37 = ((name_3 >> 1) & 1) + 1;
v23 = ((name_3 >> 2) & 1) + 1;
v39 = ((name_3 >> 3) & 1) + 1;

if v21 + v23==serial[5] and v47 + v39==serial[6] and v43 + v41==serial[7] and v45 + v35==serial[8] and v49 + v37==serial[9]:
if chr(j)=='p':
print "name[2]="+chr(i)+" name[3]"+chr(j)

위 코드를 돌려주면 다음과 같은 값들이 나온다. 뒤의 2자리가 mp이고 앞의 2자리가 4가지 경우의 수가 있으니 name값은 총 4가지가 존재할 수 있다.

 

 

bump
cqmp
ftmp
gpmp

 

위의 값 중 해당문제에선 bump만 정답으로 인증을 하고 있었다. 쨋든 이 값을 넣어줬더니 문제가 풀렸다.

 

 

 

 

 

 

 

 

 

 

 

 

 

'Wargame > reversing.kr' 카테고리의 다른 글

Reversing.kr Easy_ELF  (0) 2018.02.17
Reversing.kr CSHOP  (0) 2018.02.16
Reversing.kr ransomware  (0) 2018.02.16
Reversing.kr Music Player  (0) 2018.02.16
Reversing.kr Direct3D FPS  (0) 2018.01.21
블로그 이미지

JeonYoungSin

메모 기록용 공간

,