[2024.08.29]
오늘 강의도 지난 시간에 이어서 crackme13을 진행한다
먼저 13을 열게 되면 해당 화면처럼 키 값을 입력하는 창이 나타난다
13의 경우 Strings를 확인하면 성공 메시지가 보이기 때문에 해당 열로 이동한다
먼저 성공하신 수강생분께서 공유한 답안으로 실행했을 때 화면처럼 성공 메시지를 확인할 수 있었다
13은 다른 걸 찾을 것 없이 첫부분에 성공 메시지가 있는 점이 편했다
이번에는 다른 값을 찾아보기 위해 CMP 부분에 브레이크 포인트를 걸고,
hello라는 키 값을 넣고 실행을 진행하려고 한다
현재 hello를 입력하고 비교문에서 실행이 가능한 상태지만,
현재의 화면으로 확인할 수 있는 것은 비교문을 통해 비교 후 키가 맞다면 그대로 명령을 실행하고
키가 맞지 않으면 점프문을 통해 계속 반복되는 형식인 걸 알 수 있다
그렇기 때문에 현재 CMP EAX,7A2896BF에서 EAX에도 7A2896BF 값을 옮기거나 넣게 되면 성공할 수 있다
7A2896BF의 경우 헥사값으로 2049480383이기 때문에 해당 값이 키 값인 것을 알 수 있다
키 값을 찾은 후 2049480383으로 한 번 더 시도하여 성공 메시지를 확인했다
이번에는 a를 넣고 진행
반복문에서 Zero Flag를 0에서 1로 변경시켜도
값을 변경한 상태기 때문에 기존의 값과 달라져 성공 메시지가 나타나게 된다
다른 방법을 찾아내기 위해 이번에는 EAX 값을 0인 것을 확인한다
다시 a를 입력하고 실행 후
CMP EAX,7A2896BF를 CMP EAX,0로 변경시키게 되면
Zero Flag는 1로 변경되지만 코드 자체가 실행할 수 없게 되어 있어 더이상 진행되지 않는다
그렇기 때문에 현재 7A2896BF 값을 임의로 변경시키는 건 불가능한 것이 입증되었다
또 다른 방법을 찾기 위해서 이번에는 키 값을 1로 설정한다
키 값을 1로 설정하고 바로 EAX 값을 확인 시 1인 걸 확인할 수 있었다
이때 EAX 값을 7A2896BF의 헥사값으로 수정한다
EAX의 값을 수정하면 반복문에서 점프하지 않고,
그대로 명령어들을 실행하면서 내려오고 마침내 성공 메시지가 나타난다
현재 JNE에서 JGE로 변경시키는 방법도 있다
ex)
CMP EAX, EBX ; EAX와 EBX를 비교
JGE label ; EAX >= EBX이면 label로 점프
이 코드에서 EAX가 EBX보다 크거나 같다면, label로 점프하게 된다
그렇기 때문에 현재의 화면에서는 7A2896BF보다 EAX의 값이 크거나 같을 경우 점프하게 되지만,
현재 EAX의 값은 1이기 때문에 7A2896BF보다 값이 작아서 점프를 하지 않고 그대로 아래의 명령을 실행하게 된다
이러한 방법을 통해서도 명령을 실행 후 성공 메시지까지 확인할 수 있다
13에 이어 14도 이어서 진행한다
14의 경우에는 Strings와 함수 길이가 다른 파일에 비해서 길기 때문에 해당하는 지점을 찾기 어려웠다
다시 확인 시 마지막 부분에서 성공 메시지를 찾을 수 있었다
첫 번째 지점의 Good Boy 부분으로 가서 반복문 지점에 브레이크 포인트를 걸고 실행시킨다
임의로 hello와 1234의 값을 넣어 진행한다
하지만 값을 입력하고 스택 값 쪽을 확인해 보면 바로 hello에 대한 키 값이 나타난다
키 값이 나왔기 때문에 새로고침 후 해당하는 키 값으로 진행했다
스택 값에 저장된 hello의 키 값이 맞기 때문에 성공 메시지인 Well done을 볼 수 있었다
이번에는 반복문보다 한 칸 위에서도 브레이크 포인트를 걸어 주고,
Zero Flag를 0에서 1로 변경시켜 준다
Zero Flag를 수정했을 때도 성공 메시지를 확인할 수 있다
마지막으로 16 파일을 열어 Strings를 확인했을 때,
바로 상단에 위치한 Good job이라는 성공 메시지를 찾을 수 있었다
이번에도 패스워드를 찾아내기 위해 임의로 hello와 1234를 입력하여 진행한다
현재 스택 값에서 EBP-3C에 9F163957의 값이 저장되어 있고,
현재 EAX는 내가 입력했던 1234의 값인 4D2의 값이 저장되어 있다
브레이크 포인트 위쪽을 살펴보면 결국 내가 입력한 EAX의 값과 EBP-3C의 값을 비교하는 것이다
9F163957 헥사 값을 계산해 보면 2669033815라는 값이 나온다
지정된 헥사 값을 계산 후 2669033815를 입력하여 다시 실행해 보면
성공 메시지로 Good job이 나타나는 걸 확인할 수 있다
강의 소감
아직도 익숙하지는 않지만 실습을 진행하면서 점점 이해하게 된다
연습을 통해서 코드를 볼 수 있게 되고, 바로 크랙이 가능한 부분을 찾을 수 있는 것은
아니지만 보다 보면 어디가 어디인지는 감이 오는 것 같은 느낌이다
지난 날의 여러 강의를 통하여 현재까지 키 값을 찾는 실습을 진행 중이다
더 많은 연습을 통하여 단번에 찾을 수 있을 때까지 꾸준히 해야겠다