devflow.kr@:~#

C#으로 Javascript Injection BHO 만들어보기.

C/C++

이 포스트는 여기를 번역, 풀이하여 정리한 포스트입니다.

-


일단 BHO는 무었인가 하면, IE에서 사용하는 추가기능(Add-on)입니다. 어떻게 보면 Toolbar라고 할 수 있습니다.

BHO는 브라우저의 DocumentComplete, BeforeNavigate등.. Frame의 이벤트를 받을 수 있습니다.


이걸 이용해서, 모든 페이지나 특정 페이지에 Javascript를 inject하거나, 원하는 div를 삭제 등, 실질적으로 HTML이 렌더링 되어 보이기 전에 HTML의 내용을 변경 할 수 있습니다.


이 기능을 통해 imideo(http://www.imideo.com/) 기능 처럼 Javascript를 inject시켜서, 원하는 기능을 만들 수 있지요.


간단하게 C#으로 작성하는 법을 알려드리도록 하겠습니다.



일단 프로젝트를 새로만드는데, Windows->Class Library로 만듭니다.

그리고, IObjectWithSite의 사용을 위해, Microsoft Internet Explorer와 Microsoft HTML Object를 참조를 합니다.


그리고, 필요한 네임스페이스들을 import해줍니다.




그리고 IObjectWithSite의 인터페이스를 클래스위에 정의해줍니다.



이젠 IObjectWithSite의 인터페이스로 BHO 클라스를 만들어줍니다.





그리고 DocumentComplete 메서드에 아래처럼 Javascript를 inject하는 소스를 삽입합니다.





이렇게 기본적인 기능ㅇ르 하는 클래스는 완성이 되었습니다.

이젠 이 COM이 IE에서 동작하기 위한, 등록/해제의 기능을 넣어야합니다.





GUID를 얻어온 후 레지스트리에 등록합니다.

여기서 NoExplorer라는 값은, Windows Explorer에서 작동하지 않게, 즉 IE에서만 작동한다는 옵션입니다.


이런식으로 간단하게 만들어집니다.


단, regsvr32로 등록이 안되고, regasm을 이용해서 등록을 해야합니다.

컴파일한 .Net Framework와 동록할 regasm의 버전이 같아야 등록이 됩니다.