접기/펴기
녹스 관련 시청각 자료
이 기능에 대해 기술적 부분을 공개드리자면 이렇습니다
우선 알아낸 코드 오프셋 중 핵심은 저 2개였고요
이를 토대로 패치를 진행해보았어요
우선은 이거부터
0044563a --PrintMessage 줄 제한 수
이건 뭐 대충 설명드리면 최대치 3이면 최대치 마이나스 1 즉 2만큼 인덱스를 까겠데요
아시다시피 기존 최대 줄수가 3개였잖아요?
저는 이제 이를 5개로 만들거기 때문에 5로 바꿨어여
물론 최대치 - 1 이므로 위에건 4로
다음은 요거 >> 004454a3 --PrintMessage 줄 제한 수와 관련있는듯
요거도 3이라고 하드코딩 되어있져?
이거도 5로 ㅇㅇ
요렇게
이렇게만 하면 끝
일것 같지만 3줄 넘어갈 시 녹스가 죽어버리더라고요
왜 그런고 보니깐 인덱스를 4 이상으로 설정하면 위 코드라인 상에서 이 2개 오프셋이 충돌나더라고요
0069df1c, 0069d790
0069df1c 오프셋의 경우에는 인덱스와 힙주소 가리키는 포인터가 몇개 매핑되어있고 꽤나 큰 영역임요
284 바이트라고 뜨네여
즉, 0069df1c 주소부터 284 바이트 짜리가 총 3개 놓여있는거임
이번엔 69d790 필드인데 여긴 실질적으로 프린트 된 문자열이 놓이는 곳이에요
크기를 측정해보면
어머나 세상에 644바이트가 나오네요
이게 문제가 뭐냐면은
0069d790 주소를 시작으로 644바이트 짜리가 기존 최대 3개에서 최대 4개까지 있을 수 있게 될 경우
4번째 프린트되는 문자열이 0069df1c 주소를 차지하게 된다는겁니다
근데 0069df1c 는 아까 위에서 언급했듯 이미 사용중인 오프셋입니다. 게다가 0069d790 를 참조하는 오프셋과 무려 같은 코드라인에 있습니다
즉, 버퍼 오버플로우가 나버린거져 ;n;..
그래서 코드라인 상에서 0069d790 주소만 따로 다른 위치로 지정해 줘야합니다
이에 따라 원래에는 최대 줄수만큼 지원할 만한 크기의 메모리를 할당받아서 주소를 거기로 돌리는 방법이 제일 nice 합니다만
본 포스팅에서는 언제까지나 시연에 목적을 두고 있으므로 제일 만만한 00751000 주소로 돌렸어여
우선 0069d790 주소를 참조하는 코드라인 오프셋이
004454c0
0044559c
이거 2곳인데
하나씩 패치해보죠
찾았군여
이걸 00751000 으로 바꿀게여
ㅋ
여기도 있고만 이 ㅆㅅㄲ..
nice
이렇게 하면 상기 영상과 같이 프린트 메시지가 최대 5줄로 늘어나게 할 수 있어여
근데 너무 어렵져?
따라하란 건 아니고 만약 이게 필요하신 분이 계시다면 미니런처에 해당 기능을 넣어보려고해요
이상