리버스 엔지니어링을 본격적으로 공부하기 위해 가장 난이도가 낮은 문제들부터 풀기로 했다.
먼저 문제의 실행파일을 실행 했을 때의 결과이다
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 |