728x90
반응형

 

문제 설명

  • 파일 실행 시 사용자가 입력할 수 있는 창이 출력된다.
  • 임의의 값을 입력 시, 부정확한 패스워드라는 문구가 출력된다.
  • 출제자가 정해놓은 패스워드를 맞춰보자.


사용 툴

  • 파일 정보 확인
    • ExeinfoPE
  • 비밀 번호 분석
    • X64 dbg

분석

1. 파일정보 확인

 

 

확인되는 패킹은 없고, 언어는 C++로 제작되었으며, 32bit라는 정보를 알 수 있다.

 

2. 분석 내용

처음 attach를 시키면 상단바에 모듈이 ntdll.dll로 되어있는데, easy_crackme.exe로 변경한다. (보기-Modules)

찾는 방법에는 빠르게 문자열참조를 찾는 방법과 위에서부터 호출순서를 확인해 보는 방법이 있는데, 결과적으론 동일하므로 호출을 따라가 본다.

맨 위를 보면 DialogBoxParamA를 호출함을 알 수 있는데 이 함수는 다이얼로그 박스를 만드는 API로 인자는 다음과 같으며, 

INT_PTR DialogBoxParamA(
  [in, optional] HINSTANCE hInstance,
  [in]           LPCSTR    lpTemplateName,
  [in, optional] HWND      hWndParent,
  [in, optional] DLGPROC   lpDialogFunc,
  [in]           LPARAM    dwInitParam
);

브레이크 포인트를 걸고 실행했을 때의 아래의 스택프레임을 확인할 수 있다.

즉, 4번째 인자의 값에 대화 상자 프로시저에 대한 포인터가 있음을 알기 때문에 0x00401020를 먼저 확인해 보자.

0x00401020에는 패스워드 인증 루틴이 없지만, 함수를 호출하는 것을 확인할 수 있는데 이를 따라가 보면,

패스워드를 검증하는 것을 확인할 수 있다.

text 검증하는 듯한 쪽에 break 포인트를 걸고, 임시로 fffffffff를 입력 후 아래처럼 문자가 들어간 곳의 메모리(덤프)를 확인하면

esp+5

로 두 번째 텍스트가 a임을 알 수 있다.

이후도 동일하게 확인해 보면..

3~4 : 5y

그리고 이후 문자도 쭉 확인하면.. 비밀번호는

E+a+5y+R3versing = Ea5yR3versing 임을 알 수 있다.


링크

http://reversing.kr/challenge.php

 

Reversing.Kr

Copyright © 2012-2024 Gogil All Right Reserved.

reversing.kr

 

728x90
반응형