Write-up/Wargame

Abex Crack me #1

Dalseung 2020. 4. 30. 23:26

 

리버스 엔지니어링을 본격적으로 공부하기 위해 가장 난이도가 낮은 문제들부터 풀기로 했다.

 

먼저 문제의 실행파일을 실행 했을 때의 결과이다

HD를 CD-Rom으로 인식하게 해달라고 한다

이후에 확인을 누르면

에러가 뜨면서 CD-ROM이 아니라고 말한다

나는 이 실행파일을 x64dbg로 확인해 볼 것이다

 

우선 파일을 디버거프로그램에 올리면

이렇게 뜬다

내가 문제를 풀면서 이용했던 정보가 있는 부분은 저 빨간 박스이다.

F9를 누르면 프로그램이 실행이 된다.

EntryPoint부분을 보면 "Make me think your HD is a CD-Rom"이라는 문구가 써져있다

이게 앞에서 제일 처음 봤던

이 사진의 문구이다.

따라서 이 프로그램은 1번줄을 보여준 뒤 확인버튼을 누르면 2번이나 3번줄의 문구를 출력한다.

 

어셈블리어를 보자

빨간색 박스를 주목하자

1번 박스에서 JMP.&MessageBox를 Call하는 것으로 보아 메세지 박스를 나에게 보여주는 부분이다

2번째 박스에서는 분기문이다. 

cmp eax,esi
je crackme1.40103D

 

이 코드는 eax와 esi를 비교하여 값이 같을 때 crackme1.40103D로 점프하는 부분이다.

이 부분에서 어떻게 하느냐에 따라 Error가 뜨거나 프로그램이 정상실행 될 수 있겠다.

 

예상대로 맨처음 부분은 메세지박스 출력하는 부분이다

여기서 확인버튼을 누르면 eip가 브레이크포인트(F2)를 한 주소가 0040101D인 곳으로 간다

 

그리고 아까 말했던 cmp eax,esi 부분에 브레이크 포인트를 걸고 실행을 하자

EIP가 cmp eax,esi로 왔을 때 eax와 esi의 값은

이렇다

cmp eax,esi
je crackme1.40103D

eax와 esi를 비교했을때 둘의 값이 같지 않으므로 그냥 지나치게 되고

이후 Error를 나타내도록 만드는 명령어를 실행 후 프로그램을 종료시킨다

 

그러므로 Error를 나타내도록 만드는 명령어를 실행하지 못하도록 분기문을 고쳐야 한다.

je는 두 값이 같을 때 점프를 하는 것인데

jle은 두값중 왼쪽의 값이 작을때 점프하는 것이다

그러므로

cmp eax,esi
jle crackme1.40103D

je를 jle로 고치면 eax의 값이 더 작으므로 40103D인 주소로 이동을 한 후 명령어를 실행을 할 텐데

그 부분이 바로

정상 실행후 종료하는 명령어가 있는 부분이다

이제 실제로 해보자

참고로 x64dbg의 어셈블리어 편집키는 SPACE이다.

 

je를 jle로 고치고 실행을 시키면!

 

clear

'Write-up > Wargame' 카테고리의 다른 글

[Dreamhack wargame] Quiz: x86 Assembly 1 풀이  (2) 2022.09.25
Abex's Crackme #4  (1) 2021.04.27
Abex Crackme #3  (1) 2020.09.19
Abex Crack me #2.2  (0) 2020.05.01
Abex Crack me #2.1  (0) 2020.05.01