리버싱 엔지니어링/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와 동일한지 확인
따라서, 파일을 조건에 맞게 수정 후
다시 실행하면 성공 메시지박스가 출력된다.