CreateMutex
까보면 다나와~
분류 전체보기 (216)

화면 캡쳐에 쓰이는 API

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

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

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

(생략)..

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

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

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

..(생략)
  Comments,     Trackbacks

국정원 채용공고

http://www.nis.go.kr/docs/recruit/guide.html

국정원 채용공고가 떳네요.

토익 점수/ 국가정보학, 논술, 종합교양,,,,
  Comments,     Trackbacks

(CVE-2010-2568) Lnk 파일 제로데이 취약점 패치

금일 패치 이후 다음 레지스트리의 CLASS-ID가 삭제 되었네요.
HKEY_CLASSES_ROOT\CLSID\{21EC2020-3AEA-1069-A2DD-08002B30309D}

'취약점 정보 > MicroSoft' 카테고리의 다른 글

Microsoft Security Advisory (2458511)  (0) 2010.11.04
  Comments,     Trackbacks

360도 파노라마 사진
http://pulsemedia.iptime.org:8099/hillgrave01.html

360도 전체를 볼 수 있는 파노라마 사진.

기술이 좋다. 예전에 본거 같은데, 이렇게 찍어보고 싶네요..

'아리스리생각' 카테고리의 다른 글

트위터 유저를 타겟으로하는 봇넷 악성코드  (0) 2010.09.15
국정원 채용공고  (0) 2010.08.20
서로에게 관심 갖기.  (0) 2010.07.12
사회 공학적 기법의 해킹.  (0) 2010.05.19
푸른색과 흰색  (0) 2010.05.11
  Comments,     Trackbacks

서로에게 관심 갖기.




다들 자신만 돌보고 서로에게 관심을 갖지 않는 현실이 가슴 아프다

'아리스리생각' 카테고리의 다른 글

국정원 채용공고  (0) 2010.08.20
360도 파노라마 사진  (0) 2010.07.21
사회 공학적 기법의 해킹.  (0) 2010.05.19
푸른색과 흰색  (0) 2010.05.11
재미있는 MBC 드라마  (0) 2010.04.27
  Comments,     Trackbacks

사회 공학적 기법의 해킹.

http://www.seoul.co.kr/news/newsView.php?id=20100518500001

 사실 아무리 기술이 발전한다 해도 사회공학적 기법의 해킹은
막기 힘든 방법 중에 하나일 꺼란 생각도 해 봅니다.


'아리스리생각' 카테고리의 다른 글

국정원 채용공고  (0) 2010.08.20
360도 파노라마 사진  (0) 2010.07.21
서로에게 관심 갖기.  (0) 2010.07.12
푸른색과 흰색  (0) 2010.05.11
재미있는 MBC 드라마  (0) 2010.04.27
  Comments,     Trackbacks

unpack 관련 툴들
http://www.unpack.cn/archiver/fid-35.html

요기 unpack 관련한 툴이 꽤 있는거 같다.

  Comments,     Trackbacks

Anti Debug 몇 가지 입니다.
Thermida AntiDebug Specs
(Just ignore this if you've never step though asm code with an debugger)

Checks first byte of an API for 0xCC
^- so avoid setting a breakpoint directly to for ex. CreateFile
(instead set on the next instruction in CreateFile)

\\.\NTICE  \\.\SICE \\.\SIWVID [No comment]
"ntice.sys"  [No comment]
"iceext.sys"   Numega Softice Extension for hiding softice
"Syser.sys" Syser Kernel Debugger (
http://www.sysersoft.com)
"HanOlly.sys" from 'HanOlly_edition_for_themida_1.9'
"extrem.sys" "FRDTSC.SYS" standardname of 'PhantOm'plugin for Ollydebug
 (change this in Ollydbg.ini![Plugin PhantOm]!)

"Filem" "REGMON" "regsys" "sysregm" "PROCMON"  yaya the powertools from Sysinterals


더미다에서 쓰이는 안티디버그 방법 중 몇 가지 입니다.
실제로 까본 모습인데 몇 가지 파일이 더 있네요. 버젼에 따라 다르겠죠.


* iceext.sys ntice.sys syser.sys hanolly.sys extrem.sys frdtsc.sys

'유용한 지식 자료들 > Anti Reversing 기법' 카테고리의 다른 글

CMPXCHG8B and LOCK  (0) 2011.11.29
Red Pill  (1) 2011.11.29
OpenRCE Anti Reverse Engineering Techniques Database  (0) 2011.11.29
windows-anti-debug-reference  (0) 2011.11.29
안티안티모니터링을 위한 API  (0) 2011.11.21
  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

Explorer 레지스터를 활용한 악성코드

 

HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Explorer\
ControlPanel\NameSpace\{c308dbac-6fbc-4faa-aa66-2c924ab9b109}

--> 제어판 목록에 추가

 

 

 

HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Explorer\
Desktop\NameSpace\{c308dbac-6fbc-4faa-aa66-2c924ab9b109}

---> 바탕화면에 추가

 

 

 

HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Explorer\
MyComputer\NameSpace\{c308dbac-6fbc-4faa-aa66-2c924ab9b109}

--> 내 컴퓨터에 나오는 목록.. 위에 CLSSID는 기타로 표시됨

 

 

 

HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Explorer\
NetworkNeighborhood\NameSpace\{c308dbac-6fbc-4faa-aa66-2c924ab9b109}

네트워크이웃 추가....;

'유용한 지식 자료들 > 레지스트리' 카테고리의 다른 글

Active Setup이란  (0) 2012.08.28
인터넷에 관련한 레지스트리 설정 정보  (0) 2012.07.12
윈7 레지스트리 정보  (0) 2011.09.06
MUICache 레지스트리  (0) 2011.04.15
  Comments,     Trackbacks