Tutorial 2는 1과 동일한 실행 파일이지만, 1에서는 패치를 통해 문제를 해결했다면 2에서는 문제에 필요한 크랙 파일을 만드는 것이 목표이다.
reverseMe는 "Keyfile.dat" 파일을 필요로 한다.
따라서, Keyfile.dat 파일을 하나 생성한 뒤 해당 코드까지 진행해 보자.
우선 아무런 값이 들어있지 않은 Keyfile.dat을 생성하였다.
CreaeFileA를 실행한 후 반환값을 통해 분기문의 조건을 결정한다.
Tutorial 1에서는 Keyfile.dat이 존재하지 않았기 때문에, EAX 값이 FFFFFFFF이였지만, 현재는 Keyfile.dat의 핸들인 204가 저장되었다.
다음으로, ReadFile을 호출한다. 이때, hFile에는 Keyfile.dat에 대한 핸들인 204가 들어있는 것을 확인할 수 있다. 따라서 Keyfile.dat을 읽는 과정으로 보인다. 또한, ReadFile을 통해 읽은 바이트 수를 00402173에 저장한다.
이후, DS:[402173]과 10을 비교하여 분기문의 조건을 결정한다. 해당 주소에는 ReadFile을 통해 읽은 바이트 수가 저장되어 있다. 따라서 Keyfile.dat의 데이터 크기가 0x10(16)보다 커야 한다.
Keyfile.dat에 'A' 20개를 추가해 줬다.
Keyfile.dat의 내용을 변경하였으니, 다시 실행한 뒤 원래 코드의 위치까지 진행해야 한다.
다음으로는 반복문이 등장한다.
해당 반복문은 AL에 Keyfile.dat 1 바이트를 저장한 다음, 0x47('G')와 같은지 비교한다. 같다면 ESI를 증가시킨다. 끝까지 다 읽은 후 ESI가 8보다 작다면 유효하지 않은 키라고 출력하게 된다. 따라서 Keyfile.dat에 'G'가 최소 8개 있어야 조건을 통과할 수 있다.
기존의 Keyfile.dat 앞에 'G'를 10개 추가하였다.
이제, reverseMe를 실행시키면 제대로 크랙이 성공한 것을 알 수 있다.
'Reversing > Lena Reversing' 카테고리의 다른 글
Tutorial 05 (2) | 2025.08.17 |
---|---|
Tutorial 04 (2) | 2025.08.15 |
Tutorial 03 (3) | 2025.08.14 |
Tutorial 01 (1) | 2025.08.13 |