유명한 Abex's crackme 문제이다. crackme를 시작한 이유는 Pwnable을 시작하기 전, 어셈블리어에 대한 이해와 기본적인 리버싱에 대한 이해를 위해 시작했다. 시스템 콜, 스택 프레임, 어셈블리어 등 바이너리 디버깅을 통해서 얻을 수 있는 기본적인 내용에 대해 이해하고자 했다.

IDA와 같이 좋은 리버싱 도구들이 있지만, 최대한의 이해를 위해 가장 단순한 툴인 올리디버거만 사용하였다.

crackme1.exe
0.01MB

1번 문제 파일이다.

문제를 켜면 아래와 같은 창 하나가 반겨준다.

HD를 CD롬처럼 생각하게 하란다.
그러면서 그냥 아니라고 하고 넘어간다!

실행만 한번 시켜줘 봐도, 내부에서 분기문을 변경시켜 주거나, 조건을 만족시켜 주도록 프로그램을 변경해야 할 것 같다. 디버깅을 진행한다.

어셈블리 형태의 소스 코드이다. 코드 영역은 그렇게 길지 않아 분석이 쉬운 편이었다. 이중 중요한 부분은 중간의 00401026 부분의 분기문이다. JE는 바로 위의 CMP와 연동되어 움직이는데, CMP 연산을 진행하면 Zero Flag라는 레지스터의 부분이 0(거짓), 1(참)으로 변동되고, JE연산은 이 ZF를 확인해서 1이면 해당 위치로 점프하는 형식이다.

따라서 기존의 MessageBox가 아닌 다른 형태의 메시지박스를 얻기 위해서는  점프를 통해 0040103D로 가야 하고, 이를 위해서는 CMP EAX, ESI 부분이 True가 되어야 한다. 이를 위해 가장 간단한 방법으로, CMP의 operand를 변화시켰다.

CMP Operand 변경

이렇게 비교문을 변환해 주면, 우리가 원하는 메시지박스가 뜨는 것을 확인할 수 있다.

Success!

반응형

'Security > ISANG' 카테고리의 다른 글

[Reversing] abex's crackme #5  (0) 2021.03.29
[Reversing] abex's crackme #4  (0) 2021.03.29
[Reversing] abex's crackme #3  (0) 2021.03.29
[Reversing] abex's crackme #2  (0) 2021.03.29

+ Recent posts