알다시피, 당신은 저에게 편지를 쓰고 물을 수 있습니다! 이름과 프로토 타입이 Microsoft의 공용 기호 파일에서 온 것이라고 명시 적으로 기술 할 때가 있었지만 오래 전에 이것을 구술로 버렸습니다. 내가 정보를 어떻게 얻었는지 항상 설명하고 있다면 어떤 종류의 리버스 엔지니어가 될 수 있겠습니까! 나는 리버스 엔지니어 인 독자들에게 모욕적 인 태도를 취하고 정보를 원하는 사람들을 지루하게 만들 위험이있다.
공용 심볼 파일이없는 경우 다음에 가장 좋은 것은 typelib입니다. 물론 모든 인터페이스가 형식 라이브러리에 표시되는 것은 아니며 IDispatch를 구현하는 모든 인터페이스가 아닙니다.
실행 파일과 공용 심볼 파일이 있으면 IID를 얻고 메소드를 나열하는 것이 거의 거의 리버스 엔지니어링이 가장 간단합니다. 신뢰할 수있는 자동화를 위해서는 다소 복잡 할 수 있습니다.하지만 그 점을 잘못 입증하고 싶습니다.
구현을위한 가상 함수 테이블을 가지고 있기 때문에 인터페이스를 알 수 있습니다. 대부분 당신이 클래스를 리버스 엔지니어링하기 때문에 이것을 발견했습니다.이 경우 생성자 또는 소멸자에서 작업하여 모든 인터페이스에 대한 가상 함수 테이블을 찾습니다. 가상 함수 표는 함수에 대한 포인터의 배열입니다. 공용 심볼 파일은 이러한 함수의 데코 레이팅 된 이름을 제공합니다. 유능한 리버스 엔지니어가이 기호를 대부분 시력으로 장식 할 수 있으며 Visual C++는 UNDNAME 도구를 제공합니다 (그리고 디버거 또는 디스어셈블러가 작업을 수행 할 수 있습니다). IID를 찾으려면 일반적으로 클래스의 시작 부분에서 인터페이스 가상 함수 테이블의 알려진 오프셋과 일치하는 QueryInterface 메서드를 검사해야합니다.
IID, 오프셋 및 프로토 타입의 기본 목록을 작성하는 전체 연습은 좋은 하루에 10 분이 걸릴 수 있으며, 게으르다. 물론 이러한 문서화되지 않은 인터페이스가 많으면 구현 및 IID가 여러 버전에서 동일하다는 것을 확인하여 좋은 하루를 빠르게 나쁜 것으로 바꿀 수 있습니다.
그건 그렇고, 내가 추측하거나 가설을 세우면 나는 그렇게 말하려고 노력한다. 예를 들어, 설명서의 끝 부분에 문서화되지 않은 IListView 인터페이스가 있음을 알았습니다. 저는 창 메시지에 대해 말합니다. "아마도 이름이 비슷합니다"라고 말하면서 내가 제공 한 이름이 나에게서 나왔음을 알 수 있습니다.
문서화되지 않은 경우 어떻게 생각하세요? 형식 라이브러리 찾기, OleView.exe 사용 –
편집 된 질문; ExplorerFrame.dll에 typelib이있는 것처럼 보이지 않습니다. OleView에서 Itemsview를 확인해도 내가 볼 수있는 유용한 것은 나오지 않습니다. –