티스토리 뷰
[폭주기관차, 2007/02/04 15:53, [Programming]/Visual C++ API/MFC]
그럼 Class View에 아래와 같이 CTestHelp라는 Class가 생길 것이다.
그 곳을 더블 클릭하면 Class Header가 보이는데 private로 아래의 변수를 추가 하자.
이 변수로 Internet Explorer를 컨트롤 하고, 핸들도 얻어 올 수가 있다.
그리고 아래 두 줄의 코드도 각 각 빨간 상자안에 위치 시켜야 한다.
이것도 안 넣으면 실행 되지 않는다.
(캡쳐 했던 이미지를 분실해서 제가 따로 만들었던 SlipCheck란 Project에서 가져왔음)
CSLIPCHECK => CTestHelp랑 같음
자! 이제 거의 다 끝나 간다.
이제는 ATL Object에 Method 추가하는 법을 배워보자
아래 이미지와 같이 CTestHelp라는 클래스 밑에 Interface TestHelp부분이 있다.
우측 버튼을 눌러 Add Method...를 클릭해보자.
그리고 일반 함수 추가 하듯이 하면 된다.
우선은 제일 기본이 될 SetSite라는 Method를 만들어보자.
아래 이미지와 같이 Method 이름과 Parameter를 넣고 Ok를 누르자.
그럼 SetSite라는 메소드가 생기고 코드 입력하는 곳에 아래 코드를 붙여넣도록 하자.
그리고 아래의 함수도 추가 시키자.(메소드가 아니라 함수다.)
그리고 종료하는 메소드도 추가하자
아래의 함수도 추가하자.
여기까지 하면 이제 Internet Explorer로 부터 메세지를 받을 수 있게 된다.
어디로 받는냐면 Invoke라는 메소드로 받게 된다.
그렇다 이 메소드도 추가해야한다.
dispidMember 변수로 Explorer의 이벤트가 넘어 오게 된다.
위의 코드를 보면 DISPID_TITLECHANGE라는 이벤트(제목이 바뀌면...) 현재 URL을 가져와서
메세지 박스를 출력하도록 했다.
이벤트 상수 정의는 exdispid.h파일안에 있으므로 이 파일을 보면 어떤 이벤트들이 있는지 파악할 수가 있다.
BSTRtoCHAR함수는 내가 만든 사용자 함수이다. 이 함수는 다른 게시글에 올리도록 하겠다.
그리고 컴파일을 하게 되면
와 같은 워링이 뜰 것이다.
그럴 경우 아래와 같이 ITestHelp에서 빨간 상자안의 코드는 전부 주석 처리 시키면 된다.
이제 컴파일이 되면 Test.dll파일로 생성이 되게 된다.
시작 - 실행에서 CMD를 쳐서 도스 모드로 들어가거나 아니면 바로 입력창에
을 입력하면 레지스트리에 저장이 되었다고 메세지가 뜰 것이다.
그리고 익스플로워를 켜 보고 주소를 이동하다보면 메세지 박스가 뜰 것이다.
해제 하는 방법은 시작 - 실행에서
을 입력하면 된다.
그 곳을 더블 클릭하면 Class Header가 보이는데 private로 아래의 변수를 추가 하자.
이 변수로 Internet Explorer를 컨트롤 하고, 핸들도 얻어 올 수가 있다.
private:
CComQIPtr<IWebBrowser2, &IID_IWebBrowser2> m_spWebBrowser2;
CComQIPtr<IConnectionPointContainer, &IID_IConnectionPointContainer> m_spCPC;
DWORD m_dwCookie;
그리고 아래 두 줄의 코드도 각 각 빨간 상자안에 위치 시켜야 한다.
이것도 안 넣으면 실행 되지 않는다.
(캡쳐 했던 이미지를 분실해서 제가 따로 만들었던 SlipCheck란 Project에서 가져왔음)
CSLIPCHECK => CTestHelp랑 같음
public IObjectWithSiteImpl<CTestHelp>,
COM_INTERFACE_ENTRY(IObjectWithSite)
자! 이제 거의 다 끝나 간다.
이제는 ATL Object에 Method 추가하는 법을 배워보자
아래 이미지와 같이 CTestHelp라는 클래스 밑에 Interface TestHelp부분이 있다.
우측 버튼을 눌러 Add Method...를 클릭해보자.
그리고 일반 함수 추가 하듯이 하면 된다.
우선은 제일 기본이 될 SetSite라는 Method를 만들어보자.
아래 이미지와 같이 Method 이름과 Parameter를 넣고 Ok를 누르자.
그럼 SetSite라는 메소드가 생기고 코드 입력하는 곳에 아래 코드를 붙여넣도록 하자.
STDMETHODIMP CTestHelp::SetSite(IUnknown *pUnkSite)
{
// TODO: Add your implementation code here
m_spWebBrowser2 = pUnkSite;
if( m_spWebBrowser2 == NULL )
return E_INVALIDARG;
m_spCPC = m_spWebBrowser2;
if( m_spCPC == NULL )
return E_POINTER;
return Connect();
}
그리고 아래의 함수도 추가 시키자.(메소드가 아니라 함수다.)
HRESULT CTestHelp::Connect()
{
HRESULT hr;
CComPtr<IConnectionPoint> spCP;
// Receives the connection point for WebBrowser events
hr = m_spCPC->FindConnectionPoint(
DIID_DWebBrowserEvents2,
&spCP);
if (FAILED(hr))
return hr;
// Pass the event handlers to the container
hr = spCP->Advise(
reinterpret_cast<IDispatch*>(this),
&m_dwCookie);
return hr;
}
그리고 종료하는 메소드도 추가하자
STDMETHODIMP CTestHelp::OnQuit()
{
// TODO: Add your implementation code here
Disconnect();
return S_OK;
}
아래의 함수도 추가하자.
HRESULT CTestHelp::Disconnect()
{
HRESULT hr;
CComPtr<IConnectionPoint> spCP;
// Receives the connection point for WebBrowser events
hr = m_spCPC->FindConnectionPoint(
DIID_DWebBrowserEvents2,
&spCP);
if (FAILED(hr))
return hr;
// Stop getting event notifications
hr = spCP->Unadvise(m_dwCookie);
return hr;
}
여기까지 하면 이제 Internet Explorer로 부터 메세지를 받을 수 있게 된다.
어디로 받는냐면 Invoke라는 메소드로 받게 된다.
그렇다 이 메소드도 추가해야한다.
Invoke(DISPID dispidMember, REFIID riid, LCID lcid, WORD wFlags, DISPPARAMS *pDispParams, VARIANT *pvarResult, EXCEPINFO *pExcepInfo, UINT *puArgErr)
STDMETHODIMP CTestHelp::Invoke(DISPID dispidMember, REFIID riid, LCID lcid, WORD wFlags, DISPPARAMS *pDispParams, VARIANT *pvarResult, EXCEPINFO *pExcepInfo, UINT *puArgErr)
{
// TODO: Add your implementation code here
//////////////////////////////////////////////////////////////////////////
// 변화가 일어난 Explorer의 고유 핸들 얻기
HWND h_exwnd;
m_spWebBrowser2->get_HWND( (long *)&h_exwnd );
/////////////////////////////////////////////////////////////////////////////
if (!pDispParams)
return E_INVALIDARG;
// Document complete
switch( dispidMember )
{
case DISPID_TITLECHANGE:
BSTR strUrl;
char *Msg;
m_spWebBrowser2->get_LocationURL( &strUrl );
Msg = new char[256];
BSTRtoCHAR( &Msg, strUrl);
MessageBox(h_exwnd, Msg, "Test", MB_OK );
delete Msg;
break;
case DISPID_ONQUIT:
OnQuit();
break;
}
return S_OK;
}
dispidMember 변수로 Explorer의 이벤트가 넘어 오게 된다.
위의 코드를 보면 DISPID_TITLECHANGE라는 이벤트(제목이 바뀌면...) 현재 URL을 가져와서
메세지 박스를 출력하도록 했다.
이벤트 상수 정의는 exdispid.h파일안에 있으므로 이 파일을 보면 어떤 이벤트들이 있는지 파악할 수가 있다.
BSTRtoCHAR함수는 내가 만든 사용자 함수이다. 이 함수는 다른 게시글에 올리도록 하겠다.
그리고 컴파일을 하게 되면
warning MIDL2039 : interface does not conform to [oleautomation] attribute : [ Parameter 'riid' of Procedure 'Invoke' ( Interface 'ITestHelp' ) ]
와 같은 워링이 뜰 것이다.
그럴 경우 아래와 같이 ITestHelp에서 빨간 상자안의 코드는 전부 주석 처리 시키면 된다.
이제 컴파일이 되면 Test.dll파일로 생성이 되게 된다.
시작 - 실행에서 CMD를 쳐서 도스 모드로 들어가거나 아니면 바로 입력창에
regsvr32 Test.dll
을 입력하면 레지스트리에 저장이 되었다고 메세지가 뜰 것이다.
그리고 익스플로워를 켜 보고 주소를 이동하다보면 메세지 박스가 뜰 것이다.
해제 하는 방법은 시작 - 실행에서
regsvr32 /u Test.dll
을 입력하면 된다.
예제 파일을 다운받고 싶으시거나 헤더파일 선언등 추가 설명으로 이동(2008. 1. 10 추가)
'보안' 카테고리의 다른 글
Debugging of DLLs [펌 Ollydbg] (0) | 2008.01.17 |
---|---|
BHO 예제 만들기 - 3 [펌 kongmks.cafe24.com] (0) | 2008.01.17 |
BHO 간단한 예제 만들기 - 1 [펌 kongmks.cafe24.com] (0) | 2008.01.17 |
Symset - Instruction naming 부분만 보자 (1) | 2008.01.17 |
윈도우 메시지 후킹 강좌 [펌 unkyoulee.net] (0) | 2008.01.16 |
공지사항
최근에 올라온 글
최근에 달린 댓글
- Total
- Today
- Yesterday
링크
- 지루박멸연구센타
- 열정의 힘을 믿는다
- Le4rN TO Cr4cK
- 디버깅에관한모든것(DebugLab)
- sysinternals
- FoundStone
- hashtab
- 보안-coderant
- 디바이스드라이버 개발자 포럼
- dualpage.muz.ro
- osronline.com - 드라이버 관련 정보 사이트
- NtInternals - NativeAPI Refere…
- pcthreat - spyware 정보 제공
- rootkit.com - 루트킷 관련 정보
- www.ntinternals.net
- WINE CrossRef. - source.winehq…
- tuts4you
- hex-rays
- idapalace
- idefense
- immunityinc
- threatexpert
- hdp.null2root.org
- www.crackstore.com
- crackmes.de
- www.who.is
- www.cracklab.ru
- community.reverse-engineering.…
- video.reverse-engineering.net
- SnD
- 클레이 키위
- reversengineering.wordpress.co…
- www.openrce.org
- www.woodmann.com
- PEID.Plusins.BobSoft
- roxik.com/pictaps/
- regexlib.com
- spyware-browser.com
- www.usboffice.kr
- regulator
- www.txt2re.com
- ietab.mozdev.org
- zesrever.xstone.org
- www.heaventools.com/PE-file-he…
- www.heaventools.com
- www.innomp3.com
- 울지않는벌새
- exetools.com-forum
- exetools.com
- utf8 conv
- robtex - IP trace
- onsamehost - same IP sites
- JpopSuki
- jsunpack.jeek.org
- wepawet.iseclab.org
- www.jswiff.com
- www.hackeroo.com
- winesearcher.co.kr
- khpga.org
- malwareurl.com
- anubis.iseclab.org
- www.crummy.com-eautifulSoup
- malwarebytes.org/forums
- bbs.janmeng.com
- blackip.ustc.edu.cn
- eureka.cyber-ta.org
- exploit-db.com
TAG
- ubuntu
- 주식트래이딩
- 미국주식
- 전세매매지수
- 공공인프라
- PIR
- 실시간트래이딩
- 매매가격지수
- CriticalSection
- SBI저축은행
- ROA
- 시스템트래이딩
- 주식
- 신한저축은행
- 다올저축은행
- 레고랜드
- 군함도
- 피봇
- ElasticSearch
- ChatGPT
- 사회간접자본
- hai
- 주택구매력지수
- systemd
- INVOICE
- O365
- 맥쿼리인프라
- 자동트래이딩
- logrotate
- Pivot
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | |||
5 | 6 | 7 | 8 | 9 | 10 | 11 |
12 | 13 | 14 | 15 | 16 | 17 | 18 |
19 | 20 | 21 | 22 | 23 | 24 | 25 |
26 | 27 | 28 | 29 | 30 | 31 |
글 보관함