관리 메뉴

JIE0025

[악성코드분석] 문자열 패치 실습 본문

기타 학습/보안

[악성코드분석] 문자열 패치 실습

Kangjieun11 2020. 3. 30. 14:25
728x90

문자열 패치에는 두가지 방법이 있다.

1) 문자열 버퍼의 직접 수정

2) 빈 메모리 영역에 새로운 문자열 생성 후 파라미터로 전달

 

(내가 했던 실습은 C++를 사용하여 main함수 안에 메시지박스 함수를 호출한다. 파라미터로는 Hello world! 를 전달한다.)

 

- 문자열 버퍼의 직접 수정 실습

첫번째 문자열 버퍼의 직접 수정 실습을 하다가 잘 되지 않았다. 무엇이 문제인지 파악하고자 하였지만 초보자로서 알기 어려웠다.

 

<<첫 실습, 실패 >>

<<실패의 이유를 알아보자>>

자세히 들여다보면 답이 있다.

00C91007 에서 push offest 00c92128을 하는 것이 보인다.

즉 00c92128의 문자열 자체를 바꾸어야 우리가 원하는 목적을 이룰 수 있다는 것이다.

 

내가 실수한 부분은 offset의 문자열을 바꾼것이 아닌, 00c91007을 수정하였기 때문에

오른 쪽 사진에 push 65005220이 되었다는 것이다. 

 

당연히 잘 될리가 없다.

 

<< 재 실습, 성공>>

00c92128을 수정하는 것으로 재 실습 해보았다.

메모리 위치가 변하게 되면서 문자열의 위치가 00942120로 변했다.

값을 reversing :)!로 바꾸어 보았다.

 

 

아래 사진에서 문자열 패치가 잘 된것을 확인 할 수 있다.

 

 

- 빈 메모리 영역에 새로운 문자열 생성 후 파라미터로 전달하기 실습

파라미터로 넘기는 문자열 주소를 다른 주소로 바꾸어 주어야 한다.

 

아래와 같은 공간을 Null Padding영역이라 한다.

-  Null Padding 영역에 ctrl E를 클릭하여 새로운 패치 문자열을 작성한다.

- 새로운 패치 문자열의 주소를 알아둔다.

-파라미터로 넘기는 명령어가 존재하는 곳에 마우스를 위치하고 [space]  어셈블 창이 나타나는데

push 새로운 패치 문자열의 주소’ 하면 끝!