|
너무 포스팅이 뜸한듯 하여.. (아무도 강요하지 않지만) 그닥 도움 안되는 잡다구리한 내용이라도 끄적여 봅니다. 헤헤~
버퍼오퍼플로우 공격등에 당하지 않기 위해 포인터 인코딩이라는 방법을 이용하고는 합니다. 비스타에는 long-lived pointer 에 대해 포인터 인코딩을 이미 사용중이라고 하더군요. (확인은 못해봤습니다만...) 구현을 할까 하다가 혹시나 해서 MSDN 에 찾아봤더니 함수로 존재하더군요. 흐.. 역시 MSDN 엔 별게 다 있어요. ^^ MS 에서는 포인터 인코딩을 어떻게 구현했을까나 하는 생각에 좀 살펴봤습니다. PVOID EncodePointer( PVOID Ptr ); PVOID DecodePointer( PVOID Ptr ); PVOID DecodeSystemPointer( PVOID Ptr ); PVOID EncodeSystemPointer( PVOID Ptr ); 이 함수들은 kernel32.dll 에 구현되어있는데 코드를 디스어셈블해서 보면 En/DecodeSystemPointer() 함수의 경우 시스템 전역적으로 고정적인 값으로 포인터를 XOR 하지만 En/DecodePointer() 함수는 프로세스마다 다른 값을 통해 XOR 을 합니다. MSDN 에도 나와있듯이 En/DecodePointer() 가 비교적 더 안전하다고 볼 수 있겠죠. (포인터 인코딩 자체에 대해서 부정적인 생각을 가진분들은 빼고요. ^^) 호출 흐름은 kernel32.dll::EncodePointer() -> ntdll:RtlEncodePointer() 입니다. ![]() RtlEncodePointer() 함수는 ZwQueryInformationProcess() 함수를 통해 얻는 4바이트 짜리값을 통해 XOR 을 하는 매우 간단한 코드이군요. ZwQueryInformationProcess() 를 호출하는 것으로 보아 프로세스에 의존적인 값을 이용한다는 것을 짐작할 수 있겠군요. ZwQueryInformationProcess( GetCurrentProcessId(), 0x24, &value // sizeof(value) = 4 4, 0) ![]() (WinDbg 의 scratch pad 에서 복사해서 붙이려는데 지저분하게 붙어서.. -_-;; 앞부분만 이미지 캡쳐로.. ㅋㅋ) 결국 위의 코드는 NtQueryInformationProcess() 를 호출하게 되겠죠. NtQueryInformationProcess()를 리버싱해보면 현재 프로세스의 EPROCESS::Cookie 값이 없는 경우 현재 시간값을 구하고, 뭔가 다른 필드들과 xor 연산을 통해 유니크한 값을 만들어 내어 Cookie 값을 생성해서 세팅하고, 리턴을 합니다. 물론 Cookie 가 이미 만들어져 있는 경우는 그냥 리턴하는 것이죠. 즉 EPROCESS::Cookie 값은 프로세스에 고유한 값이 필요할때 쓰이는 값이란 것입니다. :-) 결론: EncodePointer(), DecodePointer() 함수는 진짜로 (거짓말 아니고-_-) 프로세스에 유니크한 값을 통해 포인터를 뭉개준다!! EPROCESS::Cookie 값은 프로세스에 유니크한 값이 필요할때 가져다 쓸 수 있다!! 이 글과 관련있는 글을 자동검색한 결과입니다 [?]
|
카테고리
< 링크 >
게시판 욕해도 됩니다. ㅋㅋ 심심이 - springnote zesrever 의 지식펌프 까마구님 cpplog Woof 님 maystyle 사파고수 재학사마 서우석님 x-Type 이기탁님 정성태님 신영진님 이명헌경영스쿨 haskell 언어 이재원 e-campus codian.net zendlinde - 건즈온라인개발자 xecode.net 이동우님 위키 왕멀-게임개발자로살아가기 삽질하는 플머-민성기님 블로그 검색엔진 첫눈 블로그 Kei 의 바이러스 세상 mat 님 블로그 신경준님 블로그 윤훈남님 블로그 blog.hsd.or.kr IDA 메인 아키텍트 게임개발-sky team 송상무님 세율이 민쓰 hackaday.com 해킹속임수의 예술 네이버-임베디드 카페 정원교 zealot님 serious-code 홍가일보 doronh peterwie - UMDF leader sysinternals sysinternals 뉴스레터 MS r&d bkchung blog MS 서진호님 window communication 최근 등록된 덧글
서울여대 충격이면서도 ..
by binish at 11/09 잘 보고 가요.. :) by :) at 10/30 워 이거때문에 해맸는데 .. by 일리 at 10/26 진정한 take(공유)!!!!.. by rees at 10/03 그러게 술한잔 해야 하는.. by somma at 09/25 쫑호~ 잘 지내고 있는감?.. by somma at 09/25 안녕하세요 잘 지내시죠?.. by 김종호 at 09/22 지만이네나 여기나 역시.. by 양군 at 09/22 필코 마제는 기계식인데.. by 욱 at 09/07 그냥 할당에 비해서 걍 3.. by Hide_D at 09/01 최근 등록된 트랙백
폴포츠 꿈은 이루어지다
by 연예의 인연으로... DDK VS에 연동하기~! by 박한범님의 이글루 [PE]DOS대가리의 .. by 미친감자의 BLOG 십년차의 생각 by sugiii's me2DAY 십년차의 생각 by sugiii's me2DAY Windows Handle by MalwareLAB [디버그랩] Windows .. by NaggingMachine jjjismy의 생각 by jjjismy's me2DAY Vista의 EncodePoint.. by Woof's EncodePointer 함수 .. by Woof's 이글루링크
미친병아리가 삐약삐약
김명신의 즐거운 하루 소스코드위를 걷다..... zoops 이야기 ▒ 제닉스의 사고뭉치 ▒ 餘分D: physics and fun Just for fun~ 달리다. 그리고 날다. 게임회사 이야기 ~★~ 우하하!!~ 프로.. 헐랭이와 IT보안 Alphageek 견우의 블로그 from __future__ impor.. Sodécho 내일은 내일의 바람이 분다. 델파이로 만드는 검색엔진 The second story ::거듭나기:: kkamagui의 프로그래.. 루오니의 집 개발자 서씨 Zealot Xeraph@NCHOVY SecurityCode Bellevue Project Coderant의 보안과 전략 Jania's Blog 미친감자의 프로그래밍 .. 그 냥반의 기술 공간 art.oriented mocca Strategy Thinking 이글루 파인더
라이프로그
태그
|