히공

코드엔진 - basic 17 본문

reverse engineering/CodeEngn

코드엔진 - basic 17

heegong 2020. 10. 10. 22:52
728x90

17번을 풀어보겠습니다.

 

 

 

 

 

 

실행화면 입니다.

 

 

 

 

 

 

 

 

 

 

 

 

 

1234, 1234를 입력해보니까 아무 반응이 없습니다.

 

 

 

 

 

Name이 한자리라고 해서 1,1 을 입력해보았습니다. 근데 Please Enter More Chars... 이라고 나오는군요.

 

 

 

 

 

 

 

 

 

f8을 계속 눌러보니 제가 bp걸은 함수에서 gui창이 뜹니다.

 

 

 

저 함수에 enter을 눌러서 들어가서

 

 

 

문자열 참조로 Please를 찾아보면

 

 

 

 

아까 봤던 글자가 있습니다.

 

 

 

 

 

 

 

 

이런식으로 나옵니다.

 

 

 

위쪽부분에 bp를 걸고

 

 

 를 입력하고 Check it! 을 입력해봅시다.

 

 

 

 

 

 

 

이런식으로 나왔습니다.

 

 

 

 

 

이곳은 Name값의 길이가 3이하인지 체크 하는겁니다.    문제에서 Name이 한자리라고 했으니까 저기 부분을 patch 하고 넘어갑시다.

 

 

 

 

 

 

 

다시 실행하고 입력해줍시다.

 

 

 

 

 

 

 

이거를

 

 

 

 

 

 

 

 

 

 

jmp로 바꿔줍니다.

 

 

 

 

 

 

 

 

그리고 계속 F8을 누르다 보면

 

 

 

 

 

 

 

이런식으로 정리가 됩니다.

 

저희가 중요하게 생각할꺼는 Serial이 생성되는 부분입니다.

 

 

 

 

 

 

 

함수로 들어가서 bp를 걸고 다시시작 해봅시다.

 

 

 

 

 

 

 

 

 

입력

 

 

 

 

jmp로 변경

 

 

 

 

분석할 부분으로 도착했습니다.

 

 

 

 

 

 

strlen(Name)만큼 for문을 돌립니다.

 

 

 

 

이런식으로 정리가 됩니다.  (1번째 루틴)

 

 

 

 

 

 

 

다음 루틴 입니다.     (2번째 루틴)

 

 

 

 

 

 

 

 

 

 

 

그러면 1,2 번째 루틴만 만들어서

브루프 포스를 돌리면 될것같습니다.

 

 

 

 

 

 

 

 

 

 

두번째 루틴까지 구현한것입니다.  (출력값 : 63E2-2336)

 

 

 

브포를 돌리겠습니다.

 

 

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
def dword(num):
    hex_num = hex(num).replace('0x','')
    if len(hex_num)>8:
        hex_num=hex_num[len(hex_num)-8:]
    return int(hex_num,16)
 
 
def make_4(num):
    return hex(num).replace('0x','')[:4].upper()
 
 
 
for i in range(0x30,0x7B):
    Name = chr(i)
    result = ''
 
    #첫번째
    esi = dword(ord(Name)*0x772)
    edx = dword(esi**2)
    esi = dword(esi+edx)
    esi = dword(esi*0x474)
    esi = dword(esi+esi)
    esi = make_4(esi)
    result += esi+'-'
 
 
 
    #두번째
    edx = dword(ord(Name)+0x11)
    edx -= 5
    edx = dword(edx*0x92)
    edx = dword(edx+edx)
    edx = dword(edx*0x819)
    edx = make_4(edx)
    result += edx
    if result=="BEDA-2F56":
        print(chr(i))
        break
 
 
 

 

최종코드 입니다.

 

 

출력값 : F

 

 

 

 

근데 정답은 MD5 해쉬값(대문자였으니)

답은 800618943025315F869E4E1F09471012입니다.

 

 

 

답 : 800618943025315F869E4E1F09471012

 

'reverse engineering > CodeEngn' 카테고리의 다른 글

코드엔진 - basic 19  (0) 2020.10.18
코드엔진 - basic 18  (0) 2020.10.17
코드엔진 - basic 16  (0) 2020.10.05
코드엔진 - basic 15  (0) 2020.10.04
코드엔진 - basic 14  (0) 2020.09.25
Comments