리버싱 abex crackme 2

사용 프로그램: x32dbg Mar 10 2019


abex crackme 2번을 리버싱 해봅시다.


구글에서 abex crackme 2를 다운로드합니다.







실행하면, 다음의 프로그램이 실행됩니다.





'Check'를 누르면, 메시지 박스가 나옵니다.









아무 글자나 4 자리 넣고 'Check'를 누르면 다음 메시지 박스가 나옵니다.
















'about'은 만들어진 날짜가 나옵니다.

















'Quit'을 누르면 종료됩니다.




abex crackme 2번 실행 파일을 x32dbg로 리버싱 해봅시다.

EP(EntryPoint)를 찾습니다.



ThunRTMain을 호출하는 것으로 보아 Visual Basic으로 제작된 것을 알 수 있습니다.
JMP를 통해서 호출하므로 간접 호출 기법입니다.








VB 코드는 해석하기 어려우므로, 일단 메시지 박스를 활용해서 찾아봅시다.




모든 모듈(문자열)을 찾으면, 메시지 박스에서 봤던 문자열이 보입니다.

더블 클릭으로 그 주소로 가봅시다.











이름 검증 후, 시리얼을 체크하므로, 밑으로 좀 더 내려봅시다.

시리얼 체크 부분이 나올 겁니다.











분기문 밑에 'Congratulations!'가 보입니다.












그리고, 메시지 박스를 호출하는 부분이 보입니다.



여기서 풀이 방법이 두 가지가 있습니다.


우선 첫 번째 방법입니다.
'00403332' 주소에 있는 'JE crackme2.403408' 분기문이 거짓이라면, 아래로 진행되어 'Congratulations!'를 지나 'Yep, this key is right!'가 실행될 겁니다.

'JE'위의 'TEST AX, AX'는 AX가 0인가를 확인하는 구문입니다.(CMP AX, 0과 동일)
'JE crackm22.403408'은 AX가 0이면['ZF(ZeroFlag)'가 1로 세팅] '403408'주소로 이동하라는 뜻입니다.




'JE'를 'JNE'로 변경해줍니다.







밑으로 따라 내려가다 보면, 한차례 분기가 또 있습니다.



'00403424'주소가 만약 거짓이라면, 아래로 진행되어 'Wrong serial!' 메시지 박스가 나올 겁니다.






'JE'를 'JNE'로 변경해줍니다.







이제 끝인 것 같습니다.

'Ctrl + P'로 패치를 적용합니다.











'.exe'형식으로 저장합니다.












리버싱에 성공했습니다.




두 번째 방법입니다.



분기문 위의 'CALL <&__vbaVarTstEq>'가 serial 키를 비교하는 함수라고 예측할 수 있습니다.
왜냐하면, 다음 OP code에 'TEST AX, AX'가 있습니다. 보통 AX에 함수의 반환값이 저장되기 때문입니다.
그리고 분기문이 나옵니다.


바로 위 주소에는 PUSH EDX, PUSH EAX가 있습니다.
위의 추론을 통해, 서로 비교하는 문자열을 스택에 저장하는 것 같습니다.

스택을 확인해보면 다음의 값들이 저장되어 있습니다.
'0018F42C'

'0018F41C'







덤프에서 따라가 봅시다.








위의 부분이 문자열이 저장된 곳입니다.
'0018F41C'와 '0018F42C'의 값 중 다른 부분은 저 부분뿐이기 때문입니다.




스택에서 따라가기를 누릅니다.




문자열이 보입니다.





'C5C5C5C5'가 Serial 값으로 예상됩니다.



프로그램을 실행합니다.





2 가지 방법으로 abex crackme 2번을 리버싱 해보았습니다.


끝.




카테고리: Reversing

댓글

이 블로그의 인기 게시물

Python OpenCV 빈 화면 만들기

Python urllib.parse.quote()

Python bytes.fromhex()

Android AVD Ram size change

Forensics .pyc 파일 .py로 복구하기

Android Minimum touch target size

KiCad 시작하기 7 (FreeRoute 사용하기 2)

Android Notification with Full Screen

C++ OpenCV 모폴로지 침식, 팽창

KiCad 시작하기 2 (PCB 만들기)