리버싱 핵심원리
리버싱 핵심원리 공부하면서 궁금했던 책에는 없는 질문들 직접 찾아보고 생각해보며 적은거라 틀렸을 수도 있다.
p. 168
Q. notepad.exe에서 kernel32.dll의 CreateFileW의 함수를 호출할 때 CALL 01001104이라고 한다면 PE로더는 이 주소가 필요한 함수가 CreateFileW인걸 어떻게 알고 주소를 할당해주는가?
A. windows 실행 파일 (ex : notepad.ex)은 IAT(Import Address Table) 이라는 섹션을 포함한다. 이 테이블은 실행 파일이 사용하는 외부 함수의 목록과 해당 함수들의 실제 주소를 갖고 있다. PE 로더는 함수의 이름을 사용하여 DLL의 Export Table에서 해당 함수의 주소를 찾고, 그 주소를 IAT에 기록한다.
p. 177
Q. IMAGE.OPTIONAL.HEADER32.DataDirectory[0]/[1].VirtualAddress 값이 해당 구조체 배열의 시작 주소를 의미한다고 하는데, IMAGE.OPTIONAL.HEADER32.DataDirectory[0]/[1]의 위치는 어떻게 찾는가?
A. 파일의 맨 처음부분은 ‘IMAGE_DOS_HEADER’/64byte , Dos헤더의 첫 두 바이트는 시그니처 ‘MZ’ (0x4D, 0x5A), 0x3C offset에 위치한 ‘e_ifanew’ 값 확인 (PE 헤더 파일의 offset). 해당 위치에 “PE1010” 시그니처 (PE헤더 시작). 이 다음 ‘IMAGE_FILE_HEADER’/20byte . 이 다음 ‘IMAGE.OPTIONAL.HEADER32’. 첫 두 바이트는 0X10B ‘DataDirectory’ 배열은 96바이트 이후에 시작, ‘DataDirectory[0]’의 첫 4바이트는 Virtual Address를 나타냄. 즉, PE 파일 구조와 각 구조체가 몇 바이트로 이루어졌는지 알아야 함.
p. 181
Q. 우리가 찾는 ‘AddAtomW’ 함수 이름 문자열이 NumberofNames의 RVA 배열 세 번째 원소값 즉, 2번째 인덱스에 위치한다는 것을 어떻게 알아내는가?
A. 찾는 함수의 이름이 나올 때까지 첫번째 원소값부터 RVA를 따라가 이름을 확인해야 한다.
p. 205
Q. ESI와 EDI가 동시에 세팅되면 ESI가 가리키는 버퍼에서 EDI가 가리키는 버퍼로 메모리 복사가 일어날 것이라고 예측 가능하다고 하는 이유
A. ESI와 EDI는 각각 소스와 대상 주소를 가리키는 레지스터로, MOVS 계열 명령어에서 메모리 복사를 수행하는 데 사용되기 때문이다.
p. 271
Q. XOR 복호화하는 범위가 4010F5~401248인 것을 어떻게 알아내었는가?
A. 40109E : MOV ECX, 154 / ECX는 보통 루프 카운터로 자주 사용된다.
- 나중에 추가…