리버싱 엔지니어링/lena's reversing

lena’s reversing for newbies 02

흰싸라기 2022. 3. 13. 23:18

1. 실행

lena's reversing for newbies 01와 같은 파일. 다른 풀이.

 

2. CreateFileA

올리디버거를 통해 실행, 다음과 같은 코드를 지나침

CreateFileA는 파일을 여는 함수

Mode = OPEN_EXISTING : 파일이 존재하지 않으면 함수 호출 실패

 

현재 “Keyfile.dat”파일이 존재하지 않아 실행되지 않고 지나침.

따라서, “Keyfile.dat” 파일을 생성하여 reverseMe.exe와 같은 디렉토리에 저장.

파일 저장 후 재실행 시 새로운 메시지 박스 출력

3. 코드 살펴보기

 

새로운 메시지 박스로 가는 코드를 하나씩 실행하며 살펴보면,

CMP : 두 피연산자를 비교

DWORD PTR DS : 포인터 개념

CMP DWORD PTR DS : [402173], 10 : 파일을 0X10(16바이트) 와 비교하는 것

 

JL SHORT 004010F7 코드에서 16바이트보다 파일 크기가 작으면 4010F7로 이동한다.

따라서, 파일의 크기를 16바이트 이상으로 만든다.

 

수정 후 다시 디버깅 하면,

위 코드를 반복하게 된다,

CMP ESI, 8 을 통해 반복문은 총 8번 도는 것을 알 수 있다.

 

CMP AL, 0 : ‘\0’ 인지 확인. 문자열 끝인지 확인.

CMP AL, 47 : 47=G, 문자 G와 동일한지 확인

 

따라서, 파일을 조건에 맞게 수정 후

다시 실행하면 성공 메시지박스가 출력된다.