여태까지는 올리 디버거의 사용법만을 다뤄서 지루했다면 이번에 할것은 직접 내용을 바꾸기 때문에 리버싱의 묘미를 맛볼수 있다.
패치는 기존 응용 프로그램의 버그를 수정하거나 또는 새로운 기능을 추가시킬수도 있는 기술입니다. 패치 대상은 파일 혹은 메모리가 될 수 있으며 프로그램의 코드와 데이터도 모두 패치가 가능하다.
이번에는 Hello World! 라는 문자를 패치해보자
일단은 지난번에 main()함수까지 BP를 설정했다. 그 위치로 가보자.
문자열 패치 방법은 두가지가 있는데 첫번째는 문자열 버퍼를 직접 수정하는 방법. 두번째는 불러오는 메모리 주소를 수정해서 새로운 문자열을 전달하는 방법인데 하나씩 살펴봅시다.
1) 문자열 버퍼를 직접 수정
말그대로 전달되는 문자열 자체를 수정하는 방법이다.
코멘트에 Hello World!라고 써있는 부분을 보면 Push 004109D0이라는 부분을 볼 수 있는데 이를 참조해서 Dump Window(좌하단)에서 Ctrl+G를 이용해서 이동해보자.
Dump Window를 보면 Hello World! 라고 나온 곳을 볼 수 있다. 저 값을 직접 수정하는 것이 문자열 버퍼를 직접 수정하는 방법이다.
저 부분을 블럭을 준 다음 Ctrl+E버튼을 누르자
그러면 다음과 같은 에디터 화면이 나오는데 여기서 문자열을 수정할수 있다.
Hello World!대신 Hello Reversing!이라고 수정을 했다. 참고로 원본 문자열보다 길게 수정할 경우 뒤에 데이터를 훼손하지 않게 주의를 해야한다. 뒤에 매우중요한 데이터가 있다면 프로그램에서 메모리 참조 에러가 발생 할 수 있다.
수정을 마쳤다면 잘 살펴보면 코멘트 부분에 Hello Reversing!이라고 바뀐 것을 볼 수 있고 F9를 눌러서 실행을 하면 Hello Reversing!이라고 나오는 것을 볼 수 있다.
하지만 이렇게 설정한방법은 임시로 한 것이라서 디버거가 종료되면 패치했단 내용이 사라진다. 그러므로 파일로 별도로 저장해야한다.
Dump 창에서 수정한 부분을 블럭을 잡고 우클릭 - Edit - Copy to exectutable을 눌러주면 다음과 같은 창이 나옵니다
여기서 다시 우클릭 - save file을 해주고 이름은 HelloReversing으로 해주고 저장하면 파일로 저장 완료입니다.
2) 불러오는 메모리 주소를 수정해서 새로운 문자열을 전달하는 방법
이 방법은 PUSH에서 불러오는 메모리 주소값을 바꾸고 그 바꾼 주소값에 원하는 문자열을 불러오는 방법입니다. 방법은 간단하지만 지금 과정에서는 값이 제대로 안나올 수 가 있습니다.
이방법은 일단 메모리의 어느 영역에서 문자열을 써야하는가를 고려해야하는데 실행파일이 메모리에 로딩되어 프로세스로 실행될때 어떤 규칙에 의해 올가가기 때문에 제대로 값이 안나온는데 이는 차차 뒤에서 설명하겠습니다.
일단 dump 창에서 004109D0으로 이동해줍니다. 그리고 밑으로 내리면 null로 가득찬 곳을 볼수 있는데 여기에 문자열을 입력합니다.
Hello Reversing!!!!!!이라고 입력하고 다시 원래 PUSH명령이 존재하는곳으로 돌아옵니다.
원래 PUSH OFFSET 004109D0부분에서 스페이스를 눌러주면 어셈블리를 수정할 수있습니다. 여기서 수정한 메모리 주소를 입력해줍니다.
그리고 실행되면 원래 Hello World가 아닌 창이 나오는데 여기서는 지금 공백으로 나오네요. 일단은 메모리 주소를 수정하고 수정되는 값을 가져오는 방법이라는 것을 참고하면 될 것 같습니다.
즉 문자열 패치의 방법은 두가지 방법이 있는데 문자열을 직접 수정하는 방법, 불러오는 주소를 수정하는 방법이다. 하지만 전자는 원래 문자열을 넘는문자열을 저장 할 경우 다음 메모리를 침범해서 위험하고 후자는 적절한 메모리 공간을 선택해야하는 점을 알면 됩니다.
'리버스 엔지니어링' 카테고리의 다른 글
IA-32 Register 기본 설명 (0) | 2018.01.04 |
---|---|
리틀 엔디언 표기법 (0) | 2018.01.04 |
Ollydbg BP 설치 방법 (0) | 2018.01.03 |
ollydebug를 사용해서 디버깅 입문해보자 (0) | 2018.01.03 |
리버스 엔지니어링 환경 구축 (0) | 2018.01.02 |