3주차에는 유튜브 리버싱 강의를 8강~11강까지 학습하였다.
https://youtube.com/playlist?list=PLY12b4RRLcSdsxgVvTW3mnNzMjVrd8JhO&si=_-ulXwpWPqYW6NVt
1. 함수 호출 규약: 함수를 호출할 때 매개변수를 어떤식으로 정리하고 스택을 어떻게 정리할 것인지에 대한 약속
1) 용어
A. caller(호출자): 함수 호출자
B. callee(피호출자): 함수 호출 당한 자
C. cdecl
i. C언어에서 사용되는 방식으로 caller(main함수)가 스택을 정리함
ii. 오른쪽에서 왼쪽 인자 순으로 스택에 저장됨
mov edx, 2
mov ecx, 1 ; return add(1, 2) 역순으로 저장
call project3.7FF7B6BC1357 ; add 함수 호출
sub rsp, E8 ; 값을 빼줌으로써 메인함수 내에서 스택 정리
D. stdcall
i. window 32에서 사용됨, callee(함수)가 스택을 정리함, dll에서 사용
ii. 오른쪽에서 왼쪽 인자 순으로 스택에 저장됨
iii. c언어로 쓰고 싶으면 _stdcall 붙여주면 됨 (예시: int _stdcall add(←함수명))
E. fastcall
i. x64 아키텍처에서 사용, callee가 스택 정리
ii. 최대 2개까지 ecx,edx,rdx,rcx로 이동하여 값을 보내고 나머지 값은 스택으로 보냄
iii. 레지스터를 이용해서 호출이 더 빠름
2. PE file format
A. pe 파일: windows os에서 실행 가능한 파일을 의미, 32bit임(64bit는 pe+, pe32+)
B. 종류
i. 실행 계열: exe, scr
ii. 드라이브 계열: sys, vxd
iii. library 계열: dll, ocx, cpl, drv
iv. obj 계열: obj(예외로, obj(목적파일)는 실행 불가능한 파일임)
C. Pe file 헤더(구조체)= dos header+dos stub+ntheader+section header
3. DOS header
어떤 파일이 메모리에 로드되었을 때의 모습
A. 기본 지식
i. va: virtual address
1) 절대 주소(고유한 경로): 프로그램이 메모리에 로딩 됐을 때의 주소, 변경하기 어려움(상수)
2) rva + imagebase = va
ii. rva: relative virtual address
1) 상대 주소: 현재 위치를 기준으로 파일의 상대적인 경로를 입력하는 방식(변수), 현재위치(imagebase)에 따라 변함
iii. 재배치(relocation): 파일 위치에 문제가 있을 때 다른 주소로 변경하는 것 (rva일 때 재배치가 가능해서 rva를 많 이씀)
B. DOS HEADER
i. image_dos_header는 모든 프로그램의 맨 앞에 있음(없으면 실행 불가(윈도우 기준)) -> ** 시그니처인 4D 5A는 코드 실행 파일에도 존재함 → 이 시그니처를 담고 있는 곳이 image_dos_header이기 때문에 없으면 안된다는 것 임 **
ii. e_magic: dos header의 맨 앞 주소로 dos signature(4D 5A: MZ)
iii. e_lfanew: dos header의 맨 뒷 주소로 nt header의 오프셋을 표시함
C. 참고사항
i. 메모리에 로드될 때와 그냥 파일로 존재할 때 형식이 다름
ii. WINDOWS는 빈공간은 null로 채움
4. DOS STUB
A. dos header와 달리 옵션 사항임(없어도 실행 가능)
B. ms-dos 환경에서만 실행되는 코드(windows os에서는 실행 x)
C. dos stub을 잘 이용한다면 windows, dos 둘 다 실행되는 파일을 만들 수 있음
'2. Reversing (리버싱)' 카테고리의 다른 글
[2024.11.09]리버씽씽이_5주차 활동 (3) | 2024.11.15 |
---|---|
[2024.11.02]리버씽씽이_4주차 활동 (4) | 2024.11.08 |
[2024.09.28] 리버씽씽이_2주차 활동 (3) | 2024.10.03 |
[2024.09.21] 리버씽씽이_1주차 활동 (5) | 2024.09.27 |
[2024.05.25] 리버씽씽카 7주차 활동 (0) | 2024.05.24 |