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 |