본문 바로가기
Security/Reversing

Abex crackme #5

by jino22 2021. 2. 7.

틀린 부분이 있다면 언제든지 댓글 남겨주세요! 

 

Abex crackme #5  문제 풀이

crackme5.exe
0.01MB


이 프로그램은 델파이로 만들어져 있으며 실행해보면 시리얼넘버를 입력하라는 메시지창이 뜬다.

알맞은 시리얼 넘버를 입력하면 오른쪽과 같이 Well Done! 메시지창이 뜨고 잘못된 시리얼 넘버를 입력하면 왼쪽과 같이 Error! 메시지창이 뜬다.

단순히 문제해결만 하는 것은 간단하다. 앞선 문제에서 했던 것처럼 Found Intermodular call에서 MessageBox함수의 위치를 찾아 정답 문자열을 출력하는 부분부터 값을 찾아 나가면 된다.

JE명령어에 따라 EAX가 0이어야 정답 메시지를 출력하는 부분으로 점프함을 알 수 있다.

* Jump Equal=비교하는 값이 같으면 ZF=1, ZF가 1일 때 jump동작 수행

EAX값을 확인하기 위해 4010F2에 BP를 걸고 실행을 시켜보면 EAX에 402000이 저장되어 있고 이 주소에는 앞선 코드에서 뽑은 일련번호가 저장되어 있다.

lstrcmpiA()함수는 사용자가 메시지창에 입력한 값과 일련번호 두개의 인수를 입력 받아 비교한다. 이때의 값이 같으면 0, 다르면 1이 반환되어 EAX값으로 저장된다. 402000에 저장되어 있는 일련번호를 입력 값으로 넣으면 정답이다.

 

 

이제 이 일련번호를 뽑는 부분을 분석해본다.

GetVolumeInformation()함수는 윈도우에서 제공하는 기본 함수의 구조로 지정된 루트 디렉터리가 속한 파일 시스템 정보와 볼륨 정보를 가져오는 함수이다. 이 정보를 가져와서 일련번호를 생성하는 것으로 추측된다.

일련번호 생성

* DL :EDX레지스터 하위 16비트

 

이 반복문을 통해 일련번호가 생성된다.

728x90
반응형

'Security > Reversing' 카테고리의 다른 글

GDB 사용법  (0) 2021.05.05
Reversing Basic Challenge #2  (0) 2021.04.25
Abex crackme #4  (0) 2021.02.07
Abex crackme #3  (0) 2021.02.07
PEB TEB  (0) 2021.02.02

댓글