티스토리 뷰

리버싱

abex crackme 4

삼전동해커 2021. 2. 18. 17:28

이번에도 시리얼을 맞춰야 하는 문제인 것 같다.

그런데 숫자를 아무리 넣어도 등록 버튼이 활성화 되지 않는다.

 

일단 개발 언어를 찾아봤더니 비주얼 베이직이다.

 

 

비주얼 베이직으로 컴파일 했다는 걸로 자주 사용되는 API나 분석 중 발생하는 문제를 구글링으로 해결할 수 있다.

일단 모듈간 호출을 통해 사용된 함수들을 확인해 봤다.

 

그리고 당연히 strcmp함수를 사용해 값을 비교했을 것이다.

 

strcmp함수 주변을 살펴보니 test di,di 와 je문이 보인다.

일단 test di,di에 브레이크문을 걸고 다시 실행해보자.

 

실행 해 값을 입력하는 순간 진행이 된다. 

비주얼 베이직 프로그램이 이벤트 진행 방식이기 때문이다.

 

di는 edi 레지스터의 하위 16바이트를 의미한다. test di,di를 진행하기 전의 edi값은 0이다. di도 0이다. 이 때 ZF는 1로 설정되어 있다. 이걸 0으로 바꾸자.

 

 

 

활성화 되었다.

 

명령어 test di,di는 edi레지스터 하위 16비트에 들어 있는 값을 이용해 올바른 시리얼번호가 입력되었는지 확인하는 역할이다. 따라서 edi에 누가 어떤 값을 넣는지를 확인해 봐야 한다.

test문 좀 더 위를 보자.

 

 

이렇게  3개로 나눌 수 있는데 1구역에서 eax값을 edi에 넣어준다. 따라서 eax값을 따라가 보자. 그 위에 push eax에 bp를 걸고 다시 시작.

 

 

 

push eax까지 진행한 후 값을 확인해 보면

 

 

내가 입력한 값인 9가 있다. eax에는 내가 입력한 값, 다음의 ecx를 확인해 보자.

 

ecx는 2192785라고 한다.

 

그 다음 eax와 ecx를 인자로 하는 vbastrcmp함수를 실행한 후 레지스터의 상태를 확인하니 eax가 1로 바뀌고 ecx는 0으로 바뀌었다.

 

 

그리고 이 eax값을 edi에 넣어준다. edi의 값이 1이니 test di,di에서 1이 나온 것이다.

 

그럼 eax자리에 ecx와 같은 값을 넣어준다면? 2192785를 입력해보자.

 

등록버튼이 활성화 된다.

 

 

'리버싱' 카테고리의 다른 글

DBI PIN tool 사용하기  (0) 2022.01.18
PIN API에 대해  (0) 2022.01.18
abex crackme 3  (0) 2021.02.18
abex crackme 2  (0) 2021.02.18
reversing.kr ez_crack  (0) 2020.12.04
공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크
«   2024/05   »
1 2 3 4
5 6 7 8 9 10 11
12 13 14 15 16 17 18
19 20 21 22 23 24 25
26 27 28 29 30 31
글 보관함