You are on page 1of 2

ReloX를 사용하여 DLL Relocation 수정하기

소개
최근에 DMichael 이 저한테 Relocation을 해결하기 위한 방법을 물어왔습니다.
인터넷 상에서 ImpREC를 만든 제작자의 ReloX 라는 툴을 발견했습니다.
그래서, 어떻게 하는지 스크린샷과 함께 간단한 문서를 만들어봐야겠다고 생각했습니다.

필요한 툴
이 튜토리얼에서는 OllyDbg, ImpREC, LordPE, ReloX, ReloX_Help_GUI.exe (이 문서와 같이
첨부되었습니다.) 가 필요합니다.

Relocations
읽기 전에 relocation에 대한 자세한 설명을 읽어볼 것을 추천드립니다.
이 지식 없이는 당신이 무엇을 하는지 조차도 모를 것입니다.
간단히 말해서, relocation은 동일 ImageBase를 갖는 두 개의 (다른) DLL이 어떤 프로세스의
메모리로 로드될 때 에러가 일어나지 않도록 해줍니다.

튜토리얼
우선 대상이 필요합니다. 저는 UPX를 가지고 제 프로그래밍 디렉토리의 DLL 중의 하나를
패킹하였습니다.
패킹한 DLL은 문서와 함께 첨부시켰습니다. 그러나 어떤 DLL 이라도 작업할 수 있습니다.

DLL 의 OEP로 가서 그것을 덤프합니다. import 들을 수정한 후에, 실행해보면 DLL을


로드할 수 없다는 메세지창을 보게 될 것입니다.

그래서 MackT가 ReloX라는 툴을 만든 것입니다. 이 툴은 다른 ImageBase를 갖는 두 개의


DLL을 비교하여 새로운 .reloc 테이블을 만들어줍니다.

아주 간단합니다.
다른 ImageBase로 같은 DLL을 두 번 로드하려면 제가 만든 툴을 사용하면 됩니다.
양쪽 DLL을 모두 덤프하고, ReloX로 작업하고, ImpREC로 수정한 DLL을 툴로 고치면
됩니다.

제가 만든 툴을 실행하여 Browse 버튼을 눌러 DLL을 선택하고 Load 버튼을 클릭합니다.

DLL마다 Base는 다를 수 있다...

툴을 아직은 닫지 마세요!
로드된 양쪽 DLL을 LordPE를 사용하여 모두 덤프할 필요가 있습니다.
이 작업을 하고나서 ReloX를 오픈합니다.
(아직 수정되지 않은) 덤프한 양쪽 DLL을 둘 다 선택해줍니다.

양쪽 DLL에 대해 Image Base 값을 입력해줍니다. (Base2 는 두 번째 덤프에 해당합니다)


그리고 나서 Compare 버튼을 클릭합니다:

ReloX에서 양쪽 덤프를 선택한 후에 Image Base를 변경하고 Compare 버튼을 클릭한다.

이제 OEP로 가기 위해 OllyDbg를 사용하고 ImpREC를 사용하여 import들을 수정합니다.

이 작업을 한 후에 “Fix PE Module” 버튼을 클릭합니다.


그리고 덤프를 수정한 DLL을 선택합니다.
만약에 모든 것을 제대로 했다면, 당신이 새로 만든 DLL은 에러 없이 동작할 것입니다!

마지막 한마디
자, 이제 끝났습니다.
어려운 팩커/프로텍터를 가지고 시작하기 전에, 먼저 쉬운 팩커/프로텍터에 대한 기술을
확실히 마스터하시길 바랍니다.
그럼 이만!

Mr. eXoDia // T.P.o.D.T 2012


mr.exodia.tpodt@gmail.com
http://www.tpodt.com
번역: cprogramming.tistory.com

You might also like