Security&Hacking/리버싱

Lena Reversing - tutorial 15

Dior2ky 2020. 3. 9. 18:35
반응형

Lena Reversing tutorial 15

이번 단계 역시 이전 단계와 마찬가지로 인라인패치를 이용하는 단계이다.

프로그램을 실행해보면 다음과 같이 나온다. 

starting  nag 창이며 이것을 지우라고 하고 있다. 

실행된 프로그램이다. 동작은 register 와 종료 밖에 없다.

종료하면 closing nag이며 이것도 지우라고 나온다. 

프로그램에서 register 버튼을 누르면 아무것도 나오지 않지만 종료했을때 closing nag가 나오지 않는다.

 

흐름을 분석하며 이 두 nag 창이 나오지 않도록 바꾸어준다.

Ollydbg로 열어준다. 

F9를 눌러 실행시키고 첫번째 nag창이 나온순간 F12를 눌러 일시정지 시킨다.

다음 상단의 K 버튼 또는 Alt + K 를 눌러 Call stack을 살펴 본다.

어느 부분이 nag창을 호출 시키는지 살펴본다. 잘 모르겠다면 하나하나 살펴보아야 한다.

살펴보다보면  <JMP.&MFC42.#2514> 부분이 nag창을 호출 함을 알 수 있다.  

해당 위치로 이동하여 breakpoint를 걸고 실행하면

해당 Call이 호출 될 때 nag창이 실행되고 프로그램이 실행되고 closing nag 창 까지 여기서 Call 됨을 알 수 있다. 

조금 위쪽을 살펴보면 EAX 값을 통해 분기가 일어나는 부분이 보인다. 

이 부분을 통해 첫번째 지날 때는 분기하고 두번째 지날때는 분기하지 않도록 패치가 진행되어야 한다. 

비교를 위해 비교 변수를 하나 만들어준다.

memory map(상단 M 버튼) 을 열고 프로그램의 .data 부분으로 이동한다. 

쭉 내려가서 사용하지 않는 부분을 찾는다.  

여기서 00445EB0 주소의 공간을 사용하도록 하겠다.

고를때는 해당 주소가 프로그램이 동작하면서 값이 쓰여지거나 하는 사용하는 공간일 수 있기 때문에 

해당 주소에다가 breakpoint -> Hardware on write 를 설정하고 실행하여 사용하는 공간인지 확인해야 한다. 

변수 공간을 확보했기 때문에 이번엔 코드를 넣을 공간을 찾아야 한다. 

스크롤을 내려 쭉 아래로 내려가면 00437D62 주소부터 잉여 공간이 있는 것을 확인할 수 있다. 

00437D65 주소부터 사용하도록 하겠다. 

이전에 찾은 분기문으로 가서 JMP 00437D65로 바꾸어준다. 

이 때 분기하는 곳이 80바이트 보다 멀기 때문에 long jmp가 되며 이 때는 이전 단계에서도 말했듯 5byte가 필요하다.

하지만 2byte만 사용하고 있기 때문에 다음줄의 코드 부분이 차지하고 있는 공간을 빌려다 써야 한다.

(내용을 기억하여 분기한 공간에 써줘야 한다.)

5byte를 사용하고 나면 1byte가 남기 때문에 이는 NOP으로 채워준다. 

이동한 공간도 코드를 작성해준다.

주어진 프로그램을 이용해도 되지만 그냥 작성하였다.

변수의 값을 call이 될 때마다 1씩 증가시키고

첫번째 증가 되었을 때는 1이고 두번째 증가되었을 때는 2이기 때문에 2가 아니라면 이전에 나온 분기를 따라가도록 한다. 

두번째 nag가 아닌 프로그램이 실행되면 변수가 2이기 때문에 분기하지 않고 빌려다 쓴 공간에 있던 코드를 실행하고 돌아가도록 작성한다. 

마지막 closing nag가 나올 때는 변수가 3이 되고 2와 비교하여 같지 않기 때문에 분기를 통해 넘어가게 된다. 

 

패치한 내용을 copy to executable 을 통해 저장해 주고 프로그램을 실행해 보면 starting nag와 closing nag 모두 사라진 것을 확인할 수 있다. 

 

끝.

 

반응형

'Security&Hacking > 리버싱' 카테고리의 다른 글

Lena Reversing - tutorial 16_2  (0) 2020.03.09
Lena Reversing - tutorial 16_1  (0) 2020.03.09
Lena Reversing - tutorial 14  (0) 2020.03.07
Lena Reversing - tutorial 13  (0) 2020.03.05
Lena Reversing - tutorial 12  (0) 2020.03.05