BHO에 접근하기 위한 방법은 여러가지가 있습니다.

그중 가장 크게 나눈다면 타 프로세스에서 IE에 접근하는 방법과 IE내부(BHO 설치 후)에서 접근하는 방법으로 나눌수 있을것 같습니다.


그 중 개인적으로는 가장 구현하기 편하고, 응용하기도 편한 타 프로세스에서 IE에 접근하는 방법을 포스팅하겠습니다.


포스팅할 내용은 주요 코드 위주로 설명하며 세부적인 응용은 포스팅하지 않겠습니다.


일단....가장먼저 IE의 PID를 알아야겠죠.

PID를 얻어오는 방법은 생략하겠습니다. 뭐 직접 입력해줘도 되는거니깐요.


PID를 얻었다면

DWORD dwPID;

HWND hwnd = GetWinHandle(dwPID);

로 IE의 핸들을 얻어옵니다. 해당 핸들을 이용하여 다음은 접근할 IE를 찾아야하는데, 요세 나오는 브라우져들 특징은 탭기능이 있다는겁니다. 그 많은 탭중에서 현재 사용하고 있는 탭을 찾아야합니다. 저같은 경우는 모든 핸들을 출력해주고, 원하는 핸들을 선택하도록 했는데 이 방법은 다음에 포스팅 하도록 하겠습니다.


외부에서 BHO에 접근하는 방법도 여러가지가 있는데 이번엔  ObjectFromLresult을 이용하여 접근하는 방법입니다.

HINSTANCE hins = ::LoadLibrary(_T("OLEACC.DLL"));

위와 같이 OLEACC.DLL의 인스턴스를 얻어옵니다.

이 후 얻은 인스턴스를 이용하여 ObjectFromLresult 함수의 주소를 얻습니다.

LPFNOBJECTFROMLRESULT pfObjectFromLresult = (LPFNOBJECTFROMLRESULT)::GetProcAddress( hins , "ObjectFromLresult" );

ObjectFromLresult함수에 대한 설명은 MSDN을 참고하시면될것같습니다.

ObjectFromLresult의 2번째 인자값을 IID_IHTMLDocument2 로 주시면 4번째 인자값이 OUT으로써 IHTMLDocument2 의 주소값을 받아옵니다. 간단히 작성하면, 

IHTMLDocument2* pIhtmldocument2;

HRESULT hresult = (*pfObjectFromLresult)( Lresult , IID_IHTMLDocument2 , 0 , ( void**) pIhtmldocument2 );

IHTMLdocument2를 얻어왔다면 접근은 다 했네요. 

이후에 1,2,3 왔다 갔다 하시면서 원하시는 기능을 추가하시면됩니다. 


적어놓고 보니 생각보다 간단하네요.

첨부로 MSDN에 나온 ObjectFromLresult함수 내용입니다. 

http://msdn.microsoft.com/en-us/library/windows/desktop/dd373605(v=vs.85).aspx

STDAPI ObjectFromLresult(

  _In_   LRESULT lResult,
  _In_   REFIID riid,
  _In_   WPARAM wParam,
  _Out_  void **ppvObject
);


Parameters

lResult [in]

Type: LRESULT

A 32-bit value returned by a previous successful call to the LresultFromObject function.

riid [in]

Type: REFIID

Reference identifier of the interface to be retrieved. This is IID_IAccessible.

wParam [in]

Type: WPARAM

Value sent by the associated WM_GETOBJECT message in its wParam parameter.

ppvObject [out]

Type: void**

Receives the address of the IAccessible interface on the object that corresponds to the WM_GETOBJECTmessage.


Posted by Nvdark
,

주소값 가지고 출력했다가 다시 포인터로 바꿨다가 ....저장했다가...계산했다가...하다가...

문자열변수에 0xFFDDEECC 가 저장되어있는데 이놈을 어떻게 정수형으로 (16진수로) 바꿀까 하다가 열심히 찾던 중 

후배놈이알려준 함수! 


strtoul, strtol 뭐 두개다 같은 기능이지만, 반환형이 다르다. 

ul은 보다시피 unsigned long이고 뒤에껀 그냥 long 형으로 반환!

개인적으로 써보니 0x2045f35d같은 값은 strtol로도 잘 변환되지만

음수형 16진수(0xFFFFEDF4 같은 것들)의 경우 값이 0x7FFFFFFF로 고정 반환이였다.

하여 이럴땐 strtoul을 사용하면 정상적인 값이 반환되는것을 볼수 있다.


사용은 간단하다. 자세한건 MSDN을 참조하면되겠지만.... 코드로 간단히 적으면

DWORD dwHexValue;

char* StringValue;

char* Error;

dwHexValue = strtol( StringValue, &Error, 16);

// 또는

dwHexValue = strtoul( StringValue, &Error, 16);

위와 같이 사용하면된다.

첫번째 인자값은 변환할 문자열!

두번째는 변환하다가 에러나면 에러난부분을 받아줄 변수인데 NULL로 넣어도 상관없다.

세번째는 진수!

dwHexValue = strtoul( StringValue, NULL, 16);

처럼 사용해도 된다.


Posted by Nvdark
,

실로 오랜만에 포스팅을 하는군요....음...

거의 1년 3개월만에 Memget Project 관련 포스팅이라니...

1.6.11.44 버전 이후 지금까지 뭐...거의 변한건 없지만 몇가지 기능이 좀 추가되었네요..


관련 코드나 방법은 차차 포스팅하기로 하겠습니다.


이후 추가된 기능은 다음과 같습니다.

일단 Memget Project에서 Memget Package로 이름을 바꿨네요 ㄷㄷ 먼가 많이 늘어나서 한번에 포함하다보니...이리 됬습니다.

Memget Package는 An integrated tool for analysis and penetration testing on Microsoft Windows(https://unsigned.kr)에서 나와있다시피 윈도우용 취약점 점검도구입니다

상세 정보입니다.


Memget Package Last Version Info--------------------------------------------------------

[+]PC

Memget Project 1.8.16.59

Memget Library 0.9.3.84

Memget Library Inen 0.1.4.10 (총 2개 dll로 구성)

-DLL injection Module

Memget Library BHO 0.x (총 5개 dll 로 구성)

-BHO Access Module

Memget Library Process 0.3.5.6

-SSDT Hooking 

Memget Sign Maker 1.0.0.11

-Sign Maker from ASignC

[+]Android

Memget Syscall Rev.32

-System Call Check and Hook
-library injection and Data Change

Memget AScreenC for Tab Rev.4

-Android Screen Capture When you touch the screen

Memget ASignC for Tab Rev.5

-Android Sign Capture When you sign on the screen Using with Memget Sign Maker 1.0.0.11


먼가 많이 늘긴했는데 별건 없습니다.

크게 바뀐겐 Package로 바뀌면서 안드로이드가 추가됬습니다.

전체적으로 안드로이드 용은 버그가 좀 많긴한데 ... 필요해서 만든거라 개인적으로는(?) 쓸만합니다 (-_-);;

 - 원하는 SysCall에 대하여 후킹하고 인자값 및 리턴값을 출력합니다.

 - 원하는 Data를 찾고 바꿀수 있습니다.

 - 원하는 라이브러리를 인젝션 시킵니다.

 - 루팅탐지를 우회 합니다.(이거 잘됫는데 몇일전에 해보니 안되는게 종종 보이네요. 수정해야할듯..)

 - 원하는 화면을 캡쳐합니다. 드레그 이벤트를 탈취하여 복원합니다.


예전에 언싸에 다운로드 공개했는데 먼가 말이 많아서 닫아두었네요 ㅠ


Memget Package 1.6.11.44  이후 바뀐점은

 - 몇가지 기능을 모듈화 하고, UI를 살짝 변경하였습니다.

 - BASE64 En/Decode 추가

 - DLL Injection 추가

 - 각종 보안 모듈 점검용 기능 추가

 - Windows 8 용 프로세스 관련 기능 추가

 - 메모리 덤프 부분 알고리즘 변경

 - 프로세스 Kill 방법 추가

 - BHO 접근 5종 추가

 - DLL 분석 기능 추가 중 입니다.


전체적인 UI입니다.





Posted by Nvdark
,