CreateMutex
까보면 다나와~
유용한 지식 자료들/기타 (38)

CPU Register - Trap Flag
Trap Flag가 설정되었을 경우(디버거에서)
1. JMP 명령이 실행되지 않는다.
2. CAll 명령을 수행할 때 Step into를 해도 Step over가 실행된다.
3. Run(F9)을 실행하면 Trap Flag가 0으로 셋팅

또 뭐가 있을지~
  Comments,     Trackbacks

리눅스 시스템(Linux)에서 Windows, VirtualBox 파일공유(shared folders)

1. Guest OS 설치가 완료되면 Setting - Shared Folders를 클릭 


2. 우측에 +를 클릭해서 원하는 폴더와 이름을 지정, Auto-mount, Make Permanent 체크


3. OS 부팅하면 새로 생성된 Guest OS창에서 Devices라는 메뉴가 있는데 거기에서 install Guest Additions를 클릭


4. 설치완료 한뒤 재부팅(자동)하면 공유된 폴더에 접근 가능


 

  Comments,     Trackbacks

Malware online databases and analysis sites
  Comments,     Trackbacks

Ubuntu 10.04 LTS, PXE + Truman 설치

기초 지식,
# Ubuntu 10.04 LTS는 NTFS를 마운트 하기 위한 별도의 패키지가 필요하지 않다.
# Ubuntu 10.04 LTS의 PXE 셋팅을 위해서는 DHCP server(dhcp3-server), TFTP server(xinetd + tftpd-hpa)가 셋팅되어야 한다.
# xinetd와 inetd는 같이 설치될 수 없다. inetd는 openbsd-inetd가 있다.(Truman은 xinetd가 필요)
# 만약 VMware 내에서 Network 구성을 하고자 하면 같은 NIC을 가지고 하면 된다.

1. apt-get -y install dhcp3-server apache2 xinetd tftpd-hpa
::PXE 구성을 위해

2. apt-get -y install tcpdump ngrep wireshark
::Truman 설치를 위해

3. 그외 각종 설정...차후 보강
  Comments,     Trackbacks

색상표를 선호도에 따라 분류(html color)

http://naradesign.net/wp/2006/09/08/58/

색상표를 선호도에 따라 분류한 페이지 인데 꽤 괜찮네요.

(css, js파일 - ctrl +alt로 캐쉬적용 피하기)


  Comments,     Trackbacks

화면 캡쳐에 쓰이는 API

다음은 화면 캡쳐에 쓰이는 API - GetDC, BitBIt, ReleaseDC에 관한 글이다.
몇몇 악성코드를 분석하다 보면 GetDC라는 함수를 보았던거 같다. 이게 관련이 있는 지는 모르겠지만
그동안은 반신반의 하면서 쓰레기코드로 치부하고 지나갔었다... 다음에 만나면 상세분석 들어가야겠다..ㅎ

------> 다음은 원문

상용 DRM솔루션에 대한 이해 1부 - 화면캡쳐방지는 어떻게 구현될까?
http://lain32.egloos.com/4805054

(생략)..

화면캡쳐방지에 대해 거론하기 전에 우선 화면캡쳐를 어떻게 하는지 당연히 알고 있어야 합니다.
방어를 할려면 공격방법을 먼저 알아야 되죠. 그래서 해킹보다 보안이라는것이 더 어려운 경우가 많습니다.

화면캡쳐에 기본적인 주요 API는 3가지로 구현됩니다.
GetDC, BitBlt, ReleaseDC

화면캡쳐 프로그램들은 보통 이 3가지 API를 이용하여 화면캡쳐를 합니다.
다음은 오픈캡쳐에서 사용하는 전체화면 캡쳐 방식입니다.

..(생략)
  Comments,     Trackbacks

KiUserApcDispatcher

Kernel To User Callback 1 - KiUserApcDispatcher

 Application Stack Trace를 하게 되면 종종 KiUserApcDispatcher라는 녀석을 만나게됩니다.
기본적으로 Thread를 생성 초기화 하기위해서 User Level에서는 CreateThread , CreateThreadEx등을
이용하게 됩니다. 누구나 알다시피 CreateThread->NtCreateThread->ZwCreateThread 순으로 호출이
이루어지죠.

( SystemCallStub에 대한 내용은 설명하지 않겠습니다. ) ZwCreateThread는 Thread의 TCB 를 초기화 하고
Apc List, IRP List 등등을 초기화 합니다. 그리고 마지막으로 Thread 의 EntryPoint를 초기화할 System Routine과 Thread EntryPoint 등 바탕으로 Start Frame을 구성하고 Kernel Stack은 Switch Frame으로 초기화하여 Return
합니다.

 초기화 작업 완료 후 Task Switching 이 발생하게 되면 Thread의 System Routine을 통해서 User Level Thread의 Entry Point를 초기화 하게 되는데 이러한 과정에 KiUserApcDispatcher를 통해서 이루어집니다.
즉 Thread를 초기화 하는 System Routine은 User Level Thread의 Stack Frame의 EIP( Instruction Point )를 KiUserApcDispatcher로 지정하여 이를 Execute할 수 있도록해줍니다.

ReactOS 상의 관련 코드

VOID
NTAPI
PspUserThreadStartup(IN PKSTART_ROUTINE StartRoutine,
  IN PVOID StartContext)
{
...
  /* Make sure we're not already dead */
  if (!DeadThread)
  {
  /* Check if the Prefetcher is enabled */
  if (CcPfEnablePrefetcher)
  {
  /* FIXME: Prepare to prefetch this process */
  }
  /* Raise to APC */
  KeRaiseIrql(APC_LEVEL, &OldIrql);/* Queue the User APC */
  KiInitializeUserApc(NULL,
  (PVOID)((ULONG_PTR)Thread->Tcb.InitialStack -
  sizeof(KTRAP_FRAME) -
  SIZEOF_FX_SAVE_AREA),
  PspSystemDllEntryPoint,
  NULL,
  PspSystemDllBase,
  NULL);

/* Lower it back to passive */
  KeLowerIrql(PASSIVE_LEVEL);
  }
  else
  {
  /* We’re dead, kill us now */
  PspTerminateThreadByPointer(Thread,
  STATUS_THREAD_IS_TERMINATING,
  TRUE);
  }

}

VOID
NTAPI
KiInitializeUserApc(IN PKEXCEPTION_FRAME ExceptionFrame,
  IN PKTRAP_FRAME TrapFrame,
  IN PKNORMAL_ROUTINE NormalRoutine,
  IN PVOID NormalContext,
  IN PVOID SystemArgument1,
  IN PVOID SystemArgument2)
{
...
  /* Run at APC dispatcher */
  TrapFrame->Eip = (ULONG)KeUserApcDispatcher;
  TrapFrame->HardwareEsp = Stack;/* Setup Ring 3 state */
  TrapFrame->SegCs = Ke386SanitizeSeg(KGDT_R3_CODE, UserMode);
  TrapFrame->HardwareSegSs = Ke386SanitizeSeg(KGDT_R3_DATA, UserMode);
  TrapFrame->SegDs = Ke386SanitizeSeg(KGDT_R3_DATA, UserMode);
  TrapFrame->SegEs = Ke386SanitizeSeg(KGDT_R3_DATA, UserMode);
  TrapFrame->SegFs = Ke386SanitizeSeg(KGDT_R3_TEB, UserMode);
  TrapFrame->SegGs = 0;
  TrapFrame->ErrCode = 0;/* Sanitize EFLAGS */
  TrapFrame->EFlags = Ke386SanitizeFlags(Context.EFlags, UserMode);/* Check if thread has IOPL and force it enabled if so */
  if (KeGetCurrentThread()->Iopl) TrapFrame->EFlags |= 0×3000;/* Setup the stack */
  *(PULONG_PTR)(Stack + 0 * sizeof(ULONG_PTR)) = (ULONG_PTR)NormalRoutine;
  *(PULONG_PTR)(Stack + 1 * sizeof(ULONG_PTR)) = (ULONG_PTR)NormalContext;
  *(PULONG_PTR)(Stack + 2 * sizeof(ULONG_PTR)) = (ULONG_PTR)SystemArgument1;
  *(PULONG_PTR)(Stack + 3 * sizeof(ULONG_PTR)) = (ULONG_PTR)SystemArgument2
;

}

KiUserApcDispatcher는 이러한 과정을 거치면서 UserMode 상에 Callback 되어지고 이러한 KiUserApcDispatcher는 LdrpInitialize를 통해서 Stack을 초기화 ZwContinue를 통해서 실제 Thread의 Entry Point를 Execute 하게 됩니다.

KiUserApcDispatcher는 Thread의 시작 뿐만아니라 Dll의 호출이나 User Level APC가 전달될때 발생하게 되며 이러한 경우 Stack 상에서 종종 볼수 있습니다.


- 출처 : http://www.insidewindows.kr/?p=30

  Comments,     Trackbacks

Backtrack에서 GUI로 네트워크 설정하기 (Backtrack Network Configuration)

Backtrack에서 네트워크 설정시 터미널에서 수정하는 것보다 GUI가 쉽기 때문에 관련 정보를 찾아 올립니다. 저는 Vmware에서 Nat설정을 하고도 네트워크가 잡히지 않아서 이렇게 하고 GUI로 보니 DNS문제였내요..--; 아무튼 유용할거 같아서 스크린 샷 붙혀 보았습니다.

 

The file we’re looking for is /usr/share/slax/network-conf.kmdr. If you try to run network-conf.kmdr from a terminal, nothing happens and you get some errors. This is because this file requires the command kmdr-executor. So, to easily return the missing menu item to K Menu:

 

 

- Right click the K Menu button and choose Menu Editor.

 

 

- Expand Internet group.

 

- Right click Internet group, and select New Item.

 

 

- Name the new item Network Configurator, and the Command is:


kmdr-executor /usr/share/slax/network-conf.kmdr


 

 

- Choose an icon for the menu item

 

- Save the K Menu configuration.

 

 

- Enjoy.

 


  Comments,     Trackbacks