728x90

파일을 실행시키면 다음과 같이 입력창이 나오고, 입력값을 어떤 문자열과 비교한다. 그 문자열을 알아내는 문제다.

 

우선, x32_dbg 로 보면  

이렇게 다양한 정보들이 나오는데, 

 

이 문제를 풀어가는 방법은, visual_studio 혹은 gdb를 사용하는것 처럼 breakpoint를 건 다음에 스택에 들어있는 인자와 어셈블리의 관계를 보면서 확인한다.

 

먼저 모든 모듈에서 '모듈간 참조'를 찾아보면,

이렇게 호출된 다양한 함수들이 나오고 GetDLgItemtext함수가 문자열을 받아오는 함수이다.

 

에디트 간에 문자열 복사하기

: Win32 프로그래밍 관련 전체 목차 http://blog.naver.com/tipsware/221059977193이 강좌는 아래에 링크...

blog.naver.com

다음으로 모든 모듈에서 '문자열 참조'를 찾아보면, 

 

여기서 패스워드가 틀렸을 경우 이동하는 주소를 알 수 있다.

 

Incorrect 일때 이동하는 주소는 401135 인 것을 알 수 있다.

 

따라서, 

 jne(jump not equal - 비교 결과가 다를 때 점프)를 401135로 뛰면 틀린것이니깐 jne를 했을때 값이 같아야 한다.

 

총 4개의 비교가 있고, 각각 break를 걸어서 확인해봤다.

 

STAGE 1.

esp + 5위치에 있는 값과 0x61, 즉 ascii로 'a'랑 같아야 한다.

 

입력이 esp + 4부터 들어가므로 두 번째 string은 'a'이다. (_a_____...)

 

STAGE 2.

ecs에 [esp + A]의 주소를 넣고, test라는 것을 하는데, eax값이 0이냐를 확인하는 구문이지만 디버깅해보면 당연히 넘어가고, 문자열 비교만 확인하면 된다.

1a23456789를 넣었을때, 앞의 1a는 자르고 '5y'랑 비교한다. (_a5y___...)

 

STAGE 3.

 

여러 분기점이 보이지만, string은 'R3versing'이고 해당 값을 cmp를 하는데 

string 값은 b1에 들어있으니깐 이제 내가 어디서부터 입력한 값이 d1에 들어가는지 확인하면 된다.

1a5y23456789를 넣었을때, 

5y 뒷부분은 3versing에 대응하고, 

다른 분기점을 보니 결국 뒷부분은 R3versing에 해당한다. (_a5yR3versing)

 

STAGE 4.

 

우리가 입력한 값은 stage 1에서 말했듯이 esp + 4부터 들어가므로, 첫글자는 E이다. (Ea5yR3versing)

 

728x90

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

[reversing.kr] Replace  (0) 2024.02.16
[reversing.kr] Music Player  (1) 2024.02.15
[reversing.kr] Easy Keygen  (0) 2021.04.14

+ Recent posts