<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0">
	<channel>
		<title>KINUX STORY</title>
		<link>http://kinux.comgosu.net/</link>
		<description>젊음이란 나이가 아니라 내가 가진 에너지의 총량이다.</description>
		<language>ko</language>
		<pubDate>Wed, 12 Mar 2008 21:29:31 +0900</pubDate>
		<generator>Tattertools 1.1.3 : Transition</generator>
		<image>
		<title>KINUX STORY</title>
		<url>http://comgosu.net/attach/7/1208877214.jpg</url>
		<link>http://kinux.comgosu.net/</link>
		<width>162</width>
		<height>234</height>
		<description>젊음이란 나이가 아니라 내가 가진 에너지의 총량이다.</description>
		</image>
		<item>
			<title>Undocument Native API 중 BOOLEAN  형의 함수 인자</title>
			<link>http://kinux.comgosu.net/309</link>
			<description>Windows 에서 &lt;STRONG&gt;BOOL&lt;/STRONG&gt; 형 과 &lt;STRONG&gt;BOOLEAN&lt;/STRONG&gt; 형은 TRUE, FALSE를 구별하는 변수의 타입으로 사용되지만 서로 약간의 차이점이 존재합니다.&lt;br /&gt;그것은 아래와 같이 선언됨에 따라서 BOOLEAN 으로 선언한 변수의 크기는 1바이트이며, BOOL 은 4바이트(32bit 시스템에서) 인 점입니다.&lt;br /&gt;
&lt;DIV style=&quot;PADDING-RIGHT: 10px; PADDING-LEFT: 10px; PADDING-BOTTOM: 10px; PADDING-TOP: 10px; BACKGROUND-COLOR: #c9edff&quot;&gt;typedef unsigned char BOOLEAN&lt;br /&gt;typedef int BOOL&lt;br /&gt;&lt;/DIV&gt;&lt;br /&gt;일반적으로 프로그래밍을 할 경우에, 이 둘을 별로 구별하지 않고 사용하게 되는데요. 하지만 후킹(함수 포인터 변경 방식)을 하는 경우 원본 함수를 호출하려 할때 정확하지 않은 함수 인자를(즉, 사이즈가 다른) 사용하면 때때로 에러(&lt;STRONG&gt;ERROR_INVALID_PARAMETER&lt;/STRONG&gt;)로 리턴 되는 경우가 있어 주의가 필요합니다.&lt;br /&gt;&lt;br /&gt;특히, Windows 의 &lt;STRONG&gt;Undocument API&lt;/STRONG&gt; 를 후킹하고자 할 때는 함수 프로토타입을 알수가 없어서 정확한 함수 인자를 알기가 어렵습니다.&lt;br /&gt;이러한 Undocument API 함수의 프로토타입은 &lt;A href=&quot;http://undocumented.ntinternals.net/&quot;&gt;http://undocumented.ntinternals.net/&lt;/A&gt;&amp;nbsp;와 &lt;A href=&quot;http://www.amazon.com/Windows-2000-Native-Reference-Circle/dp/1578701996/ref=sr_1_1?ie=UTF8&amp;amp;s=books&amp;amp;qid=1205321882&amp;amp;sr=8-1&quot; target=_blank&gt;Windows NT/2000 NATIVE API Reference&lt;/A&gt; 책을 참조하는게 보통입니다.&lt;br /&gt;&lt;br /&gt;하지만 오늘 위 두 곳에서 정의한 함수 프로토타입이 틀릴 수도 있으므로 주의가 필요함을 알았습니다.&lt;br /&gt;&lt;br /&gt;1. 우선 아래와 같은 함수를 확인하실 수 있습니다.&lt;br /&gt;
&lt;DIV style=&quot;PADDING-RIGHT: 10px; PADDING-LEFT: 10px; PADDING-BOTTOM: 10px; PADDING-TOP: 10px; BACKGROUND-COLOR: #ffdaed&quot;&gt;NTAPI&lt;br /&gt;NtCreateNamedPipeFile(OUT PHANDLE &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;I&gt;&lt;FONT color=blue&gt;NamedPipeFileHandle&lt;/FONT&gt;&lt;/I&gt;, &lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; IN ACCESS_MASK &lt;I&gt;&lt;FONT color=blue&gt;DesiredAccess&lt;/FONT&gt;&lt;/I&gt;,&lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; IN POBJECT_ATTRIBUTES &amp;nbsp; &lt;I&gt;&lt;FONT color=blue&gt;ObjectAttributes&lt;/FONT&gt;&lt;/I&gt;,&lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; OUT PIO_STATUS_BLOCK &amp;nbsp;&amp;nbsp; &lt;I&gt;&lt;FONT color=blue&gt;IoStatusBlock&lt;/FONT&gt;&lt;/I&gt;,&lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; IN ULONG &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;&amp;nbsp; &lt;I&gt;&lt;FONT color=blue&gt;ShareAccess&lt;/FONT&gt;&lt;/I&gt;,&lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; IN ULONG &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;&amp;nbsp; &lt;I&gt;&lt;FONT color=blue&gt;CreateDisposition&lt;/FONT&gt;&lt;/I&gt;,&lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; IN ULONG &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;&amp;nbsp; &lt;I&gt;&lt;FONT color=blue&gt;CreateOptions&lt;/FONT&gt;&lt;/I&gt;,&lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;&lt;STRONG&gt;&lt;FONT color=#d41a01&gt; IN BOOLEAN &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;&amp;nbsp; &lt;I&gt;WriteModeMessage&lt;/I&gt;,&lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;IN BOOLEAN &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;&amp;nbsp; &lt;I&gt;ReadModeMessage&lt;/I&gt;,&lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;IN BOOLEAN &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;&amp;nbsp; &lt;I&gt;NonBlocking&lt;/I&gt;,&lt;br /&gt;&lt;/FONT&gt;&lt;/STRONG&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; IN ULONG &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;&amp;nbsp; &lt;I&gt;&lt;FONT color=blue&gt;MaxInstances&lt;/FONT&gt;&lt;/I&gt;,&lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; IN ULONG &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;&amp;nbsp; &lt;I&gt;&lt;FONT color=blue&gt;InBufferSize&lt;/FONT&gt;&lt;/I&gt;,&lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; IN ULONG &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;&amp;nbsp; &lt;I&gt;&lt;FONT color=blue&gt;OutBufferSize&lt;/FONT&gt;&lt;/I&gt;,&lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; IN PLARGE_INTEGER &amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;I&gt;&lt;FONT color=blue&gt;DefaultTimeOut&lt;/FONT&gt;&lt;/I&gt; );&lt;/DIV&gt;위 함수를 보시면 인자의 총 바이트 수는 47바이트(4Byte * 11 + 1Byte * 3) 입니다.&lt;br /&gt;실제로 그런지 확인해 보겠습니다.&lt;br /&gt;&lt;br /&gt;2. XP 에서 NtCreateNamedPipeFIle 의 SDT 의 인덱스는 2C 입니다.&lt;br /&gt;
&lt;DIV style=&quot;PADDING-RIGHT: 10px; PADDING-LEFT: 10px; PADDING-BOTTOM: 10px; PADDING-TOP: 10px; BACKGROUND-COLOR: #ffdaed&quot;&gt;0: kd&amp;gt; u ntdll!NtCreateNamedPipeFile&lt;br /&gt;ntdll!NtCreateNamedPipeFile:&lt;br /&gt;7c93d715 b82c000000 &amp;nbsp; &amp;nbsp;&amp;nbsp; mov &amp;nbsp; &amp;nbsp; eax,&lt;STRONG&gt;&lt;FONT color=#d41a01&gt;2Ch&lt;/FONT&gt;&lt;br /&gt;&lt;/STRONG&gt;7c93d71a ba0003fe7f &amp;nbsp; &amp;nbsp;&amp;nbsp; mov &amp;nbsp; &amp;nbsp; edx,offset SharedUserData!SystemCallStub (7ffe0&lt;br /&gt;300)&lt;br /&gt;7c93d71f ff12 &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;&amp;nbsp; call &amp;nbsp;&amp;nbsp; dword ptr [edx]&lt;br /&gt;7c93d721 c23800 &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;&amp;nbsp; ret &amp;nbsp; &amp;nbsp; 38h&lt;/DIV&gt;&lt;br /&gt;3. SDT(Service Descriptor Table)은 아래와 같이 4개의 멤버를 가지고 있습니다.&lt;br /&gt;
&lt;DIV style=&quot;PADDING-RIGHT: 10px; PADDING-LEFT: 10px; PADDING-BOTTOM: 10px; PADDING-TOP: 10px; BACKGROUND-COLOR: #ffdaed&quot;&gt;(1) System Service Dispatch Table Address&lt;br /&gt;(2) CounterTable Address&lt;br /&gt;(3) Service Limit&lt;br /&gt;&lt;FONT color=#d41a01&gt;&lt;STRONG&gt;(4) System Service Parameter Table Address&lt;/STRONG&gt;&lt;br /&gt;&lt;/FONT&gt;&lt;/DIV&gt;이중 4번째 인자는 각 함수별 인자에 대한 정보가 있는 곳입니다.&lt;br /&gt;&lt;br /&gt;4. 아래와 같이 SDT 에서 System Service Parameter Table Address 가 있는 위치를 확인합니다. 흠.. 0x80519fc4 네요&lt;br /&gt;
&lt;DIV style=&quot;PADDING-RIGHT: 10px; PADDING-LEFT: 10px; PADDING-BOTTOM: 10px; PADDING-TOP: 10px; BACKGROUND-COLOR: #ffdaed&quot;&gt;0: kd&amp;gt; dd nt!KeServiceDescriptorTable&lt;br /&gt;80563500&amp;nbsp; 804e68b0 00000000 0000011c &lt;STRONG&gt;&lt;FONT color=#d41a01&gt;80519fc4&lt;br /&gt;&lt;/FONT&gt;&lt;/STRONG&gt;80563510&amp;nbsp; 00000000 00000000 00000000 00000000&lt;br /&gt;80563520&amp;nbsp; 00000000 00000000 00000000 00000000&lt;br /&gt;80563530&amp;nbsp; 00000000 00000000 00000000 00000000&lt;br /&gt;80563540&amp;nbsp; 00000002 00002710 bf80c227 00000000&lt;br /&gt;80563550&amp;nbsp; badefa80 f753d4a0 8a96b0f0 80711040&lt;br /&gt;80563560&amp;nbsp; 00000000 00000000 ffeced30 ffffffff&lt;br /&gt;80563570&amp;nbsp; e0d48b70 01c883c9 00000000 00000000&lt;/DIV&gt;&lt;br /&gt;5. 각 함수의 인자 값을 확인해면 아래와 같습니다.&lt;br /&gt;
&lt;DIV style=&quot;PADDING-RIGHT: 10px; PADDING-LEFT: 10px; PADDING-BOTTOM: 10px; PADDING-TOP: 10px; BACKGROUND-COLOR: #ffdaed&quot;&gt;0: kd&amp;gt; db 80519fc4&lt;br /&gt;80519fc4&amp;nbsp; 18 20 2c 2c 40 2c 40 44-0c 08 18 18 08 04 04 0c&amp;nbsp; . ,,@,@D........&lt;br /&gt;80519fd4&amp;nbsp; 10 18 08 08 0c 04 08 08-04 04 0c 08 0c 04 04 20&amp;nbsp; ...............&lt;br /&gt;80519fe4&amp;nbsp; 08 10 0c 14 0c 2c 10 0c-0c 1c 20 10 &lt;STRONG&gt;&lt;FONT color=#ff0000&gt;38&lt;/FONT&gt;&lt;/STRONG&gt; 10 14 20&amp;nbsp; .....,.... .8..&lt;br /&gt;80519ff4&amp;nbsp; 24 24 1c 14 10 20 10 34-14 08 0c 08 04 04 04 04&amp;nbsp; $$... .4........&lt;br /&gt;8051a004&amp;nbsp; 0c 08 28 04 1c 18 08 18-0c 18 08 18 0c 08 0c 04&amp;nbsp; ..(.............&lt;br /&gt;8051a014&amp;nbsp; 10 00 0c 10 28 08 08 10-1c 04 08 0c 04 10 08 00&amp;nbsp; ....(...........&lt;br /&gt;8051a024&amp;nbsp; 08 04 08 0c 28 08 04 10-04 04 0c 0c 28 04 24 28&amp;nbsp; ....(.......(.$(&lt;br /&gt;8051a034&amp;nbsp; 30 0c 0c 0c 18 0c 0c 0c-0c 30 10 0c 10 0c 0c 0c&amp;nbsp; 0........0......&lt;br /&gt;&lt;/DIV&gt;NtCreateNamedPipeFile 의 위치(인덱스)가 &lt;STRONG&gt;2C&lt;/STRONG&gt; (십진수로 44) 인 곳을 확인해 보면 함수 인자의 총 합이 &lt;STRONG&gt;38&lt;/STRONG&gt; (십진수로 56) 임을 확인 할 수 있습니다.&lt;br /&gt;즉, 함수 선언에 있는 것처럼 인자의 총 합이 47바이트(4Byte * 11 + 1Byte * 3) 가 아니라 56 바이트(통상 4Byte * 14) 이어야 합니다.&lt;br /&gt;즉, BOOLEAN 형의 인자 세개가 잘못 된 것이며, 4Byte 타입으로 선언해야 합니다.&lt;br /&gt;&lt;br /&gt;이러한 함수를 몇개 더 확인해 본 결과, 함수 선언중 BOOLEAN 인자로 되어 있는것은 전부 이렇게 인자 바이트 합이 일치하지 않았으며, BOOLEAN 타입을 4Byte 타입으로 바꾸어서(ULONG) 계산하면 일치함을 확인했습니다. &lt;br /&gt;또한 이렇게 수정한 결과 후킹후 원본 함수 호출 시 ERROR_INVALID_PARAMETER 가 발생하지 않음을 확인했습니다.&lt;br /&gt;&lt;br /&gt;위 내용에 대해서 2000 SP4, XP SP2 에 환경에서 확인해 보았습니다.</description>
			<category>소스/팁</category>
			<category>BOOL</category>
			<category>BOOLEAN</category>
			<category>Undocument Native API</category>
			<category>함수 파라미터</category>
			<author> (키눅스)</author>
			<guid>http://kinux.comgosu.net/309</guid>
			<comments>http://kinux.comgosu.net/309#entry309comment</comments>
			<pubDate>Wed, 12 Mar 2008 21:27:25 +0900</pubDate>
		</item>
		<item>
			<title>하이브리드 후킹</title>
			<link>http://kinux.comgosu.net/308</link>
			<description>&lt;FONT color=#0000ff&gt;루트킷&lt;/FONT&gt;에 보면 &lt;FONT color=#0000ff&gt;하이브리드 후킹에&lt;/FONT&gt; 대한 설명이 나와있습니다.&lt;br /&gt;간단히 말해서 DLL Injection 없이 커널모드 에서 유저모드의 IAT(Import Address Table)을 바로 후킹하는 것입니다.&lt;br /&gt;&lt;br /&gt;이 후킹 방식의 주요 포인트는 &lt;STRONG&gt;PsSetLoadImageNotifyRoutine()&lt;/STRONG&gt; 함수를 이용하여 바이너리 이미지가 메모리로 로드되는 시점을 알 수 있다는 것과&lt;STRONG&gt; KUSER_SHARED_DATA&lt;/STRONG&gt; 영역이라 불리는 커널모드와 유저모드에서 동일한 물리 메모리 주소를 가리키는 영역을 이용한다는 것입니다.&lt;br /&gt;&lt;br /&gt;
&lt;DIV style=&quot;PADDING-RIGHT: 10px; PADDING-LEFT: 10px; PADDING-BOTTOM: 10px; PADDING-TOP: 10px; BACKGROUND-COLOR: #ffdaed&quot;&gt;NOTE : &amp;nbsp;PsSetLoadImageNotifyRoutine 으로 등록한 콜백함수가 호출되는 시점이 이미지들이 로딩되는 프로세스와 같은 Process Context 인 점이 중요 합니다.&lt;br /&gt;&lt;br /&gt;NOTE : 커널모드에서의 KUSER_SHARED_DATA : 0xFFDF0000 + 4K&lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;&amp;nbsp; 유저모드에서의 KUSER_SHARED_DATA : 0x7FFE0000 + 4K&lt;br /&gt;&lt;/DIV&gt;&lt;br /&gt;하지만 책에 있는 샘플을 그대로 동작시켰을때 정상적으로 후킹되지 않음을 알 수 있습니다.&lt;br /&gt;이는 PsSetLoadImageNotifyRoutine 콜백 함수로 특정 DLL 이 로드 되었다고 알려진 시점에 바로 후킹에 들어갔기 때문입니다. 즉, DLL 이 로드 되었다고 해도 해당 DLL의 익스포트 함수를 어플리케이션의 IAT(PE Format 에서 &lt;STRONG&gt;OriginalFirstThunk&lt;/STRONG&gt; 가 아닌 &lt;STRONG&gt;FirstThunk&lt;/STRONG&gt;)에 적용하기 전 시점일수(거의 대부분) 있기 때문입니다.&lt;br /&gt;&lt;br /&gt;요지는 루트킷 책의 샘플을 이용하여 하이브리드 후킹을 했을때 후킹이 안된 경우는 위 문제 때문일 것이라는... ^^; (이미 아시는 내용이시라면 Pass ~~ )&lt;br /&gt;&lt;br /&gt;디버깅한 내용들을 스크린 샷으로 찍어서 설명 드렸으면 더 좋았을 텐데.. 귀차니즘으로 ^^;&lt;br /&gt;아래는 하이브리드 후킹에 대해서 그림으로 간단히 요약해 본 것입니다.&lt;br /&gt;(그림에 대한 설명은 루트킷 책을 참고하세요)&lt;br /&gt;&lt;div class=&quot;imageblock center&quot; style=&quot;text-align: center; clear: both;&quot;&gt;&lt;img src=&quot;http://comgosu.net/attach/7/1287176507.png&quot; alt=&quot;그림을 클릭하시면 크게 보실 수 있습니다&quot; height=&quot;237&quot; width=&quot;500&quot; /&gt;&lt;p class=&quot;cap1&quot;&gt;KUSER_SHARED_DATA&lt;/p&gt;&lt;/div&gt;&lt;div class=&quot;imageblock center&quot; style=&quot;text-align: center; clear: both;&quot;&gt;&lt;img src=&quot;http://comgosu.net/attach/7/1392560462.png&quot; alt=&quot;그림을 클릭하시면 크게 보실 수 있습니다&quot; height=&quot;325&quot; width=&quot;500&quot; /&gt;&lt;p class=&quot;cap1&quot;&gt;하이브리드 후킹&lt;/p&gt;&lt;/div&gt;&lt;br /&gt;&lt;br /&gt;역시 말로 설명하는 것보다 글이나 그림은 어렵군요. ^^;&lt;br /&gt;&lt;br /&gt;※ 지나가는 소리 : 루트킷 책 원서와 번역본 모두 PsSetImageLoadNotifyRoutine 함수라고 나와있네요. 오타이며, 정확한 함수명은 PsSetLoadImageNotifyRoutine 입니다. ^^;&lt;br /&gt;&lt;br /&gt;</description>
			<category>소스/팁</category>
			<category>Hybrid Hooking</category>
			<category>KUSER_SHARED_DATA</category>
			<category>PsSetLoadImageNotifyRoutine</category>
			<category>Rootkit</category>
			<category>루트킷</category>
			<category>하이브리드 후킹</category>
			<author> (키눅스)</author>
			<guid>http://kinux.comgosu.net/308</guid>
			<comments>http://kinux.comgosu.net/308#entry308comment</comments>
			<pubDate>Fri, 07 Mar 2008 21:21:23 +0900</pubDate>
		</item>
		<item>
			<title>서비스가 정적 로딩되어 있으면 OpenService() 실패?</title>
			<link>http://kinux.comgosu.net/307</link>
			<description>&lt;P&gt;&lt;STRONG&gt;&quot;정적 로딩으로 설정된 드라이버를 OpenService() 함수로 열었을때 정상적으로 열릴까?&quot;&lt;br /&gt;&lt;br /&gt;&lt;/STRONG&gt;&lt;/P&gt;
&lt;DIV style=&quot;PADDING-RIGHT: 10px; PADDING-LEFT: 10px; PADDING-BOTTOM: 10px; PADDING-TOP: 10px; BACKGROUND-COLOR: #c9edff&quot;&gt;1. 드라이버를 정적로딩, 즉 Start Type을 SERVICE_SYSTEM_START(0x00000001)로 설정해 놓았습니다.&lt;br /&gt;&lt;br /&gt;2. 부팅시에 드라이버가 로딩되었습니다.&lt;br /&gt;&lt;br /&gt;3. 해당 드라이버(서비스)를 OpenService() 함수로 열었습니다. (왜 이런짓을 했어야 했는지 설명하기는 복잡해서 생략)&lt;br /&gt;&lt;br /&gt;4. 저는 당연히 성공으로 리턴될 줄 알았는데 실패로 뜨는 군요&lt;br /&gt;&amp;nbsp;&amp;nbsp; GetLastError() 값 : ERROR_SERVICE_DOES_NOT_EXIT&lt;br /&gt;&amp;nbsp;&amp;nbsp; 분명히 드라이버(서비스)는 로딩되어 있는데...&lt;br /&gt;&lt;br /&gt;어쨌든 이러한 증상이 오히려 도움이 됐습니다만.. 혹시 이에 대해 설명해 주실 분 있으신지..&lt;br /&gt;&lt;/DIV&gt;
&lt;P&gt;2008년 처음 포스팅인데 허접하네요... TT;&lt;br /&gt;&lt;br /&gt;&lt;/P&gt;</description>
			<category>소스/팁</category>
			<category>ERROR_SERVICE_DOES_NOT_EXIT</category>
			<category>OpenService</category>
			<author> (키눅스)</author>
			<guid>http://kinux.comgosu.net/307</guid>
			<comments>http://kinux.comgosu.net/307#entry307comment</comments>
			<pubDate>Wed, 13 Feb 2008 20:01:20 +0900</pubDate>
		</item>
		<item>
			<title>Visual Studio 2008 is now live on MSDN Subscriber Downloads</title>
			<link>http://kinux.comgosu.net/306</link>
			<description>&lt;P&gt;Visual Studio 2008 정식 버전이 MSDN 구독자 다운로드 사이트에 떴네요.&lt;br /&gt;늘 그렇듯이 지금은 영문판 Team System Architecture 판만 올라와 있는 상태입니다.&lt;br /&gt;(다운로드 받아서 설치해 보고 싶지만.. 지금은 그럴 여유가 없다는..)&lt;br /&gt;&lt;br /&gt;&lt;A href=&quot;http://blogs.msdn.com/msdnsubscriptions/default.aspx&quot; target=_blank&gt;http://blogs.msdn.com/msdnsubscriptions/default.aspx&lt;/A&gt;&lt;br /&gt;&lt;br /&gt;&lt;/P&gt;
&lt;BLOCKQUOTE&gt;&lt;STRONG&gt;Visual Studio 2008 is now live on MSDN Subscriber Downloads&lt;/STRONG&gt; 
&lt;DIV class=BlogPostContent minmax_bound=&quot;true&quot;&gt;
&lt;P minmax_bound=&quot;true&quot;&gt;&lt;FONT size=2&gt;As of 0900 (PST) on Monday November 19, 2007.&lt;/FONT&gt;&lt;/P&gt;
&lt;P minmax_bound=&quot;true&quot;&gt;&lt;FONT size=2&gt;You have two avenues to download the files you are entitled to&lt;/FONT&gt;&lt;/P&gt;
&lt;P minmax_bound=&quot;true&quot;&gt;&lt;FONT size=2&gt;1. Top Subscriber Downloads (make sure to allow popups) &lt;/FONT&gt;&lt;/P&gt;
&lt;P minmax_bound=&quot;true&quot;&gt;&lt;FONT size=2&gt;2. Suscriber Downloads and Product Keys link&lt;/FONT&gt;&lt;/P&gt;
&lt;P minmax_bound=&quot;true&quot; mce_keep=&quot;true&quot;&gt;&lt;FONT size=2&gt;Enjoy!&lt;/FONT&gt;&lt;/P&gt;&lt;/DIV&gt;&lt;/BLOCKQUOTE&gt;
&lt;P&gt;&lt;br /&gt;&amp;nbsp;&lt;/P&gt;</description>
			<category>뉴스/기타</category>
			<category>Visual Studio 2008</category>
			<author> (키눅스)</author>
			<guid>http://kinux.comgosu.net/306</guid>
			<comments>http://kinux.comgosu.net/306#entry306comment</comments>
			<pubDate>Tue, 20 Nov 2007 09:25:23 +0900</pubDate>
		</item>
		<item>
			<title>9X 에서 커널모드에서 프로세스 ID 얻기</title>
			<link>http://kinux.comgosu.net/305</link>
			<description>&lt;P&gt;9X 용 드라이버 개발해 본지가 호랑이 담배 필적이라...아주 잊고 있었는데.. &lt;br /&gt;(조금)아는 분이랑 메신저 대화하다가.. 9X 커널모드에서 타 프로세스 ID 얻는 방법이 갑자기 궁금해졌습니다. &lt;br /&gt;분명 2X 계열과는 틀렸었는데(커널모드에서 얻은 프로세스 ID와 유저모드의 프로세스 ID가 매치되지 않는)... &#039;뭐였지?&#039; 하면서 기억들 더듬 더듬...&lt;/P&gt;
&lt;DIV style=&quot;PADDING-RIGHT: 10px; PADDING-LEFT: 10px; PADDING-BOTTOM: 10px; PADDING-TOP: 10px; BACKGROUND-COLOR: #c9edff&quot;&gt;1. 유저모드에서 얻은 자기 자신 프로세스 ID를 드라이버로 보냅니다.&lt;br /&gt;2. 커널모드에서 1. 번에서 프로세스 ID를 보내온 프로세스(자기 자신) 핸들을 얻습니다.&lt;br /&gt;&amp;nbsp; &amp;nbsp; - VWIN32_GetCurrentProcessHandle() 함수를 이용해서 유저모드(Ring 3) 프로세스 핸들을 얻습니다.&lt;br /&gt;3. 1번의 유저모드의 프로세스 ID와 2번의 커널모드 프로세스 핸들을 &#039;^&#039; 연산을 해서 Obsfuscator를 얻습니다.&lt;br /&gt;&amp;nbsp; &amp;nbsp; - 예) ULONG AppProcessID : 유저모드 프로세스 ID&lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; PVOID ProcessHandle : 커널모드 프로세스 핸들&lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; ProcessHandle = VWIN32_GetCurrentProcessHandle();&lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; ULONG Obsfuscator = (ULONG)ProcessHandle ^ AppProcessID;&lt;br /&gt;4. 이제 필터 드라이버(파일 시스템이든 TDI 레이어 이든)등에서 특정 연산을 호출하는 프로세스의 프로세스 ID는 해당 연산에서 얻어진 프로세스 핸들과 Obsfuscator를 &#039;^&#039; 연산을 통해 얻어질 수 있습니다.&lt;br /&gt;&amp;nbsp; &amp;nbsp;&amp;nbsp; - 예) PVOID CurrentProcessHandle = VWIN32_GetCurrentProcessHandle(); &lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; ULONG CurrentProcessID = (ULONG)CurrentProcessHandle ^ Obsfuscator;&lt;/DIV&gt;
&lt;P&gt;요새는 거의 9X 용 드라이버를 개발하는 경우가 없으실테니 필요가 없는 내용일 것입니다.&lt;br /&gt;더군다나 맞는지도 모르겠고.. 확인해볼 플랫폼이나 테스트 해 볼 9X용 드라이버도 없으니..&lt;br /&gt;&lt;br /&gt;지금 돌이켜보면 9X 용 드라이버 개발할때가 참 색다른 맛이 있었던것 같네요.&lt;br /&gt;WDM 이다 WDF 다 하면서 점점 드라이버 개발 진입이 쉬워지기는 하지만.. 그래도 나름 그때가 묘한 매력이 있었던것 같습니다.&lt;/P&gt;</description>
			<category>소스/팁</category>
			<category>9X</category>
			<category>Process Handle</category>
			<category>Process ID</category>
			<category>VWIN32_GetCurrentProcessHandle</category>
			<author> (키눅스)</author>
			<guid>http://kinux.comgosu.net/305</guid>
			<comments>http://kinux.comgosu.net/305#entry305comment</comments>
			<pubDate>Tue, 20 Nov 2007 01:05:11 +0900</pubDate>
		</item>
		<item>
			<title>Windows Internals, Fifth Edition</title>
			<link>http://kinux.comgosu.net/304</link>
			<description>&lt;P&gt;&lt;div class=&quot;imageblock left&quot; style=&quot;float: left; margin-right: 10px;&quot;&gt;&lt;img src=&quot;http://comgosu.net/attach/7/1197253122.gif&quot; alt=&quot;사용자 삽입 이미지&quot; height=&quot;130&quot; width=&quot;130&quot; /&gt;&lt;/div&gt;&lt;br /&gt;&#039;나올 때가 되지 않았을까..&#039; 생각은 하고 있었는데.. 드디어 나오는 군요..&lt;br /&gt;하지만 2008년 5월 28일이라.. &lt;FONT color=#177fcd&gt;&#039;Coming Soon&#039;&lt;/FONT&gt; 이라고 하기에는.. ^^;&lt;br /&gt;&lt;br /&gt;&lt;A href=&quot;http://www.microsoft.com/mspress/books/12069.aspx&quot;&gt;http://www.microsoft.com/mspress/books/12069.aspx&lt;/A&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;간만에 포스팅 치고는 허접한 정보입니다.(뒷북일수도..)&lt;br /&gt;&lt;/P&gt;</description>
			<category>Book</category>
			<category>fifth edition</category>
			<category>Windows Internals</category>
			<author> (키눅스)</author>
			<guid>http://kinux.comgosu.net/304</guid>
			<comments>http://kinux.comgosu.net/304#entry304comment</comments>
			<pubDate>Mon, 19 Nov 2007 22:37:19 +0900</pubDate>
		</item>
		<item>
			<title>WINVER, _WIN32_WINNT, _WIN32_WINDOWS, _WIN32_IE 차이</title>
			<link>http://kinux.comgosu.net/303</link>
			<description>&lt;DIV style=&quot;PADDING-RIGHT: 10px; PADDING-LEFT: 10px; PADDING-BOTTOM: 10px; PADDING-TOP: 10px; BACKGROUND-COLOR: #c9edff&quot;&gt;#define WINVER &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;&amp;nbsp; 0x0501&lt;br /&gt;#define _WIN32_WINNT &amp;nbsp; &amp;nbsp; &amp;nbsp; 0x0501&lt;br /&gt;#define _WIN32_WINDOWS&amp;nbsp; 0x0410&lt;br /&gt;#define _WIN32_IE &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; 0x0600&lt;br /&gt;&lt;/DIV&gt;
&lt;P&gt;위와같은 버전 정의를 보면서 왜 이렇게 여러개를 만들어 놨을까 궁금한적 없으신지..&lt;br /&gt;저 나름데로 WINVER는 NT 가 나오기 전에 사용되었던 것 같고, _WIN32_WINNT는 NT 개발하면서 만들어졌고.. 기존 헤더 파일들과의 호환성을 위해서 둘다 남겨두었을거라고 생각했었는데.. 대충 맞네요. ^^;&lt;br /&gt;&lt;br /&gt;자세한 히스토리는 아래 사이트에서..&lt;br /&gt;&lt;A href=&quot;http://blogs.msdn.com/oldnewthing/archive/2007/04/11/2079137.aspx&quot;&gt;http://blogs.msdn.com/oldnewthing/archive/2007/04/11/2079137.aspx&lt;/A&gt;&lt;/P&gt;&lt;br /&gt;</description>
			<category>뉴스/기타</category>
			<category>WINVER</category>
			<category>_WIN32_IE</category>
			<category>_WIN32_WINDOWS</category>
			<category>_WIN32_WINNT</category>
			<author> (키눅스)</author>
			<guid>http://kinux.comgosu.net/303</guid>
			<comments>http://kinux.comgosu.net/303#entry303comment</comments>
			<pubDate>Thu, 20 Sep 2007 17:21:19 +0900</pubDate>
		</item>
		<item>
			<title>TV 지르다..</title>
			<link>http://kinux.comgosu.net/299</link>
			<description>&lt;P&gt;그동안 HD급 시스템을 바쳐주지 못하는 TV 때문에 맘 고생(?) 했엇는데.. 드디어 질렀습니다. LCD TV를 사기에는 부담이 되고 해서.. 그냥 완전평면 TV로 하나 장만했습니다.&lt;br /&gt;&lt;br /&gt;&lt;STRONG&gt;[LG Slim HD급 일체형 TV 32FS4D]&lt;/STRONG&gt;&lt;br /&gt;&lt;div class=&quot;imageblock center&quot; style=&quot;text-align: center; clear: both;&quot;&gt;&lt;img src=&quot;http://comgosu.net/attach/7/1290885279.jpg&quot; alt=&quot;사용자 삽입 이미지&quot; height=&quot;325&quot; width=&quot;500&quot; /&gt;&lt;/div&gt;&lt;/P&gt;&lt;STRONG&gt;[제품 설명]&lt;/STRONG&gt;&lt;br /&gt;
&lt;DIV style=&quot;PADDING-RIGHT: 10px; PADDING-LEFT: 10px; PADDING-BOTTOM: 10px; PADDING-TOP: 10px; BACKGROUND-COLOR: #ffdaed&quot;&gt;-기존 브라운관 TV 대비 약 20cm 이상 얇아진 Slim한 디자인 &lt;br /&gt;-Slim Gun 테크놀로지를 이용한 세계 최소 두께 CPT채용 &lt;br /&gt;-디지털 방송수신기 일체형 HDTV &lt;br /&gt;-최고의 수신율을 자랑하는 5세대 수신칩내장 &lt;br /&gt;-XD엔진 적용으로 선명한 화질 제공 &lt;br /&gt;-10W+10W 디지털 음성 출력 지원 &lt;br /&gt;-화면비율 16:9 &lt;br /&gt;-음성출력 10W + 10W &lt;br /&gt;-100%디지털 영상 및 사운드 접속단자 HDMI &lt;br /&gt;-단자 :AV입력,S-Video입력, 컴포넌트 입력x2, HDMI 단자, 디지털,AV출력 &lt;/DIV&gt;&lt;br /&gt;&lt;STRONG&gt;[제품 기능]&lt;br /&gt;&lt;/STRONG&gt;
&lt;DIV style=&quot;PADDING-RIGHT: 10px; PADDING-LEFT: 10px; PADDING-BOTTOM: 10px; PADDING-TOP: 10px; BACKGROUND-COLOR: #c9edff&quot;&gt;- 최고의 수신율을 자랑하는 5세대 수신칩 &lt;br /&gt;- XD 엔진적용 &lt;br /&gt;- 16:9 와이드 화면 &lt;br /&gt;- SRS TruSurround XT 10W+10W 음성출력 &lt;br /&gt;- 디지털 음성 출력 지원디지털 방송 안내 (EPG) &lt;br /&gt;- HDMI단자 채용 &lt;/DIV&gt;&lt;br /&gt;화질 하나는 정말 끝내주는군요... 드디어 영화랑 게임 할 맛이 납니다. 이제 PS3만 지르면 되는건가.. ^^;&lt;br /&gt;아래는 XBOX360 Ace Combat 6 데모 플레이 화면입니다.&lt;br /&gt;&lt;div class=&quot;imageblock center&quot; style=&quot;text-align: center; clear: both;&quot;&gt;&lt;img src=&quot;http://comgosu.net/attach/7/1274965304.jpg&quot; alt=&quot;사용자 삽입 이미지&quot; height=&quot;334&quot; width=&quot;500&quot; /&gt;&lt;/div&gt;</description>
			<category>취미</category>
			<category>HD</category>
			<category>LG 완전 평면 TV</category>
			<author> (키눅스)</author>
			<guid>http://kinux.comgosu.net/299</guid>
			<comments>http://kinux.comgosu.net/299#entry299comment</comments>
			<pubDate>Thu, 20 Sep 2007 00:20:22 +0900</pubDate>
		</item>
		<item>
			<title>RX-93-ν2 Hi-ν GUNDAM</title>
			<link>http://kinux.comgosu.net/302</link>
			<description>&lt;P&gt;정말 간만에 프라모델을 조립했습니다.&lt;br /&gt;구입한지는 한 4개월 이상 된것 같은데.. 이제껏 미루다 오늘 드디어 손을 대서 완성을 했습니다. 간만에 조립해서 그런지 조립시간이 꽤 길어졌습니다. (한 6시간 정도..)&lt;br /&gt;개인적으로 MK-II 다음으로 가장 맘에 드는 건프라 입니다.&lt;br /&gt;대부분 괜찮은것 같은데, 사출색도 괜찮고... 근데.. 자세를 잡기가 조금 힘이 드네요. FIN FUNNEL 때문에 뒤쪽에 무게중심이 있어서.. 살짝 자세를 잘못 잡으면 뒤로 벌러덩 ^^;&lt;br /&gt;&lt;br /&gt;&lt;div class=&quot;imageblock center&quot; style=&quot;text-align: center; clear: both;&quot;&gt;&lt;img src=&quot;http://comgosu.net/attach/7/1076103395.jpg&quot; alt=&quot;사용자 삽입 이미지&quot; height=&quot;335&quot; width=&quot;500&quot; /&gt;&lt;/div&gt;&lt;/P&gt;
&lt;p id=&quot;more302_0&quot; class=&quot;moreless_fold&quot;&gt;&lt;span style=&quot;cursor: pointer;&quot; onclick=&quot;toggleMoreLess(this, &#039;302_0&#039;,&#039;더 보기..&#039;,&#039;그만 보기..&#039;); return false;&quot;&gt;더 보기..&lt;/span&gt;&lt;/p&gt;&lt;div id=&quot;content302_0&quot; class=&quot;moreless_content&quot; style=&quot;display: none;&quot;&gt;&lt;div class=&quot;imageblock center&quot; style=&quot;text-align: center; clear: both;&quot;&gt;&lt;img src=&quot;http://comgosu.net/attach/7/1235750646.jpg&quot; alt=&quot;사용자 삽입 이미지&quot; height=&quot;335&quot; width=&quot;500&quot; /&gt;&lt;/div&gt;&lt;br /&gt;&lt;div class=&quot;imageblock center&quot; style=&quot;text-align: center; clear: both;&quot;&gt;&lt;img src=&quot;http://comgosu.net/attach/7/1128261906.jpg&quot; alt=&quot;사용자 삽입 이미지&quot; height=&quot;335&quot; width=&quot;500&quot; /&gt;&lt;/div&gt;&lt;br /&gt;&lt;div class=&quot;imageblock center&quot; style=&quot;text-align: center; clear: both;&quot;&gt;&lt;img src=&quot;http://comgosu.net/attach/7/1029620480.jpg&quot; alt=&quot;사용자 삽입 이미지&quot; height=&quot;500&quot; width=&quot;335&quot; /&gt;&lt;/div&gt;&lt;/div&gt;</description>
			<category>취미</category>
			<category>Hi-ν Gundam</category>
			<category>RX-93-v2</category>
			<category>건프라</category>
			<author> (키눅스)</author>
			<guid>http://kinux.comgosu.net/302</guid>
			<comments>http://kinux.comgosu.net/302#entry302comment</comments>
			<pubDate>Mon, 17 Sep 2007 01:13:24 +0900</pubDate>
		</item>
		<item>
			<title>링크(21세기를 지배하는 네트워크 과학)</title>
			<link>http://kinux.comgosu.net/301</link>
			<description>&lt;P&gt;&lt;div class=&quot;imageblock left&quot; style=&quot;float: left; margin-right: 10px;&quot;&gt;&lt;img src=&quot;http://comgosu.net/attach/7/1043979919.jpg&quot; alt=&quot;사용자 삽입 이미지&quot; height=&quot;176&quot; width=&quot;120&quot; /&gt;&lt;/div&gt;저자 : 알버트 라즐로 바라바시&lt;/P&gt;
&lt;P&gt;역자 : 강병남 외&lt;/P&gt;
&lt;P&gt;출판사 : 동아시아&lt;/P&gt;
&lt;P&gt;흠.... 책을 읽고난 느낌은 일단 어렵습니다. 꼭 장문의 논문 한편을 읽은 느낌이랄까... 현재 네트워크(인터넷.. 그중에서도 웹)가 어떻게 생겨났으며, 어떻게 진화하는지에 대한 수학,통계학,경제학,물히학 적인 접근을 통해 네트워크 및 현대 사회가 어떻게 이루어졌는지에 대해 분석한 책입니다. &lt;br /&gt;초반에는 나름 따라가면서 아무튼 읽긴 있었는데 중후반으로 갈수록 제 머리의 한계를 느끼면서 겨우 겨우 다음페이지를 넘겼습니다.&lt;br /&gt;다음에 또 다시 읽게 될지는 모르겠지만 그때는 좀 느낌이 다를지 모르겠습니다.&lt;br /&gt;&lt;br /&gt;아무튼 네트워크가 무의미하게 연결되어 있는것 같지만 연결법칙은 있다는 것이며, 이런 분야에 관심이 있으신 분은 읽어보시면 좋을것 같습니다.&lt;/P&gt;</description>
			<category>Book</category>
			<category>링크</category>
			<category>알버트 라즐로 바라바시</category>
			<author> (키눅스)</author>
			<guid>http://kinux.comgosu.net/301</guid>
			<comments>http://kinux.comgosu.net/301#entry301comment</comments>
			<pubDate>Tue, 11 Sep 2007 22:21:04 +0900</pubDate>
		</item>
	</channel>
</rss>
