본문 바로가기
Reversing/Reversing

ollydbg로 dll파일 디버깅

by bbolmin 2013. 2. 28.

 

DLL을 로드하는 실행 파일이 존재하는 경우에는 해당 실행 파일를 ollydbg로 열면된다.

이때 원하는 DLL을 디버깅 하기 위해서 Ollydbg의 [Debugging options-Events-Break on new module(DLL)]를 체크한다.

그러면 새로운 DLL이 로드될 때마다 브레이크가 걸린다. (F9로 진행)

 

 

 

DLL을 로드하는 실행 파일이 없다면 해당 DLL을 LoadLibrary()하는 exe파일을 만들거나 Ollydbg의 loaddll.exe를 사용하면 된다.

 

 

 

- DLL을 열어서 DllMain(), export 함수들을 살펴본다.

IDA의 Jump to Entry Point(CTRL+E)를 보면 엔트리 포인트로 DllMain()과 export 함수들을 쉽게 찾을 수 있다.

 

- DLL 재배치로 base 주소가 바뀔 수 있다.

(linker옵션으로 imagebase를 고정시키면 바뀌지 않음 - IMAGE_DIR_ENTRY_BASERELOC이 없음)

 

 

 

 

패킹된 DLL의 DllMain() 찾는 팁

 

 

1) DllMain의 case구문에 사용되는 아래 패턴의 바이너리 값으로 검색

 

mov eax, [esp+8]  // [esp+8] : fdwReason

sub eax, 0

jz short loc_~

 

-> 8b 44 24 08 83 e8 00 74

 

 

 

2) DisableThreadLibraryCalls 찾기

 

DisableThreadLibraryCalls는 스레드가 생성되거나 호출될 때 DllMain()이 실행되지 않도록 개발자들이 DLL_THREAD_ATTACH나 DETACH에 넣는 점을 이용하여 찾을 수 있다.

 

 

 

 

'Reversing > Reversing' 카테고리의 다른 글

IDA - 변수에 따른 데이터 영역 정리  (0) 2013.12.14
무료 .NET Decompiler  (1) 2013.11.04
static 안티 디버깅  (0) 2013.01.03
PE의 IAT입력 과정  (0) 2012.10.31
함수 호출 규약  (1) 2012.10.16