Security&Hacking/리버싱

Lena Reversing - tutorial 23

Dior2ky 2020. 3. 16. 18:37
반응형

Lena Reversing tutorial 23

이번 단계에서는  'stolen byte' 라는 것에 대해 배우게 된다.

stolen byte는 프로그램의 코드 중에서  패커가 위치를 이동시킨 코드를 말한다.

할당된 메모리 공간으로 이동되어 실행되고 때문에 이를 복구하지 못하고 덤프하게 되면 정상적으로 작동하지 못한다.

일종의 안티 디버깅 기법 중 하나라 할 수 있다. 

 

주어진 프로그램을 분석하도록 한다. 

이번 단계도 역시 프로그램 하나만 존재한다. 

압축을 풀어 나온 NfoViewer 프로그램을 Ollydbg로 열어준다. 


바로 분기해서 PUSHFD, PUSHAD로 가고 있다. 

ESP를 이용해 OEP를 찾아준다. 

PUSHFD를 지나자 ESP 값이 변경되었다. hw bp를 걸어주고 실행한다.

break가 걸린다. 내용을 살펴보면 PUSH 후 RETN을 하고 있다.

RETN을 지나면 PUSH된 주소로 갈 것으로 보인다. 

분기해서 이동하면 함수 프롤로그처럼 보이지만 NOP이 많이 섞여있는 위치로 이동한다. 

이곳이 OEP라고 추측할 수 있지만 좀 더 살펴본다. 

천천히 살펴보면 프롤로그 이외에 ECX를 7로 만들어주고 한번 -1을 해준 뒤 분기한다. 

분기한 곳의 코드도 비슷하다 PUSH 0 두번과 ECX를 -1 해주고 다시 분기해서 PUSH 0이 수행된다. 

윗부분을 살펴보면 모두 00으로 채워져있다. 이 부분이 stolen byte라고 판단이된다.

분기하기 전을 살펴보면 함수 프롤로그와 ECX에 7을 넣는 코드뿐이었다. 

00으로 비워져 있는 곳에 이 코드로 채워준다. 

이렇게 채워진 상태가 코드를 이동시키기 전의 OEP의 형태이다. 

새로운 OEP를 만들어주었으니 적용시켜준다.

새로운 OEP 부분을 오른쪽 마우스를 눌러 New Origin here 을 눌러준다. 

 

이제 덤프를 떠준다. PE tools를 실행해준다.

dump를 했다면 이제 import table을 수정해준다.

Import REC를 이용해준다. 

기존의 OEP이다. 이 주소를 새로 만들어준 OEP로 바꾸고 IAT AutoSearch 버튼을 눌러준다. 

가만보면 Size 값이 4라는게 걸린다. 커다란 프로그램에 1개밖에 없다는게 의심이 된다. 

RVA 값을 보고 Ollydbg에서 이동해준다. 

아무것도 보이지 않는다 어디있는지 검색을 통해 찾아주도록 한다. 

Search for -> binary string 을 눌러준다. 

FF 25가 JMP를 의미한다. 검색해준다. 

어디 주소로 분기하는지 주소가 나왔다 해당 메모리로 가서 확인해준다.

Size를 구해야 하기 때문에 시작 부분과 끝 부분을 모두 찾아주어야 한다. 

00 00 00 00 을 포함하여 493164 부터 시작되고 있다. 

끝 부분이다. 00으로 채워지고 다음 7로 시작하지 않는 부분을 보면 493850 부분이다. 그러나 

해당 부분 1000176E는 UpdSystem.dll에서 import 되는 ShowUpdateDialog 함수이다. 여기까지 계산해준다.

따라서 끝 부분은 493854로 해 준다.

이제 시작과 끝을 구했으니 Size를 구하면 6F0가 나온다.  (당연히 hex로 계산해주어야 한다.)

Import REC에서 수정해준다.

모든 함수들의 Valid가 YES로 나오는 것을 확인 할 수 있다.

PE tools에서 dump된 파일을 Rebuild PE를 해준다. 

프로그램을 실행해보면 성공적으로 실행이 된다. 

끝.

반응형