완료됨
문자열 길이

flag 보면 50글자 이하던데 슬롯에 저장된 문자열 길이 읽어보면 0x5f 라고 나오는데 혹시 이유가 있을까요??

image.png

#web3
작성자 정보
더 깊이 있는 답변이 필요할 때
드림핵 팀과 멘토에게 직접 문의해 보세요!
답변 1
avatar
rbtree_work
대표 업적 없음
avatar
rbtree_work
대표 업적 없음

안녕하세요,

이는 bytes와 string을 저장하는 방식에서 기인합니다. 만약 길이가 31 이하인 경우 해당 슬롯에 그대로 그 값들을 저장하고, 마지막 바이트에 길이 * 2 값을 저장합니다. 만약 32바이트 이상인 경우에는 마지막 바이트에 길이 * 2 + 1 값을 저장합니다.
(참조: https://docs.soliditylang.org/en/v0.8.7/internals/layout_in_storage.html#bytes-and-string)

0x5F란 값은 홀수이고 위 과정을 따라 분석하면 47 * 2 + 1이니, 길이가 47인 flag가 keccak256(1)번 슬롯부터 저장되어 있을 것으로 보이네요.

2024.12.12. 16:20