레나 튜토리얼 2단계 ReverseMe 키파일 생성(win 10, x96dbg 기준)
1단계와 다르게 파일 패치가 아닌 파일을 분석하여 키파일을 만들고 정상동작하게 만드는 것이 목표
1. 401073번 줄의 CreateFileA 함수는 실행하는 exe파일과 동일한 위치에 있는 파일을 여는 함수. 따라서 reverseMe가 있는 폴더에 ketfile.dat를 생성해야 함.
2. keyfile이 있다면 1단계에서 봤던 오류 문구는 넘어감. 그 이후 ReadFile함수를 만나게 되는데, 이 함수는 지정된 파일에서 데이터를 읽고 파일에 써져있는 내용을 저장함. 40109C를 보면 읽은 바이트 수를 402173에 저장하고 문자열을 40211A에 저장함.
3. 그 후 내려오다보면 4010B4와 그 다음줄에서 EBX와 ESI를 xor연산으로 초기화함. 그리고 4010B8에서 402173주소에 있는 값과 10을 비교하는데 여기서 10은 16진수 10으로 16을 의미함.
4. 그 밑에 jl 명령어로 402173에 있는 값이 16보다 작다면 오류 메세지를 출력하는 줄로 점프하기 때문에 파일은 최소 16글자여야함.
5. 4010C1에서 초기화한 EBX에 문자열이 있는 40211A주소값을 더해서 AL에 복사함. 다음줄에서 AL이 0이 아니라면 AL과 47이 같은지 검사하는데 47은 아스키코드로 G이기 때문에 AL이 G인지 검사하는것. AL이 G면 아까 초기화한 ESI와 EBX를 한개씩 증가, G가 아니면 EBX만 증가함. 따라서 문자열이 끝날때 까지 EBX를 증가시켜 문자열을 한개씩 맞춰보면서 G의 개수가 저장되는 ESI가 8이하라면 오류메세지를 출력하고 크다면 정상적으로 출력. AL이 0이라면 ESI가 8과 같은지 검사하고 ESI가 8보다 작다면 오류 메세지 출력. AL이 0이라는 것은 NULL문자로 문자열의 끝을 가르킴.
* 여기서 AL은 EAX의 하위 8bit를 가르킴.
6. 따라서 정상적인 keyfile.dat는 G가 8개 이상 포함된 16글자 이상의 문자열이 된다.
'Security > Reversing' 카테고리의 다른 글
| 리버싱 핵심원리 5장 (0) | 2023.03.27 |
|---|---|
| 리버싱 핵심원리 4장 (0) | 2023.03.27 |
| Lena Tutorial 1단계 (0) | 2023.03.27 |
| 리버싱 핵심원리 3장 (0) | 2023.03.27 |
| 리버싱 핵심원리 2장 (0) | 2023.03.27 |