상세 컨텐츠

본문 제목

[Write-up] Abex-crackme 4

Reversing Write-Up/01.Abex's crackme

by RACC8N 2020. 1. 15. 06:20

본문

파일을 실행시키면 다음과 같은 창이 뜬다.

 

Serial창에 정확한 값을 입력해야 Registered 버튼이 활성화 되는것 같다.

 

디버거를 실행시켜보자.

 

원하는 위치로 가기위해 우선 문자열 검색을 해보자.

 

Well done! 이라는 문자열을 발견했다.

 

뭔가 Serial을 맞게 입력했을 경우 뜨는 창에 적혀있을 문자열 같다.

 

해당 위치로 가보자.

 

해당 문자열이 있는 함수의 프롤로그에 BP를 걸고 실행시켜봤지만, BP에 접근할 수 없었다.

 

아무래도 Serial이 일치할 경우에 실행되는 함수이기 때문일 것이다.

 

그렇다면 이번엔 함수를 검색해보자.

 

vbaStrCmp 함수가 눈에 띈다. 

 

Serial을 검사하는 경우엔 결국 Cmp함수를 써야하기 때문이다. 

 

해당 함수 위치로 가보자.

 

EAX와 ECX를 인자로 받아 cmp하는것 같다. 

 

함수 호출 위치에 BP를 걸고 실행시켜보았다.

Serial 입력하는 창이 떴고 q(71)를 입력하였다.

 

EAX에는 입력했던 q가 들어있음을 알 수 있고, 이와 비교하는 값인 ECX에 Serial값이 있음을 예상 할 수 있다.

 

ECX의 값 2070500을 넣어보니 버튼이 활성화 되었다.

 

그럼 여기서 Serial을 만드는 알고리즘을 알아보자.

 

vbaStrCmp 함수 위치에서 쭉 올리다보면 새로운 함수의 프롤로그를 찾을 수 있다.

 

이 함수 안에 Serial 알고리즘이 담겨있다.

 

GetHourOfDay 함수로 현재 시간을 가져오고, GetYear로 년도를 가져온다. 그리고 vbavarMul로 곱셈연산을 하는 것을 예상할 수 있다.

 

그럼 GetHourOfDay부터 확인해보자.

 

GetHourOfDay함수의 리턴값을 확인해 보면, (19FA8C)  06시 02분인 것을 알 수 있다.

 

GetYear함수의 리턴값을 확인해 보면, (19FA4C) 07E4 (2020년) 인 것을 알 수 있다.

 

여기서 이제 EAX (19FA2C) 05와 시간(06)을 곱한 값이 19FA7C에 저장된 것을 알 수 있다. (1E)

 

그리고 vbaVarAdd함수로 인해 1E와 19FA1C의 값 03E8 (1000)과 더하는 것을 알 수 있다.

 

더한 값은 19FA6C에 저장되었으며 0406 (=1030)임을 알 수 있다.

 

그리고 ebx에는 vbaVarMul이 있었으므로 다시한번 곱해준다.

 

그 결과 1FBF58(20806000)임을 알 수 있고, 이는 1030 * 2020의 값이다.

 

따라서 Serial을 만드는 알고리즘은 ((Hour * 05) + 1000 ) * Year 이다.

 

'Reversing Write-Up > 01.Abex's crackme' 카테고리의 다른 글

[Write-up] Abex-crackme 5  (0) 2020.01.15
[Write-up] Abex-crackme 3  (0) 2020.01.15
[Write-up] Abex-crackme 2  (0) 2020.01.14
[Write-up] Abex-crackme 1  (0) 2020.01.14

관련글 더보기

댓글 영역