오브의 빛나는 별

1부 2장 Hello World! 리버싱(3) 본문

리버싱

1부 2장 Hello World! 리버싱(3)

오브의 별 2022. 4. 23. 01:30
반응형

안녕하세요, 오브입니다.

오늘은 디버거를 이용해서 프록램의 내용을 간단히 패치하는 방법에 대해 알아보겠습니다. 

https://staraube.tistory.com/46

 

1부 2장 Hello World! 리버싱(1)

안녕하세요, 오브입니다. 오늘은 HelloWorld.exe 실행 파일을 디버깅하여 어셈블리 언어로 변환된 main() 함수를 찾아보겠습니다. Hello World! 리버싱 2.2.1. 디버깅 목표 main() 함수 찾기 2.2.2. 디버깅 시작

staraube.tistory.com

https://staraube.tistory.com/47

 

1부 2장 Hello World! 리버싱(2)

안녕하세요, 오브입니다. 오늘은 디버거 명령어를 간단하게 알아본 다음 베이스캠프를 설치하는 4가지 방법에 대해 살펴보겠습니다. https://staraube.tistory.com/46 1부 2장 Hello World! 리버싱(1) 안녕하

staraube.tistory.com

 

Hello World! 리버싱

2.5.1. 패치

  • 기존 응용 프로그램의 버그 수정 및 새로운 기능 추가 가능
  • 실습 목표: 메시지 박스의 “HelloWorld!” 문자열을 다른 문자열로 변경
  • 앞에서 MessageBoxW 호출 부분과 문자열 주소를 찾음
  • 방법
    • 디버깅 재실행[Ctrl+F2]
    • main 함수 시작 주소인 401000까지 실행
    • main() 함수에 BP 설정[F2], 실행[F9]

 

2.5.2 문자열을 패치하는 두 가지 방법

1. 문자열 버퍼를 직접 수정

  • 덤프 창에서 [Ctrl+G]으로 4092A0 주소로 가기
  • 4092A0 주소를 마우스로 드래그한 후 [Ctrl+E]하여 Edit 다이얼로그 띄우기
    • “HelloWorld!” 문자열이 차지하는 영역은 4092A0~4092B9.

  • Edit 다이얼로그 ‘유니코드’ 항목에 “Hello Reversing” 문자열 입력
    • 유니코드 문자열은 2바이트 크기의 NULL로 끝나야 함
    • 일반적으로 문자열 뒤쪽에 어떤 의미 있는 데이터가 존재할 수 있기 때문에 원본 문자열 길이를 넘는 문자열로 덮어쓰는건 위험
  • main() 함수 401000를 다시 보면 명령어는 그대로지만 MessageBoxW() 함수에 전달되는 파라미터의 내용은 변경되어 있음

  • [F9]를 눌러 실행시키면 메시지 박스에 패치된 문자열이 나타남
    • 문자열 버퍼 내용을 직접 수정하는 방법은 간단하지만 기존 문자열 버퍼 크기 이상의 문자를 입력하기 어렵다는 제약이 있음
    • 디버거 종료하면 패치했던 내용은 사라짐

=⇒ 파일로 생성

  • dump 창에서 변경된 문자열을 선택하여 마우스 우측 클릭
  • Copy to executable file 클릭
  • Save file 클릭하여 “HelloReversing.exe”로 저장

 

2. 다른 메모리 영역에 새로운 문자열을 생성하여 전달

  • 디버거 재실행[Ctrl+F2]한 후 전진 캠프(main() 함수- 401000)로 감
    • 401007 주소의 PUSH 004092A0 명령은 4092A0 주소의 문자열을 파라미터로 전달함
    • 적당한 메모리 영역에 패치하고자 하는 긴 문자열 적고 MessageBoxW() 함수에게 버퍼 주소를 파라미터로 넘겨줌
  • 방법1에서 수정한 문자열인 4092A0에서 밑으로 내려 NULL padding 영역으로 감(Hex dump 창)
  • 적당한 위치 409F50에 [Ctrl+E] 눌러 패치 문자열 “Hello Reversing World!” 쓰기

  • 코드 창에서 401007 주소에 커서를 놓고 Assemble 명령 [Space] 누름
  • Assemble 창 그림에 ‘PUSH 409F50’ 입력

  • 실행 [F9]하면 메시지 창 확인 가능

반응형

'리버싱' 카테고리의 다른 글

2부 13장 PE File Format(1)  (0) 2022.04.23
1부 3장 리틀 엔디언 표기법  (0) 2022.04.23
1부 2장 Hello World! 리버싱(3)  (0) 2022.04.23
1부 2장 Hello World! 리버싱(2)  (0) 2022.04.22
1부 2장 Hello World! 리버싱(1)  (0) 2022.04.21