안녕들 하시죠 !
오늘은 저번 시간에 이어 문자열패치 두번째 방법 “다른 메모리 영역에 새로운 문자열을 생성하여 전달” 을 살펴보겠습니다.
저번 시간에 공부했던 “문자열 버퍼를 직접 수정” 방법은 원본 문자열보다 긴 문자열로 수정하게되면 큰 문제가 생길수도 있다고 합니다.
우선 저번시간과 동일하게 Hello World.exe 파일을 실행시켜주시구요.
저번시간에 캠프로 사용했던 401000 위치까지 가서 F9로 그 위치까지 실행시켜줍시다.
401007 주소에서는 PUSH 411AF0 명령으로 MessageBox() 함수에게 411AF0 주소의 “ Hello World!” 문자열을 파라미터로 전달하고있습니다.
우리는 이제 411AF0 주소의 문자열 대신 “다른주소에 있는 다른 문자열” 을 전달할 것입니다.
밑에 있는 dump창에서 Go to ( ctrl + G ) 명령으로 411AF0 주소로 가주시구요.
저번시간 Hello World ! 문자열을 패치했던 주소에서 조금만 밑으로 스크롤을 내려보세요.
그럼 아래 이미지와 같은 00 으로 가득찬 공간이 나올껍니다. 이부분은 프로그램에서 사용되지 않는 NULL padding 영역 입니다.
자 이제 이 널널한 부분에 문자열을 써줍시다.
정말 널널하군요...
이제 해줄작업은 버퍼를 새로 구성하였으니 MessageBoxW() 함수에게 새로운 버퍼 주소 412940을 알려줘야합니다.
위에있는 Code창에서 Assemble 명령어를 사용하여 코드를 수정해야합니다.
아까 “Hello World !” 가 있던 곳의 주소에 커서를 놓고 space을 누르면 Assemble창이 나옵니다.
그곳에 우리의 새로운 문자열의 주소 412940을 입력해줍니다.
F9를 눌러 실행하게되면…
자, 이렇게 주소를 바꿔주어 더 긴 문자열 패치에 성공했습니다.
오늘은 여기까지입니다 감사합니다 !
참고서적 이승원 「리버싱 핵심원리」 인사이트(2018) p41~47
'보안 > Reversing' 카테고리의 다른 글
IA-32 Register / 범용 레지스터 (0) | 2018.10.25 |
---|---|
바이트 오더링 / 빅 엔디언, 리틀 엔디언 (0) | 2018.10.24 |
문자열 패치 첫번째 《 문자열 버퍼를 직접 수정 》 (0) | 2018.10.22 |
베이스캠프를 지정하는 4가지 방법 (0) | 2018.10.22 |
Hello World ! (0) | 2018.10.22 |