분석을 위해 디버거로 열어서 실행해보자
대충 Name의 Serial을 비교 후 리턴하여 true, false 를 반환하는 것 같다
아무 값이나 넣고 Check를 눌러보자
잘못된 시리얼번호라는 메시지박스가 호출되었다
분석을 하기위해 디버거에서 문자열을 검색해주자
캡션명에 Wrong serial!, 메시지박스에 Nope, this serial is wrong! 이라는 문자열이 있었으니 해당 주소로 가보자
Check버튼을 누른 후 과정을 그래프로 보자면
정말 간단하게 크랙할 수 있는 방법은
serial number가 일치, 불일치 했을때 나오는 문자열의 분기구문을
403332 je -> jne
403424 je -> jne
이 두가지 주소의 어셈블리어만 어셈블 해주면 일치하는 serial number를 제외한 어떤 시리얼넘버를 입력해도
Yep, this key is right 라는 문구가 뜨게 된다
하지만 원래 의도는 Name에 맞는 일치하는 serial number를 찾는거기 때문에 디버깅을 하면서 문자열을 찾아보자
먼저 Name, serial 입력 후 Check 버튼을 눌렀을때 이벤트 핸들러가 작동하는 부분을 찾아보면 다음과 같다
전형적인 stack frame 구조가 보이는데, serial 생성의 루틴은 다음과 같다
1. Name 문자열 읽기
2. loop를 돌면서 문자를 암호화
조금 아래로 내려가보니 Name 문자열이 담긴 객체 ebp-88 주소를 push한다
스택을 확인해보자 ebp-88 = 19F1E0
스택을 확인해보니 객체의 문자열이 저장된 버퍼 주소(6BD7BC)를 확인할 수 있다
덤프창에서 해당 주소를 따라가보니 XIGNCODE라는 Name에 입력한 문자열이 보인다
문자열을 읽은 후 루프를 돌면서 암호화를 진행하는데, 암호화 과정은 다음과 같다
해당 루프를 문자열을 하나씩 순회하다보면 특정 serial 문자열이 생성된 것을 확인할 수 있다
ebp-94에 serial이 생성되었는데 "BCADABB2" 를 serial에 넣어서 맞는지 확인해보자
성공
추가로 해당 Abex' crackme #2 프로그램을 디버깅하다보면 Please enter at least 4 chars as name! 이라는 문자열이
존재하는데, 아마도 serial의 생성은 Name의 앞 4자리까지만 암호화된 결과를 반환하는 것 같다
ex) XIGNAAAA / XIGNBBBB / XIGNCCCC / XIGNDDDD ...etc
확인은 해보지 않았지만 아마도 위 4가지 Name 모두 Serial이 BCADABB2를 입력하면 성공 문구가 뜰 것이다
'Reversing' 카테고리의 다른 글
PE File Format (0) | 2024.09.23 |
---|---|
Calling Convention (0) | 2024.09.23 |
Stack Frame (0) | 2024.09.13 |
Abex' crackme #1 Analysis (0) | 2024.09.12 |
Stack Operation Example (0) | 2024.09.12 |