자유게시판
addr_leak 할때 문법
예시
1번 : stack_leak = u64(r.recvuntil("\x7f").ljust(8, b"\x00"))
2번 : stack_leak = u64(r.recv(8) + b'\x00\x00')
블로그에 있는 내용인데
'''
u64를 사용할땐 주로 ljust를 사용하는데 64bit 에서 libc 값은 6byte 이기 때문이다 ljust를 사용하여 8byte로 만든 뒤 언패킹하자 !
'''
질문 1 : 1번은 "0x7f" 까지 받고 ljust 가 8만큼 정렬하는데 빈칸은 \x00정리한다. 0x7fabcd12345678 주소가 있으면 abcd12345678 이라 가정하면 어떤식으로 정리하는지가 궁금합니다.
질문 2: recv(8) 은 8바이트를 받아오고 뒤에 \x00\x00를 하는데 결국 1번이랑 같은거 같은데 \x00 은 NULL 로 알고있는데 왜 \x00 을 하는지가 궁금합니다.
질문 3 : 조금 궁금하긴한데 블로그 에서 공부하다보면 rjust 는 사용을 잘안하던데 그 이유도 궁금합니다.
작성자 정보
익명
(58.123)
댓글
2
익명
(58.123)
Lv.15 (^오^)
5개월 전
출력된 값 중 특정 부분을 읽어오는 코드며 당연히 어떻게 출력되느냐에 따라 읽어오는 부분이 달라지게 됩니다.
일반적으로는
lic = u64(p.recvuntil(b'\x7f')[-6:].ljust(8,b'\x00'))
이 코드가 범용적으로 쓰이게 됩니다. ASLR이 적용되어 있을 경우 라이브러리 주소는 항상 0x00007f~~~로 시작하기 때문에 7f부터 6만큼 값을 받아들이고 뒤에 널바이트를 추가해서 u64() 함수로 int 값 형식으로 만들어 저장합니다.
이건 이해했습니다. \x00 으로하는이유가 궁금합니다.!
자유게시판
다른 글
글 제목 | 작성자 | 추천 | 조회 | 작성일 |
---|---|---|---|---|
1 | 661 | 2년 전 | ||
1 | 601 | 2년 전 | ||
1 | 585 | 2년 전 | ||
1 | 753 | 2년 전 | ||
0 | 605 | 2년 전 |