ReverseEngineering Archive 국내 리버스엔지니어링 관련 문서들을 모은 Archive 입니다.

14 Sep, 2009
Hooking

이강석 조회 수 1878 추천 수 0
등록된 스크린샷이 없습니다
author 지현석 
aka binish 
WebSite http://binish.or.kr 
Source http://binish.or.kr/_zb/zboard.php?id=_binishpaper&page=1&sn1=&divpage=1&sn=off&ss=on&sc=on&select_arrange=headnum&desc=asc&no=15 

 사실 이 방법은 많은 사람들이 알고 있을 만한 방법입니다만 간략히 다시 정리해 보겠습니다. 진짜 간략하게..

PTHREADINFO pti = NULL;

__asm
{
        mov eax, fs:[0x18] ; get address of TEB
        mov eax, [eax+0x40] ; get address of Win32ThreadInfo
        mov pti, eax ; okay!
}

이렇게 하면 pti 변수를 통해 PTHREADINFO 구조체를 얻게 되죠..?
pti->pDeskInfo->aphkStart[] 배열에 바로 SetWindowsHookEx()를 통해 전역 후킹된 함수가 등록 되니까,
아래와 같은 예제를 통해 확인할 수 있습니다.

aphkStart[ WH_KEYBOARD + 1 ]가 NULL이 아니라면?!
aphkStart[ WH_KEYBOARD + 1 ]를 NULL로 만든다면?!

good luck!

※ 참고
typedef struct tagTHREADINFO
  {
   //W32THREAD;
   //PTL ptl; // Listhead for thread lock list
  // W32THREAD 和 PTL 是我所不知道的结构,通过SoftICE的帮助,我知道了它们的大小,
  //于是我弄了个东东来填充它
   PADDING(padding1 , 0x2c);
   PVOID ppi; // process info struct for this thread
   // type is PPROCESSINFO
   PVOID rpdesk; // type is PDESKTOP
   PDESKTOPINFO pDeskInfo; // Desktop info visible to client
   // type is PDESKTOPINFO
   PCLIENTINFO pClientInfo; // Client info stored in TEB
   // type is PCLIENTINFO
   DWORD TIF_flags; // TIF_ flags go here.
   PUNICODE_STRING pstrAppName; // Application module name.
   PVOID psmsSent; // Most recent SMS this thread has sent
   // type is PSMS
   PVOID psmsCurrent; // Received SMS this thread is currently processing
   // type is PSMS
   PVOID psmsReceiveList; // SMSs to be processed
   // type is PSMS
   LONG timeLast; // Time, position, and ID of last message
   ULONG_PTR idLast;
   int cQuit;
   int exitCode;
   HDESK hdesk; // Desktop handle
   // HDESK
   int cPaintsReady;
   UINT cTimersReady;
   PVOID pMenuState; // type is PMENUSTATE
   union {
   PVOID ptdb; // Win16Task Schedule data for WOW thread
   // type is PTDB
   PVOID pwinsta; // Window station for SYSTEM thread
  // type is PWINDOWSTATION
   };
   PVOID psiiList; // thread DDEML instance list
   // type is PSVR_INSTANCE_INFO
   DWORD dwExpWinVer;
   DWORD dwCompatFlags; // The Win 3.1 Compat flags
   DWORD dwCompatFlags2; // new DWORD to extend compat flags for NT5+ features
   PVOID pqAttach; // calculation variabled used in
   // type is PQ
   // zzzAttachThreadInput()
  
   PTHREADINFO ptiSibling; // pointer to sibling thread info
  
   PVOID pmsd; // type is PMOVESIZEDATA
  
   DWORD fsHooks; // WHF_ Flags for which hooks are installed
  
   PHOOK sphkCurrent; // Hook this thread is currently processing
   // type is PHOOK
  
   PVOID pSBTrack; // type is PSBTRACK
  
   HANDLE hEventQueueClient;
   PVOID pEventQueueServer; // type is PKEVENT
   PVOID PtiLink; // Link to other threads on desktop
   // type is LIST_ENTRY
   int iCursorLevel; // keep track of each thread's level
  
   PADDING(padding2 , 4);
   POINT ptLast;
  
   PWND spwndDefaultIme; // Default IME Window for this thread
   // type is PWND
   PVOID spDefaultImc; // Default input context for this thread
   // type is PIMC
   HANDLE hklPrev; // Previous active keyboard layout
  // type is HKL
   int cEnterCount;
  
   MLIST mlPost; // posted message list.
   USHORT fsChangeBitsRemoved;// Bits removed during PeekMessage
   WCHAR wchInjected; // character from last VK_PACKET
   DWORD fsReserveKeys; // Keys that must be sent to the active
   // active console window.
   PVOID *apEvent; // Wait array for xxxPollAndWaitForSingleObject
   // type is PKEVENT
   ACCESS_MASK amdesk; // Granted desktop access
   UINT cWindows; // Number of windows owned by this thread
   UINT cVisWindows; // Number of visible windows on this thread
  
   PHOOK aphkStart[CWINHOOKS]; // Hooks registered for this thread
   // type is PHOOK
   BYTE cti; // Use this when no desktop is available
   // type is CLIENTTHREADINFO
  
   }THREADINFO ,* PTHREADINFO;

List of Articles
번호 author WebSite
66 Hooking SSDT Hooking을 이용한 프로세스와 파일 숨기기 이동수  http://is119.jnu.ac.kr 
65 Hooking detours와 iat hooking 사용하기 crattack  http://blog.naver.com/crattack 
» Hooking SetWindowsHookEx 후킹 제거 지현석  http://binish.or.kr 
63 Hooking DLL Injection은 어떻게 이루어지는가 김연재  http://hisjournal.net/blog 
62 Dev 보안 프로그래밍 박율기  http://kicom.kiu.ac.kr 
61 UnPacking The Art of Unpacking (원저자: Mark Vincent Yason) 박천성  http://beist.org/ 
60 Packing Packing / Anti-Debugging의 개념 및 Reversing의 개념 이해 IDT  http://www.idt.or.kr 
59 Network SNMP의 취약점을 이용한 공격기법과 대응방안 현태원  http://crypto.dongseo.ac.kr 
58 Network 스니핑 동작원리 및 공격방법 전정수  http://cert.chosun.ac.kr 
57 Network SSH Brute-Force Login Attack 분석과 대응 장상근  http://maxoverpro.org 
56 Network 네이트온(NateOn) 3.7.10.3(966) 로그인 과정 분석 지현석  http://binish.or.kr 
55 Malware Analysis Dropper/Agent.97280.D Analysis 안마루  http://blog.naver.com/ahnmaru78 
54 Malware Analysis Win-Trojan/KillMBR.14848 Analysis 안마루  http://blog.naver.com/ahnmaru78 
53 Malware Analysis 악성코드 분석 요점 정리 양봉열  http://nchovy.kr 
52 Malware Analysis 악성 코드의 유형과 패턴분석 및 리버싱 툴을 이용한 샘플코드 분석결과 보고 IDT  http://www.idt.or.kr 
51 Malware Analysis Linux Virus 탐지 및 대응 서환곤  http://mainthink.net 
50 Malware Analysis Windows 악성코드 분석 가이드 강동현  http://mainthink.net 
49 Malware Analysis Analysis Malicious Bot & Protection 이화진  http://www.2xpert.org 
48 Malware Analysis Consider the USB Malware Analysis 윤상필  http://www.2xpert.org 
47 Malware Analysis 악성코드 분석 김슬예나  http://www.2xpert.org