Abex_CrackMe 1

해킹대회 문제 풀이 연습장소

Moderator: amesianx

Post Reply
KSH
Posts: 24
Joined: Thu Jul 21, 2016 5:39 pm

Abex_CrackMe 1

Post by KSH » Mon Aug 15, 2016 1:17 pm

리버싱을 공부하기 시작했습니다.
우선 리버싱에서 가장 기초가 되는 abex crackMe를 먼저 공략하겠습니다.
1.프로그램 실행
1.png
1.png (11.25 KiB) Viewed 686 times
"내가 당신의 HD를 CD-Rom이라고 생각하게 해주세요" 라네요

확인 버튼을 누르면
2.png
2.png (9.74 KiB) Viewed 686 times
"아니야 이건 CD-ROM 드라이브가 아니야" 라는 에러메시지를 띄웁니다.

2.디버깅

올리디버거로 파일을 살펴보았습니다.
dibug.png
dibug.png (56.28 KiB) Viewed 686 times
0040103D부분의 명령을 보면 "그래 난 당신의 HD가 CD-ROM이라고 생각해"라는 문자열을 출력하는 메시지박스를 호출하는 것을 볼 수 있습니다.
이 문제의 목적은 "Nah...."가 아닌 "OK, ~~~"를 띄우는 것입니다.
조건을 파악하기 위해 0040101D에 브레이크를 걸고 프로그램을 실행시켰습니다.
break.png
break.png (58.48 KiB) Viewed 686 times
00401010지점(GetDriveTypeA를 실행한 후에, 프로그램은 멈추게 됩니다. 그리고 스택을 보면
stack.png
stack.png (25.58 KiB) Viewed 686 times
EAX가 3이 되어있습니다. GetDriveTypeA가 3을 반환한 것이지요
GetDriveTypeA함수를 실행한 이후에는 ESI를 1증가, EAX 1감소, ESI 1증가 2번, EAX 1 감소 후에 EAX와 ESI를 비교합니다.
(그러면 EAX는 1이 되고 ESI는 3이 됩니다.)
비교해서 같다면(zero flag가 set이라면) 0040103D로 점프하고
같지 않다면(zero flag가 clear라면) 에러메시지를 출력하는 message box를 호출합니다.

문제를 풀기 위해서는 EAX와 ESI의 값을 같게 해주어야합니다.
0040101F에서 점프를 수행하는데 00401023으로 점프하도록 명령을 바꾸어준다면,
EAX는 두번 감소하여 1이 될 것이고, ESI는 증가하는 명령 2번을 건너 뛰어 한번만 증가하기에 1이 되어 EAX와 ESI가 같아질 것입니다.

※JMP문에서 해답쪽으로 점프하게해도 되고, zero flag를 1로 셋해주어도 됩니다만, 제작자의 의도가 EAX와 ESI의 값비교인것 같기에
JMP문에서 INC ESI를 2번 무시하도록 하였습니다.

3.크랙
JMP문의 점프할 주소를 바꾼 뒤 프로그램을 실행시켰습니다.
JMP_success.png
JMP_success.png (53.53 KiB) Viewed 686 times
예상대로 "OK~~~"를 출력하는 메시지박스로 점프합니다. 프로그램을 계속 진행하면
clear.png
clear.png (16.12 KiB) Viewed 686 times
꺴습니다.

h0n9t3n
Posts: 50
Joined: Tue Oct 13, 2015 11:14 am

Re: Abex_CrackMe 1

Post by h0n9t3n » Tue Aug 16, 2016 7:57 pm

잘하고 있어요 ^^!

굿이에요...막달리네요..

디버거는 올리쓰지말고

http://x64dbg.com/#start

이거 써봐요..

올리는 예전에 많이쓰는거고 플러그인들이 우훅죽순이라

저게 하기 편할꺼에요.

Post Reply

Who is online

Users browsing this forum: No registered users and 1 guest