※ Hex dump에서 아스키 코드의 특징 아스키 코드 부분 확인
아스키코드는 기본으로 1byte 사용하지만 유니코드는 2byte를 사용한다. 이 둘의 호환성을 위해 글자 사이에 '.'을 사용한다.
2. 다른 메모리 영역에 새로운 문자열을 생성 전달
2주차의 'Hello World!'파일 사용해서 실습
ⓐ F8과 F7을 이용하여 main()함수에 들어감 < breakpoint를 걸어뒀다면 [ Debug ] -> [ Run ]을 통해 바로 이동 >
ⓑ NULL Padding( 비어있는 덤프 영역 ) 찾기 ( 00 00 00 00 ··· 부분)
ⓒ [ Ctrl + E ]를 통해 문자열 수정을 하는데, 아스키 코드 부분이 아닌 UNICODE 부분을 통해 수정해야함 < 문자열을 삽입한 부분의 주소를 기억해야함 >
ⓓ Text = "Hello World!" 부분에서 더블클릭하여 'PUSH [주소]' 형태에서 주소를 NULL Padding 주소로 변경 ( = 어셈블리 코드를 코드창에서 수정함 ) < NULL Padding 주소 = 수정한 문자열에 해당하는 주소 ( 문자열이 시작하는 주소 ) >
문자열 패치 방법 실습1
[ 문자열 버퍼를 직접 수정 실습 ] -> Title 문구를 "SWU.COM"으로 변경하기
[ Debug ] -> [ Run ] 을 통해 BreakPoint를 걸어뒀던 main()부분으로 이동 [ F7 ]로 main()함수 안으로 들어와 수정해야 할 Title = "www.reversecore.com" 부분의 주소가 '005B1002'인 것을 확인함
Title부분을 더블클릭해서 해당 Title이 저장돼 있는 주소인 5B2108을 확인함
Hex dump에서 [ Ctrl + G ] 를 통해 Title이 저장돼 있는 '005B2108'로 이동
해당 주소로 이동 후 Title에 해당하는 부분인 "www.reversecore.com"부분 드래그
[ Ctrl + E ] 를 통해 Title 부분을 "SWU.COM"으로 바꾸고 나머지 글자 부분들은 'HEX +00' 부분을 사용하여 NULL Padding인 '00'으로 변경
Title 부분이 변경된 것을 확인
Title 부분이 변경된 것을 확인
실행을 시켜 메세지 박스가 나오도록 하면 Title 부분이 변경한 문구인 "SWU.COM"으로 나오는 것을 확인
문자열 패치 방법 실습2
[ 다른 메모리 영역에 새로운 문자열을 생성하여 전달 실습 ] -> Title 문구를 "SWU.COM"으로 변경하기
[ Debug ] -> [ Run ] ( = [ F9 ] )을 통해 BreakPoint를 걸어뒀던 main()부분으로 이동
[ F7 ]로 main()함수 안으로 들어와 수정해야 할 Title = "www.reversecore.com" 부분의 주소가 '00502108'인 것을 확인함 변경해야 할 Title = "www.reverscore.com" 부분으로 [ Ctrl + G ]를 통해 이동
Title 근처 ( '00F81002' ) NULL Padding 영역과 주소인 '005021A8'을 확인
[ Ctrl + E ] 를 통해 Edit data로 들어간 다음 아스키 코드 부분에 "SWU.COM" 삽입