VirtualBox 3.0.6 r52128 네트워크 공유 폴더 접근 시 BSDO




네트워크 공유 폴더에 접근 시 랜덤하게 위와 같은 블루 스크린을 볼 수가 있습니다.
저같은 경우에는 네트워크 공유 폴더에 접근 후에 파일의 속성을 볼려고 시도를 하면 파일 속성창이
바로 뜨지 않고 딜레이가 생기다가 간혹 블루 스크린이 뜨는 것 같습니다.

밑에 링크를 따라가면 해결책이 나오긴 했는데 워낙에 랜덤하게 발생하는 문제라서 테스트는 해보지는 못 하였네요.
http://justcheckingonall.wordpress.com/2009/01/08/windows-xp-under-virtualbox/

이것말고도 VirtualBox에 경우 블루 스크린이 뜰 때 간혹 화면이 깨진 상태로 GuestOS가 멈춰버리는 문제점도 있는데
아직까지 안정성에는 좀 문제가 있는 것 같습니다. 하지만 속도는 매우 빠르네요..

by lain32 | 2009/09/30 20:44 | 트랙백 | 덧글(3)

Delphi 2010에 Format Source 기능

Delphi 2010에는 다음과 같은 메뉴가 새로 생겼습니다.




Format Source라는 메뉴인데 이 기능은 코드를 정렬해주는 기능입니다.
아주 깔끔하게 코드를 정렬해줍니다.

예를 들어 다음과 같은 개념없는 코드가..




그냥 아무 생각없이 Ctrl + D 를 누르면.....
다음과 같이 바뀌는 것입니다.




by lain32 | 2009/09/28 23:14 | 델파이 | 트랙백 | 덧글(0)

커널 디버거 탐지 기법 우회

다음 코드 2줄로 우회가 가능합니다.

extern PBOOLEAN KdDebuggerEnabled; // 선언..
*KdDebuggerEnabled = FALSE; // 우회 코드

KdDebuggerEnabled 변수를 직접적으로 접근하지 않는 방식을 사용하여도 이 방법은 통합니다.
왜냐하면 결국엔 그 함수들은 저 전역변수를 참조하게 됩니다.
심지어 WinDbg 조차도 저렇게 값을 임의로 바꾸면 Attach가 안됩니다.

따라서 이러한 경우 커널 디버거는 우회가 되는데 WinDbg로 Attach 하여서 디버깅하는데 조금 문제가 생길것입니다.
따라서 디버거를 탐지하는 코드가 실행되는 경우에는 우선 저렇게 전역변수를 FALSE로 바꾸고
디버거 탐지코드가 실행되었다면 다시 KdDebuggerEnabled 커널 전역변수를 TRUE로 바꿔주면
WinDbg로 Attach 도 되고 디버깅이 가능해집니다.

커널 디버거를 탐지하는 대상 코드는 아래와 같고 이러한 코드는 이전에 말했듯이 내부적으로
위에 커널 전역변수를 사용하므로 우회가 됩니다.

bool __stdcall IsDebugPort(PVOID Object)
{
  void *pZwQueryInformationProcess; // eax@2
  bool result; // eax@4
  signed int bDebug; // [sp+10h] [bp-4h]@1
  int v4; // [sp+Ch] [bp-8h]@2
  UNICODE_STRING DestinationString; // [sp+4h] [bp-10h]@3

  bDebug = 0;
  if ( PsLookupProcessByProcessId(Object, &Object) >= 0
    && ((ObOpenObjectByPointer(Object, 0, 0, 0, 0, 0, &v4), ObfDereferenceObject(Object), pZwQueryInformationProcess = (void *)g_ZwQueryInformationProcess, g_ZwQueryInformationProcess)
     || (RtlInitUnicodeString(&DestinationString, L"ZwQueryInformationProcess"), pZwQueryInformationProcess = MmGetSystemRoutineAddress(&DestinationString), g_ZwQueryInformationProcess = (int)pZwQueryInformationProcess, pZwQueryInformationProcess)) )
  {
    ((int (__stdcall *)(int, signed int, signed int *, signed int, _DWORD))pZwQueryInformationProcess)(
      v4,
      7,
      &bDebug,
      4,
      0);                                                       // 이 함수에 두 번째 인자 ProcessDebugPort를 넘기고 있다.
                                                                // 즉, 이것은 디버그중인지 체크한다고 보면 될것이다.
    result = bDebug == -1;                                      // -1(0xFFFFFFFF) 일 경우 디버깅중인 상태입니다.
  }
  else
  {
    result = 0;
  }
  return result;
}

일부 보안 드라이버에서는 실시간으로 KdDebuggerEnabled 에 직접 접근하여 디버깅중인지 체크하는데
이러한 경우 해당 드라이버에 한해서 IAT만 변조하는 방식으로 우회하여도 됩니다.
그러나 일반적인 경우 드라이버 초기화 작업에서만 디버깅중인지 체크하므로 위에 방법으로 왠만하면 우회가 가능합니다.

by lain32 | 2009/09/28 22:40 | 리버스 엔지니어링 | 트랙백 | 덧글(1)

오픈캡쳐 버전관리 사이트를 soureforege로 옮겼습니다.

변경 된 가장 핵심적인 부분은 다음과 같습니다.

sourceforge 주소가 다음과 같이 변경되었습니다.
http://sourceforge.net/projects/opencapture

svn 주소가 다음과 같이 변경되었습니다.
https://opencapture.svn.sourceforge.net/svnroot/opencapture

소스 브라우저는 기존 trac를 사용하지 않고 SCM Repositories 를 사용합니다.
주소는 다음과 같습니다.
http://opencapture.svn.sourceforge.net/viewvc/opencapture/

현재 개발진행 중인 최신 소스코드는 다음 주소에서 받을 수 있습니다.
http://opencapture.svn.sourceforge.net/viewvc/opencapture.tar.gz?view=tar

by lain32 | 2009/09/27 21:38 | 오픈캡쳐 | 트랙백 | 덧글(0)

오픈캡쳐가 Delphi 2010으로 개발됩니다.



원래 Turbo Delphi 2006으로 개발을 진행하였는데 해당 버전이 엠바카데로에서 더 이상 지원을
하지 않는 것 같네요. 거기다가 문제가 너무 많구요..

그래서 그냥 정품을 샀습니다.
아무튼 업그레이드 하면서 자동적으로 유니코드가 지원이 되었네요.

한동안 오픈캡쳐 개발을 거의 안 하다시피 했는데 ( 몇 달 동안 안 한듯 .. -_- ) 이제부터라도 조금씩
기능추가들을 해놓겠습니다.

by lain32 | 2009/09/27 21:36 | 오픈캡쳐 | 트랙백 | 덧글(2)

◀ 이전 페이지 다음 페이지 ▶