728x90
728x90
728x90

파일 링크: https://tuts4you.com/e107_plugins/download/download.php?list.17

 

Downloads / Lenas Reversing for Newbies - Tuts 4 You

 

tuts4you.com

Tutorials Index: 02. Keyfiling the reverseme + assembler

사용도구: 올리디버거 2.01

 

Lena's Reversing for Newbie 02(이하 원본파일) 분석해보자.

 

원본파일을 실행하면 다음과 같은 창이 뜬다.

[사진 1]

대충 평가기간이 만료되서 새로운 라이센스를 구입하라는 뜻이다. 확인 버튼을 클릭하면 프로그램은 종료된다.

 

 

[사진 2]

올리디버거로 원본파일을 실행하면 위와 같은 루틴을 확인할 수 있다. 중간에 [사진 1]에서 확인했던 문자열들이 사용되는 것으로 보아 이 루틴을 분석하면 될 것 같다.

 

 

[사진 3]

먼저 401073 주소의 CreateFileA 함수가 호출된다. Read, Write 모드로 "Keyfile.dat"라는 이름의 파일을 오픈한다. 해당 파일이 없으면 40107B 주소에서 점프하지 않고 [사진 1]의 메시지 박스가 뜬다.

 

 

[사진 4]

다음으로 ReadFile 함수가 호출되고, 위에서 오픈한 "Keyfile.dat" 파일의 내용을 읽어들인다.

그리고 4010B8 주소에서 값 0x10과 어떤 값을 비교한다. 여기서 어떤 값은 "Keyfile.dat" 파일의 크기를 말한다.

"Keyfile.dat" 파일의 크기가 0x10 즉, 16bytes 미만일 경우 4010F7 주소로 점프한다.

 

 

[사진 5]
[사진 6]

4010F7 주소는 위와 같이 Keyfile이 유효하지 않다는 내용의 메시지 박스 함수를 호출하고 프로그램은 종료된다.

 

 

[사진 7]

다음으로 루프문을 거치는데 루프문의 기능은 다음과 같다.

 1. "Keyfile.dat" 파일의 값에서 맨 앞의 1byte 값을 AL 레지스터에 저장

 2. AL 레지스터에 저장된 값이 NULL인지 확인(문자열의 끝인지 확인)

 3. 만약 NULL이면 4010D3 주소로 점프한다.

  3-1. 4010D3 ESI 레지스터의 값과 값 0x8을 비교한다.

  3-2. ESI 레지스터의 값이 0x8보다 작으면 4010F7 주소로 점프한다.

  3-3. ESI 레지스터의 값이 0x8 이상이면 401205 주소로 점프한다.

 4. AL 레지스터에 저장된 값과 값 0x47을 비교한다.

 5. 값이 0x47과 다르면 4010D0 주소로 점프한다.

 6. 값이 0x47과 같으면 ESI 레지스터의 값을 0x1 증가시킨다.

 7. CMP 명령어의 결과에 상관없이 EBX 레지스터의 값을 0x1 증가시킨다.

 8. 4010C1 주소로 점프하여 루프문을 반복한다.

 

이 루프문은 AL 레지스터의 저장되는 값이 NULL일 때 탈출한다. 즉, "Keyfile.dat" 파일에서 읽어들인 문자열의 끝까지 루프문이 돌아간다는 뜻이고 앞에서 파일 크기가 최소한 16bytes가 되어야 하므로 루프문은 최소 16번 실행된다.

그리고 AL 레지스터에 저장된 값이 0x47과 같을 때 ESI 레지스터의 값이 0x1 증가되며, 루프문을 탈출했을 때 ESI 레지스터의 값이 0x8이상이어야만 401205 주소로 점프한다. 401205 주소의 코드는 다음과 같다.

[사진 8]

401205 주소로 점프하면 성공을 뜻하는 내용의 메시지 박스 함수가 호출되므로 이 주소로 점프하도록 하면 되겠다.

 

정리하자면 "Keyfile.dat" 파일의 크기는 최소 16bytes만큼 되어야 하므로 16개 이상의 값을 입력해야 하고, 입력한 값 중 최소한 8개의 값들은 0x47이어야 한다. 값 0x47을 문자로 변환시 알파벳 'G'다.

 

 

[사진 9]
[사진 10]
[사진 11]

"Keyfile.dat" 파일에 "0123456789ABCDGGGGGGGG" 24bytes 크기의 값들을 입력하고 실행하면 위와 같이 성공 메시지 박스를 확인할 수 있다.

728x90
728x90

+ Recent posts