Reversing/CodeEngn(Basic) crackme
CodeEngn(basic) crackme1 풀이
먼즈
2019. 3. 31. 14:35
abexcm 5까지 끝내고 코드엔진의 크랙미로 돌아왔습니다
이유요? 없어요 풀이할게요
근데 첫번째 크랙미는 abex 크랙미 첫번째거랑 같아서.. 이번엔 정석대로 풀어볼게요
지난번엔 점프하는걸로 그냥 끝냈으니 이번엔 코드의 원리를 살펴보며 풀어봅시다
우리가 눈여겨봐야할 함수, GetDriveTypeA입니다.
드라이브의 타입을 파악하는 함수니까요. 이 문제의 키라고 생각할 수 있겠죠?
hlp에서 찾아본 결과, 그렇죠. 드라이브의 타입을 파악하는 함수입니다. 그런데 여기서는 CD-ROM 드라이브가 되는 값이 DRIVE_CDROM입니다.는 사실 위에서부터 0, 1, 2...로 세서 6번째니까 그 값이 5예요. 다시 말하면, 이 함수에서의 DRIVE_CDROM 값은 5란 말입니다. 근데 이 문제에서는 사실 큰 상관이 없는 거 같아요. 저만 그렇게 생각하나요?
왜냐면 어차피 마지막에는 EAX 값과 ESI 값을 비교하는 걸로 문자열 출력을 하거든요.
그럼 EAX값과 ESI 값만 잘 조정하면 된다는 뜻입니다 하하
조건명령 JE 직전까지의 EAX 값은 1, ESI 값은 3으로 불일치합니다. 일치할 경우에는 CD-ROM으로 인식했다는 창이 뜨겠죠.
그럼 ESI 값과 EAX 값이 일치하게 만들죠. 401021과 401022의 명령을 NOP로 바꿔서 아무것도 안하게 만들어버리면 됩니다.
싱겁죠.
레쓰비 마시고 싶다
2019.3.31
++