처음부터 차근차근

Patch 본문

정보보안

Patch

_soyoung 2022. 3. 19. 18:56
반응형

Patch

patch 파일 혹은 실행중인 프로세스 메모리의 내용을 변경하는 작업이다.

문자열 버퍼 내용을 직접 수정하여 내용을 변경한다.

리버싱에서 패치의 목적은 패치 기술을 이용하여 기존 응용 프로그램의 버그를 수정하거나 새로운 기능을 추가하기 위함이다.

패치는 리버싱에서 매우 중요한 주제로, 리버싱의 꽃이라 할 수 있다.

 

patch는 비유적으로 우리가 익히 알고 있는 패치, 스티커와 같다.

영역 하나의 구멍을 막아버리는 것, 위에 덮어버리는 것이라고 생각하면 편하다.

 

오늘은 2가지 종류의 패치를 공부했다.

  • memory patch
  • code patch

Code Patch

현재 메모리 위치와 다른 메모리 영역을 대관하여 새로운 문자열을 생성하여  patch

패치 붙일 곳이 없어서 다른 곳에다 붙인 것

다른 곳에 붙였기 때문에 다른 사람들한테 패치 붙인 곳 알려줘야함

 

메모리 영역 자체를 변경하지 않고 코드를 변경

원래 내용은 가만히 납두고 코드만 변경

 

 

올리디버거 에러

올리디비거를 열었을 때 에러가 생길 수 있다.

이 오류는 은행 보안 프로그램이 올리디버거를 보고 위험한 툴이라 판단해서 내보이는 오류이다.

올리디버거는 위험한 툴이 아니기 때문에 은행 보안앱을 다 삭제해주면 이 오류가 뜨지 않는다.

 

찾는 방법

1. 문자열로 찾기

1) Code Window에서 마우스오른쪽 버튼-> [Search for]=> [All referenced text strings]를 선택한다.

2) 실행시 출력했던 문자열을 찾을 수 있다.

문자열을 더블 클릭하면 문자열을 사용하는 코드 위치로 이동한다.

 

2. 함수로 찾기

1) Code Window에서 마우스 오른쪽 버튼 클릭->Search for->All intermodular calls를 선택한다.

2) 찾기 원하는 함수 클릭한다.(필자는 MessageBoxW()를 클릭함)

3) MessageBoxW()함수를 사용하는 코드 위치로 이동됨=>Hello, World!의 문자열이 4092A0주소에 저장되어 있음을 확인할 수 있다.

 

 

Memory Patch

메모리 영역 자체를 변경하는 패치 방법이다.

변경하고 싶은 내용으로 직접가서 내용을 수정하는 방식이다.

현재 메모리 영역에 있는 문자열 위에 입력하고 싶은 내용을 입력하고(patch) 저장한다.

 

주의할 점 : 파일이 생성될 때 문자열들이 실제 크기보다 큰 문자열로 수정하는 것은 불가능하다.

 

방법

1. 실행 파일열기

.exe 파일을 올리디버거에서 연다.

 

2. 가장 첫 부분에다 클릭하고 F2 -> F9

Code Window에서 가장 처음 부분을 break point로 지정한다.(단축키 : F2)

그 다음 F9를 눌러 실행한다. 그러면 아까 설정한 breack point에서 실행이 멈춰서 주소 부분이 빨간바탕에 검정 글씨가 될 것이다.

 

3. 변경할 문자열 찾고, 저장 주소 복사

Code Window에서 마우스오른쪽 버튼-> [Search for]=> [All referenced text strings] 하여 문자열을 찾고, 문자열을 클릭한다음 space를 눌러 저장 주소를 복사한다.

Dump Window에서 ctrl + G를 눌러 아까 복사한 문자열의 저장 주소를 붙여넣기해서 문자열을 찾는다.

 

4. 문자열을 드래그한 다음 마우스 오른쪽 -> Binary -> Edit

그 다음 내용을 수 정한다.

UNICODE 칸에다 내용을 수정하고, 백스페이스는 사용하지 않는다!

이렇게 하면 Dump window칸이 수정된 것을 볼 수 있을 것이다.

Dump창 수정됨

 

5. F9 눌러 실행

 

 

실습

Hello world --> Hello Kimsoyoung
Hello --> ksy@@

<조별 실습>

팀원 파일 안에다 KSY, i am soyoung~~ 넣기

 

 

Code patch

원래 내용은 그대로 놔두고, 새로운 공간에다 내용을 작성해 그 내용을 원래 내용 대신 가리키게 만드는 patch 방식

현재 메모리 위치와 다른 메모리 영역을 대관하고 새로운 문자열을 생성하여 patch한다.

그래서 원본 메모리 내용을 건드리지 않고 내용을 바꿀 수 있다.

 

방법

1. 실행 파일열기, 가장 첫 부분에다 클릭하고 F2 -> F9(메모리 패치와 동일)

 

2. 밑으로 쭉 내려서 비어있는 곳 찾아 드래그 + 마우스 오른쪽 -> Binary -> Edit

저렇게 사진처럼 00으로 되어있는게 비어있는 부분이다.

4줄 정도 드래그해서 UNICODE 부분에다 내용을 입력한다.

 

3. 새로 작성한 문자열 부분에다 스페이스바 눌러서 주소 복사

 

4. Code window에서 원래 문자열 부분으로 가서 스페이스바 누르고 주소를 복사한 주소로 변경 -> Assemble 클릭

원래 주소를 변경된 내용 주소로 바꾼다.

 

5. 실행

 

실습

Hello world --> Hello Reversing ksy!

 

<조별 실습>

팀원 실행 파일 결과 'I hacked your file by Kimsoyoung' 으로 변경하기

 

 

 

 

 

출처 : 정보보안(22-1학기)고수정교수 강의 내용 변형 및 요약

반응형

'정보보안' 카테고리의 다른 글

Crack(코드우회)  (0) 2022.03.31
리버싱과 어셈블리어  (0) 2022.03.27
리버싱  (0) 2022.03.12
Steganography(스테가노그래피)  (0) 2022.03.11
보안의 3대 요소, TCP/IP, RFC, 인터넷 아카이브, 피들러, 구글 해킹  (0) 2022.03.06
Comments