히공

hackingcamp22CTF - Demon Notepad 본문

write up/hackingcamp22CTF

hackingcamp22CTF - Demon Notepad

heegong 2021. 3. 20. 19:05
728x90

문제

 

 

 

문제 파일들

 

 

 

 

UPX 패킹이다.

 

 

 

 

 

 

언패킹을 진행한다.

 

 

 

 

 

실행화면

 

 

 

 

 

 

 

 

ida에서 본 화면이다.

 

 

 

 

 

 

2를 입력했을 때 나오는 것들

 

 

 

 

 

여기서 1을 입력했을 때 sub_401080을 호출하는데 저게 굉장히 중요하다.

 

 

 

 

 

 

 

여기서 딱 수상한 루틴이 있다.

 

 

 

 

 

 

 

변수들

 

 

 

 

 

 

 

 

x32dbg로 풀었다.

 

 

 

 

 

 

 

 

메인함수

 

 

 

 

 

 

 

mov eax, dword ptr fs:[0x30]
movzx eax, byte ptr [eax+0x68]

 

 

 

 

 

 

NtGlobalFlag이다.

디버깅 중인지 아닌지 판단할 때 사용된다.

 

디버깅 중이면 0x70을 반환하고 아니면 0을 반환한다.

 

 

 

 

현재 eax값이 0x70인 것을 볼 수 있다.

 

패치를 통해 넘어가자

 

 

 

 

 

 

 

 

안티디버깅을 우회 했다.

 

 

 

 

 

 

이 부분에 bp를 걸어준다.

 

실행한다.

 

 

 

2를 입력한다.

 

 

 

 

그 후 여기에 bp를 걸고 1을 입력해준다.

 

 

 

 

 

 

 

 

 

이 함수가 굉장히 중요하다.

 

 

 

 

 

 

함수 내부다.

 

 

 

 

 

 

 

 

bp를 건다.

 

실행 후

0~10 중 아무거나 입력한다.

 

 

 

 

 

 

 

 

 

이제 0x40114F로 jmp를 해줄꺼다.

 

 

 

 

 

 

 

 

수정을 해준다.

 

 

 

 

 

 

F9를 눌러 실행하면

 

SENBTVB7RDNtMG5fTjB0M3A0ZH0=

이러한 문자가 뜬다.

 

base64처럼 보였다.

 

 

 

 

 

플래그 : HCAMP{D3m0n_N0t3p4d}

 

CTF 끝나고 문자를 만들어내는 루틴을 분석했다.

 

 

 

 

 

from base64 import b64decode

def int_to_str_list(num):
    str_num = hex(num)[2:]
    result = []
    for i in range(0,len(str_num)-1,2):
        result.append(int(str_num[i:i+2],16))
    return result

def unsigned_int_8(num):
    if num<0:
        num+=0x100
    return num
    

v13 = int_to_str_list(0x6C354D537A544A583748425A48544B59)[::-1]
v14 = int_to_str_list(0x304733533048705A)[::-1]
v15 = int_to_str_list(0x3D304E46)[::-1]

v13 = v13+v14+v15

for v6 in  range(len(v13)):
    v7 = v13[v6]
    v8 = unsigned_int_8(v7-0x41)
    if unsigned_int_8(v7-0x41) <= 0x19:
        if v8<6:
            v8+=26
        v7 = (v8-6)%26 + 65
        v13[v6]= v7
    v9 = unsigned_int_8(v7-97)
    if v9 <= 0x19:
        if v9 < 6:
            v9+=26
        v13[v6] = (v9-6)%26 + 97

v13 = [chr(i) for i in v13]
st = b64decode(''.join(v13)).decode()
print(st)

 

플래그 : HCAMP{D3m0n_N0t3p4d}

'write up > hackingcamp22CTF' 카테고리의 다른 글

hackingcamp22CTF - dvm-rev  (0) 2021.03.20
hackingcamp22CTF - Opps Enc!  (0) 2021.03.20
hackingcamp22CTF - revtine  (0) 2021.03.20
hackingcamp22CTF - Do u know it?  (0) 2021.03.20
Comments