[KDT_AISEC] 8주차 - CrackMe 2번 실습

Gloomy·2024년 2월 7일
0

KDT_AISEC

목록 보기
23/25

CrackMe


CrackMe 2번 실습

지난번 크랙미 1번에 이어서 2번을 풀어보자. 분석 환경은 Windows 7 가상환경을 이용하였다.
우선 프로그램을 실행해보았다.

이름과 시리얼번호를 입력할 수 있는 칸이 있다. 모두 asdf라는 값으로 채워넣어보니 다음과 같은 결과가 출력된다.

파일의 기본정보를 PEview를 통해 살펴보자.

파일의 이미지 베이스와 엔트리 포인트 주소 등을 볼 수 있다.

이 파일의 엔트리 포인트 주소는 0x401238인 것으로 보인다.

실제 x64dbg를 통해 확인한 엔트리 포인트의 주소가 일치한다.

두번째로 실행할 주소에 Main함수로 보이는 함수를 Call하는 것을 볼 수 있다.
해당 함수를 살펴보자.

해당 함수 안으로 step into하여 진입했다.
한 줄씩 실행시키며 분석해보자.

step over를 통해 한 줄씩 실행시키다보니

해당 EIP에서 프로그램이 실행되었다. 다시 되돌려서 해당 함수를 살펴보자.

무작정 프로그램이 실행되는 함수들을 찾아서 들어가다보니 너무 깊게 깊게 들어가게 되어서 생각을 달리 해보기로 했다.

우선 BinText로 해당 프로그램에 존재하는 문자열들을 검색한 뒤 IDA로 프로그램을 열어서 출력되는 문자열들을 찾아보았다.


디버거에서 0x403372로 이동해보자.

문자열을 출력하는 부분으로 잘 찾아온 것 같다.
이제 위 아래 어셈블리 코드를 살펴보면서 분기를 찾아보자.


해당 점프문에서 ax레지스터의 값을 체크한 후 제로플래그가 set되면 아래 분기, 즉 Wrong을 출력하는 곳으로 분기되는 것 같다. 해당 부분의 점프문을 jne로 변경해보자.

변경 후 실행해보자.


Congratulations!가 나온 직후 Wrong serial!이 연속해서 출력되었다. 프로그램 내부에서 이중으로 체크를 하는 것 같다. 다른 분기도 있는지 살펴보았는데, 그럴듯한 부분이 있었다.

이 부분도 마저 jne로 변경해준 후 다시 실행해보자.

이후 Wrong serial!창이 뜨지 않았다.

다른 방법의 풀이도 가능한데, 첫번째 분기 이전에 브레이크 포인트를 건 후에 스택의 값을 살펴보자.

스택에 C5C5C5C5라는 값이 담겨있다. 해당 값을 시리얼에 입력해보자.

분기에 대한 수정을 하지 않아도 잘 풀리는 것을 확인할 수 있다.

profile
𝙋𝙤𝙨𝙨𝙤 𝙁𝙖𝙧𝙚!

0개의 댓글