main 함수 부분입니다. 전형적인 힙문제입니다. setup에서는 버퍼링과 환영 메시지를 띄어주게 됩니다. 그 다음에는 이 코드들이 실행되는데 1. 0x100, 0x10크기 할당 2. 0x100 free -> 0x100 크기 청크는 unsorted bin에 들어감 3. backup에 unsorted bin에 들어가 있는 청크의 fd, 즉 main_arena + 88의 주소값을 저장 4. 0x10 청크를 free -> fastbin에 이 0x10 크기 청크가 들어감. 5. 0x200 청크를 할당 & 해제 -> free 함수 내부에서 1번에서 할당한 2개의 청크가 모두 병합됨. 즉 저 코드는 backup에 main_arena + 88의 주소를 저장하기 위한 과정입니다. 0번째 메뉴 Clean입니다. back..
GUID가 특정하는 인터페이스의 헤더 파일을 보면 된다.
1. malloc_consolidate()와 double free bug를 이용해 fastbin과 smallbin에 같은 청크가 2번 있게한다. 2. fastbin에 있는거 받아서 안에 fake chunk를 구성하되 다음 청크의 prev_size를 0x20으로 변경 3. 2번에서 받은 청크의 다음 청크를 free -> unlink 호출(prev_inuse가 셋팅안됨) 4. 3번의 unsafe unlink로 bss 영역을 수정할 수 있으므로, big, huge chunk ptr의 값을 수정 -> libc leak, one_gadget 이용
https://docs.microsoft.com/en-us/windows/win32/winprog64/file-system-redirector 여기에 잘 나와있는데 대충 메모해두자면 64비트에서 32비트 프로그램을 실행할 때 주소 체계가 다르므로 바로 DLL, 응용프로그램들을 실행할 수가 없다. 그래서 호환성을 위해 WOW64라는 것을 만들어 뒀는데 여기에 32비트용 DLL 등을 놓게 된다. 그래서 64비트 환경에서 32비트 프로그램이 GetSystemDirectory()와 같은 함수를 호출하였을 때 SysWOW64같은 폴더로 리다이렉션 시켜준다. 이 리다이렉션을 Wow64DisableWow64FsRedirection()이런 함수로 끌 수도 있다.