<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0">
	<channel>
		<title>Ezbeat의 도서관</title>
		<link>http://ezbeat.tistory.com/</link>
		<description>1989.05.04
 nate 친구는 공지에..</description>
		<language>ko</language>
		<pubDate>Tue, 15 May 2012 15:54:39 +0900</pubDate>
		<generator>Tistory 1.1 (http://www.tistory.com/)</generator>
		<managingEditor>Ezbeat</managingEditor>
		<image>
			<title>Ezbeat의 도서관</title>
			<url>http://cfile23.uf.tistory.com/image/14564F0C4B29D499593A93</url>
			<link>http://ezbeat.tistory.com</link>
			<description>1989.05.04
 nate 친구는 공지에..</description>
		</image>
		<item>
			<title>PICA air 사용하기</title>
			<link>http://ezbeat.tistory.com/375</link>
			<description>&lt;p&gt;&lt;span style=&quot;color: rgb(51, 51, 51); &quot;&gt;컴퓨터 사양이 좋아진 이후론 vmware로&lt;/span&gt;&lt;span style=&quot;color: rgb(51, 51, 51); &quot;&gt;&amp;nbsp;과장 쫌 보태 windows os를 5&lt;/span&gt;&lt;span style=&quot;color: rgb(51, 51, 51); &quot;&gt;0개쯤 킬 수 있을 것 같군요. =_=;;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;p&gt;&lt;span style=&quot;color: rgb(51, 51, 51); &quot;&gt;PICA air라는 PC방 관리 프로그램을 설치해서 환경을 구축해봤습니다.&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style=&quot;color: rgb(51, 51, 51); &quot;&gt;서버, 클라 둘다 말이죠. 2개의 os를 사용해.&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;p&gt;&lt;span style=&quot;color: rgb(51, 51, 51); &quot;&gt;아래는 동영상입니다.&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;p style=&quot;text-align: left; &quot;&gt;&lt;span class=&quot;imageblock&quot; style=&quot;display:inline-block;&quot;&gt;&lt;span id=&quot;s6094b877378193e9941ae15d1908e0e69764&quot;&gt;&lt;/span&gt;
			&lt;script type=&quot;text/javascript&quot;&gt;writeCode2(getEmbedCode('http://cfile5.uf.tistory.com/media/2076253D4F9979E70D5098','300','400','s6094b877378193e9941ae15d1908e0e69764','#FFFFFF','', undefined, 'transparent'), 's6094b877378193e9941ae15d1908e0e69764');&lt;/script&gt;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;p&gt;&lt;span style=&quot;color: rgb(51, 51, 51); &quot;&gt;( 화면이 작으니.. 제대로 보실려면 브라우져 크기 조절 )&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;p&gt;&lt;span style=&quot;color: rgb(51, 51, 51); &quot;&gt;영상에 많은 설명을 넣어놨지만.. ^^&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;p&gt;&lt;span style=&quot;color: rgb(51, 51, 51); &quot;&gt;해보고 싶으신 분들은 고고씽! 필드 테스트 때 긴장될 것 같네요.&lt;/span&gt;&lt;br /&gt;&lt;/p&gt;&lt;div class=&quot;entry-ccl&quot; style=&quot;clear: both; text-align: right; margin-bottom: 10px&quot;&gt;
	&lt;img id=&quot;ccl-icon-375-0&quot; class=&quot;entry-ccl-by&quot; src=&quot;http://i1.daumcdn.net/cfs.tistory/v/0/static/admin/editor/ccl_black01.png&quot; alt=&quot;저작자 표시&quot;/&gt;
	&lt;!--
	&lt;rdf:RDF xmlns=&quot;http://web.resource.org/cc/&quot; xmlns:dc=&quot;http://purl.org/dc/elements/1.1/&quot; xmlns:rdf=&quot;http://www.w3.org/1999/02/22-rdf-syntax-ns#&quot;&gt;
		&lt;Work rdf:about=&quot;&quot;&gt;
			&lt;license rdf:resource=&quot;http://creativecommons.org/licenses/by-fr/2.0/kr/&quot; /&gt;
		&lt;/Work&gt;
		&lt;License rdf:about=&quot;http://creativecommons.org/licenses/by-fr/&quot;&gt;
			&lt;permits rdf:resource=&quot;http://web.resource.org/cc/Reproduction&quot;/&gt;
			&lt;permits rdf:resource=&quot;http://web.resource.org/cc/Distribution&quot;/&gt;
			&lt;requires rdf:resource=&quot;http://web.resource.org/cc/Notice&quot;/&gt;
			&lt;requires rdf:resource=&quot;http://web.resource.org/cc/Attribution&quot;/&gt;
			&lt;permits rdf:resource=&quot;http://web.resource.org/cc/DerivativeWorks&quot;/&gt;
		&lt;/License&gt;
	&lt;/rdf:RDF&gt;
	--&gt;
&lt;/div&gt;
&lt;div class=&quot;another_category another_category_color_gray&quot;&gt;
&lt;h4&gt;'&lt;a href=&quot;/category/RestRoom&quot;&gt;RestRoom&lt;/a&gt;&amp;nbsp;&gt;&amp;nbsp;&lt;a href=&quot;/category/RestRoom/Routine&quot;&gt;Routine&lt;/a&gt;' 카테고리의 다른 글&lt;/h4&gt;
&lt;table&gt;
&lt;tr&gt;
&lt;th&gt;
&lt;a href=&quot;/375&quot; &gt;PICA air 사용하기&lt;/a&gt;&amp;nbsp;&amp;nbsp;&lt;span&gt;(0)&lt;/span&gt;
&lt;/th&gt;
&lt;td&gt;
2012/04/27&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;th&gt;
&lt;a href=&quot;/365&quot; &gt;Phoenix HD 개인기록!&lt;/a&gt;&amp;nbsp;&amp;nbsp;&lt;span&gt;(2)&lt;/span&gt;
&lt;/th&gt;
&lt;td&gt;
2012/02/26&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;th&gt;
&lt;a href=&quot;/356&quot; &gt;몸도 마음도 정화하리..?&lt;/a&gt;&amp;nbsp;&amp;nbsp;&lt;span&gt;(2)&lt;/span&gt;
&lt;/th&gt;
&lt;td&gt;
2012/01/19&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;th&gt;
&lt;a href=&quot;/351&quot; &gt;2011 KUCIS 최우수동아리 &amp;amp; 기술문서 부분 최우수상&lt;/a&gt;&amp;nbsp;&amp;nbsp;&lt;span&gt;(0)&lt;/span&gt;
&lt;/th&gt;
&lt;td&gt;
2011/12/21&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;th&gt;
&lt;a href=&quot;/349&quot; &gt;해피캠퍼스는 멍청해!!&lt;/a&gt;&amp;nbsp;&amp;nbsp;&lt;span&gt;(2)&lt;/span&gt;
&lt;/th&gt;
&lt;td&gt;
2011/12/08&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;th&gt;
&lt;a href=&quot;/345&quot; &gt;ATmega128 LCD password 실험&lt;/a&gt;&amp;nbsp;&amp;nbsp;&lt;span&gt;(0)&lt;/span&gt;
&lt;/th&gt;
&lt;td&gt;
2011/11/17&lt;/td&gt;
&lt;/tr&gt;
&lt;/table&gt;&lt;/div&gt;</description>
			<category>Routine</category>
			<category>Air</category>
			<category>PC</category>
			<category>pc방</category>
			<category>PICA</category>
			<category>관리프로그램</category>
			<author>Ezbeat</author>
			<guid>http://ezbeat.tistory.com/375</guid>
			<comments>http://ezbeat.tistory.com/375#entry375comment</comments>
			<pubDate>Fri, 27 Apr 2012 01:39:37 +0900</pubDate>
		</item>
		<item>
			<title>ELF 파일의 PLT, GOT</title>
			<link>http://ezbeat.tistory.com/374</link>
			<description>&lt;p&gt;&lt;span style=&quot;color: rgb(0, 0, 0); &quot;&gt;음.. 윈도우 PE파일에서는 프로그램이 실행되면 Import table과 Export table을 사용해 프로그램에서 사용할 라이브러리 주소를 가져오지요. dll 같은 경우는 로드될때&amp;nbsp;base address가 바뀔수도 있기 때문에 PE Loader가 프로그램이 실행되면 특정 메모리에 함수들의 주소를 다 쓰지요.&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;p&gt;&lt;span style=&quot;color: rgb(0, 0, 0); &quot;&gt;그러면 대표적인 리눅스 실행 파일인 ELF 파일은 라이브러리 함수 주소를 어떤식으로 가져와 사용할까요?&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;p style=&quot;text-align: left; clear: none; float: none; &quot;&gt;&lt;span class=&quot;imageblock&quot; style=&quot;display:inline-block;width:365px;&quot;&gt;&lt;a href=&quot;http://cfile25.uf.tistory.com/original/176D023B4F9955A611DF97&quot; rel=&quot;lightbox&quot; target=&quot;_blank&quot;&gt;&lt;img src=&quot;http://cfile25.uf.tistory.com/image/176D023B4F9955A611DF97&quot; filemime=&quot;image/jpeg&quot; filename=&quot;사용자 지정 2.jpg&quot; height=&quot;439&quot; width=&quot;365&quot;/&gt;&lt;/a&gt;&lt;/span&gt;&lt;/p&gt;&lt;p style=&quot;text-align: left; clear: none; float: none; &quot;&gt;&lt;br /&gt;&lt;/p&gt;&lt;p style=&quot;text-align: left; clear: none; float: none; &quot;&gt;&lt;span style=&quot;color: rgb(0, 0, 0); &quot;&gt;테스트를 진행할 소스코드입니다. 단순한 덧셈 프로그램이지요.&lt;/span&gt;&lt;/p&gt;&lt;p style=&quot;text-align: left; clear: none; float: none; &quot;&gt;&lt;br /&gt;&lt;/p&gt;&lt;p style=&quot;text-align: left; clear: none; float: none; &quot;&gt;&lt;span style=&quot;color: rgb(0, 0, 0); &quot;&gt;-static 옵션을 사용하지 않고 컴파일 후 진행하도록 하겠습니다.&lt;/span&gt;&lt;/p&gt;&lt;p style=&quot;text-align: left; clear: none; float: none; &quot;&gt;&lt;br /&gt;&lt;/p&gt;&lt;p style=&quot;text-align: left; clear: none; float: none; &quot;&gt;&lt;span style=&quot;color: rgb(0, 0, 0); &quot;&gt;컴파일이 끝났으면 readelf -S 를 사용해 섹션 헤더를 봐보겠습니다.&lt;/span&gt;&lt;/p&gt;&lt;p style=&quot;text-align: left; clear: none; float: none; &quot;&gt;&lt;span class=&quot;imageblock&quot; style=&quot;display:inline-block;width:683px;&quot;&gt;&lt;a href=&quot;http://cfile24.uf.tistory.com/original/1557E54D4F99566E1120FA&quot; rel=&quot;lightbox&quot; target=&quot;_blank&quot;&gt;&lt;img src=&quot;http://cfile24.uf.tistory.com/image/1557E54D4F99566E1120FA&quot; filemime=&quot;image/jpeg&quot; filename=&quot;사용자 지정 3.jpg&quot; height=&quot;646&quot; width=&quot;683&quot;/&gt;&lt;/a&gt;&lt;/span&gt;&lt;/p&gt;&lt;p style=&quot;text-align: left; clear: none; float: none; &quot;&gt;&lt;br /&gt;&lt;/p&gt;&lt;p style=&quot;text-align: left; clear: none; float: none; &quot;&gt;&lt;span style=&quot;color: rgb(0, 0, 0); &quot;&gt;주목해야할 섹션은 .plt 섹션과 .got.plt 섹션&lt;/span&gt;&lt;/p&gt;&lt;p style=&quot;text-align: left; clear: none; float: none; &quot;&gt;&lt;span style=&quot;color: rgb(0, 0, 0); &quot;&gt;.plt 섹션은&amp;nbsp;Procedure Linkable Table 의 약자로서 말그대로 함수들 링크가 가능한 테이블로 프로그램이 호출하는 모든 함수가 나열되어 있습니다.&lt;/span&gt;&lt;/p&gt;&lt;p style=&quot;text-align: left; clear: none; float: none; &quot;&gt;&lt;br /&gt;&lt;/p&gt;&lt;p style=&quot;text-align: left; clear: none; float: none; &quot;&gt;&lt;span style=&quot;color: rgb(0, 0, 0); &quot;&gt;.got.plt는&amp;nbsp;Global Offset Table로서 전역 offset을 가지는 테이블 이랍니다.&lt;/span&gt;&lt;/p&gt;&lt;p style=&quot;text-align: left; clear: none; float: none; &quot;&gt;&lt;br /&gt;&lt;/p&gt;&lt;p style=&quot;text-align: left; clear: none; float: none; &quot;&gt;&lt;span style=&quot;color: rgb(0, 0, 0); &quot;&gt;한번 쭉 프로그램을 실행하면서 따라가보죠.&lt;/span&gt;&lt;/p&gt;&lt;p style=&quot;text-align: left; clear: none; float: none; &quot;&gt;&lt;span class=&quot;imageblock&quot; style=&quot;display:inline-block;width:463px;&quot;&gt;&lt;a href=&quot;http://cfile28.uf.tistory.com/original/1966554C4F9957A30C309D&quot; rel=&quot;lightbox&quot; target=&quot;_blank&quot;&gt;&lt;img src=&quot;http://cfile28.uf.tistory.com/image/1966554C4F9957A30C309D&quot; filemime=&quot;image/jpeg&quot; filename=&quot;사용자 지정 4.jpg&quot; height=&quot;164&quot; width=&quot;463&quot;/&gt;&lt;/a&gt;&lt;/span&gt;&lt;/p&gt;&lt;p style=&quot;text-align: left; clear: none; float: none; &quot;&gt;&lt;br /&gt;&lt;/p&gt;&lt;p style=&quot;text-align: left; clear: none; float: none; &quot;&gt;&lt;span style=&quot;color: rgb(0, 0, 0); &quot;&gt;main함수 첫 부분을 보면 printf 함수를 호출하고 있습니다.&lt;/span&gt;&lt;/p&gt;&lt;p style=&quot;text-align: left; clear: none; float: none; &quot;&gt;&lt;span style=&quot;color: rgb(0, 0, 0); &quot;&gt;그러면 해당 주소를 가보죠&lt;/span&gt;&lt;/p&gt;&lt;p style=&quot;text-align: left; clear: none; float: none; &quot;&gt;&lt;span class=&quot;imageblock&quot; style=&quot;display:inline-block;width:515px;&quot;&gt;&lt;a href=&quot;http://cfile2.uf.tistory.com/original/1204EE4F4F9957E7348D83&quot; rel=&quot;lightbox&quot; target=&quot;_blank&quot;&gt;&lt;img src=&quot;http://cfile2.uf.tistory.com/image/1204EE4F4F9957E7348D83&quot; filemime=&quot;image/jpeg&quot; filename=&quot;사용자 지정 5.jpg&quot; height=&quot;93&quot; width=&quot;515&quot;/&gt;&lt;/a&gt;&lt;/span&gt;&lt;/p&gt;&lt;p style=&quot;text-align: left; clear: none; float: none; &quot;&gt;&lt;br /&gt;&lt;/p&gt;&lt;p style=&quot;text-align: left; clear: none; float: none; &quot;&gt;&lt;span style=&quot;color: rgb(0, 0, 0); &quot;&gt;printf 실제 링크 주소로 오는 것이 아닌 plt 라는 영역으로 들어오게 됩니다.&lt;/span&gt;&lt;/p&gt;&lt;p style=&quot;text-align: left; clear: none; float: none; &quot;&gt;&lt;br /&gt;&lt;/p&gt;&lt;p style=&quot;text-align: left; clear: none; float: none; &quot;&gt;&lt;span style=&quot;color: rgb(0, 0, 0); &quot;&gt;어딘가 점프를 또 하네요. 따라가보겠습니다.&lt;/span&gt;&lt;/p&gt;&lt;p style=&quot;text-align: left; clear: none; float: none; &quot;&gt;&lt;span class=&quot;imageblock&quot; style=&quot;display:inline-block;width:384px;&quot;&gt;&lt;a href=&quot;http://cfile9.uf.tistory.com/original/2028ED404F99587E01C3B0&quot; rel=&quot;lightbox&quot; target=&quot;_blank&quot;&gt;&lt;img src=&quot;http://cfile9.uf.tistory.com/image/2028ED404F99587E01C3B0&quot; filemime=&quot;image/jpeg&quot; filename=&quot;사용자 지정 6.jpg&quot; height=&quot;39&quot; width=&quot;384&quot;/&gt;&lt;/a&gt;&lt;/span&gt;&lt;/p&gt;&lt;p style=&quot;text-align: left; clear: none; float: none; &quot;&gt;&lt;br /&gt;&lt;/p&gt;&lt;p style=&quot;text-align: left; clear: none; float: none; &quot;&gt;&lt;span style=&quot;color: rgb(0, 0, 0); &quot;&gt;이번엔 got 영역으로 들어오는군요. 원래는 저 부분에 printf의 실질적인 라이브러리 주소가 있어야합니다.&lt;/span&gt;&lt;/p&gt;&lt;p style=&quot;text-align: left; clear: none; float: none; &quot;&gt;&lt;span style=&quot;color: rgb(0, 0, 0); &quot;&gt;하지만 지금은 첫번째로 printf가 호출되는 상황이므로 아직 printf의 라이브러리 주소를 구해놓지 않은 상황입니다.&lt;/span&gt;&lt;/p&gt;&lt;p style=&quot;text-align: left; clear: none; float: none; &quot;&gt;&lt;span style=&quot;color: rgb(0, 0, 0); &quot;&gt;잘 보시면 0x08048346 주소는 plt 영역의 &amp;lt;printf@plt+6&amp;gt; 주소가 같은 것을 확인할 수 있습니다.&lt;/span&gt;&lt;/p&gt;&lt;p style=&quot;text-align: left; clear: none; float: none; &quot;&gt;&lt;br /&gt;&lt;/p&gt;&lt;p style=&quot;text-align: left; clear: none; float: none; &quot;&gt;&lt;span style=&quot;color: rgb(0, 0, 0); &quot;&gt;즉, 현재는 jmp *0x804a000을 수행하면 &amp;lt;printf@plt+6&amp;gt; 위치로 오게 됨을 알 수 있습니다.&lt;/span&gt;&lt;/p&gt;&lt;p style=&quot;text-align: left; clear: none; float: none; &quot;&gt;&lt;span style=&quot;color: rgb(0, 0, 0); &quot;&gt;그리고 나서 jmp 0x8048330을 수행하는데 저 부분은&amp;nbsp;dl_runtime_resolve 함수를 수행하는 부분인데요.&lt;/span&gt;&lt;/p&gt;&lt;p style=&quot;text-align: left; clear: none; float: none; &quot;&gt;&lt;span style=&quot;color: rgb(0, 0, 0); &quot;&gt;실제 printf의 라이브러리 주소를 got에 저장하고 printf의 실제 주소로 점프를 한다고 합니다.&lt;/span&gt;&lt;/p&gt;&lt;p style=&quot;text-align: left; clear: none; float: none; &quot;&gt;&lt;br /&gt;&lt;/p&gt;&lt;p style=&quot;text-align: left; clear: none; float: none; &quot;&gt;&lt;span style=&quot;color: rgb(0, 0, 0); &quot;&gt;윈도우 PE파일과 다르게 호출되는 함수 주소를 한번에 다 올리는 것이 아닌 프로그램 실행 시 호출될 때마다 라이브러리 주소를 got에 넣는다고 하네요. 그 다음번 printf를 호출할 땐 이미 앞서 got에 printf의 라이브러리 주소를 가져왔으므로&amp;nbsp;&lt;/span&gt;&lt;span style=&quot;color: rgb(0, 0, 0); &quot;&gt;dl_runtime_resolve&lt;/span&gt;&lt;span style=&quot;color: rgb(0, 0, 0); &quot;&gt;&amp;nbsp;함수를 수행하지 않고 바로 printf 를 호출할 수 있습니다.&lt;/span&gt;&lt;/p&gt;&lt;p style=&quot;text-align: left; clear: none; float: none; &quot;&gt;&lt;br /&gt;&lt;/p&gt;&lt;p style=&quot;text-align: left; clear: none; float: none; &quot;&gt;&lt;span style=&quot;color: rgb(0, 0, 0); &quot;&gt;한번 main 함수의 printf 다음 주소에 bp를 걸고 수행 후 got를 확인해 보겠습니다.&lt;/span&gt;&lt;/p&gt;&lt;p style=&quot;text-align: left; clear: none; float: none; &quot;&gt;&lt;span class=&quot;imageblock&quot; style=&quot;display:inline-block;width:445px;&quot;&gt;&lt;a href=&quot;http://cfile2.uf.tistory.com/original/144BE6354F995BF135165C&quot; rel=&quot;lightbox&quot; target=&quot;_blank&quot;&gt;&lt;img src=&quot;http://cfile2.uf.tistory.com/image/144BE6354F995BF135165C&quot; filemime=&quot;image/jpeg&quot; filename=&quot;사용자 지정 7.jpg&quot; height=&quot;130&quot; width=&quot;445&quot;/&gt;&lt;/a&gt;&lt;/span&gt;&lt;/p&gt;&lt;p style=&quot;text-align: left; clear: none; float: none; &quot;&gt;&lt;br /&gt;&lt;/p&gt;&lt;p style=&quot;text-align: left; clear: none; float: none; &quot;&gt;&lt;span style=&quot;color: rgb(0, 0, 0); &quot;&gt;아까와는 값이 다르게 있다는 것을 알 수 있겠네요.&lt;/span&gt;&lt;/p&gt;&lt;p style=&quot;text-align: left; clear: none; float: none; &quot;&gt;&lt;br /&gt;&lt;/p&gt;&lt;p style=&quot;text-align: left; clear: none; float: none; &quot;&gt;&lt;span style=&quot;color: rgb(0, 0, 0); &quot;&gt;결론은 FSB 기법을 활용해 got overwrite를 해서 쉘을 따는 방법도 널리널리 알려졌습니다.&lt;/span&gt;&lt;/p&gt;&lt;p style=&quot;text-align: left; clear: none; float: none; &quot;&gt;&lt;br /&gt;&lt;/p&gt;&lt;p style=&quot;text-align: left; clear: none; float: none; &quot;&gt;&lt;span style=&quot;color: rgb(0, 0, 0); &quot;&gt;아 그리고 -static 옵션을 사용해 컴파일을 하면 위 과정 따윈 다 ~~ 없습니다. 모든 함수들이 프로그램 내부로 들어오기 때문이죠. 대신 용량은~? 엄청 커지겠네요. 위 실행 파일을 대상으로 비교를 해보니 용량은 90배 가량 차이가 났습니다.&lt;/span&gt;&lt;/p&gt;&lt;p style=&quot;text-align: left; clear: none; float: none; &quot;&gt;&lt;br /&gt;&lt;/p&gt;&lt;p style=&quot;text-align: left; clear: none; float: none; &quot;&gt;&lt;span style=&quot;color: rgb(0, 0, 0); &quot;&gt;배보다 배꼽이 더큰 상황이 -0-;; 아무튼 리눅스도 잘해야합니다..... 윈도우도 잘 못하는 것이 별의별 걱정을 다하네요.&lt;/span&gt;&lt;/p&gt;&lt;div class=&quot;entry-ccl&quot; style=&quot;clear: both; text-align: right; margin-bottom: 10px&quot;&gt;
	&lt;img id=&quot;ccl-icon-374-0&quot; class=&quot;entry-ccl-by&quot; src=&quot;http://i1.daumcdn.net/cfs.tistory/v/0/static/admin/editor/ccl_black01.png&quot; alt=&quot;저작자 표시&quot;/&gt;
	&lt;!--
	&lt;rdf:RDF xmlns=&quot;http://web.resource.org/cc/&quot; xmlns:dc=&quot;http://purl.org/dc/elements/1.1/&quot; xmlns:rdf=&quot;http://www.w3.org/1999/02/22-rdf-syntax-ns#&quot;&gt;
		&lt;Work rdf:about=&quot;&quot;&gt;
			&lt;license rdf:resource=&quot;http://creativecommons.org/licenses/by-fr/2.0/kr/&quot; /&gt;
		&lt;/Work&gt;
		&lt;License rdf:about=&quot;http://creativecommons.org/licenses/by-fr/&quot;&gt;
			&lt;permits rdf:resource=&quot;http://web.resource.org/cc/Reproduction&quot;/&gt;
			&lt;permits rdf:resource=&quot;http://web.resource.org/cc/Distribution&quot;/&gt;
			&lt;requires rdf:resource=&quot;http://web.resource.org/cc/Notice&quot;/&gt;
			&lt;requires rdf:resource=&quot;http://web.resource.org/cc/Attribution&quot;/&gt;
			&lt;permits rdf:resource=&quot;http://web.resource.org/cc/DerivativeWorks&quot;/&gt;
		&lt;/License&gt;
	&lt;/rdf:RDF&gt;
	--&gt;
&lt;/div&gt;
&lt;div class=&quot;another_category another_category_color_gray&quot;&gt;
&lt;h4&gt;'&lt;a href=&quot;/category/My%20Study&quot;&gt;My Study&lt;/a&gt;&amp;nbsp;&gt;&amp;nbsp;&lt;a href=&quot;/category/My%20Study/Programming%26Theory&quot;&gt;Programming&amp;amp;Theory&lt;/a&gt;' 카테고리의 다른 글&lt;/h4&gt;
&lt;table&gt;
&lt;tr&gt;
&lt;th&gt;
&lt;a href=&quot;/374&quot; &gt;ELF 파일의 PLT, GOT&lt;/a&gt;&amp;nbsp;&amp;nbsp;&lt;span&gt;(2)&lt;/span&gt;
&lt;/th&gt;
&lt;td&gt;
2012/04/26&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;th&gt;
&lt;a href=&quot;/369&quot; &gt;Calling Convention Process for AMD 64 Bit&lt;/a&gt;&amp;nbsp;&amp;nbsp;&lt;span&gt;(4)&lt;/span&gt;
&lt;/th&gt;
&lt;td&gt;
2012/04/02&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;th&gt;
&lt;a href=&quot;/364&quot; &gt;Windows rand() 랜덤 비율&lt;/a&gt;&amp;nbsp;&amp;nbsp;&lt;span&gt;(0)&lt;/span&gt;
&lt;/th&gt;
&lt;td&gt;
2012/02/14&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;th&gt;
&lt;a href=&quot;/359&quot; &gt;ARM 명령어 공부&lt;/a&gt;&amp;nbsp;&amp;nbsp;&lt;span&gt;(2)&lt;/span&gt;
&lt;/th&gt;
&lt;td&gt;
2012/01/27&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;th&gt;
&lt;a href=&quot;/357&quot; &gt;BlockInput Function&lt;/a&gt;&amp;nbsp;&amp;nbsp;&lt;span&gt;(3)&lt;/span&gt;
&lt;/th&gt;
&lt;td&gt;
2012/01/20&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;th&gt;
&lt;a href=&quot;/354&quot; &gt;My BSOD&lt;/a&gt;&amp;nbsp;&amp;nbsp;&lt;span&gt;(2)&lt;/span&gt;
&lt;/th&gt;
&lt;td&gt;
2012/01/08&lt;/td&gt;
&lt;/tr&gt;
&lt;/table&gt;&lt;/div&gt;</description>
			<category>Programming&amp;Theory</category>
			<category>ELF</category>
			<category>export</category>
			<category>FSB</category>
			<category>Got</category>
			<category>import</category>
			<category>linux</category>
			<category>overwrite</category>
			<category>PE</category>
			<category>plt</category>
			<category>printf</category>
			<category>Section</category>
			<category>static</category>
			<category>table</category>
			<category>실행파일</category>
			<author>Ezbeat</author>
			<guid>http://ezbeat.tistory.com/374</guid>
			<comments>http://ezbeat.tistory.com/374#entry374comment</comments>
			<pubDate>Thu, 26 Apr 2012 23:35:11 +0900</pubDate>
		</item>
		<item>
			<title>간단한 정수 오버플로우</title>
			<link>http://ezbeat.tistory.com/373</link>
			<description>&lt;p&gt;&lt;span style=&quot;color: rgb(51, 51, 51); &quot;&gt;&lt;b&gt;잡담..&lt;/b&gt;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style=&quot;text-align: left; color: rgb(0, 0, 0); &quot;&gt;흐흐+_+ 오늘은 아버지께서 양복을 사주셨습니다. 제 생애 처음으로 입어보는 양복이네요..&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style=&quot;text-align: left; color: rgb(0, 0, 0); &quot;&gt;양복하면 어른들 양복 밖에 생각이 안나서 입기 꺼려하고있었는데 오늘 양복점을 가서 입어보니 20대들이 입을 수 있는 핏도살고 간지도 나는 깔끔한 정장들도 나오더군요. 제 마인드가 오늘 또 하나 바뀌었습니다 ㅋㅋ&amp;nbsp;&lt;/span&gt;&lt;/p&gt;&lt;p style=&quot;text-align: left;&quot;&gt;&lt;span style=&quot;color: rgb(0, 0, 0); &quot;&gt;첫 양복이라 무난한 검은색으로.. 장례식장이던..결혼식장이던..발표할때던.. 어디서나 입을 수 있는..ㅋ&lt;/span&gt;&lt;/p&gt;&lt;p style=&quot;text-align: left;&quot;&gt;&lt;span style=&quot;color: rgb(0, 0, 0); &quot;&gt;하!지!만.. 아직 구두가 없어서 입을수가 없습니다 ㅠ_ㅠ.. 이로서 사회인에 한걸음 다가간 느낌이 조금 드네요 -_-; 싫습니다!!&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style=&quot;color: rgb(102, 0, 255); &quot;&gt;====================================================================================&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style=&quot;color: rgb(51, 51, 51); &quot;&gt;자기전에 책보다가.. 간략히 나오길래 저도 확인차 그냥 정리만 하고 자렵니다.&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style=&quot;color: rgb(51, 51, 51); &quot;&gt;Exploit과는 거의 담을 쌓고 지낸지라.. 오랜만이군요. 이런 글도..&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;p style=&quot;text-align: left; clear: none; float: none; &quot;&gt;&lt;span class=&quot;imageblock&quot; style=&quot;display:inline-block;width:259px;&quot;&gt;&lt;a href=&quot;http://cfile29.uf.tistory.com/original/165938444F92E60415B43C&quot; rel=&quot;lightbox&quot; target=&quot;_blank&quot;&gt;&lt;img src=&quot;http://cfile29.uf.tistory.com/image/165938444F92E60415B43C&quot; filemime=&quot;image/jpeg&quot; filename=&quot;사용자 지정 1.jpg&quot; height=&quot;516&quot; width=&quot;259&quot;/&gt;&lt;/a&gt;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style=&quot;color: rgb(51, 51, 51); &quot;&gt;이런 간략한 코드가 있습니다. 너무 인위적이네요.&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;p&gt;&lt;span style=&quot;color: rgb(51, 51, 51); &quot;&gt;문자열을 하나 입력받고 해당 문자열과 문자열의 길이를 넘기구요.&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style=&quot;color: rgb(51, 51, 51); &quot;&gt;문자열의 길이가 of함수에 할당된 buf 크기보다 작으면 복사를 하고 크면 복사를 하지 않고&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style=&quot;color: rgb(51, 51, 51); &quot;&gt;끝나게 됩니다.&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;p&gt;&lt;span style=&quot;color: rgb(51, 51, 51); &quot;&gt;일반적인 bof 개념으로보자면 저 루틴에선 취약점이 없어 보이겠네요.&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;p&gt;&lt;span style=&quot;color: rgb(51, 51, 51); &quot;&gt;하지만 정수 오버플로우 발생으로 취약점이 일어나는 부분이 있습니다.&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style=&quot;color: rgb(51, 51, 51); &quot;&gt;바로 of함수에서 문자열의 길이를 비교하는 if문..에서 발생합니다.&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;p&gt;&lt;span style=&quot;color: rgb(51, 51, 51); &quot;&gt;현재 templen과 maxlen 변수의 자료형은 char입니다.&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style=&quot;color: rgb(51, 51, 51); &quot;&gt;그렇기 때문에 128인 값이 들어오면 -1로 취급을 하게 되겠지요.&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;p&gt;&lt;span style=&quot;color: rgb(51, 51, 51); &quot;&gt;즉, of함수 인자로 문자열 길이를 넘길 때 128글자 이상을 넘기면 해당 값은 음수로 인식이되 if안으로 들어오게되면서&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style=&quot;color: rgb(51, 51, 51); &quot;&gt;bof를 일으킬 수 있습니다.&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;p&gt;&lt;span style=&quot;color: rgb(51, 51, 51); &quot;&gt;assembly 로 봐보겠습니다.&lt;/span&gt;&lt;/p&gt;&lt;p style=&quot;text-align: left; clear: none; float: none; &quot;&gt;&lt;span class=&quot;imageblock&quot; style=&quot;display:inline-block;width:507px;&quot;&gt;&lt;a href=&quot;http://cfile25.uf.tistory.com/original/130CB2364F92E7FA0239AD&quot; rel=&quot;lightbox&quot; target=&quot;_blank&quot;&gt;&lt;img src=&quot;http://cfile25.uf.tistory.com/image/130CB2364F92E7FA0239AD&quot; filemime=&quot;image/jpeg&quot; filename=&quot;사용자 지정 2.jpg&quot; height=&quot;315&quot; width=&quot;507&quot;/&gt;&lt;/a&gt;&lt;/span&gt;&lt;/p&gt;&lt;p style=&quot;text-align: left; clear: none; float: none; &quot;&gt;&lt;br /&gt;&lt;/p&gt;&lt;p style=&quot;text-align: left; clear: none; float: none; &quot;&gt;&lt;span style=&quot;color: rgb(51, 51, 51); &quot;&gt;저 부분을 보시면 cmp로 비교한 다음 JGE라는 점프문이 나오네요.&lt;/span&gt;&lt;/p&gt;&lt;p style=&quot;text-align: left; clear: none; float: none; &quot;&gt;&lt;span style=&quot;color: rgb(51, 51, 51); &quot;&gt;JG, JL은 부호있는 값이 비교할 때 사용되는 점프문..입니다. 그 반대는 JA, JB 이겠지요.&lt;/span&gt;&lt;/p&gt;&lt;p style=&quot;text-align: left; clear: none; float: none; &quot;&gt;&lt;span style=&quot;color: rgb(51, 51, 51); &quot;&gt;고로 [ebp+8] 값이 0x80이 넘어서면.. JGE 는 작동되지 않고.. 문자열 복사가 이루어집니다.&lt;/span&gt;&lt;/p&gt;&lt;p style=&quot;text-align: left; clear: none; float: none; &quot;&gt;&lt;br /&gt;&lt;/p&gt;&lt;p&gt;&lt;/p&gt;&lt;p style=&quot;text-align: left; clear: none; float: none; &quot;&gt;&lt;span class=&quot;imageblock&quot; style=&quot;display:inline-block;width:583px;&quot;&gt;&lt;a href=&quot;http://cfile9.uf.tistory.com/original/2066B24C4F92E8902CF38D&quot; rel=&quot;lightbox&quot; target=&quot;_blank&quot;&gt;&lt;img src=&quot;http://cfile9.uf.tistory.com/image/2066B24C4F92E8902CF38D&quot; filemime=&quot;image/jpeg&quot; filename=&quot;사용자 지정 3.jpg&quot; height=&quot;273&quot; width=&quot;583&quot;/&gt;&lt;/a&gt;&lt;/span&gt;&lt;/p&gt;&lt;p style=&quot;text-align: left; clear: none; float: none; &quot;&gt;&lt;span style=&quot;color: rgb(51, 51, 51); &quot;&gt;이렇게 말이죠..&lt;/span&gt;&lt;/p&gt;&lt;p style=&quot;text-align: left; clear: none; float: none; &quot;&gt;&lt;span style=&quot;color: rgb(51, 51, 51); &quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/p&gt;&lt;p style=&quot;text-align: left; clear: none; float: none; &quot;&gt;&lt;span style=&quot;color: rgb(0, 0, 0); &quot;&gt;해결방안은?! 모르면 간첩!!&lt;/span&gt;&lt;/p&gt;&lt;p style=&quot;text-align: left; clear: none; float: none; &quot;&gt;&lt;br /&gt;&lt;/p&gt;&lt;p style=&quot;text-align: left; clear: none; float: none; &quot;&gt;&lt;span style=&quot;color: rgb(51, 51, 51); &quot;&gt;잘래요 ㅠ ㅠ&lt;/span&gt;&lt;/p&gt;&lt;div class=&quot;entry-ccl&quot; style=&quot;clear: both; text-align: right; margin-bottom: 10px&quot;&gt;
	&lt;img id=&quot;ccl-icon-373-0&quot; class=&quot;entry-ccl-by&quot; src=&quot;http://i1.daumcdn.net/cfs.tistory/v/0/static/admin/editor/ccl_black01.png&quot; alt=&quot;저작자 표시&quot;/&gt;
	&lt;!--
	&lt;rdf:RDF xmlns=&quot;http://web.resource.org/cc/&quot; xmlns:dc=&quot;http://purl.org/dc/elements/1.1/&quot; xmlns:rdf=&quot;http://www.w3.org/1999/02/22-rdf-syntax-ns#&quot;&gt;
		&lt;Work rdf:about=&quot;&quot;&gt;
			&lt;license rdf:resource=&quot;http://creativecommons.org/licenses/by-fr/2.0/kr/&quot; /&gt;
		&lt;/Work&gt;
		&lt;License rdf:about=&quot;http://creativecommons.org/licenses/by-fr/&quot;&gt;
			&lt;permits rdf:resource=&quot;http://web.resource.org/cc/Reproduction&quot;/&gt;
			&lt;permits rdf:resource=&quot;http://web.resource.org/cc/Distribution&quot;/&gt;
			&lt;requires rdf:resource=&quot;http://web.resource.org/cc/Notice&quot;/&gt;
			&lt;requires rdf:resource=&quot;http://web.resource.org/cc/Attribution&quot;/&gt;
			&lt;permits rdf:resource=&quot;http://web.resource.org/cc/DerivativeWorks&quot;/&gt;
		&lt;/License&gt;
	&lt;/rdf:RDF&gt;
	--&gt;
&lt;/div&gt;
&lt;div class=&quot;another_category another_category_color_gray&quot;&gt;
&lt;h4&gt;'&lt;a href=&quot;/category/My%20Study&quot;&gt;My Study&lt;/a&gt;&amp;nbsp;&gt;&amp;nbsp;&lt;a href=&quot;/category/My%20Study/Exploit&quot;&gt;Exploit&lt;/a&gt;' 카테고리의 다른 글&lt;/h4&gt;
&lt;table&gt;
&lt;tr&gt;
&lt;th&gt;
&lt;a href=&quot;/373&quot; &gt;간단한 정수 오버플로우&lt;/a&gt;&amp;nbsp;&amp;nbsp;&lt;span&gt;(2)&lt;/span&gt;
&lt;/th&gt;
&lt;td&gt;
2012/04/22&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;th&gt;
&lt;a href=&quot;/282&quot; &gt;Windows ShellCode 만들기 ( DEP란.. )&lt;/a&gt;&amp;nbsp;&amp;nbsp;&lt;span&gt;(3)&lt;/span&gt;
&lt;/th&gt;
&lt;td&gt;
2010/10/30&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;th&gt;
&lt;a href=&quot;/233&quot; &gt;geteuid()를 사용한 쉘코드 만들기&lt;/a&gt;&amp;nbsp;&amp;nbsp;&lt;span&gt;(0)&lt;/span&gt;
&lt;/th&gt;
&lt;td&gt;
2010/05/21&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;th&gt;
&lt;a href=&quot;/208&quot; &gt;버퍼 오버플로우 취약점에 대한 대처 방안들&lt;/a&gt;&amp;nbsp;&amp;nbsp;&lt;span&gt;(0)&lt;/span&gt;
&lt;/th&gt;
&lt;td&gt;
2010/04/29&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;th&gt;
&lt;a href=&quot;/198&quot; &gt;Hackerschool level19 쉘코드 줄이기, 환경변수 사용하지 않기&lt;/a&gt;&amp;nbsp;&amp;nbsp;&lt;span&gt;(0)&lt;/span&gt;
&lt;/th&gt;
&lt;td&gt;
2010/04/26&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;th&gt;
&lt;a href=&quot;/169&quot; &gt;RTL로 푼 해커스쿨 level11&lt;/a&gt;&amp;nbsp;&amp;nbsp;&lt;span&gt;(2)&lt;/span&gt;
&lt;/th&gt;
&lt;td&gt;
2010/04/07&lt;/td&gt;
&lt;/tr&gt;
&lt;/table&gt;&lt;/div&gt;</description>
			<category>Exploit</category>
			<category>Assembly</category>
			<category>integer</category>
			<category>JA</category>
			<category>JB</category>
			<category>JG</category>
			<category>jl</category>
			<category>Overflow</category>
			<category>부호</category>
			<category>오버플로우</category>
			<category>점프문</category>
			<category>정수</category>
			<author>Ezbeat</author>
			<guid>http://ezbeat.tistory.com/373</guid>
			<comments>http://ezbeat.tistory.com/373#entry373comment</comments>
			<pubDate>Sun, 22 Apr 2012 02:11:17 +0900</pubDate>
		</item>
		<item>
			<title>백신 Avast의 Anti-attach 우회하기</title>
			<link>http://ezbeat.tistory.com/372</link>
			<description>&lt;p&gt;&lt;span style=&quot;color: rgb(51, 51, 51); &quot;&gt;Avast 백신에서 실행파일을 검사할 때 어떠한 방식으로 알아보려고 리버싱을 시도하려는데&amp;nbsp;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;p style=&quot;text-align: left; clear: none; float: none; &quot;&gt;&lt;span class=&quot;imageblock&quot; style=&quot;display:inline-block;width:319px;&quot;&gt;&lt;a href=&quot;http://cfile7.uf.tistory.com/original/1448D63C4F8FB6D0236174&quot; rel=&quot;lightbox&quot; target=&quot;_blank&quot;&gt;&lt;img src=&quot;http://cfile7.uf.tistory.com/image/1448D63C4F8FB6D0236174&quot; filemime=&quot;image/jpeg&quot; filename=&quot;사용자 지정 3.jpg&quot; height=&quot;150&quot; width=&quot;319&quot;/&gt;&lt;/a&gt;&lt;/span&gt;&lt;/p&gt;&lt;p style=&quot;text-align: left; clear: none; float: none; &quot;&gt;&lt;span style=&quot;color: rgb(51, 51, 51); &quot;&gt;이와 같은 창이 뜨게됩니다. 해당 프로세스를 어테치를 할 수가 없습니다.&lt;/span&gt;&lt;/p&gt;&lt;p style=&quot;text-align: left; clear: none; float: none; &quot;&gt;&lt;span style=&quot;color: rgb(51, 51, 51); &quot;&gt;그래서 시작한 아바스트 어테치하기... 얼른 끝나면 좋으려만;ㅋ&lt;/span&gt;&lt;/p&gt;&lt;p style=&quot;text-align: left; clear: none; float: none; &quot;&gt;&lt;br /&gt;&lt;/p&gt;&lt;p style=&quot;text-align: left; clear: none; float: none; &quot;&gt;&lt;span style=&quot;color: rgb(51, 51, 51); &quot;&gt;사실 해보면서 글 작성하고 있는 겁니다.&amp;nbsp;&lt;/span&gt;&lt;/p&gt;&lt;p style=&quot;text-align: left; clear: none; float: none; &quot;&gt;&lt;span style=&quot;color: rgb(51, 51, 51); &quot;&gt;왜냐하면.. 이렇게 글을 쓰기 시작해놔야 글 완성을 위해서라도 끝까지 하게되기 때문이죠.&lt;/span&gt;&lt;/p&gt;&lt;p style=&quot;text-align: left; clear: none; float: none; &quot;&gt;&lt;span style=&quot;color: rgb(51, 51, 51); &quot;&gt;저의 게으름성을 채찍질하기 위함?&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;p&gt;&lt;span style=&quot;color: rgb(51, 51, 51); &quot;&gt;Avast 는 아래와 같이 기본적으로 2개의 프로세스로 작동하고 있습니다.
&lt;/span&gt;&lt;/p&gt;&lt;p style=&quot;text-align: left; clear: none; float: none; &quot;&gt;&lt;span class=&quot;imageblock&quot; style=&quot;display:inline-block;width:435px;&quot;&gt;&lt;a href=&quot;http://cfile29.uf.tistory.com/original/145B363B4F8FB5F9201EA3&quot; rel=&quot;lightbox&quot; target=&quot;_blank&quot;&gt;&lt;img src=&quot;http://cfile29.uf.tistory.com/image/145B363B4F8FB5F9201EA3&quot; filemime=&quot;image/jpeg&quot; filename=&quot;사용자 지정 2.jpg&quot; height=&quot;454&quot; width=&quot;435&quot;/&gt;&lt;/a&gt;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;p&gt;&lt;span style=&quot;color: rgb(51, 51, 51); &quot;&gt;두 프로세스다 어테치가 안되는 건 당연..&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;p&gt;&lt;span style=&quot;color: rgb(51, 51, 51); &quot;&gt;일단 ollydbg에서 attach를 실패하는 것으로보아 AvastUI.exe의 pid를 가지고&amp;nbsp;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style=&quot;color: rgb(51, 51, 51); &quot;&gt;OpenProcess 할 때 함수가 실패하고 있는 것으로 생각했습니다.&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style=&quot;color: rgb(51, 51, 51); &quot;&gt;그리고 그렇게 생각했던 이유 중 가장 큰 원인이..&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;p style=&quot;text-align: left; clear: none; float: none; &quot;&gt;&lt;span class=&quot;imageblock&quot; style=&quot;display:inline-block;width:683px;&quot;&gt;&lt;a href=&quot;http://cfile25.uf.tistory.com/original/20297C504F8FB7D233CAD5&quot; rel=&quot;lightbox&quot; target=&quot;_blank&quot;&gt;&lt;img src=&quot;http://cfile25.uf.tistory.com/image/20297C504F8FB7D233CAD5&quot; filemime=&quot;image/jpeg&quot; filename=&quot;사용자 지정 4.jpg&quot; height=&quot;312&quot; width=&quot;683&quot;/&gt;&lt;/a&gt;&lt;/span&gt;&lt;/p&gt;&lt;p style=&quot;text-align: left; clear: none; float: none; &quot;&gt;&lt;span style=&quot;color: rgb(51, 51, 51); &quot;&gt;NtOpenProcess가 SSDT 후킹 되어 있다는 점이었습니다. 바로 아바스트 시스템 파일에 의해 말이죠.&lt;/span&gt;&lt;/p&gt;&lt;p style=&quot;text-align: left; clear: none; float: none; &quot;&gt;&lt;br /&gt;&lt;/p&gt;&lt;p style=&quot;text-align: left; clear: none; float: none; &quot;&gt;&lt;span style=&quot;color: rgb(51, 51, 51); &quot;&gt;하..지..만.. =_= 그건 저의 명백한 착각..&lt;/span&gt;&lt;/p&gt;&lt;p style=&quot;text-align: left; clear: none; float: none; &quot;&gt;&lt;br /&gt;&lt;/p&gt;&lt;p style=&quot;text-align: left; clear: none; float: none; &quot;&gt;&lt;span style=&quot;color: rgb(51, 51, 51); &quot;&gt;아무리 커널 디버깅을 해서 봐보아도 일반 계산기를 attach할 때와 avastui.exe를 attach 할 때와의 차이점이 없는 것입니다.&lt;/span&gt;&lt;/p&gt;&lt;p style=&quot;text-align: left; clear: none; float: none; &quot;&gt;&lt;span style=&quot;color: rgb(51, 51, 51); &quot;&gt;NtOpenProcess 성공적으로 호출되구요. 아무튼 아니라는 겁니다.&lt;/span&gt;&lt;/p&gt;&lt;p style=&quot;text-align: left; clear: none; float: none; &quot;&gt;&lt;br /&gt;&lt;/p&gt;&lt;p style=&quot;text-align: left; clear: none; float: none; &quot;&gt;&lt;span style=&quot;color: rgb(51, 51, 51); &quot;&gt;근데 당연한 거지만 저도 이 짓을 하면서 처음 알았는데 올리디버거에서 Attach를 눌렀을 때 뜨는 바로 이창..&lt;/span&gt;&lt;/p&gt;&lt;p style=&quot;text-align: left; clear: none; float: none; &quot;&gt;&lt;span class=&quot;imageblock&quot; style=&quot;display:inline-block;width:529px;&quot;&gt;&lt;a href=&quot;http://cfile4.uf.tistory.com/original/144BC53A4F8FB888380B8B&quot; rel=&quot;lightbox&quot; target=&quot;_blank&quot;&gt;&lt;img src=&quot;http://cfile4.uf.tistory.com/image/144BC53A4F8FB888380B8B&quot; filemime=&quot;image/jpeg&quot; filename=&quot;사용자 지정 5.jpg&quot; height=&quot;246&quot; width=&quot;529&quot;/&gt;&lt;/a&gt;&lt;/span&gt;&lt;/p&gt;&lt;p style=&quot;text-align: left; clear: none; float: none; &quot;&gt;&lt;span style=&quot;color: rgb(51, 51, 51); &quot;&gt;이 창에서 나오는 프로세스들은 OpenProcess가 성공해야만 나오는 것이었습니다.&lt;/span&gt;&lt;/p&gt;&lt;p style=&quot;text-align: left; clear: none; float: none; &quot;&gt;&lt;br /&gt;&lt;/p&gt;&lt;p style=&quot;text-align: left; clear: none; float: none; &quot;&gt;&lt;span style=&quot;color: rgb(51, 51, 51); &quot;&gt;고로 AvastUI.exe가 저기 나온걸로 보아 OpenProcess는 무조건 성공 -0-;; 아.. 허무허무..&lt;/span&gt;&lt;/p&gt;&lt;p style=&quot;text-align: left; clear: none; float: none; &quot;&gt;&lt;br /&gt;&lt;/p&gt;&lt;p style=&quot;text-align: left; clear: none; float: none; &quot;&gt;&lt;span style=&quot;color: rgb(51, 51, 51); &quot;&gt;그러면 다른 함수로 눈을 돌려야겠죠. 어테치가 안된다고 에러메시지창이 떴을 때 루틴을 봐보니&lt;/span&gt;&lt;/p&gt;&lt;p style=&quot;text-align: left; clear: none; float: none; &quot;&gt;&lt;span style=&quot;color: rgb(51, 51, 51); &quot;&gt;DebugActiveProcess 함수가 실패하고 있었던 것입니다. AvastUI.exe를 attach하려고 했을 때 말이죠.&lt;/span&gt;&lt;/p&gt;&lt;p style=&quot;text-align: left; clear: none; float: none; &quot;&gt;&lt;br /&gt;&lt;/p&gt;&lt;p style=&quot;text-align: left; clear: none; float: none; &quot;&gt;&lt;span style=&quot;color: rgb(51, 51, 51); &quot;&gt;Ollydbg에서.. 보이는 루틴&lt;/span&gt;&lt;/p&gt;&lt;p style=&quot;text-align: left; clear: none; float: none; &quot;&gt;&lt;span class=&quot;imageblock&quot; style=&quot;display:inline-block;width:511px;&quot;&gt;&lt;a href=&quot;http://cfile28.uf.tistory.com/original/180C0E374F8FB967032FD9&quot; rel=&quot;lightbox&quot; target=&quot;_blank&quot;&gt;&lt;img src=&quot;http://cfile28.uf.tistory.com/image/180C0E374F8FB967032FD9&quot; filemime=&quot;image/jpeg&quot; filename=&quot;사용자 지정 6.jpg&quot; height=&quot;86&quot; width=&quot;511&quot;/&gt;&lt;/a&gt;&lt;/span&gt;&lt;/p&gt;&lt;p style=&quot;text-align: left; clear: none; float: none; &quot;&gt;&lt;br /&gt;&lt;/p&gt;&lt;p style=&quot;text-align: left; clear: none; float: none; &quot;&gt;&lt;span style=&quot;color: rgb(51, 51, 51); &quot;&gt;IDA에서 보이는 루틴&lt;/span&gt;&lt;/p&gt;&lt;p style=&quot;text-align: left; clear: none; float: none; &quot;&gt;&lt;/p&gt;&lt;p style=&quot;text-align: left; clear: none; float: none; &quot;&gt;&lt;span class=&quot;imageblock&quot; style=&quot;display:inline-block;width:308px;&quot;&gt;&lt;a href=&quot;http://cfile8.uf.tistory.com/original/1358FD4E4F8FBA3E092F95&quot; rel=&quot;lightbox&quot; target=&quot;_blank&quot;&gt;&lt;img src=&quot;http://cfile8.uf.tistory.com/image/1358FD4E4F8FBA3E092F95&quot; filemime=&quot;image/jpeg&quot; filename=&quot;사용자 지정 7.jpg&quot; height=&quot;157&quot; width=&quot;308&quot;/&gt;&lt;/a&gt;&lt;/span&gt;&lt;/p&gt;&lt;p style=&quot;text-align: left; clear: none; float: none; &quot;&gt;&lt;br /&gt;&lt;/p&gt;&lt;p style=&quot;text-align: left; clear: none; float: none; &quot;&gt;&lt;span style=&quot;color: rgb(51, 51, 51); &quot;&gt;똑같은 주소에 있는 루틴인데 왜 올디에선 저렇게 보이는지.. -_-;;;;&lt;/span&gt;&lt;/p&gt;&lt;p style=&quot;text-align: left; clear: none; float: none; &quot;&gt;&lt;span style=&quot;color: rgb(51, 51, 51); &quot;&gt;하지만 hex 값을 보아하니 올디가 기계어를 잘못읽고 변환한건 아닙니다.&lt;/span&gt;&lt;/p&gt;&lt;p style=&quot;text-align: left; clear: none; float: none; &quot;&gt;&lt;span style=&quot;color: rgb(51, 51, 51); &quot;&gt;push 하고 retn하는걸로 보아 0x10002321로 점프를 하고 있군요.&lt;/span&gt;&lt;/p&gt;&lt;p style=&quot;text-align: left; clear: none; float: none; &quot;&gt;&lt;br /&gt;&lt;/p&gt;&lt;p style=&quot;text-align: left; clear: none; float: none; &quot;&gt;&lt;span class=&quot;imageblock&quot; style=&quot;display:inline-block;width:635px;&quot;&gt;&lt;a href=&quot;http://cfile4.uf.tistory.com/original/1858124F4F8FBB21029E96&quot; rel=&quot;lightbox&quot; target=&quot;_blank&quot;&gt;&lt;img src=&quot;http://cfile4.uf.tistory.com/image/1858124F4F8FBB21029E96&quot; filemime=&quot;image/jpeg&quot; filename=&quot;사용자 지정 8.jpg&quot; height=&quot;680&quot; width=&quot;635&quot;/&gt;&lt;/a&gt;&lt;/span&gt;&lt;/p&gt;&lt;p style=&quot;text-align: left; clear: none; float: none; &quot;&gt;&lt;br /&gt;&lt;/p&gt;&lt;p style=&quot;text-align: left; clear: none; float: none; &quot;&gt;&lt;span style=&quot;color: rgb(51, 51, 51); &quot;&gt;&quot;antiattachkill&quot; 문자열이 있고 막 뭐가 있네요. 그리고 아래 있는 JMP에서 다시 원래 루틴으로 돌아가게 됩니다.&lt;/span&gt;&lt;/p&gt;&lt;p style=&quot;text-align: left; clear: none; float: none; &quot;&gt;&lt;br /&gt;&lt;/p&gt;&lt;p style=&quot;text-align: left; clear: none; float: none; &quot;&gt;&lt;span style=&quot;color: rgb(51, 51, 51); &quot;&gt;음.. 올디가 런타임 시 내부적으로 .text영역에 있는 코드를 바꿔버리는 걸까요?&lt;/span&gt;&lt;/p&gt;&lt;p style=&quot;text-align: left; clear: none; float: none; &quot;&gt;&lt;span style=&quot;color: rgb(51, 51, 51); &quot;&gt;IDA에서는 바로 나오는걸로보아 그런듯 싶습니다. 귀찮으니 여긴 분석 X&lt;/span&gt;&lt;/p&gt;&lt;p style=&quot;text-align: left; clear: none; float: none; &quot;&gt;&lt;br /&gt;&lt;/p&gt;&lt;p style=&quot;text-align: left; clear: none; float: none; &quot;&gt;&lt;span style=&quot;color: rgb(51, 51, 51); &quot;&gt;아무튼 현미경에&amp;nbsp;DebugActiveProcess&amp;nbsp;함수를 대보고 봐봐야겠습니다.&lt;/span&gt;&lt;/p&gt;&lt;p style=&quot;text-align: left; clear: none; float: none; &quot;&gt;&lt;br /&gt;&lt;/p&gt;&lt;p style=&quot;text-align: left; clear: none; float: none; &quot;&gt;&lt;span style=&quot;color: rgb(51, 51, 51); &quot;&gt;DebugActiveProcess 함수 안...&lt;/span&gt;&lt;/p&gt;&lt;p style=&quot;text-align: left; clear: none; float: none; &quot;&gt;&lt;span class=&quot;imageblock&quot; style=&quot;display:inline-block;width:646px;&quot;&gt;&lt;a href=&quot;http://cfile4.uf.tistory.com/original/1676A6424F8FF3EF2C8100&quot; rel=&quot;lightbox&quot; target=&quot;_blank&quot;&gt;&lt;img src=&quot;http://cfile4.uf.tistory.com/image/1676A6424F8FF3EF2C8100&quot; filemime=&quot;image/jpeg&quot; filename=&quot;사용자 지정 11.jpg&quot; height=&quot;415&quot; width=&quot;646&quot;/&gt;&lt;/a&gt;&lt;/span&gt;&lt;/p&gt;&lt;p style=&quot;text-align: left; clear: none; float: none; &quot;&gt;&lt;span style=&quot;color: rgb(51, 51, 51); &quot;&gt;DebugActiveProcess 는 타겟 프로세스의 PID를 가지고 호출을 하게 됩니다.&lt;/span&gt;&lt;/p&gt;&lt;p style=&quot;text-align: left; clear: none; float: none; &quot;&gt;&lt;span style=&quot;color: rgb(51, 51, 51); &quot;&gt;빨간색으로 네모친 부분이 타겟 PID를 가지고 ZwOpenProcess를 사용해 핸들을 구하는 부분입니다.&amp;nbsp;&lt;/span&gt;&lt;/p&gt;&lt;p style=&quot;text-align: left; clear: none; float: none; &quot;&gt;&lt;span style=&quot;color: rgb(51, 51, 51); &quot;&gt;핸들은 성공적으로 잘 얻습니다.&lt;/span&gt;&lt;/p&gt;&lt;p style=&quot;text-align: left; clear: none; float: none; &quot;&gt;&lt;br /&gt;&lt;/p&gt;&lt;p style=&quot;text-align: left; clear: none; float: none; &quot;&gt;&lt;span style=&quot;color: rgb(51, 51, 51); &quot;&gt;그리고 그 아래 DbgUiDebugActiveProcess 함수가 있네요. 해당 함수는 얻은 핸들을 인자로 호출을 하게 됩니다.&lt;/span&gt;&lt;/p&gt;&lt;p style=&quot;text-align: left; clear: none; float: none; &quot;&gt;&lt;br /&gt;&lt;/p&gt;&lt;p style=&quot;text-align: left; clear: none; float: none; &quot;&gt;&lt;span class=&quot;imageblock&quot; style=&quot;display:inline-block;width:608px;&quot;&gt;&lt;a href=&quot;http://cfile3.uf.tistory.com/original/1616863E4F8FF489034B26&quot; rel=&quot;lightbox&quot; target=&quot;_blank&quot;&gt;&lt;img src=&quot;http://cfile3.uf.tistory.com/image/1616863E4F8FF489034B26&quot; filemime=&quot;image/jpeg&quot; filename=&quot;사용자 지정 12.jpg&quot; height=&quot;276&quot; width=&quot;608&quot;/&gt;&lt;/a&gt;&lt;/span&gt;&lt;/p&gt;&lt;p style=&quot;text-align: left; clear: none; float: none; &quot;&gt;&lt;span style=&quot;color: rgb(51, 51, 51); &quot;&gt;내부적으로 ZwDebugActiveProcess를 호출하네요. &amp;nbsp;해당 함수는 첫번째 인자 핸들 두번째인자 디버그오브젝트?&lt;/span&gt;&lt;/p&gt;&lt;p style=&quot;text-align: left; clear: none; float: none; &quot;&gt;&lt;span style=&quot;color: rgb(51, 51, 51); &quot;&gt;라는 값을 가지고 KiFastSystemCall을 호출합니다. 유저는 여기서 끝이군요.&lt;/span&gt;&lt;/p&gt;&lt;p style=&quot;text-align: left; clear: none; float: none; &quot;&gt;&lt;br /&gt;&lt;/p&gt;&lt;p style=&quot;text-align: left; clear: none; float: none; &quot;&gt;&lt;span style=&quot;color: rgb(51, 51, 51); &quot;&gt;ZwDebugActiveProcess 함수의 리턴 값이 일반적인 경우 0x00000000 인데&amp;nbsp;&lt;/span&gt;&lt;/p&gt;&lt;p style=&quot;text-align: left; clear: none; float: none; &quot;&gt;&lt;span style=&quot;color: rgb(51, 51, 51); &quot;&gt;AvastUI.exe를 어테치하면 리턴 값이 0xC0000022 입니다. 접근 거부...&lt;/span&gt;&lt;/p&gt;&lt;p style=&quot;text-align: left; clear: none; float: none; &quot;&gt;&lt;br /&gt;&lt;/p&gt;&lt;p style=&quot;text-align: left; clear: none; float: none; &quot;&gt;&lt;span style=&quot;color: rgb(51, 51, 51); &quot;&gt;그러면 역시 나 또 커널에서 무언가 조작이 되어 있다는건데...&lt;/span&gt;&lt;/p&gt;&lt;p style=&quot;text-align: left; clear: none; float: none; &quot;&gt;&lt;/p&gt;&lt;p style=&quot;text-align: left; clear: none; float: none; &quot;&gt;&lt;span class=&quot;imageblock&quot; style=&quot;display:inline-block;width:683px;&quot;&gt;&lt;a href=&quot;http://cfile10.uf.tistory.com/original/124734444F8FF6031C914C&quot; rel=&quot;lightbox&quot; target=&quot;_blank&quot;&gt;&lt;img src=&quot;http://cfile10.uf.tistory.com/image/124734444F8FF6031C914C&quot; filemime=&quot;image/jpeg&quot; filename=&quot;사용자 지정 13.jpg&quot; height=&quot;98&quot; width=&quot;683&quot;/&gt;&lt;/a&gt;&lt;/span&gt;&lt;/p&gt;&lt;p style=&quot;text-align: left; clear: none; float: none; &quot;&gt;&lt;span style=&quot;color: rgb(51, 51, 51); &quot;&gt;ZwDebugActiveProcess 함수가 SSDT 후킹되어 있지도 않고 커널 수정된 부분을 봐도 inline훅이 되어 있지도 않습니다.&lt;/span&gt;&lt;br /&gt;&lt;/p&gt;&lt;p style=&quot;text-align: left; clear: none; float: none; &quot;&gt;&lt;br /&gt;&lt;/p&gt;&lt;p style=&quot;text-align: left; clear: none; float: none; &quot;&gt;&lt;span style=&quot;color: rgb(51, 51, 51); &quot;&gt;음.. .그러면 커널 디버깅을 통해 루틴을 따라 가보죠.&lt;/span&gt;&lt;/p&gt;&lt;p style=&quot;text-align: left; clear: none; float: none; &quot;&gt;&lt;span class=&quot;imageblock&quot; style=&quot;display:inline-block;width:587px;&quot;&gt;&lt;a href=&quot;http://cfile23.uf.tistory.com/original/16628A374F90B3252C3AC8&quot; rel=&quot;lightbox&quot; target=&quot;_blank&quot;&gt;&lt;img src=&quot;http://cfile23.uf.tistory.com/image/16628A374F90B3252C3AC8&quot; filemime=&quot;image/jpeg&quot; filename=&quot;사용자 지정 14.jpg&quot; height=&quot;328&quot; width=&quot;587&quot;/&gt;&lt;/a&gt;&lt;/span&gt;&lt;/p&gt;&lt;p style=&quot;text-align: left; clear: none; float: none; &quot;&gt;&lt;br /&gt;&lt;/p&gt;&lt;p style=&quot;text-align: left; clear: none; float: none; &quot;&gt;&lt;span style=&quot;color: rgb(51, 51, 51); &quot;&gt;NtDebugActiveProcess 첫 부분입니다. 심오하게 들어가야 알 줄 알았지만 다행이 함수 초입부부터 뭔가 이상했습니다.&lt;/span&gt;&lt;/p&gt;&lt;p style=&quot;text-align: left; clear: none; float: none; &quot;&gt;&lt;span style=&quot;color: rgb(51, 51, 51); &quot;&gt;0x80664545 에서 ObReferenceObjectByHandle 이라는 함수를 사용하고 있습니다. 이는 OpenProcess로 부터 얻은 프로세스의 핸들을 가지고 해당 ThreadObject를 구해주는 함수입니다. 하지만 저 함수의 리턴 값이 0xC0000022 였습니다.&lt;/span&gt;&lt;/p&gt;&lt;p style=&quot;text-align: left; clear: none; float: none; &quot;&gt;&lt;span style=&quot;color: rgb(51, 51, 51); &quot;&gt;물론 AvastUI.exe를 어테치 했을 경우이고 그냥 계산기를 어테치 했을 경우엔 0x00000000이 리턴 됬습니다.&lt;/span&gt;&lt;/p&gt;&lt;p style=&quot;text-align: left; clear: none; float: none; &quot;&gt;&lt;br /&gt;&lt;/p&gt;&lt;p style=&quot;text-align: left; clear: none; float: none; &quot;&gt;&lt;span style=&quot;color: rgb(51, 51, 51); &quot;&gt;그러면&amp;nbsp;&lt;/span&gt;&lt;span style=&quot;color: rgb(51, 51, 51); &quot;&gt;ObReferenceObjectByHandle 함수 내부를 봐봐야 뭘 알 것 같군요.&lt;/span&gt;&lt;/p&gt;&lt;p style=&quot;text-align: left; clear: none; float: none; &quot;&gt;&lt;span style=&quot;color: rgb(51, 51, 51); &quot;&gt;하던 도중 cpu가 쿼드라 일반적인 트레이싱이 힘들더군요. 자꾸 bp걸고 그냥 실행하면 context가 다른 걸로 넘어가 있어서..ㅠ&lt;/span&gt;&lt;/p&gt;&lt;p style=&quot;text-align: left; clear: none; float: none; &quot;&gt;&lt;span style=&quot;color: rgb(51, 51, 51); &quot;&gt;잡소리&amp;nbsp;&lt;/span&gt;&lt;span style=&quot;color: rgb(51, 51, 51); &quot;&gt;그만하고 아무튼 gogo&lt;/span&gt;&lt;/p&gt;&lt;p style=&quot;text-align: left; clear: none; float: none; &quot;&gt;&lt;br /&gt;&lt;/p&gt;&lt;p style=&quot;text-align: left; clear: none; float: none; &quot;&gt;&lt;span class=&quot;imageblock&quot; style=&quot;display:inline-block;width:630px;&quot;&gt;&lt;a href=&quot;http://cfile10.uf.tistory.com/original/164F863A4F90D4610E8C4C&quot; rel=&quot;lightbox&quot; target=&quot;_blank&quot;&gt;&lt;img src=&quot;http://cfile10.uf.tistory.com/image/164F863A4F90D4610E8C4C&quot; filemime=&quot;image/jpeg&quot; filename=&quot;사용자 지정 15.jpg&quot; height=&quot;350&quot; width=&quot;630&quot;/&gt;&lt;/a&gt;&lt;/span&gt;&lt;/p&gt;&lt;p style=&quot;text-align: left; clear: none; float: none; &quot;&gt;&lt;br /&gt;&lt;/p&gt;&lt;p style=&quot;text-align: left; clear: none; float: none; &quot;&gt;&lt;span style=&quot;color: rgb(51, 51, 51); &quot;&gt;내부를 보니.. 처음 부분에 ExMapHandleToPointerEx 함수가 호출되고 있습니다.&lt;/span&gt;&lt;/p&gt;&lt;p style=&quot;text-align: left; clear: none; float: none; &quot;&gt;&lt;span style=&quot;color: rgb(51, 51, 51); &quot;&gt;제가 알기론 HANDLE_TABLE 이라는 구조체를 리턴 값으로 넘겨주는 함수입니다.&lt;/span&gt;&lt;/p&gt;&lt;p style=&quot;text-align: left; clear: none; float: none; &quot;&gt;&lt;span style=&quot;color: rgb(51, 51, 51); &quot;&gt;일단 해당 함수를 호출한 이후 리턴 값을 봐보겠습니다. ( 현재&amp;nbsp;&lt;/span&gt;&lt;span style=&quot;color: rgb(51, 51, 51); &quot;&gt;AvastUI.exe 를 어테치한 상황입니다. )&lt;/span&gt;&lt;/p&gt;&lt;p style=&quot;text-align: left; clear: none; float: none; &quot;&gt;&lt;br /&gt;&lt;/p&gt;&lt;p style=&quot;text-align: left; clear: none; float: none; &quot;&gt;&lt;span class=&quot;imageblock&quot; style=&quot;display:inline-block;width:524px;&quot;&gt;&lt;a href=&quot;http://cfile25.uf.tistory.com/original/172F3A4A4F90D5371210C0&quot; rel=&quot;lightbox&quot; target=&quot;_blank&quot;&gt;&lt;img src=&quot;http://cfile25.uf.tistory.com/image/172F3A4A4F90D5371210C0&quot; filemime=&quot;image/jpeg&quot; filename=&quot;사용자 지정 16.jpg&quot; height=&quot;347&quot; width=&quot;524&quot;/&gt;&lt;/a&gt;&lt;/span&gt;&lt;/p&gt;&lt;p style=&quot;text-align: left; clear: none; float: none; &quot;&gt;&lt;br /&gt;&lt;/p&gt;&lt;p style=&quot;text-align: left; clear: none; float: none; &quot;&gt;&lt;span style=&quot;color: rgb(51, 51, 51); &quot;&gt;저 빨간색 네모친 부분이 중요합니다. 근데 자료를 찾아보니 QuotaProcess 의 자료형은 PEPROCESS로 프로세스 객체 포인터를&lt;/span&gt;&lt;span style=&quot;color: rgb(51, 51, 51); &quot;&gt;&amp;nbsp;가지고 있어야하는데 저 값이 이상하군요. 아무튼 저 값이 사용되는 부분을 봐보겠습니다.&lt;/span&gt;&lt;/p&gt;&lt;p style=&quot;text-align: left; clear: none; float: none; &quot;&gt;&lt;br /&gt;&lt;/p&gt;&lt;p style=&quot;text-align: left; clear: none; float: none; &quot;&gt;&lt;/p&gt;&lt;p style=&quot;text-align: left; clear: none; float: none; &quot;&gt;&lt;span class=&quot;imageblock&quot; style=&quot;display:inline-block;width:647px;&quot;&gt;&lt;a href=&quot;http://cfile9.uf.tistory.com/original/170FA4484F90D615336C22&quot; rel=&quot;lightbox&quot; target=&quot;_blank&quot;&gt;&lt;img src=&quot;http://cfile9.uf.tistory.com/image/170FA4484F90D615336C22&quot; filemime=&quot;image/jpeg&quot; filename=&quot;사용자 지정 17.jpg&quot; height=&quot;119&quot; width=&quot;647&quot;/&gt;&lt;/a&gt;&lt;/span&gt;&lt;/p&gt;&lt;p style=&quot;text-align: left; clear: none; float: none; &quot;&gt;&lt;br /&gt;&lt;/p&gt;&lt;p style=&quot;text-align: left; clear: none; float: none; &quot;&gt;&lt;span style=&quot;color: rgb(51, 51, 51); &quot;&gt;빨간색 네모친 부분위에서 해당 값을 가져다가 지지고 볶고 한 다음 test로 어떠한 값(이 모듈 인자) 과 test 연산을 하는데&lt;/span&gt;&lt;/p&gt;&lt;p style=&quot;text-align: left; clear: none; float: none; &quot;&gt;&lt;span style=&quot;color: rgb(51, 51, 51); &quot;&gt;QuotaProcess가 0x410이면 점프를 한다는 것입니다.&lt;/span&gt;&lt;/p&gt;&lt;p style=&quot;text-align: left; clear: none; float: none; &quot;&gt;&lt;br /&gt;&lt;/p&gt;&lt;p style=&quot;text-align: left; clear: none; float: none; &quot;&gt;&lt;span class=&quot;imageblock&quot; style=&quot;display:inline-block;width:640px;&quot;&gt;&lt;a href=&quot;http://cfile26.uf.tistory.com/original/1736CC4E4F90D6960D843C&quot; rel=&quot;lightbox&quot; target=&quot;_blank&quot;&gt;&lt;img src=&quot;http://cfile26.uf.tistory.com/image/1736CC4E4F90D6960D843C&quot; filemime=&quot;image/jpeg&quot; filename=&quot;사용자 지정 18.jpg&quot; height=&quot;73&quot; width=&quot;640&quot;/&gt;&lt;/a&gt;&lt;/span&gt;&lt;/p&gt;&lt;p style=&quot;text-align: left; clear: none; float: none; &quot;&gt;&lt;br /&gt;&lt;/p&gt;&lt;p style=&quot;text-align: left; clear: none; float: none; &quot;&gt;&lt;span style=&quot;color: rgb(51, 51, 51); &quot;&gt;점프를 하고 나면 이 부분으로 오는데 저기서 익숙한 값이 0xC0000022 값을 ebx 레지스터에 넣고 있습니다. 저기가 실행되면 안되겠죠.&lt;/span&gt;&lt;/p&gt;&lt;p style=&quot;text-align: left; clear: none; float: none; &quot;&gt;&lt;br /&gt;&lt;/p&gt;&lt;p style=&quot;text-align: left; clear: none; float: none; &quot;&gt;&lt;span style=&quot;color: rgb(51, 51, 51); &quot;&gt;그러면 Avast 관련 프로세스가 아닌 일반 프로세스를 대상으로 위와 같은 짓을 다시 해보겠습니다. 어떠한 차이점이 있는지를 알면 우회하기가 더욱 편할 것 같군요.&lt;/span&gt;&lt;/p&gt;&lt;p style=&quot;text-align: left; clear: none; float: none; &quot;&gt;&lt;br /&gt;&lt;/p&gt;&lt;p style=&quot;text-align: left; clear: none; float: none; &quot;&gt;&lt;span class=&quot;imageblock&quot; style=&quot;display:inline-block;width:515px;&quot;&gt;&lt;a href=&quot;http://cfile4.uf.tistory.com/original/181AAB3E4F90D73B09A090&quot; rel=&quot;lightbox&quot; target=&quot;_blank&quot;&gt;&lt;img src=&quot;http://cfile4.uf.tistory.com/image/181AAB3E4F90D73B09A090&quot; filemime=&quot;image/jpeg&quot; filename=&quot;사용자 지정 19.jpg&quot; height=&quot;214&quot; width=&quot;515&quot;/&gt;&lt;/a&gt;&lt;/span&gt;&lt;/p&gt;&lt;p style=&quot;text-align: left; clear: none; float: none; &quot;&gt;&lt;br /&gt;&lt;/p&gt;&lt;p style=&quot;text-align: left; clear: none; float: none; &quot;&gt;&lt;span style=&quot;color: rgb(51, 51, 51); &quot;&gt;이번엔 notepad.exe 프로세스를 어테치 했을 때의 상황입니다. 위와 다르게 0x410이 아닌 0xc3a가 저 부분에 존재하더군요.&lt;/span&gt;&lt;/p&gt;&lt;p style=&quot;text-align: left; clear: none; float: none; &quot;&gt;&lt;span style=&quot;color: rgb(51, 51, 51); &quot;&gt;실제로 notepad.exe 말고도 calc.exe 등등 Anti-attach가 적용되지 않은 여러 프로세스를 다 어테치 해봤을 때 저 부분이 0xc3a 였습니다. 이때 0xc3a를 0x410으로 바꿔서 실행하니&amp;nbsp;&lt;/span&gt;&lt;/p&gt;&lt;p style=&quot;text-align: left; clear: none; float: none; &quot;&gt;&lt;br /&gt;&lt;/p&gt;&lt;p style=&quot;text-align: left; clear: none; float: none; &quot;&gt;&lt;span class=&quot;imageblock&quot; style=&quot;display:inline-block;width:316px;&quot;&gt;&lt;a href=&quot;http://cfile29.uf.tistory.com/original/16724A4D4F90D83F144D11&quot; rel=&quot;lightbox&quot; target=&quot;_blank&quot;&gt;&lt;img src=&quot;http://cfile29.uf.tistory.com/image/16724A4D4F90D83F144D11&quot; filemime=&quot;image/jpeg&quot; filename=&quot;사용자 지정 20.jpg&quot; height=&quot;142&quot; width=&quot;316&quot;/&gt;&lt;/a&gt;&lt;/span&gt;&lt;/p&gt;&lt;p style=&quot;text-align: left; clear: none; float: none; &quot;&gt;&lt;span style=&quot;color: rgb(51, 51, 51); &quot;&gt;반가운 창이 뜨네요.&lt;/span&gt;&lt;br /&gt;&lt;/p&gt;&lt;p style=&quot;text-align: left; clear: none; float: none; &quot;&gt;&lt;br /&gt;&lt;/p&gt;&lt;p style=&quot;text-align: left; clear: none; float: none; &quot;&gt;&lt;span style=&quot;color: rgb(51, 51, 51); &quot;&gt;그러면 메모리 패치를 시도해볼 수 있는 기회가 생겼군요.&lt;/span&gt;&lt;/p&gt;&lt;p style=&quot;text-align: left; clear: none; float: none; &quot;&gt;&lt;br /&gt;&lt;/p&gt;&lt;p style=&quot;text-align: left; clear: none; float: none; &quot;&gt;&lt;span style=&quot;color: rgb(51, 51, 51); &quot;&gt;AvastUI.exe를 어테치 한 상황에서&amp;nbsp;&lt;/span&gt;&lt;span style=&quot;color: rgb(51, 51, 51); &quot;&gt;ExMapHandleToPointerEx&lt;/span&gt;&lt;span style=&quot;color: rgb(51, 51, 51); &quot;&gt;&amp;nbsp;함수까지 호출 된 후! 리턴 값인 HANDLE_TABLE의 &amp;nbsp;&lt;/span&gt;&lt;span style=&quot;color: rgb(51, 51, 51); &quot;&gt;QuotaProcess&lt;/span&gt;&lt;span style=&quot;color: rgb(51, 51, 51); &quot;&gt;&amp;nbsp;멤버변수를&lt;/span&gt;&lt;span style=&quot;color: rgb(51, 51, 51); &quot;&gt;&amp;nbsp;0x410이라는 값에서&lt;/span&gt;&lt;span style=&quot;color: rgb(51, 51, 51); &quot;&gt;&amp;nbsp;0xc3a로 바꿔서 실행을 해보겠습니다.&lt;/span&gt;&lt;/p&gt;&lt;p style=&quot;text-align: left; clear: none; float: none; &quot;&gt;&lt;br /&gt;&lt;/p&gt;&lt;p style=&quot;text-align: left; clear: none; float: none; &quot;&gt;&lt;span class=&quot;imageblock&quot; style=&quot;display:inline-block;width:646px;&quot;&gt;&lt;a href=&quot;http://cfile9.uf.tistory.com/original/113712504F90D8DE0D05CB&quot; rel=&quot;lightbox&quot; target=&quot;_blank&quot;&gt;&lt;img src=&quot;http://cfile9.uf.tistory.com/image/113712504F90D8DE0D05CB&quot; filemime=&quot;image/jpeg&quot; filename=&quot;사용자 지정 21.jpg&quot; height=&quot;355&quot; width=&quot;646&quot;/&gt;&lt;/a&gt;&lt;/span&gt;&lt;/p&gt;&lt;p style=&quot;text-align: left; clear: none; float: none; &quot;&gt;&lt;span style=&quot;color: rgb(51, 51, 51); &quot;&gt;&lt;b&gt;&lt;span style=&quot;color: rgb(255, 0, 0); &quot;&gt;올레~~~~ Attach 성공입니다.&lt;/span&gt;&lt;/b&gt;&lt;/span&gt;&lt;/p&gt;&lt;p style=&quot;text-align: left; clear: none; float: none; &quot;&gt;&lt;br /&gt;&lt;/p&gt;&lt;p style=&quot;text-align: left; clear: none; float: none; &quot;&gt;&lt;span style=&quot;color: rgb(51, 51, 51); &quot;&gt;음.. 그러면 저 0x410이라는 값은 도데체 언제 셋팅이 되는 것일까요?&lt;/span&gt;&lt;/p&gt;&lt;p style=&quot;text-align: left; clear: none; float: none; &quot;&gt;&lt;br /&gt;&lt;/p&gt;&lt;p style=&quot;text-align: left; clear: none; float: none; &quot;&gt;&lt;span style=&quot;color: rgb(51, 51, 51); &quot;&gt;ExMapHandleToPointerEx&lt;/span&gt;&lt;span style=&quot;color: rgb(51, 51, 51); &quot;&gt;&amp;nbsp;함수의 리턴 값은&lt;/span&gt;&lt;/p&gt;&lt;p style=&quot;text-align: left; clear: none; float: none; &quot;&gt;&lt;span style=&quot;color: rgb(51, 51, 51); &quot;&gt;&quot;BaseHandleTableAddress + (Target Handle / 4 * 8)&quot; 이라는 공식하에 나오는 건데...( 내부적으로 이렇게 얻어옴 )&lt;/span&gt;&lt;/p&gt;&lt;p style=&quot;text-align: left; clear: none; float: none; &quot;&gt;&lt;span style=&quot;color: rgb(51, 51, 51); &quot;&gt;NtDebugActiveProcess 함수를 들어오기 전부터 이미 핸들은 셋팅되어 있는 것이고..&lt;/span&gt;&lt;/p&gt;&lt;p style=&quot;text-align: left; clear: none; float: none; &quot;&gt;&lt;br /&gt;&lt;/p&gt;&lt;p style=&quot;text-align: left; clear: none; float: none; &quot;&gt;&lt;span style=&quot;color: rgb(51, 51, 51); &quot;&gt;고로&amp;nbsp;&lt;/span&gt;&lt;span style=&quot;color: rgb(51, 51, 51); &quot;&gt;NtDebugActiveProcess&lt;/span&gt;&lt;span style=&quot;color: rgb(51, 51, 51); &quot;&gt;&amp;nbsp;들어오기 전부터 핸들 테이블에는 0x410이라는 값이 셋팅되어 있는 것입니다.&lt;/span&gt;&lt;/p&gt;&lt;p style=&quot;text-align: left; clear: none; float: none; &quot;&gt;&lt;br /&gt;&lt;/p&gt;&lt;p style=&quot;text-align: left; clear: none; float: none; &quot;&gt;&lt;span style=&quot;color: rgb(51, 51, 51); &quot;&gt;그러면 핸들을 얻어오는 Nt&lt;/span&gt;&lt;span style=&quot;color: rgb(51, 51, 51); &quot;&gt;OpenProcess!!! &amp;nbsp;이놈을 다시 조저봐야하는 건가요?? 처음으로 다시 돌아가야하는 기분이네요.&lt;/span&gt;&lt;/p&gt;&lt;p style=&quot;text-align: left; clear: none; float: none; &quot;&gt;&lt;span style=&quot;color: rgb(51, 51, 51); &quot;&gt;근데 NtOpenProcess는 아바스트 시스템 파일에 의해 SSDT 후킹이 되어 있는 상황이라.. 말이 되는군요.&lt;/span&gt;&lt;/p&gt;&lt;p style=&quot;text-align: left; clear: none; float: none; &quot;&gt;&lt;br /&gt;&lt;/p&gt;&lt;p style=&quot;text-align: left; clear: none; float: none; &quot;&gt;&lt;span style=&quot;color: rgb(51, 51, 51); &quot;&gt;시험기간이고 시간이 없어서 여기까지만 하겠습니다. 분명 예상대로라면 핸들을 얻어와서 핸들 테이블에 처음엔&lt;/span&gt;&lt;span style=&quot;color: rgb(51, 51, 51); &quot;&gt;&amp;nbsp;0xc3a를 넣겠지만 나중에 0x410을 또 어딘가에 넣겠지요.&lt;/span&gt;&lt;/p&gt;&lt;p style=&quot;text-align: left; clear: none; float: none; &quot;&gt;&lt;br /&gt;&lt;/p&gt;&lt;p style=&quot;text-align: left; clear: none; float: none; &quot;&gt;&lt;/p&gt;&lt;p style=&quot;clear: none; float: none; &quot;&gt;&lt;span style=&quot;color: rgb(51, 51, 51); &quot;&gt;nt!&lt;b&gt;ExCreateHandle&lt;/b&gt;:&lt;/span&gt;&lt;/p&gt;&lt;p style=&quot;clear: none; float: none; &quot;&gt;&lt;span style=&quot;color: rgb(51, 51, 51); &quot;&gt;80571d96 8bff &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;mov &amp;nbsp; &amp;nbsp; edi,edi&lt;/span&gt;&lt;/p&gt;&lt;p style=&quot;clear: none; float: none; &quot;&gt;&lt;span style=&quot;color: rgb(51, 51, 51); &quot;&gt;80571d98 55 &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;push &amp;nbsp; &amp;nbsp;ebp&lt;/span&gt;&lt;/p&gt;&lt;p style=&quot;clear: none; float: none; &quot;&gt;&lt;span style=&quot;color: rgb(51, 51, 51); &quot;&gt;80571d99 8bec &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;mov &amp;nbsp; &amp;nbsp; ebp,esp&lt;/span&gt;&lt;/p&gt;&lt;p style=&quot;clear: none; float: none; &quot;&gt;&lt;span style=&quot;color: rgb(51, 51, 51); &quot;&gt;80571d9b 51 &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;push &amp;nbsp; &amp;nbsp;ecx&lt;/span&gt;&lt;/p&gt;&lt;p style=&quot;clear: none; float: none; &quot;&gt;&lt;span style=&quot;color: rgb(51, 51, 51); &quot;&gt;80571d9c 8365fc00 &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;and &amp;nbsp; &amp;nbsp; dword ptr [ebp-4],0&lt;/span&gt;&lt;/p&gt;&lt;p style=&quot;clear: none; float: none; &quot;&gt;&lt;span style=&quot;color: rgb(51, 51, 51); &quot;&gt;80571da0 53 &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;push &amp;nbsp; &amp;nbsp;ebx&lt;/span&gt;&lt;/p&gt;&lt;p style=&quot;clear: none; float: none; &quot;&gt;&lt;span style=&quot;color: rgb(51, 51, 51); &quot;&gt;80571da1 56 &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;push &amp;nbsp; &amp;nbsp;esi&lt;/span&gt;&lt;/p&gt;&lt;p style=&quot;clear: none; float: none; &quot;&gt;&lt;span style=&quot;color: rgb(51, 51, 51); &quot;&gt;80571da2 8b7508 &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;mov &amp;nbsp; &amp;nbsp; esi,dword ptr [ebp+8]&lt;/span&gt;&lt;/p&gt;&lt;p style=&quot;clear: none; float: none; &quot;&gt;&lt;span style=&quot;color: rgb(51, 51, 51); &quot;&gt;80571da5 8d45fc &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;lea &amp;nbsp; &amp;nbsp; eax,[ebp-4]&lt;/span&gt;&lt;/p&gt;&lt;p style=&quot;clear: none; float: none; &quot;&gt;&lt;span style=&quot;color: rgb(51, 51, 51); &quot;&gt;80571da8 50 &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;push &amp;nbsp; &amp;nbsp;eax&lt;/span&gt;&lt;/p&gt;&lt;p style=&quot;clear: none; float: none; &quot;&gt;&lt;span style=&quot;color: rgb(51, 51, 51); &quot;&gt;80571da9 56 &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;push &amp;nbsp; &amp;nbsp;esi&lt;/span&gt;&lt;/p&gt;&lt;p style=&quot;clear: none; float: none; &quot;&gt;&lt;span style=&quot;color: rgb(51, 51, 51); &quot;&gt;80571daa e81cffffff &amp;nbsp; &amp;nbsp; &amp;nbsp;call &amp;nbsp; &amp;nbsp;nt!ExpAllocateHandleTableEntry (80571ccb)&lt;/span&gt;&lt;/p&gt;&lt;p style=&quot;clear: none; float: none; &quot;&gt;&lt;span style=&quot;color: rgb(51, 51, 51); &quot;&gt;80571daf 8bd8 &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;mov &amp;nbsp; &amp;nbsp; ebx,eax&lt;/span&gt;&lt;/p&gt;&lt;p style=&quot;clear: none; float: none; &quot;&gt;&lt;span style=&quot;color: rgb(51, 51, 51); &quot;&gt;80571db1 85db &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;test &amp;nbsp; &amp;nbsp;ebx,ebx&lt;/span&gt;&lt;/p&gt;&lt;p style=&quot;clear: none; float: none; &quot;&gt;&lt;span style=&quot;color: rgb(51, 51, 51); &quot;&gt;80571db3 7444 &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;je &amp;nbsp; &amp;nbsp; &amp;nbsp;nt!ExCreateHandle+0xbd (80571df9)&lt;/span&gt;&lt;/p&gt;&lt;p style=&quot;clear: none; float: none; &quot;&gt;&lt;span style=&quot;color: rgb(51, 51, 51); &quot;&gt;80571db5 57 &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;push &amp;nbsp; &amp;nbsp;edi&lt;/span&gt;&lt;/p&gt;&lt;p style=&quot;clear: none; float: none; &quot;&gt;&lt;span style=&quot;color: rgb(51, 51, 51); &quot;&gt;80571db6 64a124010000 &amp;nbsp; &amp;nbsp;mov &amp;nbsp; &amp;nbsp; eax,dword ptr fs:[00000124h]&lt;/span&gt;&lt;/p&gt;&lt;p style=&quot;clear: none; float: none; &quot;&gt;&lt;span style=&quot;color: rgb(51, 51, 51); &quot;&gt;80571dbc 8bf8 &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;mov &amp;nbsp; &amp;nbsp; edi,eax&lt;/span&gt;&lt;/p&gt;&lt;p style=&quot;clear: none; float: none; &quot;&gt;&lt;span style=&quot;color: rgb(51, 51, 51); &quot;&gt;80571dbe ff8fd4000000 &amp;nbsp; &amp;nbsp;dec &amp;nbsp; &amp;nbsp; dword ptr [edi+0D4h]&lt;/span&gt;&lt;/p&gt;&lt;p style=&quot;clear: none; float: none; &quot;&gt;&lt;span style=&quot;color: rgb(51, 51, 51); &quot;&gt;80571dc4 8b450c &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;mov &amp;nbsp; &amp;nbsp; eax,dword ptr [ebp+0Ch]&lt;/span&gt;&lt;/p&gt;&lt;p style=&quot;clear: none; float: none; &quot;&gt;&lt;span style=&quot;color: rgb(51, 51, 51); &quot;&gt;80571dc7 8b08 &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;mov &amp;nbsp; &amp;nbsp; ecx,dword ptr [eax]&lt;/span&gt;&lt;/p&gt;&lt;p style=&quot;clear: none; float: none; &quot;&gt;&lt;span style=&quot;color: rgb(51, 51, 51); &quot;&gt;80571dc9 890b &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;mov &amp;nbsp; &amp;nbsp; dword ptr [ebx],ecx&lt;/span&gt;&lt;/p&gt;&lt;p style=&quot;clear: none; float: none; &quot;&gt;&lt;span style=&quot;color: rgb(51, 51, 51); &quot;&gt;80571dcb 8b4004 &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;mov &amp;nbsp; &amp;nbsp; eax,dword ptr [eax+4]&lt;/span&gt;&lt;/p&gt;&lt;p style=&quot;clear: none; float: none; &quot;&gt;&lt;span style=&quot;color: rgb(51, 51, 51); &quot;&gt;80571dce 894304 &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;mov &amp;nbsp; &amp;nbsp; dword ptr [ebx+4],eax &amp;nbsp; &amp;nbsp;&lt;/span&gt;&lt;span style=&quot;color: rgb(51, 51, 51); &quot;&gt;; BaseHandleTableAddress + (Handle/4*8) + 4 위치에 0xc3a 넣음&lt;/span&gt;&lt;/p&gt;&lt;p style=&quot;clear: none; float: none; &quot;&gt;&lt;br /&gt;&lt;/p&gt;&lt;p style=&quot;clear: none; float: none; &quot;&gt;&lt;span style=&quot;color: rgb(51, 51, 51); &quot;&gt;알아낸건 일단 이 부분입니다. 저기서 0xc3a를 넣는건 확인했습니다.&amp;nbsp;&lt;/span&gt;&lt;span style=&quot;color: rgb(51, 51, 51); &quot;&gt;ExCreateHandle 함수!&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;/p&gt;&lt;p style=&quot;text-align: left; clear: none; float: none; &quot;&gt;&lt;br /&gt;&lt;/p&gt;&lt;p style=&quot;text-align: left; clear: none; float: none; &quot;&gt;&lt;br /&gt;&lt;/p&gt;&lt;p style=&quot;text-align: left; clear: none; float: none; &quot;&gt;&lt;br /&gt;&lt;/p&gt;&lt;p style=&quot;text-align: left; clear: none; float: none; &quot;&gt;&lt;br /&gt;&lt;/p&gt;&lt;p style=&quot;text-align: left; clear: none; float: none; &quot;&gt;&lt;br /&gt;&lt;/p&gt;&lt;p style=&quot;text-align: left; clear: none; float: none; &quot;&gt;&lt;br /&gt;&lt;/p&gt;&lt;div class=&quot;entry-ccl&quot; style=&quot;clear: both; text-align: right; margin-bottom: 10px&quot;&gt;
	&lt;img id=&quot;ccl-icon-372-0&quot; class=&quot;entry-ccl-by&quot; src=&quot;http://i1.daumcdn.net/cfs.tistory/v/0/static/admin/editor/ccl_black01.png&quot; alt=&quot;저작자 표시&quot;/&gt;
	&lt;!--
	&lt;rdf:RDF xmlns=&quot;http://web.resource.org/cc/&quot; xmlns:dc=&quot;http://purl.org/dc/elements/1.1/&quot; xmlns:rdf=&quot;http://www.w3.org/1999/02/22-rdf-syntax-ns#&quot;&gt;
		&lt;Work rdf:about=&quot;&quot;&gt;
			&lt;license rdf:resource=&quot;http://creativecommons.org/licenses/by-fr/2.0/kr/&quot; /&gt;
		&lt;/Work&gt;
		&lt;License rdf:about=&quot;http://creativecommons.org/licenses/by-fr/&quot;&gt;
			&lt;permits rdf:resource=&quot;http://web.resource.org/cc/Reproduction&quot;/&gt;
			&lt;permits rdf:resource=&quot;http://web.resource.org/cc/Distribution&quot;/&gt;
			&lt;requires rdf:resource=&quot;http://web.resource.org/cc/Notice&quot;/&gt;
			&lt;requires rdf:resource=&quot;http://web.resource.org/cc/Attribution&quot;/&gt;
			&lt;permits rdf:resource=&quot;http://web.resource.org/cc/DerivativeWorks&quot;/&gt;
		&lt;/License&gt;
	&lt;/rdf:RDF&gt;
	--&gt;
&lt;/div&gt;
&lt;div class=&quot;another_category another_category_color_gray&quot;&gt;
&lt;h4&gt;'&lt;a href=&quot;/category/My%20Study&quot;&gt;My Study&lt;/a&gt;&amp;nbsp;&gt;&amp;nbsp;&lt;a href=&quot;/category/My%20Study/Reversing&quot;&gt;Reversing&lt;/a&gt;' 카테고리의 다른 글&lt;/h4&gt;
&lt;table&gt;
&lt;tr&gt;
&lt;th&gt;
&lt;a href=&quot;/372&quot; &gt;백신 Avast의 Anti-attach 우회하기&lt;/a&gt;&amp;nbsp;&amp;nbsp;&lt;span&gt;(8)&lt;/span&gt;
&lt;/th&gt;
&lt;td&gt;
2012/04/19&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;th&gt;
&lt;a href=&quot;/371&quot; &gt;NtSetInformationThread 를 이용한 Anti-Debugging&lt;/a&gt;&amp;nbsp;&amp;nbsp;&lt;span&gt;(0)&lt;/span&gt;
&lt;/th&gt;
&lt;td&gt;
2012/04/17&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;th&gt;
&lt;a href=&quot;/361&quot; &gt;Themida 2.1.2.0 Virtual Machine&lt;/a&gt;&amp;nbsp;&amp;nbsp;&lt;span&gt;(7)&lt;/span&gt;
&lt;/th&gt;
&lt;td&gt;
2012/02/01&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;th&gt;
&lt;a href=&quot;/358&quot; &gt;ARM CPU 공부시작.. ㅠ_ㅠ&lt;/a&gt;&amp;nbsp;&amp;nbsp;&lt;span&gt;(6)&lt;/span&gt;
&lt;/th&gt;
&lt;td&gt;
2012/01/25&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;th&gt;
&lt;a href=&quot;/338&quot; &gt;Code Virtualized&lt;/a&gt;&amp;nbsp;&amp;nbsp;&lt;span&gt;(7)&lt;/span&gt;
&lt;/th&gt;
&lt;td&gt;
2011/06/27&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;th&gt;
&lt;a href=&quot;/309&quot; &gt;ZwSetSystemInformation&lt;/a&gt;&amp;nbsp;&amp;nbsp;&lt;span&gt;(2)&lt;/span&gt;
&lt;/th&gt;
&lt;td&gt;
2011/01/11&lt;/td&gt;
&lt;/tr&gt;
&lt;/table&gt;&lt;/div&gt;</description>
			<category>Reversing</category>
			<category>0x410</category>
			<category>0xC0000022</category>
			<category>0xc3a</category>
			<category>anti</category>
			<category>antiattachkill</category>
			<category>Attach</category>
			<category>AVAST</category>
			<category>DebugActiveProcess</category>
			<category>ExCreateHandle</category>
			<category>ExMapHandleToPointerEx</category>
			<category>HANDLE_TABLE</category>
			<category>Hooking</category>
			<category>NtOpenProcess</category>
			<category>ObReferenceObjectByHandle</category>
			<category>OllyDbg</category>
			<category>OpenProcess</category>
			<category>PEPROCESS</category>
			<category>PID</category>
			<category>QuotaProcess</category>
			<category>SSDT</category>
			<category>ThreadObject</category>
			<category>ZwDebugActiveProcess</category>
			<category>백신</category>
			<author>Ezbeat</author>
			<guid>http://ezbeat.tistory.com/372</guid>
			<comments>http://ezbeat.tistory.com/372#entry372comment</comments>
			<pubDate>Thu, 19 Apr 2012 20:26:48 +0900</pubDate>
		</item>
		<item>
			<title>NtSetInformationThread 를 이용한 Anti-Debugging</title>
			<link>http://ezbeat.tistory.com/371</link>
			<description>&lt;p&gt;&lt;span style=&quot;color: rgb(51, 51, 51); &quot;&gt;밥 먹으면서 뭘 보다가 그냥 잼난거 같아서 정리해봅니다.&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style=&quot;color: rgb(51, 51, 51); &quot;&gt;햇반 질려요 .. ㅠ_ㅠ ..&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;p&gt;&lt;span style=&quot;color: rgb(51, 51, 51); &quot;&gt;이번엔&amp;nbsp;NtSetInformationThread &amp;nbsp;함수를 사용한 안티디버깅 방법인데요.&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style=&quot;color: rgb(51, 51, 51); &quot;&gt;함수 정의는 아래와 같이 생겼습니다.&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;p&gt;&lt;/p&gt;&lt;pre style=&quot;padding-top: 5px; padding-right: 5px; padding-bottom: 5px; padding-left: 5px; margin-top: 0px; margin-bottom: 0px; font-family: Consolas, Courier, monospace; word-break: break-all; word-wrap: break-word; overflow-x: auto; overflow-y: auto; color: rgb(0, 0, 0); line-height: normal; &quot;&gt;&lt;span style=&quot;color: rgb(51, 51, 51); &quot;&gt;&lt;b&gt;NTSTATUS ZwSetInformationThread(
  __in&amp;nbsp;&amp;nbsp;HANDLE ThreadHandle,
  __in&amp;nbsp;&amp;nbsp;THREADINFOCLASS ThreadInformationClass,
  __in&amp;nbsp;&amp;nbsp;PVOID ThreadInformation,
  __in&amp;nbsp;&amp;nbsp;ULONG ThreadInformationLength
);&lt;/b&gt;&lt;/span&gt;&lt;/pre&gt;&lt;pre style=&quot;padding-top: 5px; padding-right: 5px; padding-bottom: 5px; padding-left: 5px; margin-top: 0px; margin-bottom: 0px; word-break: break-all; word-wrap: break-word; overflow-x: auto; overflow-y: auto; &quot;&gt;&lt;p style=&quot;color: rgb(0, 0, 0); line-height: normal; font-family: Consolas, Courier, monospace; &quot;&gt;&lt;br /&gt;&lt;/p&gt;&lt;p style=&quot;color: rgb(0, 0, 0); line-height: normal; font-family: Consolas, Courier, monospace; &quot;&gt;&lt;span style=&quot;font-family: Dotum, 돋움; color: rgb(51, 51, 51); &quot;&gt;MSDN의 설명을 보니 스레드의 우선순위를 지정한다고 나와있습니다. 스레드 우선순위와 안티디버깅?&lt;/span&gt;&lt;br /&gt;&lt;/p&gt;&lt;p style=&quot;color: rgb(0, 0, 0); line-height: normal; &quot;&gt;&lt;font face=&quot;Dotum, 돋움&quot;&gt;&lt;span style=&quot;color: rgb(51, 51, 51); &quot;&gt;MSDN을 더 뒤져봐도 스레드 우선순위 관련 설명밖에 안나와있군요. 그러면 전 문서에 나온 설명을 적겠습니다.&lt;/span&gt;&lt;/font&gt;&lt;/p&gt;&lt;p style=&quot;color: rgb(0, 0, 0); line-height: normal; &quot;&gt;&lt;font face=&quot;Dotum, 돋움&quot;&gt;&lt;br /&gt;&lt;/font&gt;&lt;/p&gt;&lt;p style=&quot;color: rgb(0, 0, 0); line-height: normal; &quot;&gt;&lt;font face=&quot;Dotum, 돋움&quot;&gt;&lt;span style=&quot;color: rgb(51, 51, 51); &quot;&gt;Windows 2000은 오직 anti-debugging 목적으로 함수를 확장했다는데요.&amp;nbsp;&lt;/span&gt;&lt;/font&gt;&lt;/p&gt;&lt;p style=&quot;color: rgb(0, 0, 0); line-height: normal; &quot;&gt;&lt;font face=&quot;Dotum, 돋움&quot;&gt;&lt;span style=&quot;color: rgb(51, 51, 51); &quot;&gt;바로 ThreadInformationClass 에 &lt;b&gt;&lt;span style=&quot;color: rgb(255, 0, 0); &quot;&gt;ThreadHideFromDebugger(0x11)&lt;/span&gt;&lt;/b&gt; 멤버입니다.&lt;/span&gt;&lt;/font&gt;&lt;/p&gt;&lt;p style=&quot;color: rgb(0, 0, 0); line-height: normal; &quot;&gt;&lt;font face=&quot;Dotum, 돋움&quot;&gt;&lt;span style=&quot;color: rgb(51, 51, 51); &quot;&gt;ntdll의 NtSetInformationThread함수를 사용해 각각의 스레드 마다 지정될 수 있습니다.&lt;/span&gt;&lt;/font&gt;&lt;/p&gt;&lt;p style=&quot;color: rgb(0, 0, 0); line-height: normal; &quot;&gt;&lt;font face=&quot;Dotum, 돋움&quot;&gt;&lt;br /&gt;&lt;/font&gt;&lt;/p&gt;&lt;p style=&quot;color: rgb(0, 0, 0); line-height: normal; &quot;&gt;&lt;font face=&quot;Dotum, 돋움&quot;&gt;&lt;span style=&quot;color: rgb(51, 51, 51); &quot;&gt;바로 코드를 봐보겠습니다.&lt;/span&gt;&lt;/font&gt;&lt;/p&gt;&lt;p style=&quot;color: rgb(0, 0, 0); line-height: normal; &quot;&gt;&lt;br /&gt;&lt;/p&gt;&lt;p style=&quot;color: rgb(0, 0, 0); line-height: normal; text-align: left; clear: none; float: none; &quot;&gt;&lt;span class=&quot;imageblock&quot; style=&quot;display:inline-block;width:683px;&quot;&gt;&lt;a href=&quot;http://cfile25.uf.tistory.com/original/201896484F8CC20A04BF37&quot; rel=&quot;lightbox&quot; target=&quot;_blank&quot;&gt;&lt;img src=&quot;http://cfile25.uf.tistory.com/image/201896484F8CC20A04BF37&quot; filemime=&quot;image/jpeg&quot; filename=&quot;사용자 지정 2.jpg&quot; height=&quot;648&quot; width=&quot;683&quot;/&gt;&lt;/a&gt;&lt;/span&gt;&lt;/p&gt;&lt;p style=&quot;color: rgb(0, 0, 0); line-height: normal; &quot;&gt;&lt;font face=&quot;Dotum, 돋움&quot;&gt;&lt;br /&gt;&lt;/font&gt;&lt;/p&gt;&lt;p style=&quot;color: rgb(0, 0, 0); line-height: normal; text-align: left; clear: none; float: none; &quot;&gt;&lt;/p&gt;&lt;p style=&quot;color: rgb(0, 0, 0); line-height: normal; text-align: left; clear: none; float: none; &quot;&gt;&lt;br /&gt;&lt;/p&gt;&lt;p style=&quot;color: rgb(0, 0, 0); line-height: normal; text-align: left; clear: none; float: none; &quot;&gt;&lt;span style=&quot;font-family: Dotum, 돋움; color: rgb(51, 51, 51); &quot;&gt;50줄도 안되는 짧막한 코드네요. &lt;/span&gt;&lt;/p&gt;&lt;p style=&quot;color: rgb(0, 0, 0); line-height: normal; text-align: left; clear: none; float: none; &quot;&gt;&lt;span style=&quot;font-family: Dotum, 돋움; color: rgb(51, 51, 51); &quot;&gt;보시면 39번째 라인에서 NtSetInfortmationThread 함수를 호출하고 있습니다. 인자를 보면 현재 쓰레드를 대상으로 말이죠.&lt;/span&gt;&lt;/p&gt;&lt;p style=&quot;color: rgb(0, 0, 0); line-height: normal; text-align: left; clear: none; float: none; &quot;&gt;&lt;span style=&quot;font-family: Dotum, 돋움; &quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/p&gt;&lt;p style=&quot;color: rgb(0, 0, 0); line-height: normal; text-align: left; clear: none; float: none; &quot;&gt;&lt;font face=&quot;Dotum, 돋움&quot;&gt;&lt;span style=&quot;color: rgb(51, 51, 51); &quot;&gt;실행결과 화면입니다.&lt;/span&gt;&lt;/font&gt;&lt;/p&gt;&lt;p style=&quot;color: rgb(0, 0, 0); line-height: normal; text-align: left; clear: none; float: none; &quot;&gt;&lt;br /&gt;&lt;/p&gt;&lt;p style=&quot;color: rgb(0, 0, 0); line-height: normal; text-align: left; clear: none; float: none; &quot;&gt;&lt;span class=&quot;imageblock&quot; style=&quot;display:inline-block;width:425px;&quot;&gt;&lt;a href=&quot;http://cfile22.uf.tistory.com/original/2034B3354F8CC22B3B9FC5&quot; rel=&quot;lightbox&quot; target=&quot;_blank&quot;&gt;&lt;img src=&quot;http://cfile22.uf.tistory.com/image/2034B3354F8CC22B3B9FC5&quot; filemime=&quot;image/jpeg&quot; filename=&quot;사용자 지정 3.jpg&quot; height=&quot;139&quot; width=&quot;425&quot;/&gt;&lt;/a&gt;&lt;/span&gt;&lt;/p&gt;&lt;p style=&quot;color: rgb(0, 0, 0); line-height: normal; text-align: left; clear: none; float: none; &quot;&gt;&lt;font face=&quot;Dotum, 돋움&quot;&gt;&lt;br /&gt;&lt;/font&gt;&lt;/p&gt;&lt;p style=&quot;color: rgb(0, 0, 0); line-height: normal; &quot;&gt;&lt;font face=&quot;Dotum, 돋움&quot;&gt;&lt;span style=&quot;color: rgb(51, 51, 51); &quot;&gt;NtSetInformationThread 함수의 리턴 값이 0x00000000로 제대로 호출은 되고 있군요.&lt;/span&gt;&lt;/font&gt;&lt;/p&gt;&lt;p style=&quot;color: rgb(0, 0, 0); line-height: normal; &quot;&gt;&lt;font face=&quot;Dotum, 돋움&quot;&gt;&lt;span style=&quot;color: rgb(51, 51, 51); &quot;&gt;이제 프로그램을 Debugger에 Attach를 시켜보겠습니다... 이 부분은 동영상으로 봐보죠 그게 더 보기 쉽겠네요.&lt;/span&gt;&lt;/font&gt;&lt;/p&gt;&lt;p style=&quot;color: rgb(0, 0, 0); line-height: normal; &quot;&gt;&lt;br /&gt;&lt;/p&gt;&lt;p style=&quot;color: rgb(0, 0, 0); line-height: normal; text-align: left; &quot;&gt;&lt;span class=&quot;imageblock&quot; style=&quot;display:inline-block;&quot;&gt;&lt;span id=&quot;s1c742ca755d6d47189e5976a9c2341873354&quot;&gt;&lt;/span&gt;
			&lt;script type=&quot;text/javascript&quot;&gt;writeCode2(getEmbedCode('http://cfile7.uf.tistory.com/media/150B2F4E4F8CC6982264F6','300','400','s1c742ca755d6d47189e5976a9c2341873354','#FFFFFF','', undefined, 'transparent'), 's1c742ca755d6d47189e5976a9c2341873354');&lt;/script&gt;&lt;/span&gt;&lt;/p&gt;&lt;p style=&quot;color: rgb(0, 0, 0); line-height: normal; &quot;&gt;&lt;font face=&quot;Dotum, 돋움&quot;&gt;&lt;br /&gt;&lt;/font&gt;&lt;/p&gt;&lt;p style=&quot;color: rgb(0, 0, 0); line-height: normal; &quot;&gt;&lt;font face=&quot;Dotum, 돋움&quot;&gt;&lt;span style=&quot;color: rgb(51, 51, 51); &quot;&gt;(화면이 잘 안보실태니 브라우져 크기를 조절하셔서 보세요~)&lt;/span&gt;&lt;br /&gt;&lt;/font&gt;&lt;/p&gt;&lt;p style=&quot;color: rgb(0, 0, 0); line-height: normal; &quot;&gt;&lt;font face=&quot;Dotum, 돋움&quot;&gt;&lt;span style=&quot;color: rgb(51, 51, 51); &quot;&gt;동영상에서 보이시는 바와 같이 작동하게 됩니다.&lt;/span&gt;&lt;/font&gt;&lt;/p&gt;&lt;p style=&quot;color: rgb(0, 0, 0); line-height: normal; &quot;&gt;&lt;font face=&quot;Dotum, 돋움&quot;&gt;&lt;br /&gt;&lt;/font&gt;&lt;/p&gt;&lt;p style=&quot;color: rgb(0, 0, 0); line-height: normal; &quot;&gt;&lt;font face=&quot;Dotum, 돋움&quot;&gt;&lt;span style=&quot;color: rgb(51, 51, 51); &quot;&gt;그러면 문서에 있는 설명을 조금 더 읽어보죠.&lt;/span&gt;&lt;/font&gt;&lt;/p&gt;&lt;p style=&quot;color: rgb(0, 0, 0); line-height: normal; &quot;&gt;&lt;font face=&quot;Dotum, 돋움&quot;&gt;&lt;br /&gt;&lt;/font&gt;&lt;/p&gt;&lt;p style=&quot;color: rgb(0, 0, 0); line-height: normal; &quot;&gt;&lt;font face=&quot;Dotum, 돋움&quot;&gt;&lt;span style=&quot;color: rgb(51, 51, 51); &quot;&gt;이 함수가 호출되게 되면 &lt;span style=&quot;color: rgb(255, 0, 0); &quot;&gt;해당 thread는 계속 실행되지만 debugger 같은 경우는 더이상 thread에 관련된 어떠한 이벤트를 받지 못한다고 되어 있습니다. &lt;/span&gt;즉, BP를 걸었으면 debugger에 breakpoints 가 걸렸다는 이벤트가 전달이 되야되는데 전달이 되&lt;span style=&quot;color: rgb(0, 0, 0); &quot;&gt;지 못하므로 CC를 만난 타겟 프로그램은 그냥 예외가 나버려 죽게되는 것입니다.&lt;/span&gt;&lt;/span&gt;&lt;/font&gt;&lt;/p&gt;&lt;p style=&quot;color: rgb(0, 0, 0); line-height: normal; &quot;&gt;&lt;font face=&quot;Dotum, 돋움&quot;&gt;&lt;br /&gt;&lt;/font&gt;&lt;/p&gt;&lt;p style=&quot;color: rgb(0, 0, 0); line-height: normal; &quot;&gt;&lt;font face=&quot;Dotum, 돋움&quot;&gt;&lt;span style=&quot;color: rgb(0, 0, 0); &quot;&gt;Olly Advanced 플러그인에 있는 ZwSetInformationThread 우회 설정을 해놓으면 될까 싶어서 해보았는데 타겟 프로그램을 바로 디버거에 붙혀서 실행하면 플러그인에 의하여0xFFFFFFFE 를 뱉으며 우회가 되지만 실행 중인 프로그램을 Attach를 할 경우는 이미&amp;nbsp;&lt;/span&gt;&lt;/font&gt;&lt;/p&gt;&lt;p style=&quot;color: rgb(0, 0, 0); line-height: normal; &quot;&gt;&lt;font face=&quot;Dotum, 돋움&quot;&gt;&lt;span style=&quot;color: rgb(0, 0, 0); &quot;&gt;ZwSetInformationThread 함수가 호출된 상황이기 때문에 이 경우는 어떻게 우회를... &lt;/span&gt;&lt;/font&gt;&lt;/p&gt;&lt;p style=&quot;color: rgb(0, 0, 0); line-height: normal; &quot;&gt;&lt;font face=&quot;Dotum, 돋움&quot;&gt;&lt;br /&gt;&lt;/font&gt;&lt;/p&gt;&lt;p style=&quot;color: rgb(0, 0, 0); line-height: normal; &quot;&gt;&lt;font face=&quot;Dotum, 돋움&quot;&gt;&lt;span style=&quot;color: rgb(0, 0, 0); &quot;&gt;근데 이 방법을 몰랐을 경우에는 Software BP를 탐지하는 안티 디버깅이라고 착각을 할수도 있겠네요.&lt;/span&gt;&lt;/font&gt;&lt;/p&gt;&lt;p style=&quot;color: rgb(0, 0, 0); line-height: normal; &quot;&gt;&lt;font face=&quot;Dotum, 돋움&quot;&gt;&lt;br /&gt;&lt;/font&gt;&lt;/p&gt;&lt;p style=&quot;color: rgb(0, 0, 0); line-height: normal; &quot;&gt;&lt;font face=&quot;Dotum, 돋움&quot;&gt;&lt;span style=&quot;color: rgb(255, 0, 0); &quot;&gt;============================    커널 분석 과정 ======================== 굳이 볼 필요는 없습니다.&lt;/span&gt;&lt;/font&gt;&lt;/p&gt;&lt;p style=&quot;color: rgb(0, 0, 0); line-height: normal; &quot;&gt;&lt;font face=&quot;Dotum, 돋움&quot;&gt;&lt;span style=&quot;color: rgb(0, 0, 0); &quot;&gt;그러면 NtSetInformationThread는 user 상에선 어떻게 작동하는지 확인하지 못합니다.&lt;/span&gt;&lt;/font&gt;&lt;/p&gt;&lt;p style=&quot;color: rgb(0, 0, 0); line-height: normal; &quot;&gt;&lt;font face=&quot;Dotum, 돋움&quot;&gt;&lt;span style=&quot;color: rgb(0, 0, 0); &quot;&gt;소화할겸 오랜만에 커널 디버깅이나 해봐야겠습니다.&lt;/span&gt;&lt;/font&gt;&lt;/p&gt;&lt;p style=&quot;color: rgb(0, 0, 0); line-height: normal; &quot;&gt;&lt;font face=&quot;Dotum, 돋움&quot;&gt;&lt;br /&gt;&lt;/font&gt;&lt;/p&gt;&lt;p style=&quot;color: rgb(0, 0, 0); line-height: normal; &quot;&gt;&lt;font face=&quot;Dotum, 돋움&quot;&gt;&lt;span style=&quot;color: rgb(0, 0, 0); &quot;&gt;일단 cpu제어를 제 프로세스의 스레드 context로 옮겨놓고 멈춰놓고 커널 내부적으로 NtSetInformationThread 에 BP를 걸어 멈추고 디버깅을 시작해보았습니다. 맞게 표현한건지 모르겠군요. &lt;/span&gt;&lt;/font&gt;&lt;/p&gt;&lt;div class=&quot;txc-textbox&quot; style=&quot;border-top-style: solid; border-right-style: solid; border-bottom-style: solid; border-left-style: solid; border-top-width: 1px; border-right-width: 1px; border-bottom-width: 1px; border-left-width: 1px; border-top-color: rgb(203, 203, 203); border-right-color: rgb(203, 203, 203); border-bottom-color: rgb(203, 203, 203); border-left-color: rgb(203, 203, 203); background-color: rgb(255, 255, 255); padding-top: 10px; padding-right: 10px; padding-bottom: 10px; padding-left: 10px; &quot;&gt;&lt;p style=&quot;color: rgb(0, 0, 0); line-height: normal; &quot;&gt;&lt;b&gt;&lt;span style=&quot;font-family: Dotum, 돋움; color: rgb(51, 51, 51); &quot;&gt;NtSetInformationThread 시작 루틴&lt;/span&gt;&lt;/b&gt;&lt;/p&gt;&lt;pre style=&quot;padding-top: 5px; padding-right: 5px; padding-bottom: 5px; padding-left: 5px; margin-top: 0px; margin-bottom: 0px; word-break: break-all; word-wrap: break-word; overflow-x: auto; overflow-y: auto; &quot;&gt;&lt;p&gt;&lt;font color=&quot;#000000&quot; face=&quot;Dotum, 돋움&quot;&gt;&lt;span style=&quot;line-height: normal; &quot;&gt;&lt;span style=&quot;color: rgb(51, 51, 51); &quot;&gt;8057afa7 68d0000000      push    0D0h
8057afac 68a05c4f80      push    offset nt!ObWatchHandles+0x32c (804f5ca0)
8057afb1 e8bd9ef6ff      call    nt!_SEH_prolog (804e4e73)
8057afb6 64a124010000    mov     eax,dword ptr fs:[00000124h]
8057afbc 8945dc          mov     dword ptr [ebp-24h],eax
8057afbf 8a8040010000    mov     al,byte ptr [eax+140h]
8057afc5 8845e4          mov     byte ptr [ebp-1Ch],al
8057afc8 84c0            test    al,al
8057afca 0f847f8b0600    je      nt!NtSetInformationThread+0x9d (805e3b4f)
8057afd0 8365fc00        and     dword ptr [ebp-4],0
8057afd4 8b450c          mov     eax,dword ptr [ebp+0Ch] &lt;/span&gt;&lt;span style=&quot;color: rgb(51, 51, 51); &quot;&gt;                           &lt;span style=&quot;color: rgb(47, 157, 39); &quot;&gt; ; 두번째 인자였던 0x11 가져옴&lt;/span&gt;
8057afd7 48              dec     eax
8057afd8 48              dec     eax
8057afd9 740f            je      nt!NtSetInformationThread+0x3b (8057afea)
8057afdb 48              dec     eax
8057afdc 48              dec     eax
8057afdd 740b            je      nt!NtSetInformationThread+0x3b (8057afea)
8057afdf 83e803          sub     eax,3
8057afe2 0f84c2a40800    je      nt!NtSetInformationThread+0x74 (806054aa)
8057afe8 48              dec     eax
8057afe9 48              dec     eax
8057afea 6a04            push    4
8057afec 5b              pop     ebx
8057afed 895dd8          mov     dword ptr [ebp-28h],ebx
8057aff0 8b7d14          mov     edi,dword ptr [ebp+14h]
8057aff3 8b7510          mov     esi,dword ptr [ebp+10h]
8057aff6 85ff            test    edi,edi
8057aff8 7423            je      nt!NtSetInformationThread+0x6c (8057b01d)		&lt;span style=&quot;color: rgb(47, 157, 39); &quot;&gt;; 점프&lt;/span&gt;

8057b01d 83caff          or      edx,0FFFFFFFFh
8057b020 8955fc          mov     dword ptr [ebp-4],edx
8057b023 6a0a            push    0Ah
8057b025 58              pop     eax
8057b026 8b4d0c          mov     ecx,dword ptr [ebp+0Ch]				      &lt;span style=&quot;color: rgb(47, 157, 39); &quot;&gt;  &lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;color: rgb(51, 51, 51); &quot;&gt;&lt;span style=&quot;color: rgb(47, 157, 39); &quot;&gt;; 0x11 다시 가져옴&lt;/span&gt;
8057b029 3bc8            cmp     ecx,eax
8057b02b 0f8fb82c0300    jg      nt!NtSetInformationThread+0x5c4 (805adce9)	&lt;/span&gt;&lt;span style=&quot;color: rgb(51, 51, 51); &quot;&gt;&lt;span style=&quot;color: rgb(47, 157, 39); &quot;&gt;; 0x0A보다 크므로 점프&lt;/span&gt;

805adce9 8bc1            mov     eax,ecx
805adceb 6a0d            push    0Dh
805adced 59              pop     ecx
805adcee 2bc1            sub     eax,ecx
805adcf0 0f85337a0500    jne     nt!NtSetInformationThread+0x5d1 (80605729)		&lt;span style=&quot;color: rgb(47, 157, 39); &quot;&gt;; 0x0D와 다르므로 점프&lt;/span&gt;

80605729 48              dec     eax
8060572a 0f8455010000    je      nt!NtSetInformationThread+0x719 (80605885)
80605730 48              dec     eax
80605731 0f84e6000000    je      nt!NtSetInformationThread+0x6bb (8060581d)
80605737 48              dec     eax
80605738 48              dec     eax
80605739 0f84a3000000    je      nt!NtSetInformationThread+0x680 (806057e2)		&lt;span style=&quot;color: rgb(47, 157, 39); &quot;&gt;; 여기서 eax가 0 되면서 점프&lt;/span&gt;

806057e2 85ff            test    edi,edi
806057e4 0f854bfeffff    jne     nt!NtSetInformationThread+0x3f2 (80605635)
806057ea 57              push    edi
806057eb 8d45ac          lea     eax,[ebp-54h]
806057ee 50              push    eax
806057ef ff75e4          push    dword ptr [ebp-1Ch]
806057f2 ff355cb75680    push    dword ptr [nt!PsThreadType (8056b75c)]
806057f8 6a20            push    20h
806057fa ff7508          push    dword ptr [ebp+8]
&lt;span style=&quot;color: rgb(255, 0, 0); &quot;&gt;806057fd e8578df6ff      call    nt!ObReferenceObjectByHandle (8056e559)	&lt;span style=&quot;color: rgb(34, 116, 28); &quot;&gt;; &lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;color: rgb(51, 51, 51); &quot;&gt;&lt;span style=&quot;color: rgb(34, 116, 28); &quot;&gt;프로그램의 ETHREAD 구조체 주소 얻음&lt;/span&gt;
80605802 8bf0            mov     esi,eax
80605804 85f6            test    esi,esi
80605806 0f8c7f59f7ff    jl      nt!NtSetInformationThread+0x3a7 (8057b18b)
&lt;span style=&quot;color: rgb(255, 0, 0); &quot;&gt;8060580c 8b4dac          mov     ecx,dword ptr [ebp-54h]				&lt;span style=&quot;color: rgb(34, 116, 28); &quot;&gt;; 얻은 ETHREAD 구조체 주소&lt;/span&gt;
8060580f 8d8148020000    lea     eax,[ecx+248h]					&lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;color: rgb(255, 0, 0); &quot;&gt;&lt;span style=&quot;color: rgb(34, 116, 28); &quot;&gt;; ETHREAD.각종 비트 단위 정보&lt;/span&gt;
80605815 f00918          lock or dword ptr [eax],ebx	  &lt;span style=&quot;color: rgb(34, 116, 28); &quot;&gt; &lt;/span&gt;&lt;span style=&quot;color: rgb(34, 116, 28); &quot;&gt; &lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;color: rgb(51, 51, 51); &quot;&gt;&lt;span style=&quot;color: rgb(34, 116, 28); &quot;&gt;; edx = 00000100b, ETHREAD.HideFromDebugger 값 1로 셋팅&lt;/span&gt;
80605818 e96959f7ff      jmp     nt!NtSetInformationThread+0x3a2 (8057b186)

8057b186 e87587f6ff      call    nt!ObfDereferenceObject (804e3900)
8057b18b 8bc6            mov     eax,esi
8057b18d eba0            jmp     nt!NtSetInformationThread+0x879 (8057b12f)

8057b12f e87a9df6ff      call    nt!_SEH_epilog (804e4eae)
8057b134 c21000          ret     10h&lt;/span&gt;&lt;/span&gt;&lt;/font&gt;&lt;/p&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;&lt;font color=&quot;#000000&quot; face=&quot;Dotum, 돋움&quot;&gt;&lt;span style=&quot;line-height: normal;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/font&gt;&lt;/p&gt;&lt;p style=&quot;color: rgb(0, 0, 0); line-height: normal; &quot;&gt;&lt;font face=&quot;Dotum, 돋움&quot;&gt;&lt;span style=&quot;color: rgb(0, 0, 0); &quot;&gt;코드는 방대하지만 그냥 추적하면서 필요한 부분만 추출해봤습니다. 그 중에서도 중요시 봐볼 부분은 아랫 쪽인데 아랫 쪽에서 보면 ETHREAD 구조체 주소를 얻어와 HideFromDebugger 멤버 값을 1로 셋팅하는 부분이 있습니다.&lt;/span&gt;&lt;/font&gt;&lt;/p&gt;&lt;p style=&quot;line-height: normal; &quot;&gt;&lt;font face=&quot;Dotum, 돋움&quot;&gt;&lt;span style=&quot;color: rgb(0, 0, 0); &quot;&gt;빨간색으로 된 부분만 보시면 됩니다.&lt;/span&gt;&lt;/font&gt;&lt;/p&gt;&lt;p style=&quot;color: rgb(0, 0, 0); line-height: normal; &quot;&gt;&lt;font face=&quot;Dotum, 돋움&quot;&gt;&lt;br /&gt;&lt;/font&gt;&lt;/p&gt;&lt;p style=&quot;color: rgb(0, 0, 0); line-height: normal; &quot;&gt;&lt;font face=&quot;Dotum, 돋움&quot;&gt;&lt;span style=&quot;color: rgb(0, 0, 0); &quot;&gt;이로서 NtSetInforamtionThread 루틴은 끝입니다. -_-;; 고로 최종 작동 코드는 아래와 같은 한줄...&lt;/span&gt;&lt;/font&gt;&lt;/p&gt;&lt;p style=&quot;color: rgb(0, 0, 0); line-height: normal; &quot;&gt;&lt;font face=&quot;Dotum, 돋움&quot;&gt;&lt;br /&gt;&lt;/font&gt;&lt;/p&gt;&lt;p style=&quot;color: rgb(0, 0, 0); line-height: normal; &quot;&gt;&lt;font face=&quot;Dotum, 돋움&quot;&gt;&lt;span style=&quot;color: rgb(51, 51, 51); &quot;&gt;&lt;b&gt;&lt;span style=&quot;color: rgb(9, 0, 255); &quot;&gt;ETHREAD.HideFromDebugger = 0x01;&lt;/span&gt;&lt;/b&gt;&lt;/span&gt;&lt;/font&gt;&lt;/p&gt;&lt;p style=&quot;color: rgb(0, 0, 0); line-height: normal; &quot;&gt;&lt;font face=&quot;Dotum, 돋움&quot;&gt;&lt;span style=&quot;color: rgb(51, 51, 51); &quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/font&gt;&lt;/p&gt;&lt;p style=&quot;line-height: normal; &quot;&gt;&lt;font face=&quot;Dotum, 돋움&quot;&gt;&lt;span style=&quot;color: rgb(0, 0, 0); &quot;&gt;이때 간단히 저 부분을 0x00으로 다시 패치하면 anti-debugging 우회! .. 뭐 이렇게 하는건 의미가 없네요.&lt;/span&gt;&lt;/font&gt;&lt;/p&gt;&lt;p style=&quot;line-height: normal; &quot;&gt;&lt;font face=&quot;Dotum, 돋움&quot;&gt;&lt;span style=&quot;color: rgb(0, 0, 0); &quot;&gt;그러면 저 메모리 값(HideFromDebugger)을 어디서 참고해서 쓰고 있는지 봐보겠습니다.&lt;/span&gt;&lt;/font&gt;&lt;/p&gt;&lt;p style=&quot;color: rgb(0, 0, 0); line-height: normal; &quot;&gt;&lt;font face=&quot;Dotum, 돋움&quot;&gt;&lt;br /&gt;&lt;/font&gt;&lt;/p&gt;&lt;div class=&quot;txc-textbox&quot; style=&quot;border-top-style: solid; border-right-style: solid; border-bottom-style: solid; border-left-style: solid; border-top-width: 1px; border-right-width: 1px; border-bottom-width: 1px; border-left-width: 1px; border-top-color: rgb(203, 203, 203); border-right-color: rgb(203, 203, 203); border-bottom-color: rgb(203, 203, 203); border-left-color: rgb(203, 203, 203); background-color: rgb(255, 255, 255); padding-top: 10px; padding-right: 10px; padding-bottom: 10px; padding-left: 10px; &quot;&gt;&lt;font color=&quot;#000000&quot; face=&quot;Dotum, 돋움&quot;&gt;&lt;span style=&quot;line-height: normal;&quot;&gt;b1d20934 8051a017 nt!DbgkForwardException+0x38
b1d20cf4 804e03f3 nt!KiDispatchException+0x1f4
b1d20d5c 804e0b4c nt!CommonDispatchException+0x4d
b1d20d5c 00401068 nt!KiTrap03+0xae
WARNING: Frame IP not in any known module. Following frames may be wrong.
0012ffc0 7c817067 0x401068


80582109 f6804802000004  test    byte ptr [eax+248h],4
&lt;/span&gt;&lt;/font&gt;&lt;p&gt;&lt;font color=&quot;#000000&quot; face=&quot;Dotum, 돋움&quot;&gt;&lt;span style=&quot;line-height: normal;&quot;&gt;80582110 0f8560b40900    jne     nt!DbgkForwardException+0x3a (8061d576) [br=1]&lt;/span&gt;&lt;/font&gt;&lt;font face=&quot;Dotum, 돋움&quot; style=&quot;color: rgb(0, 0, 0); line-height: normal; &quot;&gt;&lt;br /&gt;&lt;/font&gt;&lt;/p&gt;&lt;/div&gt;&lt;p style=&quot;color: rgb(0, 0, 0); line-height: normal; &quot;&gt;&lt;font face=&quot;Dotum, 돋움&quot;&gt;&lt;br /&gt;&lt;/font&gt;&lt;/p&gt;&lt;p style=&quot;color: rgb(0, 0, 0); line-height: normal; &quot;&gt;&lt;span style=&quot;font-family: Dotum, 돋움; color: rgb(0, 0, 0); &quot;&gt;윗 부분은 해당 멤버변수를 참고하는 위치에서 멈췄을 때의 콜스택이고&amp;nbsp;&lt;/span&gt;&lt;/p&gt;&lt;p style=&quot;color: rgb(0, 0, 0); line-height: normal; &quot;&gt;&lt;font face=&quot;Dotum, 돋움&quot;&gt;&lt;span style=&quot;color: rgb(0, 0, 0); &quot;&gt;아래 부분은 해당 멤버변수를 참고하는 코드입니다.&lt;/span&gt;&lt;/font&gt;&lt;/p&gt;&lt;p style=&quot;color: rgb(0, 0, 0); line-height: normal; &quot;&gt;&lt;font face=&quot;Dotum, 돋움&quot;&gt;&lt;span style=&quot;color: rgb(0, 0, 0); &quot;&gt;( 현재 스레드 부분에 BP를 건 후 멈춘 루틴입니다. 단순 Attach를 했을 땐 여기를 오지 않습니다. )&lt;/span&gt;&lt;/font&gt;&lt;/p&gt;&lt;p style=&quot;color: rgb(0, 0, 0); line-height: normal; &quot;&gt;&lt;font face=&quot;Dotum, 돋움&quot;&gt;&lt;br /&gt;&lt;/font&gt;&lt;/p&gt;&lt;p style=&quot;color: rgb(0, 0, 0); line-height: normal; &quot;&gt;&lt;font face=&quot;Dotum, 돋움&quot;&gt;&lt;span style=&quot;color: rgb(0, 0, 0); &quot;&gt;일단 4와 비교한 후 점프를 할지 말지 결정되는 걸로봐서 저 부분 루틴을 따라가면 차이점이 있겠군요.&lt;/span&gt;&lt;/font&gt;&lt;/p&gt;&lt;p style=&quot;color: rgb(0, 0, 0); line-height: normal; &quot;&gt;&lt;font face=&quot;Dotum, 돋움&quot;&gt;&lt;span style=&quot;color: rgb(0, 0, 0); &quot;&gt;HideFromDebugger 셋 되어 있으면 점프하고 클리어 되어 있으면 점프를 하지 않습니다.&lt;/span&gt;&lt;/font&gt;&lt;/p&gt;&lt;p style=&quot;color: rgb(0, 0, 0); line-height: normal; &quot;&gt;&lt;font face=&quot;Dotum, 돋움&quot;&gt;&lt;br /&gt;&lt;/font&gt;&lt;/p&gt;&lt;p style=&quot;color: rgb(0, 0, 0); line-height: normal; &quot;&gt;&lt;font face=&quot;Dotum, 돋움&quot;&gt;&lt;span style=&quot;color: rgb(0, 0, 0); &quot;&gt;조금만 더 분석해보니...&lt;/span&gt;&lt;/font&gt;&lt;/p&gt;&lt;p&gt;&lt;font color=&quot;#000000&quot; face=&quot;Dotum, 돋움&quot;&gt;&lt;span style=&quot;line-height: normal;&quot;&gt;&lt;span style=&quot;color: rgb(255, 0, 0); &quot;&gt;점프를 하지 않으면 DbgkpSendApiMessage 함수를 수행하는  반면 점프를 하면 &lt;/span&gt;&lt;span style=&quot;color: rgb(255, 0, 0); &quot;&gt;DbgkpSendApiMessage 함수를 실행 못하는 차이점&lt;/span&gt;이 있는것 같군요.&lt;/span&gt;&lt;/font&gt;&lt;/p&gt;&lt;p&gt;&lt;font color=&quot;#000000&quot; face=&quot;Dotum, 돋움&quot;&gt;&lt;span style=&quot;line-height: normal;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/font&gt;&lt;/p&gt;&lt;p&gt;&lt;font color=&quot;#000000&quot; face=&quot;Dotum, 돋움&quot;&gt;&lt;span style=&quot;line-height: normal;&quot;&gt;이로서 이 방법을 만났을 경우 &lt;span style=&quot;color: rgb(255, 0, 0); &quot;&gt;우회할 수 있는 방법으로는 user 상에서 NtSetInformationThread 함수 호출 시 두번째 인자 값을 그냥 0으로 줘버리는 방법&lt;/span&gt;이 있겠군요.&lt;/span&gt;&lt;/font&gt;&lt;/p&gt;&lt;p&gt;&lt;font color=&quot;#000000&quot; face=&quot;Dotum, 돋움&quot;&gt;&lt;span style=&quot;line-height: normal;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/font&gt;&lt;/p&gt;&lt;p&gt;&lt;font color=&quot;#000000&quot; face=&quot;Dotum, 돋움&quot;&gt;&lt;span style=&quot;line-height: normal;&quot;&gt;아함.. C언어 수업가야되요.. ㅠ_ㅠ .. 그냥 급하게 정리를 마칩니다. 잉여잉여 -0-;;&lt;/span&gt;&lt;/font&gt;&lt;/p&gt;&lt;/pre&gt;&lt;p&gt;&lt;/p&gt;&lt;div class=&quot;entry-ccl&quot; style=&quot;clear: both; text-align: right; margin-bottom: 10px&quot;&gt;
	&lt;img id=&quot;ccl-icon-371-0&quot; class=&quot;entry-ccl-by&quot; src=&quot;http://i1.daumcdn.net/cfs.tistory/v/0/static/admin/editor/ccl_black01.png&quot; alt=&quot;저작자 표시&quot;/&gt;
	&lt;!--
	&lt;rdf:RDF xmlns=&quot;http://web.resource.org/cc/&quot; xmlns:dc=&quot;http://purl.org/dc/elements/1.1/&quot; xmlns:rdf=&quot;http://www.w3.org/1999/02/22-rdf-syntax-ns#&quot;&gt;
		&lt;Work rdf:about=&quot;&quot;&gt;
			&lt;license rdf:resource=&quot;http://creativecommons.org/licenses/by-fr/2.0/kr/&quot; /&gt;
		&lt;/Work&gt;
		&lt;License rdf:about=&quot;http://creativecommons.org/licenses/by-fr/&quot;&gt;
			&lt;permits rdf:resource=&quot;http://web.resource.org/cc/Reproduction&quot;/&gt;
			&lt;permits rdf:resource=&quot;http://web.resource.org/cc/Distribution&quot;/&gt;
			&lt;requires rdf:resource=&quot;http://web.resource.org/cc/Notice&quot;/&gt;
			&lt;requires rdf:resource=&quot;http://web.resource.org/cc/Attribution&quot;/&gt;
			&lt;permits rdf:resource=&quot;http://web.resource.org/cc/DerivativeWorks&quot;/&gt;
		&lt;/License&gt;
	&lt;/rdf:RDF&gt;
	--&gt;
&lt;/div&gt;
&lt;div class=&quot;another_category another_category_color_gray&quot;&gt;
&lt;h4&gt;'&lt;a href=&quot;/category/My%20Study&quot;&gt;My Study&lt;/a&gt;&amp;nbsp;&gt;&amp;nbsp;&lt;a href=&quot;/category/My%20Study/Reversing&quot;&gt;Reversing&lt;/a&gt;' 카테고리의 다른 글&lt;/h4&gt;
&lt;table&gt;
&lt;tr&gt;
&lt;th&gt;
&lt;a href=&quot;/372&quot; &gt;백신 Avast의 Anti-attach 우회하기&lt;/a&gt;&amp;nbsp;&amp;nbsp;&lt;span&gt;(8)&lt;/span&gt;
&lt;/th&gt;
&lt;td&gt;
2012/04/19&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;th&gt;
&lt;a href=&quot;/371&quot; &gt;NtSetInformationThread 를 이용한 Anti-Debugging&lt;/a&gt;&amp;nbsp;&amp;nbsp;&lt;span&gt;(0)&lt;/span&gt;
&lt;/th&gt;
&lt;td&gt;
2012/04/17&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;th&gt;
&lt;a href=&quot;/361&quot; &gt;Themida 2.1.2.0 Virtual Machine&lt;/a&gt;&amp;nbsp;&amp;nbsp;&lt;span&gt;(7)&lt;/span&gt;
&lt;/th&gt;
&lt;td&gt;
2012/02/01&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;th&gt;
&lt;a href=&quot;/358&quot; &gt;ARM CPU 공부시작.. ㅠ_ㅠ&lt;/a&gt;&amp;nbsp;&amp;nbsp;&lt;span&gt;(6)&lt;/span&gt;
&lt;/th&gt;
&lt;td&gt;
2012/01/25&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;th&gt;
&lt;a href=&quot;/338&quot; &gt;Code Virtualized&lt;/a&gt;&amp;nbsp;&amp;nbsp;&lt;span&gt;(7)&lt;/span&gt;
&lt;/th&gt;
&lt;td&gt;
2011/06/27&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;th&gt;
&lt;a href=&quot;/309&quot; &gt;ZwSetSystemInformation&lt;/a&gt;&amp;nbsp;&amp;nbsp;&lt;span&gt;(2)&lt;/span&gt;
&lt;/th&gt;
&lt;td&gt;
2011/01/11&lt;/td&gt;
&lt;/tr&gt;
&lt;/table&gt;&lt;/div&gt;</description>
			<category>Reversing</category>
			<category>0x11</category>
			<category>Anti Debuggering</category>
			<category>DbgkpSendApiMessage</category>
			<category>ETHREAD</category>
			<category>HideFromDebugger</category>
			<category>Kernel</category>
			<category>NtSetInformationThread</category>
			<category>ThreadHideFromDebugger</category>
			<category>THREAD_INFORMATION_CLASS</category>
			<category>스레드</category>
			<category>안티디버깅</category>
			<author>Ezbeat</author>
			<guid>http://ezbeat.tistory.com/371</guid>
			<comments>http://ezbeat.tistory.com/371#entry371comment</comments>
			<pubDate>Tue, 17 Apr 2012 13:21:17 +0900</pubDate>
		</item>
		<item>
			<title>Melon Crack은 나쁜 것</title>
			<link>http://ezbeat.tistory.com/370</link>
			<description>&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;p style=&quot;text-align: left; &quot;&gt;&lt;span class=&quot;imageblock&quot; style=&quot;display:inline-block;&quot;&gt;&lt;span id=&quot;s8c8fa9d5097b64ee2a4e1ff782a27db62729&quot;&gt;&lt;/span&gt;
			&lt;script type=&quot;text/javascript&quot;&gt;writeCode2(getEmbedCode('http://cfile25.uf.tistory.com/media/165EF2474F8AF0E615E47E','300','400','s8c8fa9d5097b64ee2a4e1ff782a27db62729','#FFFFFF','', undefined, 'transparent'), 's8c8fa9d5097b64ee2a4e1ff782a27db62729');&lt;/script&gt;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;p&gt;&lt;span style=&quot;color: rgb(51, 51, 51); &quot;&gt;( 의미 없는 동영상 이지만 보실 분은 Ctrl + 마우스 휠 로 크기 조절해서 보세요. )&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style=&quot;color: rgb(51, 51, 51); &quot;&gt;마지막으로 유종의 미를 거두며.. 이제 멜론 크랙 안합니다.&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style=&quot;color: rgb(51, 51, 51); &quot;&gt;아직도 보안해야할 점이 많지만 이번 업데이트에서는 지금껏 업데이트한 것 중에 괜찮게 한 것 같습니다.&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;p&gt;&lt;span style=&quot;color: rgb(51, 51, 51); &quot;&gt;사용자의 id를 얻고 그거에 대한 유저 넘버를 얻고 등등 여러개 값을가지고.. &lt;/span&gt;&lt;span style=&quot;color: rgb(51, 51, 51); &quot;&gt;조합해 인코딩 시켜&amp;nbsp;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style=&quot;color: rgb(51, 51, 51); &quot;&gt;384Byte의 값을 만들어서 서버에 넘기고 서버에서는 또다시 인코딩 된 1452Byte 의 큰 데이터를 넘겨서 어찌고 저찌고 처리..&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style=&quot;color: rgb(51, 51, 51); &quot;&gt;이번엔 로그인 할때부터 노래가 재생될때까지의 모든 루틴을 분석한 것 같군요. -_-;;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style=&quot;color: rgb(51, 51, 51); &quot;&gt;추가적으로.. 유료결제한 사용자 id만 알면 그 사람꺼 쓸수있는듯..흠..&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;p&gt;&lt;span style=&quot;color: rgb(51, 51, 51); &quot;&gt;데일리시큐에 멜론 크랙 관련 기사가 났는데 경각심을 가지고 강력한 보안 메커니즘을 적용했으면 좋겠다.&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style=&quot;color: rgb(51, 51, 51); &quot;&gt;왜냐하면 이젠 멜론 크랙에 시간 투자 할일 없으니깐..&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;p&gt;&lt;span style=&quot;color: rgb(51, 51, 51); &quot;&gt;멜론 유료결제 완료~ ^-^ ipad에서 노래들어야지 ㅠㅠ&lt;/span&gt;&lt;/p&gt;&lt;div class=&quot;entry-ccl&quot; style=&quot;clear: both; text-align: right; margin-bottom: 10px&quot;&gt;
	&lt;img id=&quot;ccl-icon-370-0&quot; class=&quot;entry-ccl-by&quot; src=&quot;http://i1.daumcdn.net/cfs.tistory/v/0/static/admin/editor/ccl_black01.png&quot; alt=&quot;저작자 표시&quot;/&gt;
	&lt;!--
	&lt;rdf:RDF xmlns=&quot;http://web.resource.org/cc/&quot; xmlns:dc=&quot;http://purl.org/dc/elements/1.1/&quot; xmlns:rdf=&quot;http://www.w3.org/1999/02/22-rdf-syntax-ns#&quot;&gt;
		&lt;Work rdf:about=&quot;&quot;&gt;
			&lt;license rdf:resource=&quot;http://creativecommons.org/licenses/by-fr/2.0/kr/&quot; /&gt;
		&lt;/Work&gt;
		&lt;License rdf:about=&quot;http://creativecommons.org/licenses/by-fr/&quot;&gt;
			&lt;permits rdf:resource=&quot;http://web.resource.org/cc/Reproduction&quot;/&gt;
			&lt;permits rdf:resource=&quot;http://web.resource.org/cc/Distribution&quot;/&gt;
			&lt;requires rdf:resource=&quot;http://web.resource.org/cc/Notice&quot;/&gt;
			&lt;requires rdf:resource=&quot;http://web.resource.org/cc/Attribution&quot;/&gt;
			&lt;permits rdf:resource=&quot;http://web.resource.org/cc/DerivativeWorks&quot;/&gt;
		&lt;/License&gt;
	&lt;/rdf:RDF&gt;
	--&gt;
&lt;/div&gt;
&lt;div class=&quot;another_category another_category_color_gray&quot;&gt;
&lt;h4&gt;'&lt;a href=&quot;/category/My%20Study&quot;&gt;My Study&lt;/a&gt;&amp;nbsp;&gt;&amp;nbsp;&lt;a href=&quot;/category/My%20Study/etc&quot;&gt;etc&lt;/a&gt;' 카테고리의 다른 글&lt;/h4&gt;
&lt;table&gt;
&lt;tr&gt;
&lt;th&gt;
&lt;a href=&quot;/370&quot; &gt;Melon Crack은 나쁜 것&lt;/a&gt;&amp;nbsp;&amp;nbsp;&lt;span&gt;(5)&lt;/span&gt;
&lt;/th&gt;
&lt;td&gt;
2012/04/16&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;th&gt;
&lt;a href=&quot;/362&quot; &gt;TIOBE 프로그래밍 인기 순위&lt;/a&gt;&amp;nbsp;&amp;nbsp;&lt;span&gt;(2)&lt;/span&gt;
&lt;/th&gt;
&lt;td&gt;
2012/02/02&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;th&gt;
&lt;a href=&quot;/360&quot; &gt;ipad 사용자 권한&lt;/a&gt;&amp;nbsp;&amp;nbsp;&lt;span&gt;(0)&lt;/span&gt;
&lt;/th&gt;
&lt;td&gt;
2012/01/27&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;th&gt;
&lt;a href=&quot;/342&quot; &gt;바로가기&lt;/a&gt;&amp;nbsp;&amp;nbsp;&lt;span&gt;(2)&lt;/span&gt;
&lt;/th&gt;
&lt;td&gt;
2011/07/31&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;th&gt;
&lt;a href=&quot;/329&quot; &gt;PC로 카톡 쓰기~&lt;/a&gt;&amp;nbsp;&amp;nbsp;&lt;span&gt;(8)&lt;/span&gt;
&lt;/th&gt;
&lt;td&gt;
2011/05/30&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;th&gt;
&lt;a href=&quot;/328&quot; &gt;UHA 확장자&lt;/a&gt;&amp;nbsp;&amp;nbsp;&lt;span&gt;(0)&lt;/span&gt;
&lt;/th&gt;
&lt;td&gt;
2011/05/27&lt;/td&gt;
&lt;/tr&gt;
&lt;/table&gt;&lt;/div&gt;</description>
			<category>etc</category>
			<category>4월 16일</category>
			<category>crack</category>
			<category>Melon</category>
			<category>결제</category>
			<category>멜론</category>
			<category>무료</category>
			<category>유료</category>
			<category>크랙</category>
			<author>Ezbeat</author>
			<guid>http://ezbeat.tistory.com/370</guid>
			<comments>http://ezbeat.tistory.com/370#entry370comment</comments>
			<pubDate>Mon, 16 Apr 2012 01:07:23 +0900</pubDate>
		</item>
		<item>
			<title>Calling Convention Process for AMD 64 Bit</title>
			<link>http://ezbeat.tistory.com/369</link>
			<description>&lt;p&gt;&lt;span style=&quot;color: rgb(51, 51, 51); &quot;&gt;머리가 멍청해 봐도봐도 까먹는 까마귀 같은 저... -_-;;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;p&gt;&lt;span style=&quot;color: rgb(51, 51, 51); &quot;&gt;그냥 가장 흔한 인자 전달과 리턴 값 처리만 찾아서 정리했습니다.&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;a href=&quot;http://www.osronline.com/ddkx/kmarch/64bitamd_7qqv.htm&quot; target=&quot;_blank&quot; class=&quot;tx-link&quot;&gt;http://www.osronline.com/ddkx/kmarch/64bitamd_7qqv.htm&lt;/a&gt;&lt;br /&gt;&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;p&gt;&lt;span style=&quot;color: rgb(51, 51, 51); &quot;&gt;&lt;b&gt;&lt;span style=&quot;color: rgb(255, 0, 0); &quot;&gt;매개변수 전달&lt;/span&gt;&lt;/b&gt;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style=&quot;color: rgb(51, 51, 51); &quot;&gt;&lt;b&gt;파라미터 타입&lt;/b&gt;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;table class=&quot;txc-table&quot; width=&quot;647&quot; cellspacing=&quot;0&quot; cellpadding=&quot;0&quot; border=&quot;0&quot; style=&quot;border:none;border-collapse:collapse;;font-family:돋움;font-size:12px&quot;&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td style=&quot;height: 24px; border-bottom-width: 1px; border-bottom-style: solid; border-bottom-color: rgb(204, 204, 204); border-right-width: 1px; border-right-style: solid; border-right-color: rgb(204, 204, 204); border-top-width: 1px; border-top-style: solid; border-top-color: rgb(204, 204, 204); border-left-width: 1px; border-left-style: solid; border-left-color: rgb(204, 204, 204); width: 251px; &quot;&gt;&lt;p&gt;&lt;span style=&quot;color: rgb(51, 51, 51); &quot;&gt;&amp;nbsp;Floating Point&lt;/span&gt;&lt;/p&gt;&lt;/td&gt;&lt;td style=&quot;height: 24px; border-bottom-width: 1px; border-bottom-style: solid; border-bottom-color: rgb(204, 204, 204); border-right-width: 1px; border-right-style: solid; border-right-color: rgb(204, 204, 204); border-top-width: 1px; border-top-style: solid; border-top-color: rgb(204, 204, 204); width: 395px; &quot;&gt;&lt;p&gt;&lt;span style=&quot;color: rgb(51, 51, 51); &quot;&gt;&amp;nbsp;처음부터 4개의 파라미터 - XMM0 ~ XMM3. 그 이후로 스택 사용!&lt;/span&gt;&lt;/p&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;&lt;td style=&quot;height: 24px; border-bottom-width: 1px; border-bottom-style: solid; border-bottom-color: rgb(204, 204, 204); border-right-width: 1px; border-right-style: solid; border-right-color: rgb(204, 204, 204); border-left-width: 1px; border-left-style: solid; border-left-color: rgb(204, 204, 204); width: 251px; &quot;&gt;&lt;p&gt;&lt;span style=&quot;color: rgb(51, 51, 51); &quot;&gt;&amp;nbsp;Integer&lt;/span&gt;&lt;/p&gt;&lt;/td&gt;
&lt;td style=&quot;height: 24px; border-bottom-width: 1px; border-bottom-style: solid; border-bottom-color: rgb(204, 204, 204); border-right-width: 1px; border-right-style: solid; border-right-color: rgb(204, 204, 204); width: 395px; &quot;&gt;&lt;p&gt;&lt;span style=&quot;color: rgb(51, 51, 51); &quot;&gt;&amp;nbsp;처음부터 4개의 파라미터 - RCX, RDX, R8, R9. 그 이후로 스택 사용!&lt;/span&gt;&lt;/p&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;&lt;td style=&quot;border-bottom-width: 1px; border-bottom-style: solid; border-bottom-color: rgb(204, 204, 204); border-right-width: 1px; border-right-style: solid; border-right-color: rgb(204, 204, 204); border-left-width: 1px; border-left-style: solid; border-left-color: rgb(204, 204, 204); height: 24px; width: 251px; &quot;&gt;&lt;p&gt;&lt;span style=&quot;color: rgb(51, 51, 51); &quot;&gt;&amp;nbsp;Aggregates(8,16,32, or 64 bits) and __m64&lt;/span&gt;&lt;/p&gt;&lt;/td&gt;
&lt;td style=&quot;border-bottom-width: 1px; border-bottom-style: solid; border-bottom-color: rgb(204, 204, 204); border-right-width: 1px; border-right-style: solid; border-right-color: rgb(204, 204, 204); height: 24px; width: 395px; &quot;&gt;&lt;p&gt;&lt;span style=&quot;color: rgb(51, 51, 51); &quot;&gt;&amp;nbsp;처음부터 4개의 파라미터 - RCX, RDX, R8, R9. 그 이후로 스택 사용!&lt;/span&gt;&lt;/p&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;&lt;td style=&quot;height: 24px; border-bottom-width: 1px; border-bottom-style: solid; border-bottom-color: rgb(204, 204, 204); border-right-width: 1px; border-right-style: solid; border-right-color: rgb(204, 204, 204); border-left-width: 1px; border-left-style: solid; border-left-color: rgb(204, 204, 204); width: 251px; &quot;&gt;&lt;span style=&quot;color: rgb(51, 51, 51); &quot;&gt;&amp;nbsp;Aggregates(other)&lt;/span&gt;&lt;/td&gt;
&lt;td style=&quot;height: 24px; border-bottom-width: 1px; border-bottom-style: solid; border-bottom-color: rgb(204, 204, 204); border-right-width: 1px; border-right-style: solid; border-right-color: rgb(204, 204, 204); width: 395px; &quot;&gt;&lt;p&gt;&lt;span style=&quot;color: rgb(51, 51, 51); &quot;&gt;&amp;nbsp;포인터.&amp;nbsp;처음부터 4개의 파라미터 - RCX, RDX, R8, R9. 그 이후로 스택 사용!&lt;/span&gt;&lt;/p&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;&lt;td style=&quot;height: 24px; border-bottom-width: 1px; border-bottom-style: solid; border-bottom-color: rgb(204, 204, 204); border-right-width: 1px; border-right-style: solid; border-right-color: rgb(204, 204, 204); border-left-width: 1px; border-left-style: solid; border-left-color: rgb(204, 204, 204); width: 251px; &quot;&gt;&lt;span style=&quot;color: rgb(51, 51, 51); &quot;&gt;&amp;nbsp;__m128&lt;/span&gt;&lt;/td&gt;
&lt;td style=&quot;height: 24px; border-bottom-width: 1px; border-bottom-style: solid; border-bottom-color: rgb(204, 204, 204); border-right-width: 1px; border-right-style: solid; border-right-color: rgb(204, 204, 204); width: 395px; &quot;&gt;&lt;span style=&quot;color: rgb(51, 51, 51); &quot;&gt;&amp;nbsp;포인터.&amp;nbsp;&lt;/span&gt;&lt;span style=&quot;color: rgb(51, 51, 51); &quot;&gt;처음부터 4개의 파라미터 - RCX, RDX, R8, R9. 그 이후로 스택 사용!&lt;/span&gt;&lt;span style=&quot;color: rgb(51, 51, 51); &quot;&gt;&amp;nbsp;&lt;/span&gt;&lt;span style=&quot;color: rgb(51, 51, 51); &quot;&gt;&amp;nbsp;&lt;/span&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;&lt;/table&gt;&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;p&gt;&lt;span style=&quot;color: rgb(51, 51, 51); &quot;&gt;&lt;b&gt;예제) 1 - 모두 정수&lt;/b&gt;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style=&quot;color: rgb(51, 51, 51); &quot;&gt;func1(&lt;span style=&quot;color: rgb(0, 85, 255); &quot;&gt;int&lt;/span&gt; a, &lt;span style=&quot;color: rgb(0, 85, 255); &quot;&gt;int&lt;/span&gt; b, &lt;span style=&quot;color: rgb(0, 85, 255); &quot;&gt;int&lt;/span&gt; c, &lt;span style=&quot;color: rgb(0, 85, 255); &quot;&gt;int&lt;/span&gt; d, &lt;span style=&quot;color: rgb(0, 85, 255); &quot;&gt;int&lt;/span&gt; e);&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style=&quot;color: rgb(51, 51, 51); &quot;&gt;a =&amp;gt; RCX, b =&amp;gt; RDX, c =&amp;gt; R8, d =&amp;gt; R9, e =&amp;gt; 스택에 push..&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;p&gt;&lt;b&gt;&lt;span style=&quot;color: rgb(51, 51, 51); &quot;&gt;예제) 2&lt;/span&gt;&lt;span style=&quot;color: rgb(51, 51, 51); &quot;&gt;&amp;nbsp;- 모두 실수&lt;/span&gt;&lt;/b&gt;&lt;/p&gt;&lt;p&gt;&lt;/p&gt;&lt;p&gt;&lt;span style=&quot;color: rgb(51, 51, 51); &quot;&gt;func2&lt;/span&gt;&lt;span style=&quot;color: rgb(51, 51, 51); &quot;&gt;(&lt;span style=&quot;color: rgb(0, 85, 255); &quot;&gt;float&lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;color: rgb(51, 51, 51); &quot;&gt;&amp;nbsp;a, &lt;span style=&quot;color: rgb(0, 85, 255); &quot;&gt;double&lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;color: rgb(51, 51, 51); &quot;&gt;&amp;nbsp;b,&lt;span style=&quot;color: rgb(0, 85, 255); &quot;&gt; float&lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;color: rgb(51, 51, 51); &quot;&gt;&amp;nbsp;c, &lt;span style=&quot;color: rgb(0, 85, 255); &quot;&gt;double&lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;color: rgb(51, 51, 51); &quot;&gt;&lt;span style=&quot;color: rgb(0, 85, 255); &quot;&gt;&amp;nbsp;&lt;/span&gt;d, &lt;span style=&quot;color: rgb(0, 85, 255); &quot;&gt;float&lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;color: rgb(51, 51, 51); &quot;&gt;&lt;span style=&quot;color: rgb(0, 85, 255); &quot;&gt;&amp;nbsp;&lt;/span&gt;e);&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style=&quot;color: rgb(51, 51, 51); &quot;&gt;a =&amp;gt; XMM0&lt;/span&gt;&lt;span style=&quot;color: rgb(51, 51, 51); &quot;&gt;, b =&amp;gt;&amp;nbsp;&lt;/span&gt;&lt;span style=&quot;color: rgb(51, 51, 51); &quot;&gt;
&lt;/span&gt;&lt;span style=&quot;color: rgb(51, 51, 51); &quot;&gt;XMM1&lt;/span&gt;&lt;span style=&quot;color: rgb(51, 51, 51); &quot;&gt;, c =&amp;gt;&amp;nbsp;&lt;/span&gt;&lt;span style=&quot;color: rgb(51, 51, 51); &quot;&gt;
&lt;/span&gt;&lt;span style=&quot;color: rgb(51, 51, 51); &quot;&gt;XMM2&lt;/span&gt;&lt;span style=&quot;color: rgb(51, 51, 51); &quot;&gt;, d =&amp;gt;&amp;nbsp;&lt;/span&gt;&lt;span style=&quot;color: rgb(51, 51, 51); &quot;&gt;
&lt;/span&gt;&lt;span style=&quot;color: rgb(51, 51, 51); &quot;&gt;XMM3,&lt;/span&gt;&lt;span style=&quot;color: rgb(51, 51, 51); &quot;&gt;&amp;nbsp;e =&amp;gt; 스택에 push..&lt;/span&gt;&lt;/p&gt;&lt;br class=&quot;Apple-interchange-newline&quot;&gt;&lt;p&gt;&lt;/p&gt;&lt;p&gt;&lt;b&gt;&lt;span style=&quot;color: rgb(51, 51, 51); &quot;&gt;예제) 3&lt;/span&gt;&lt;span style=&quot;color: rgb(51, 51, 51); &quot;&gt;&amp;nbsp;- ints와 floats 섞음..&lt;/span&gt;&lt;/b&gt;&lt;/p&gt;&lt;p&gt;&lt;span style=&quot;color: rgb(51, 51, 51); &quot;&gt;func3&lt;/span&gt;&lt;span style=&quot;color: rgb(51, 51, 51); &quot;&gt;(&lt;span style=&quot;color: rgb(0, 85, 255); &quot;&gt;int&lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;color: rgb(51, 51, 51); &quot;&gt;&lt;span style=&quot;color: rgb(0, 85, 255); &quot;&gt;&amp;nbsp;&lt;/span&gt;a, &lt;span style=&quot;color: rgb(0, 85, 255); &quot;&gt;double&lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;color: rgb(51, 51, 51); &quot;&gt;&lt;span style=&quot;color: rgb(0, 85, 255); &quot;&gt;&amp;nbsp;&lt;/span&gt;b, &lt;span style=&quot;color: rgb(0, 85, 255); &quot;&gt;int&lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;color: rgb(51, 51, 51); &quot;&gt;&lt;span style=&quot;color: rgb(0, 85, 255); &quot;&gt;&amp;nbsp;&lt;/span&gt;c, &lt;span style=&quot;color: rgb(0, 85, 255); &quot;&gt;float&lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;color: rgb(51, 51, 51); &quot;&gt;&lt;span style=&quot;color: rgb(0, 85, 255); &quot;&gt;&amp;nbsp;&lt;/span&gt;d&lt;/span&gt;&lt;span style=&quot;color: rgb(51, 51, 51); &quot;&gt;);&lt;/span&gt;&lt;span style=&quot;color: rgb(51, 51, 51); &quot;&gt;
&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style=&quot;color: rgb(51, 51, 51); &quot;&gt;a =&amp;gt; RCX, b =&amp;gt; XMM1, c =&amp;gt; R8, d =&amp;gt; XMM3&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;p&gt;&lt;b&gt;&lt;span style=&quot;color: rgb(51, 51, 51); &quot;&gt;예제) 4&lt;/span&gt;&lt;span style=&quot;color: rgb(51, 51, 51); &quot;&gt;&amp;nbsp;- __m64, __m128, 그리고 aggregates&lt;/span&gt;&lt;/b&gt;&lt;/p&gt;&lt;p&gt;&lt;span style=&quot;color: rgb(51, 51, 51); &quot;&gt;func4(&lt;span style=&quot;color: rgb(0, 85, 255); &quot;&gt;__m64 &lt;/span&gt;a, &lt;span style=&quot;color: rgb(0, 85, 255); &quot;&gt;_m128 &lt;/span&gt;b, &lt;span style=&quot;color: rgb(0, 85, 255); &quot;&gt;struct &lt;/span&gt;c, &lt;span style=&quot;color: rgb(0, 85, 255); &quot;&gt;float &lt;/span&gt;d);&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style=&quot;color: rgb(51, 51, 51); &quot;&gt;a =&amp;gt; RCX, b =&amp;gt; RDX, c =&amp;gt; R8, d =&amp;gt; XMM3&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;p&gt;&lt;span style=&quot;color: rgb(51, 51, 51); &quot;&gt;&lt;b&gt;&lt;span style=&quot;color: rgb(255, 0, 0); &quot;&gt;리턴 값&lt;/span&gt;&lt;/b&gt;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style=&quot;color: rgb(51, 51, 51); &quot;&gt;64 bits(__m64 타입 포함)&lt;/span&gt;&lt;span style=&quot;color: rgb(51, 51, 51); &quot;&gt;&amp;nbsp;값이 들어갈 수 있는 대부분의 리턴 값은 &lt;b&gt;RAX&lt;/b&gt; 레지스터를 통해 반환되어 진다. 하지만 __m128, __m128i, __m128d, floats, double 같은 타입은 &lt;b&gt;XMM0&lt;/b&gt; 레지스터를 통해 리턴되어 진다. 만약 리턴 값이 64 bits안에 속하지 않는다면 호출자는 첫번째 인자를 사용해 리턴 값을 받은 포인터를 할당해 넘겨줘야한다.&lt;/span&gt;&lt;/p&gt;&lt;div class=&quot;entry-ccl&quot; style=&quot;clear: both; text-align: right; margin-bottom: 10px&quot;&gt;
	&lt;img id=&quot;ccl-icon-369-0&quot; class=&quot;entry-ccl-by&quot; src=&quot;http://i1.daumcdn.net/cfs.tistory/v/0/static/admin/editor/ccl_black01.png&quot; alt=&quot;저작자 표시&quot;/&gt;
	&lt;!--
	&lt;rdf:RDF xmlns=&quot;http://web.resource.org/cc/&quot; xmlns:dc=&quot;http://purl.org/dc/elements/1.1/&quot; xmlns:rdf=&quot;http://www.w3.org/1999/02/22-rdf-syntax-ns#&quot;&gt;
		&lt;Work rdf:about=&quot;&quot;&gt;
			&lt;license rdf:resource=&quot;http://creativecommons.org/licenses/by-fr/2.0/kr/&quot; /&gt;
		&lt;/Work&gt;
		&lt;License rdf:about=&quot;http://creativecommons.org/licenses/by-fr/&quot;&gt;
			&lt;permits rdf:resource=&quot;http://web.resource.org/cc/Reproduction&quot;/&gt;
			&lt;permits rdf:resource=&quot;http://web.resource.org/cc/Distribution&quot;/&gt;
			&lt;requires rdf:resource=&quot;http://web.resource.org/cc/Notice&quot;/&gt;
			&lt;requires rdf:resource=&quot;http://web.resource.org/cc/Attribution&quot;/&gt;
			&lt;permits rdf:resource=&quot;http://web.resource.org/cc/DerivativeWorks&quot;/&gt;
		&lt;/License&gt;
	&lt;/rdf:RDF&gt;
	--&gt;
&lt;/div&gt;
&lt;div class=&quot;another_category another_category_color_gray&quot;&gt;
&lt;h4&gt;'&lt;a href=&quot;/category/My%20Study&quot;&gt;My Study&lt;/a&gt;&amp;nbsp;&gt;&amp;nbsp;&lt;a href=&quot;/category/My%20Study/Programming%26Theory&quot;&gt;Programming&amp;amp;Theory&lt;/a&gt;' 카테고리의 다른 글&lt;/h4&gt;
&lt;table&gt;
&lt;tr&gt;
&lt;th&gt;
&lt;a href=&quot;/374&quot; &gt;ELF 파일의 PLT, GOT&lt;/a&gt;&amp;nbsp;&amp;nbsp;&lt;span&gt;(2)&lt;/span&gt;
&lt;/th&gt;
&lt;td&gt;
2012/04/26&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;th&gt;
&lt;a href=&quot;/369&quot; &gt;Calling Convention Process for AMD 64 Bit&lt;/a&gt;&amp;nbsp;&amp;nbsp;&lt;span&gt;(4)&lt;/span&gt;
&lt;/th&gt;
&lt;td&gt;
2012/04/02&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;th&gt;
&lt;a href=&quot;/364&quot; &gt;Windows rand() 랜덤 비율&lt;/a&gt;&amp;nbsp;&amp;nbsp;&lt;span&gt;(0)&lt;/span&gt;
&lt;/th&gt;
&lt;td&gt;
2012/02/14&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;th&gt;
&lt;a href=&quot;/359&quot; &gt;ARM 명령어 공부&lt;/a&gt;&amp;nbsp;&amp;nbsp;&lt;span&gt;(2)&lt;/span&gt;
&lt;/th&gt;
&lt;td&gt;
2012/01/27&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;th&gt;
&lt;a href=&quot;/357&quot; &gt;BlockInput Function&lt;/a&gt;&amp;nbsp;&amp;nbsp;&lt;span&gt;(3)&lt;/span&gt;
&lt;/th&gt;
&lt;td&gt;
2012/01/20&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;th&gt;
&lt;a href=&quot;/354&quot; &gt;My BSOD&lt;/a&gt;&amp;nbsp;&amp;nbsp;&lt;span&gt;(2)&lt;/span&gt;
&lt;/th&gt;
&lt;td&gt;
2012/01/08&lt;/td&gt;
&lt;/tr&gt;
&lt;/table&gt;&lt;/div&gt;</description>
			<category>Programming&amp;Theory</category>
			<category>AMD64</category>
			<category>Argument</category>
			<category>Calling Convention</category>
			<category>float</category>
			<category>iNT</category>
			<category>R8</category>
			<category>r9</category>
			<category>rax</category>
			<category>rcx</category>
			<category>rdx</category>
			<category>register</category>
			<category>Return</category>
			<category>Value</category>
			<category>xmm</category>
			<category>xmm0</category>
			<category>__m128</category>
			<category>__m64</category>
			<author>Ezbeat</author>
			<guid>http://ezbeat.tistory.com/369</guid>
			<comments>http://ezbeat.tistory.com/369#entry369comment</comments>
			<pubDate>Mon, 02 Apr 2012 18:09:16 +0900</pubDate>
		</item>
		<item>
			<title>notepad++ 멀티로더</title>
			<link>http://ezbeat.tistory.com/368</link>
			<description>&lt;p&gt;&lt;span style=&quot;color: rgb(51, 51, 51); &quot;&gt;메모장 대신에 참 유용하게 사용할 수 있는 notepad++&amp;nbsp;&lt;/span&gt;&lt;/p&gt;&lt;p style=&quot;text-align: left; clear: none; float: none; &quot;&gt;&lt;span class=&quot;imageblock&quot; style=&quot;display:inline-block;width:427px;&quot;&gt;&lt;a href=&quot;http://cfile23.uf.tistory.com/original/20420D4A4F73BB8A0AD435&quot; rel=&quot;lightbox&quot; target=&quot;_blank&quot;&gt;&lt;img src=&quot;http://cfile23.uf.tistory.com/image/20420D4A4F73BB8A0AD435&quot; filemime=&quot;image/jpeg&quot; filename=&quot;사용자 지정 1.jpg&quot; height=&quot;410&quot; width=&quot;427&quot;/&gt;&lt;/a&gt;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style=&quot;color: rgb(51, 51, 51); &quot;&gt;타 메모장 프로그램과 마찬가지로 탭 기능을 지원하며 하나의 프로그램에서 여러개의 파일을 볼 수가 있습니다.&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style=&quot;color: rgb(51, 51, 51); &quot;&gt;하지만 일반 메모장과 같이 2~3개 정도 켜놓고 보고싶은 경우도 있는데요.. 멀티로더가 안되게끔 만들어져 있어서.. 그게 아쉽네요. 옵션으로라도 제공을 하면 좋으려만.. 그래서 그냥 조금 수정시켜 만들어놨습니다. 필요하신분은 쓰세요.&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;p&gt;&lt;span style=&quot;color: rgb(51, 51, 51); &quot;&gt;안에서 단순히 뮤텍스를 사용한 멀티로더 방지를 하고 있어서 1Byte만.. 수정시키면 됩니다.-0-;; 1분짜리..&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style=&quot;color: rgb(51, 51, 51); &quot;&gt;( 올디키기 귀찮으신분은 그냥 제꺼 써주세요 ㅋㅋ )&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style=&quot;color: rgb(51, 51, 51); &quot;&gt;아무튼 필요하신분은 쓰세요.&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;p style=&quot;text-align: left; &quot;&gt;&lt;span class=&quot;imageblock&quot; style=&quot;display:inline-block;&quot;&gt;&lt;a href=&quot;http://ezbeat.tistory.com/attachment/cfile4.uf@1711C53F4F73BC7F14DD1F.exe&quot;&gt;&lt;img src=&quot;http://i1.daumcdn.net/cfs.tistory/v/0/blog/image/extension/exe.gif&quot; alt=&quot;&quot; style=&quot;vertical-align: middle;&quot; /&gt; notepad  .exe&lt;/a&gt;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style=&quot;color: rgb(51, 51, 51); &quot;&gt;다운받으면.. notepad__.exe로 되는거 같은데.. notepad++.exe로 파일명 바꾸고&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style=&quot;color: rgb(51, 51, 51); &quot;&gt;notepad++.exe가 있는 위치에 덮어씌우면 끝.&lt;/span&gt;&lt;br /&gt;&lt;/p&gt;&lt;p&gt;&lt;span style=&quot;color: rgb(51, 51, 51); &quot;&gt;일단 버전은 위 그림에 나와있는 버전에서만 수정했습니다. 다른 버전은 안될가능성도 있겠지요. 위치가 바뀌었으면. -_-;&lt;/span&gt;&lt;/p&gt;&lt;div class=&quot;entry-ccl&quot; style=&quot;clear: both; text-align: right; margin-bottom: 10px&quot;&gt;
	&lt;img id=&quot;ccl-icon-368-0&quot; class=&quot;entry-ccl-by&quot; src=&quot;http://i1.daumcdn.net/cfs.tistory/v/0/static/admin/editor/ccl_black01.png&quot; alt=&quot;저작자 표시&quot;/&gt;
	&lt;!--
	&lt;rdf:RDF xmlns=&quot;http://web.resource.org/cc/&quot; xmlns:dc=&quot;http://purl.org/dc/elements/1.1/&quot; xmlns:rdf=&quot;http://www.w3.org/1999/02/22-rdf-syntax-ns#&quot;&gt;
		&lt;Work rdf:about=&quot;&quot;&gt;
			&lt;license rdf:resource=&quot;http://creativecommons.org/licenses/by-fr/2.0/kr/&quot; /&gt;
		&lt;/Work&gt;
		&lt;License rdf:about=&quot;http://creativecommons.org/licenses/by-fr/&quot;&gt;
			&lt;permits rdf:resource=&quot;http://web.resource.org/cc/Reproduction&quot;/&gt;
			&lt;permits rdf:resource=&quot;http://web.resource.org/cc/Distribution&quot;/&gt;
			&lt;requires rdf:resource=&quot;http://web.resource.org/cc/Notice&quot;/&gt;
			&lt;requires rdf:resource=&quot;http://web.resource.org/cc/Attribution&quot;/&gt;
			&lt;permits rdf:resource=&quot;http://web.resource.org/cc/DerivativeWorks&quot;/&gt;
		&lt;/License&gt;
	&lt;/rdf:RDF&gt;
	--&gt;
&lt;/div&gt;
&lt;div class=&quot;another_category another_category_color_gray&quot;&gt;
&lt;h4&gt;'&lt;a href=&quot;/category/My%20Study&quot;&gt;My Study&lt;/a&gt;&amp;nbsp;&gt;&amp;nbsp;&lt;a href=&quot;/category/My%20Study/Program&quot;&gt;Program&lt;/a&gt;' 카테고리의 다른 글&lt;/h4&gt;
&lt;table&gt;
&lt;tr&gt;
&lt;th&gt;
&lt;a href=&quot;/368&quot; &gt;notepad++ 멀티로더&lt;/a&gt;&amp;nbsp;&amp;nbsp;&lt;span&gt;(0)&lt;/span&gt;
&lt;/th&gt;
&lt;td&gt;
2012/03/29&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;th&gt;
&lt;a href=&quot;/367&quot; &gt;Windows8-ConsumerPreview-32bit-English&lt;/a&gt;&amp;nbsp;&amp;nbsp;&lt;span&gt;(0)&lt;/span&gt;
&lt;/th&gt;
&lt;td&gt;
2012/03/03&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;th&gt;
&lt;a href=&quot;/366&quot; &gt;GOMENCODER(곰인코더) Crack - 2012/02/28&lt;/a&gt;&amp;nbsp;&amp;nbsp;&lt;span&gt;(4)&lt;/span&gt;
&lt;/th&gt;
&lt;td&gt;
2012/03/01&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;th&gt;
&lt;a href=&quot;/363&quot; &gt;Windows Message Logging Tool&lt;/a&gt;&amp;nbsp;&amp;nbsp;&lt;span&gt;(0)&lt;/span&gt;
&lt;/th&gt;
&lt;td&gt;
2012/02/13&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;th&gt;
&lt;a href=&quot;/340&quot; &gt;.text section disasm&lt;/a&gt;&amp;nbsp;&amp;nbsp;&lt;span&gt;(0)&lt;/span&gt;
&lt;/th&gt;
&lt;td&gt;
2011/07/26&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;th&gt;
&lt;a href=&quot;/318&quot; &gt;ASCII Generator&lt;/a&gt;&amp;nbsp;&amp;nbsp;&lt;span&gt;(2)&lt;/span&gt;
&lt;/th&gt;
&lt;td&gt;
2011/04/19&lt;/td&gt;
&lt;/tr&gt;
&lt;/table&gt;&lt;/div&gt;</description>
			<category>Program</category>
			<category>2개</category>
			<category>multi</category>
			<category>Notepad++</category>
			<category>v5.9.8</category>
			<category>멀티로더</category>
			<author>Ezbeat</author>
			<guid>http://ezbeat.tistory.com/368</guid>
			<comments>http://ezbeat.tistory.com/368#entry368comment</comments>
			<pubDate>Thu, 29 Mar 2012 10:36:55 +0900</pubDate>
		</item>
		<item>
			<title>Windows8-ConsumerPreview-32bit-English</title>
			<link>http://ezbeat.tistory.com/367</link>
			<description>&lt;font color=&quot;#000000&quot;&gt;주말 저녁에 심심해서 설치해봤습니다 ..ㅎ&amp;nbsp;&lt;br /&gt;
설치는 그냥 하면 되구요. ㅋ 켰을 때 화면을 찍어보았습니다.&lt;br /&gt;
&lt;br /&gt;
&lt;embed width=&quot;402&quot; height=&quot;324&quot; src=&quot;/attachment/cfile27.uf@201D5D414F51E9AB2EEE89.swf&quot; quality=&quot;high&quot; allowScriptAccess=&quot;always&quot; type=&quot;application/x-shockwave-flash&quot; pluginspage=&quot;http://www.macromedia.com/go/getflashplayer&quot;/&gt;&lt;br /&gt;
swf라 10MB밖에 안올라가서 자르고 잘랐네요. 그냥 이렇게 생겨먹었슴다.&lt;br /&gt;
&lt;br /&gt;
구제척으로 뭐가 달라졌는지는 천천히 봐봐야겠네요.&lt;br /&gt;
에고 옆에 Instant Demo가 뜨네요 ㅋㅋ 정품 가지고 싶어요 ㅠㅠ!&lt;/font&gt;&lt;div class=&quot;entry-ccl&quot; style=&quot;clear: both; text-align: right; margin-bottom: 10px&quot;&gt;
	&lt;img id=&quot;ccl-icon-367-0&quot; class=&quot;entry-ccl-by&quot; src=&quot;http://i1.daumcdn.net/cfs.tistory/v/0/static/admin/editor/ccl_black01.png&quot; alt=&quot;저작자 표시&quot;/&gt;
	&lt;!--
	&lt;rdf:RDF xmlns=&quot;http://web.resource.org/cc/&quot; xmlns:dc=&quot;http://purl.org/dc/elements/1.1/&quot; xmlns:rdf=&quot;http://www.w3.org/1999/02/22-rdf-syntax-ns#&quot;&gt;
		&lt;Work rdf:about=&quot;&quot;&gt;
			&lt;license rdf:resource=&quot;http://creativecommons.org/licenses/by-fr/2.0/kr/&quot; /&gt;
		&lt;/Work&gt;
		&lt;License rdf:about=&quot;http://creativecommons.org/licenses/by-fr/&quot;&gt;
			&lt;permits rdf:resource=&quot;http://web.resource.org/cc/Reproduction&quot;/&gt;
			&lt;permits rdf:resource=&quot;http://web.resource.org/cc/Distribution&quot;/&gt;
			&lt;requires rdf:resource=&quot;http://web.resource.org/cc/Notice&quot;/&gt;
			&lt;requires rdf:resource=&quot;http://web.resource.org/cc/Attribution&quot;/&gt;
			&lt;permits rdf:resource=&quot;http://web.resource.org/cc/DerivativeWorks&quot;/&gt;
		&lt;/License&gt;
	&lt;/rdf:RDF&gt;
	--&gt;
&lt;/div&gt;
&lt;div class=&quot;another_category another_category_color_gray&quot;&gt;
&lt;h4&gt;'&lt;a href=&quot;/category/My%20Study&quot;&gt;My Study&lt;/a&gt;&amp;nbsp;&gt;&amp;nbsp;&lt;a href=&quot;/category/My%20Study/Program&quot;&gt;Program&lt;/a&gt;' 카테고리의 다른 글&lt;/h4&gt;
&lt;table&gt;
&lt;tr&gt;
&lt;th&gt;
&lt;a href=&quot;/368&quot; &gt;notepad++ 멀티로더&lt;/a&gt;&amp;nbsp;&amp;nbsp;&lt;span&gt;(0)&lt;/span&gt;
&lt;/th&gt;
&lt;td&gt;
2012/03/29&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;th&gt;
&lt;a href=&quot;/367&quot; &gt;Windows8-ConsumerPreview-32bit-English&lt;/a&gt;&amp;nbsp;&amp;nbsp;&lt;span&gt;(0)&lt;/span&gt;
&lt;/th&gt;
&lt;td&gt;
2012/03/03&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;th&gt;
&lt;a href=&quot;/366&quot; &gt;GOMENCODER(곰인코더) Crack - 2012/02/28&lt;/a&gt;&amp;nbsp;&amp;nbsp;&lt;span&gt;(4)&lt;/span&gt;
&lt;/th&gt;
&lt;td&gt;
2012/03/01&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;th&gt;
&lt;a href=&quot;/363&quot; &gt;Windows Message Logging Tool&lt;/a&gt;&amp;nbsp;&amp;nbsp;&lt;span&gt;(0)&lt;/span&gt;
&lt;/th&gt;
&lt;td&gt;
2012/02/13&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;th&gt;
&lt;a href=&quot;/340&quot; &gt;.text section disasm&lt;/a&gt;&amp;nbsp;&amp;nbsp;&lt;span&gt;(0)&lt;/span&gt;
&lt;/th&gt;
&lt;td&gt;
2011/07/26&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;th&gt;
&lt;a href=&quot;/318&quot; &gt;ASCII Generator&lt;/a&gt;&amp;nbsp;&amp;nbsp;&lt;span&gt;(2)&lt;/span&gt;
&lt;/th&gt;
&lt;td&gt;
2011/04/19&lt;/td&gt;
&lt;/tr&gt;
&lt;/table&gt;&lt;/div&gt;</description>
			<category>Program</category>
			<category>ConsumerPreview</category>
			<category>Windows 8</category>
			<author>Ezbeat</author>
			<guid>http://ezbeat.tistory.com/367</guid>
			<comments>http://ezbeat.tistory.com/367#entry367comment</comments>
			<pubDate>Sat, 03 Mar 2012 18:53:14 +0900</pubDate>
		</item>
		<item>
			<title>GOMENCODER(곰인코더) Crack - 2012/02/28</title>
			<link>http://ezbeat.tistory.com/366</link>
			<description>&lt;font color=&quot;#000000&quot;&gt;심심해서 한번 해보았습니다.&lt;/font&gt;&lt;br /&gt;
&lt;font color=&quot;#000000&quot;&gt;아르마딜로 패킹이 되어 있긴 하지만 강력한 프로텍터가 아니기 때문에 &lt;/font&gt;&lt;br /&gt;
&lt;font color=&quot;#000000&quot;&gt;굳이 언패킹을 하지 않아도 손쉽게 분석이 가능했습니다.&lt;/font&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;font color=&quot;#000000&quot;&gt;&lt;embed width=&quot;402&quot; height=&quot;324&quot; src=&quot;/attachment/cfile7.uf@163D58414F4F02DC2E786F.swf&quot; quality=&quot;high&quot; allowScriptAccess=&quot;always&quot; type=&quot;application/x-shockwave-flash&quot; pluginspage=&quot;http://www.macromedia.com/go/getflashplayer&quot;/&gt;&lt;/font&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;font color=&quot;#000000&quot;&gt;요새는 여러 인코더가 나와서 곰인코더를 많이 쓰실지는 모르겠네요.&lt;/font&gt;&lt;br /&gt;
&lt;font color=&quot;#000000&quot;&gt;전 잘 쓰진 않지만요.. 인코딩할 일이 없어서;;&lt;/font&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;font color=&quot;#000000&quot;&gt;디버거 형식의 자동 패치툴을 만들어보았습니다.&amp;nbsp;&lt;/font&gt;&lt;br /&gt;
&lt;b&gt;&lt;font color=&quot;#e31600&quot;&gt;(배포는 하지 않습니다.)&lt;/font&gt;&lt;/b&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;font color=&quot;#000000&quot;&gt;아에 분석을 하기 힘들게 중요 루틴 부분만이라도 코드 가상화 기법을 적용시켜놓으면..어떨까 싶네요.&lt;br /&gt;
자동화 툴도 있기 때문이죠 :-)&lt;br /&gt;
&lt;br /&gt;
크랙을 못하게하려면..?&lt;br /&gt;
리버싱을 원천적으로 막는 방법을 찾는다.&lt;br /&gt;
현재 방법으로 가장 손쉽게 리버싱을 막으려면 패커를 바꾸는 방법을 택해야한다.&lt;br /&gt;
좀더 강력한 프로텍터로 패킹을 하는 것을 추천합니다.&lt;br /&gt;
&lt;br /&gt;
루틴 수정.&lt;br /&gt;
중요루틴제어를 여러 군대로 분산시켜 분석을 어렵게??..뭐 결국 이것도 시간 문제지만요..&lt;br /&gt;
&lt;br /&gt;
서버 사용.&lt;br /&gt;
로그인할 때만 사용자 인증을 위해서만 서버를 사용하고 있는데 ..&lt;br /&gt;
서버를 잘 활용해 크랙 방지.. 특정 루틴 인코딩 시켜놓고 서버에서 받아온 값을 가지고 디코딩 수행&lt;br /&gt;
서버에선 id와 권한을 가지고 암호화한 값을 전달??.. 뭐 이런식이면..&lt;br /&gt;
&lt;br /&gt;
모르겠네요 -_-..&lt;br /&gt;
&lt;br /&gt;
요즘 코드 가상화 기법을 제대로 공부를 해봐야하기 때문에 덕분에 리버싱을 많이해보게 생겼습니다..ㅠ&amp;nbsp;&lt;/font&gt;&lt;div class=&quot;entry-ccl&quot; style=&quot;clear: both; text-align: right; margin-bottom: 10px&quot;&gt;
	&lt;img id=&quot;ccl-icon-366-0&quot; class=&quot;entry-ccl-by&quot; src=&quot;http://i1.daumcdn.net/cfs.tistory/v/0/static/admin/editor/ccl_black01.png&quot; alt=&quot;저작자 표시&quot;/&gt;
	&lt;!--
	&lt;rdf:RDF xmlns=&quot;http://web.resource.org/cc/&quot; xmlns:dc=&quot;http://purl.org/dc/elements/1.1/&quot; xmlns:rdf=&quot;http://www.w3.org/1999/02/22-rdf-syntax-ns#&quot;&gt;
		&lt;Work rdf:about=&quot;&quot;&gt;
			&lt;license rdf:resource=&quot;http://creativecommons.org/licenses/by-fr/2.0/kr/&quot; /&gt;
		&lt;/Work&gt;
		&lt;License rdf:about=&quot;http://creativecommons.org/licenses/by-fr/&quot;&gt;
			&lt;permits rdf:resource=&quot;http://web.resource.org/cc/Reproduction&quot;/&gt;
			&lt;permits rdf:resource=&quot;http://web.resource.org/cc/Distribution&quot;/&gt;
			&lt;requires rdf:resource=&quot;http://web.resource.org/cc/Notice&quot;/&gt;
			&lt;requires rdf:resource=&quot;http://web.resource.org/cc/Attribution&quot;/&gt;
			&lt;permits rdf:resource=&quot;http://web.resource.org/cc/DerivativeWorks&quot;/&gt;
		&lt;/License&gt;
	&lt;/rdf:RDF&gt;
	--&gt;
&lt;/div&gt;
&lt;div class=&quot;another_category another_category_color_gray&quot;&gt;
&lt;h4&gt;'&lt;a href=&quot;/category/My%20Study&quot;&gt;My Study&lt;/a&gt;&amp;nbsp;&gt;&amp;nbsp;&lt;a href=&quot;/category/My%20Study/Program&quot;&gt;Program&lt;/a&gt;' 카테고리의 다른 글&lt;/h4&gt;
&lt;table&gt;
&lt;tr&gt;
&lt;th&gt;
&lt;a href=&quot;/368&quot; &gt;notepad++ 멀티로더&lt;/a&gt;&amp;nbsp;&amp;nbsp;&lt;span&gt;(0)&lt;/span&gt;
&lt;/th&gt;
&lt;td&gt;
2012/03/29&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;th&gt;
&lt;a href=&quot;/367&quot; &gt;Windows8-ConsumerPreview-32bit-English&lt;/a&gt;&amp;nbsp;&amp;nbsp;&lt;span&gt;(0)&lt;/span&gt;
&lt;/th&gt;
&lt;td&gt;
2012/03/03&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;th&gt;
&lt;a href=&quot;/366&quot; &gt;GOMENCODER(곰인코더) Crack - 2012/02/28&lt;/a&gt;&amp;nbsp;&amp;nbsp;&lt;span&gt;(4)&lt;/span&gt;
&lt;/th&gt;
&lt;td&gt;
2012/03/01&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;th&gt;
&lt;a href=&quot;/363&quot; &gt;Windows Message Logging Tool&lt;/a&gt;&amp;nbsp;&amp;nbsp;&lt;span&gt;(0)&lt;/span&gt;
&lt;/th&gt;
&lt;td&gt;
2012/02/13&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;th&gt;
&lt;a href=&quot;/340&quot; &gt;.text section disasm&lt;/a&gt;&amp;nbsp;&amp;nbsp;&lt;span&gt;(0)&lt;/span&gt;
&lt;/th&gt;
&lt;td&gt;
2011/07/26&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;th&gt;
&lt;a href=&quot;/318&quot; &gt;ASCII Generator&lt;/a&gt;&amp;nbsp;&amp;nbsp;&lt;span&gt;(2)&lt;/span&gt;
&lt;/th&gt;
&lt;td&gt;
2011/04/19&lt;/td&gt;
&lt;/tr&gt;
&lt;/table&gt;&lt;/div&gt;</description>
			<category>Program</category>
			<category>crack</category>
			<category>GOM</category>
			<category>gomencoder</category>
			<category>gomencoder crack</category>
			<category>Logo</category>
			<category>곰인코더</category>
			<category>로고</category>
			<category>유료</category>
			<category>제거</category>
			<category>크랙</category>
			<author>Ezbeat</author>
			<guid>http://ezbeat.tistory.com/366</guid>
			<comments>http://ezbeat.tistory.com/366#entry366comment</comments>
			<pubDate>Thu, 01 Mar 2012 14:07:44 +0900</pubDate>
		</item>
		<item>
			<title>Windows rand() 랜덤 비율</title>
			<link>http://ezbeat.tistory.com/364</link>
			<description>&lt;font color=&quot;#000000&quot;&gt;걍 심심해서 테스트 해봤습니다. Windows에서 Visual Studio를 설치하고 srand와 rand함수를 사용해 랜덤 값을 뽑아내면 얼마나 랜덤할 수 있는지...;;&lt;/font&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;b&gt;&lt;font color=&quot;#e31600&quot;&gt;srand()&lt;/font&gt;&lt;/b&gt;&lt;font color=&quot;#000000&quot;&gt; 함수&lt;/font&gt;&lt;br /&gt;
&lt;font color=&quot;#000000&quot;&gt;&lt;div class=&quot;imageblock&quot; style=&quot;display:inline;&quot;&gt;&lt;a href=&quot;http://cfile25.uf.tistory.com/original/1873F53A4F39E3F71064CC&quot; rel=&quot;lightbox&quot; target=&quot;_blank&quot;&gt;&lt;img src=&quot;http://cfile25.uf.tistory.com/image/1873F53A4F39E3F71064CC&quot; alt=&quot;&quot; filemime=&quot;image/jpeg&quot; filename=&quot;사용자 지정 1.jpg&quot; height=&quot;105&quot; width=&quot;410&quot;/&gt;&lt;/a&gt;&lt;/div&gt;&lt;/font&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;b&gt;&lt;font color=&quot;#e31600&quot;&gt;rand()&lt;/font&gt;&lt;/b&gt;&lt;font color=&quot;#000000&quot;&gt; 함수&lt;/font&gt;&lt;br /&gt;
&lt;font color=&quot;#000000&quot;&gt;&lt;div class=&quot;imageblock&quot; style=&quot;display:inline;&quot;&gt;&lt;a href=&quot;http://cfile24.uf.tistory.com/original/147E933A4F39E3F8039F02&quot; rel=&quot;lightbox&quot; target=&quot;_blank&quot;&gt;&lt;img src=&quot;http://cfile24.uf.tistory.com/image/147E933A4F39E3F8039F02&quot; alt=&quot;&quot; filemime=&quot;image/jpeg&quot; filename=&quot;사용자 지정 2.jpg&quot; height=&quot;162&quot; width=&quot;477&quot;/&gt;&lt;/a&gt;&lt;/div&gt;&lt;/font&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;font color=&quot;#000000&quot;&gt;Visual Studio 2010/2008 기준으로 이와 같이 정의가 되어 있습니다.&lt;/font&gt;&lt;br /&gt;
&lt;font color=&quot;#000000&quot;&gt;
( 그 하위 버전은 확인 못함.. )&lt;/font&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;font color=&quot;#e31600&quot;&gt;최소 값은 0x0000, 최대 값은 0x7fff&lt;/font&gt;&lt;font color=&quot;#000000&quot;&gt; 가 되겠군요.&lt;/font&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;font color=&quot;#000000&quot;&gt;아래는 테스트 코드입니다. srand의 인자로 얼마나 랜덤 적이고 동적인 값을 넣어야 하는게 관건인듯 싶은데..&lt;/font&gt;&lt;br /&gt;
&lt;font color=&quot;#000000&quot;&gt;
걍 전 rdtsc를 사용해 넣어봤습니다. ( time()이나 GetTickCount() 함수들 보단 동적이므로.. ㅎㅎ )&lt;/font&gt;&lt;br /&gt;
&lt;textarea name=&quot;code&quot; class=&quot;cpp&quot; cols=&quot;60&quot; rows=&quot;10&quot; style=&quot;color: rgb(0, 0, 0); &quot;&gt;#include &amp;lt;stdio.h&amp;gt;
#include &amp;lt;stdlib.h&amp;gt;

unsigned int saveNum[32767];

int randnum()
{
	int result;

	__asm
	{
		rdtsc;
		xor eax,edx;
		mov result,eax
	}

	return result;
}

int main(void)
{
	int temp;
	int max, min;	
	double max_percent, min_percent;

	unsigned int loopNum = 1000000000;

	for(unsigned int i = 0; i &amp;lt; loopNum; i++)
	{
		srand(~randnum());
		temp = rand();
		saveNum[temp]++;
	}
	
	max = min = saveNum[0];

	for(int i = 0; i &amp;lt; sizeof(saveNum)/sizeof(unsigned int); i++)
	{
		if(max &amp;lt; saveNum[i])
			max = saveNum[i];

		if(min &amp;gt; saveNum[i])
			min = saveNum[i];
	}

	max_percent = (double)max/loopNum*100;
	min_percent = (double)min/loopNum*100;

	printf(&quot;Max: %u/%u	%f%% \n&quot;,max,loopNum,max_percent);
	printf(&quot;Min: %u/%u	%f%% \n&quot;,min,loopNum,min_percent);

	return 0;
}
&lt;/textarea&gt;&lt;br /&gt;
&lt;font color=&quot;#000000&quot;&gt;한번 실행마다 10억 번의 rand를 뽑아내 그 빈도를 조사해보았습니다.&lt;/font&gt;&lt;br /&gt;
&lt;font color=&quot;#000000&quot;&gt;가장 많이 나온 숫자의 횟수와 가장 적게 나온 숫자의 횟수를 조사해 %로 알아보았습니다.&lt;/font&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;font color=&quot;#000000&quot;&gt;여러번의 실행을 해보았습니다.&lt;/font&gt;&lt;br /&gt;
&lt;div class=&quot;txc-textbox&quot; style=&quot;border-top-style: solid; border-right-style: solid; border-bottom-style: solid; border-left-style: solid; border-top-width: 1px; border-right-width: 1px; border-bottom-width: 1px; border-left-width: 1px; border-top-color: rgb(219, 232, 251); border-right-color: rgb(219, 232, 251); border-bottom-color: rgb(219, 232, 251); border-left-color: rgb(219, 232, 251); background-color: rgb(219, 232, 251); padding-top: 10px; padding-right: 10px; padding-bottom: 10px; padding-left: 10px; &quot;&gt;
&lt;p style=&quot;margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; &quot;&gt;&lt;/p&gt;
&lt;div&gt;
&lt;font color=&quot;#000000&quot;&gt;Max: 31308/1000000000 &amp;nbsp; 0.003131%&lt;/font&gt;&lt;/div&gt;
&lt;div&gt;
&lt;font color=&quot;#000000&quot;&gt;Min: 29715/1000000000 &amp;nbsp; &amp;nbsp;0.002971%&lt;/font&gt;&lt;/div&gt;
&lt;div&gt;
&lt;font color=&quot;#000000&quot;&gt;&lt;br /&gt;
&lt;/font&gt;&lt;div&gt;
&lt;font color=&quot;#000000&quot;&gt;Max: 31267/1000000000 &amp;nbsp; 0.003127%&lt;/font&gt;&lt;/div&gt;
&lt;div&gt;
&lt;font color=&quot;#000000&quot;&gt;Min: 29783/1000000000 &amp;nbsp; &amp;nbsp;0.002978%&lt;/font&gt;&lt;/div&gt;
&lt;div&gt;
&lt;font color=&quot;#000000&quot;&gt;&lt;br /&gt;
&lt;/font&gt;&lt;div&gt;
&lt;font color=&quot;#000000&quot;&gt;Max: 31222/1000000000 &amp;nbsp; 0.003122%&lt;/font&gt;&lt;/div&gt;
&lt;div&gt;
&lt;font color=&quot;#000000&quot;&gt;Min: 29809/1000000000 &amp;nbsp; &amp;nbsp;0.002981%&lt;/font&gt;&lt;/div&gt;
&lt;div&gt;
&lt;font color=&quot;#000000&quot;&gt;&lt;br /&gt;
&lt;/font&gt;&lt;/div&gt;
&lt;div&gt;
&lt;font color=&quot;#000000&quot;&gt;Max: 31343/1000000000 &amp;nbsp; 0.003134%&lt;/font&gt;&lt;/div&gt;
&lt;div&gt;
&lt;font color=&quot;#000000&quot;&gt;Min: 29782/1000000000 &amp;nbsp; &amp;nbsp;0.002978%&lt;br /&gt;
&lt;br /&gt;
&lt;/font&gt;&lt;div&gt;
&lt;font color=&quot;#000000&quot;&gt;Max: 31234/1000000000 &amp;nbsp; 0.003123%&lt;/font&gt;&lt;/div&gt;
&lt;div&gt;
&lt;font color=&quot;#000000&quot;&gt;Min: 29743/1000000000 &amp;nbsp; &amp;nbsp;0.002974%&amp;nbsp;&amp;nbsp;&lt;br /&gt;
&lt;br /&gt;
&lt;/font&gt;&lt;div&gt;
&lt;font color=&quot;#000000&quot;&gt;Max: 31258/1000000000 &amp;nbsp; 0.003126%&lt;/font&gt;&lt;/div&gt;
&lt;div&gt;
&lt;font color=&quot;#000000&quot;&gt;Min: 29701/1000000000 &amp;nbsp; &amp;nbsp;0.002970%&lt;br /&gt;
&lt;br /&gt;
&lt;/font&gt;&lt;div&gt;
&lt;font color=&quot;#000000&quot;&gt;Max: 31209/1000000000 &amp;nbsp; 0.003121%&lt;/font&gt;&lt;/div&gt;
&lt;div&gt;
&lt;font color=&quot;#000000&quot;&gt;Min: 29777/1000000000 &amp;nbsp; &amp;nbsp;0.002978%&amp;nbsp;&lt;/font&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;p&gt;&lt;/p&gt;
&lt;/div&gt;
&lt;div&gt;
&lt;br /&gt;
&lt;/div&gt;
&lt;div&gt;
&lt;div&gt;
&lt;div&gt;
&lt;div&gt;
&lt;div&gt;
&lt;div&gt;
&lt;font color=&quot;#000000&quot;&gt;정확히 100%를 32767로 나누면 &amp;nbsp;0.00305185% 쯤 나오는데&lt;br /&gt;
기준 %를 기점으로 대략 ±0.0001% 밖에 벗어나질 않는군요.&lt;br /&gt;
&lt;br /&gt;
결론 : 골고루 랜덤한 값이 나옵니다 -_-;; 이상 뻘짓.............. 흑흑..&amp;nbsp;&lt;/font&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;&lt;div class=&quot;entry-ccl&quot; style=&quot;clear: both; text-align: right; margin-bottom: 10px&quot;&gt;
	&lt;img id=&quot;ccl-icon-364-0&quot; class=&quot;entry-ccl-by&quot; src=&quot;http://i1.daumcdn.net/cfs.tistory/v/0/static/admin/editor/ccl_black01.png&quot; alt=&quot;저작자 표시&quot;/&gt;
	&lt;!--
	&lt;rdf:RDF xmlns=&quot;http://web.resource.org/cc/&quot; xmlns:dc=&quot;http://purl.org/dc/elements/1.1/&quot; xmlns:rdf=&quot;http://www.w3.org/1999/02/22-rdf-syntax-ns#&quot;&gt;
		&lt;Work rdf:about=&quot;&quot;&gt;
			&lt;license rdf:resource=&quot;http://creativecommons.org/licenses/by-fr/2.0/kr/&quot; /&gt;
		&lt;/Work&gt;
		&lt;License rdf:about=&quot;http://creativecommons.org/licenses/by-fr/&quot;&gt;
			&lt;permits rdf:resource=&quot;http://web.resource.org/cc/Reproduction&quot;/&gt;
			&lt;permits rdf:resource=&quot;http://web.resource.org/cc/Distribution&quot;/&gt;
			&lt;requires rdf:resource=&quot;http://web.resource.org/cc/Notice&quot;/&gt;
			&lt;requires rdf:resource=&quot;http://web.resource.org/cc/Attribution&quot;/&gt;
			&lt;permits rdf:resource=&quot;http://web.resource.org/cc/DerivativeWorks&quot;/&gt;
		&lt;/License&gt;
	&lt;/rdf:RDF&gt;
	--&gt;
&lt;/div&gt;
&lt;div class=&quot;another_category another_category_color_gray&quot;&gt;
&lt;h4&gt;'&lt;a href=&quot;/category/My%20Study&quot;&gt;My Study&lt;/a&gt;&amp;nbsp;&gt;&amp;nbsp;&lt;a href=&quot;/category/My%20Study/Programming%26Theory&quot;&gt;Programming&amp;amp;Theory&lt;/a&gt;' 카테고리의 다른 글&lt;/h4&gt;
&lt;table&gt;
&lt;tr&gt;
&lt;th&gt;
&lt;a href=&quot;/374&quot; &gt;ELF 파일의 PLT, GOT&lt;/a&gt;&amp;nbsp;&amp;nbsp;&lt;span&gt;(2)&lt;/span&gt;
&lt;/th&gt;
&lt;td&gt;
2012/04/26&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;th&gt;
&lt;a href=&quot;/369&quot; &gt;Calling Convention Process for AMD 64 Bit&lt;/a&gt;&amp;nbsp;&amp;nbsp;&lt;span&gt;(4)&lt;/span&gt;
&lt;/th&gt;
&lt;td&gt;
2012/04/02&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;th&gt;
&lt;a href=&quot;/364&quot; &gt;Windows rand() 랜덤 비율&lt;/a&gt;&amp;nbsp;&amp;nbsp;&lt;span&gt;(0)&lt;/span&gt;
&lt;/th&gt;
&lt;td&gt;
2012/02/14&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;th&gt;
&lt;a href=&quot;/359&quot; &gt;ARM 명령어 공부&lt;/a&gt;&amp;nbsp;&amp;nbsp;&lt;span&gt;(2)&lt;/span&gt;
&lt;/th&gt;
&lt;td&gt;
2012/01/27&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;th&gt;
&lt;a href=&quot;/357&quot; &gt;BlockInput Function&lt;/a&gt;&amp;nbsp;&amp;nbsp;&lt;span&gt;(3)&lt;/span&gt;
&lt;/th&gt;
&lt;td&gt;
2012/01/20&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;th&gt;
&lt;a href=&quot;/354&quot; &gt;My BSOD&lt;/a&gt;&amp;nbsp;&amp;nbsp;&lt;span&gt;(2)&lt;/span&gt;
&lt;/th&gt;
&lt;td&gt;
2012/01/08&lt;/td&gt;
&lt;/tr&gt;
&lt;/table&gt;&lt;/div&gt;</description>
			<category>Programming&amp;Theory</category>
			<category>C</category>
			<category>rand</category>
			<category>srand</category>
			<category>Visual Studio</category>
			<category>windows</category>
			<category>빈도</category>
			<author>Ezbeat</author>
			<guid>http://ezbeat.tistory.com/364</guid>
			<comments>http://ezbeat.tistory.com/364#entry364comment</comments>
			<pubDate>Tue, 14 Feb 2012 13:47:56 +0900</pubDate>
		</item>
		<item>
			<title>Windows Message Logging Tool</title>
			<link>http://ezbeat.tistory.com/363</link>
			<description>&lt;font color=&quot;#000000&quot;&gt;Windows 메시지 로깅을 해보자. 간간히 어떠한 작업을 할 때 메시지 로깅이 필요할 때가 있는데 그 때 사용하는 툴 입니다.&lt;/font&gt;&lt;br /&gt;
&lt;br /&gt;&lt;font color=&quot;#000000&quot;&gt;이상한 잡다구리한 툴이 아닌 VS를 설치하면 같이 설치되는 툴로서..&lt;/font&gt;&lt;br /&gt;
&lt;br /&gt;&lt;font color=&quot;#000000&quot;&gt;&lt;div class=&quot;imageblock&quot; style=&quot;display:inline;&quot;&gt;&lt;a href=&quot;http://cfile24.uf.tistory.com/original/1502AA454F38ABC80237AD&quot; rel=&quot;lightbox&quot; target=&quot;_blank&quot;&gt;&lt;img src=&quot;http://cfile24.uf.tistory.com/image/1502AA454F38ABC80237AD&quot; alt=&quot;&quot; filemime=&quot;image/jpeg&quot; filename=&quot;사용자 지정 1.jpg&quot; height=&quot;126&quot; width=&quot;111&quot;/&gt;&lt;/a&gt;&lt;/div&gt;&lt;/font&gt;&lt;br /&gt;
&lt;b&gt;&lt;font color=&quot;#e31600&quot;&gt;Microsoft Spy++&lt;/font&gt;&lt;/b&gt;&lt;br /&gt;
&lt;br /&gt;&lt;font color=&quot;#000000&quot;&gt;이라는 툴입니다. 파일명은 &lt;b&gt;spyxx.exe&lt;/b&gt;군요.&lt;/font&gt;&lt;br /&gt;
&lt;br /&gt;&lt;font color=&quot;#000000&quot;&gt;Microsoft에서 제공을 해주는 툴이므로 껄쩍지근함 없이 바로 사용할 수 있었습니다.&lt;/font&gt;&lt;br /&gt;
&lt;font color=&quot;#000000&quot;&gt;타겟 테스트 프로그램은.. &lt;b&gt;PC_CTL.exe&lt;/b&gt;로 하겠습니다.&lt;/font&gt;&lt;br /&gt;
&lt;br /&gt;&lt;font color=&quot;#000000&quot;&gt;사실 2012년 2월 어느날.. 서울을 갔다가 잘곳이 없어서 찜방에서 자게 되었습니다.&lt;/font&gt;&lt;br /&gt;
&lt;font color=&quot;#000000&quot;&gt;마침 찜질방 컴퓨터가 있길래.. &amp;nbsp;켰습니다. 사용하려 했더니 돈을 넣으라더군요.&lt;/font&gt;&lt;br /&gt;
&lt;br /&gt;&lt;font color=&quot;#000000&quot;&gt;전 소프트웨어발전을 위해 착실히 돈을 내고 쓰는 유저이기 때문에 개발자와 찜질방 주인을 위해 돈을 투입했습니다.&lt;/font&gt;&lt;br /&gt;
&lt;font color=&quot;#000000&quot;&gt;그래서.. 관련 exe를 가져왔습니다. 그게 PC_CTL.exe입니다. &lt;/font&gt;&lt;br /&gt;
&lt;font color=&quot;#000000&quot;&gt;부모프로세스로 MSServices.exe라는 프로그램도 있었습니다. :-)&lt;/font&gt;&lt;br /&gt;
&lt;br /&gt;&lt;font color=&quot;#000000&quot;&gt;피시방에서 살짝쿵 분석을해서 ... 유용?!하게 사용하긴 했지만 일단 여기선 메시지 로깅이 목적이므로.. ㅎㅎㅎ&lt;/font&gt;&lt;br /&gt;
&lt;br /&gt;&lt;font color=&quot;#000000&quot;&gt;먼저 툴을 소개하겠습니다.&lt;/font&gt;&lt;br /&gt;
&lt;font color=&quot;#000000&quot;&gt;&lt;div class=&quot;imageblock&quot; style=&quot;display:inline;&quot;&gt;&lt;a href=&quot;http://cfile30.uf.tistory.com/original/12218B424F38AD4B2D7F27&quot; rel=&quot;lightbox&quot; target=&quot;_blank&quot;&gt;&lt;img src=&quot;http://cfile30.uf.tistory.com/image/12218B424F38AD4B2D7F27&quot; alt=&quot;&quot; filemime=&quot;image/jpeg&quot; filename=&quot;사용자 지정 2.jpg&quot; height=&quot;545&quot; width=&quot;428&quot;/&gt;&lt;/a&gt;&lt;/div&gt;&lt;/font&gt;&lt;br /&gt;
&lt;font color=&quot;#000000&quot;&gt;먼저 메시지 로깅 툴을 켜보면 이와 같이 나옵니다. 현재 활성화된 모든 윈도우들에 대한 핸들이 나오는군요.&lt;/font&gt;&lt;br /&gt;
&lt;br /&gt;&lt;font color=&quot;#000000&quot;&gt;그 외에도 Spy메뉴에서 Processes를 누르면..&lt;/font&gt;&lt;br /&gt;
&lt;font color=&quot;#000000&quot;&gt;&lt;div class=&quot;imageblock&quot; style=&quot;display:inline;&quot;&gt;&lt;a href=&quot;http://cfile25.uf.tistory.com/original/134B89434F38B1811F238F&quot; rel=&quot;lightbox&quot; target=&quot;_blank&quot;&gt;&lt;img src=&quot;http://cfile25.uf.tistory.com/image/134B89434F38B1811F238F&quot; alt=&quot;&quot; filemime=&quot;image/jpeg&quot; filename=&quot;사용자 지정 3.jpg&quot; height=&quot;497&quot; width=&quot;297&quot;/&gt;&lt;/a&gt;&lt;/div&gt;&amp;nbsp;&lt;/font&gt;&lt;br /&gt;
&lt;font color=&quot;#000000&quot;&gt;이와 같이 나오고.... PC_CTL 프로세스도 보이는군요.&lt;/font&gt;&lt;br /&gt;
&lt;br /&gt;&lt;font color=&quot;#000000&quot;&gt;+버튼을 눌러 자세히 보면..&lt;/font&gt;&lt;br /&gt;
&lt;font color=&quot;#000000&quot;&gt;&lt;div class=&quot;imageblock&quot; style=&quot;display:inline;&quot;&gt;&lt;a href=&quot;http://cfile23.uf.tistory.com/original/125A21404F38B1B02BD1B6&quot; rel=&quot;lightbox&quot; target=&quot;_blank&quot;&gt;&lt;img src=&quot;http://cfile23.uf.tistory.com/image/125A21404F38B1B02BD1B6&quot; alt=&quot;&quot; filemime=&quot;image/jpeg&quot; filename=&quot;사용자 지정 4.jpg&quot; height=&quot;446&quot; width=&quot;425&quot;/&gt;&lt;/a&gt;&lt;/div&gt;&lt;/font&gt;&lt;br /&gt;
&lt;font color=&quot;#000000&quot;&gt;또한 원하는 Process, Thread, Windows에 대고 우클릭 후 Message를 누르면 해당 Windows에서 발생하는 모든 메시지를 로깅할 수 있으며..&lt;/font&gt;&lt;br /&gt;
&lt;br /&gt;&lt;font color=&quot;#000000&quot;&gt;&lt;div class=&quot;imageblock&quot; style=&quot;display:inline;&quot;&gt;&lt;a href=&quot;http://cfile3.uf.tistory.com/original/1979E1344F38B20D172726&quot; rel=&quot;lightbox&quot; target=&quot;_blank&quot;&gt;&lt;img src=&quot;http://cfile3.uf.tistory.com/image/1979E1344F38B20D172726&quot; alt=&quot;&quot; filemime=&quot;image/jpeg&quot; filename=&quot;사용자 지정 5.jpg&quot; height=&quot;339&quot; width=&quot;569&quot;/&gt;&lt;/a&gt;&lt;/div&gt;&lt;/font&gt;&lt;br /&gt;
&lt;font color=&quot;#000000&quot;&gt;이와 같이 Message Options을 주어서 원하는 메시지만 로깅할 수 있습니다.&lt;/font&gt;&lt;br /&gt;
&lt;br /&gt;&lt;font color=&quot;#000000&quot;&gt;그리고 로깅 후 보고 메시지를 자세히 보고 싶으면 우클릭 후 Properties.. 를 눌러주면..&lt;/font&gt;&lt;br /&gt;
&lt;font color=&quot;#000000&quot;&gt;&lt;div class=&quot;imageblock&quot; style=&quot;display:inline;&quot;&gt;&lt;a href=&quot;http://cfile6.uf.tistory.com/original/165A91384F38B27E093DCA&quot; rel=&quot;lightbox&quot; target=&quot;_blank&quot;&gt;&lt;img src=&quot;http://cfile6.uf.tistory.com/image/165A91384F38B27E093DCA&quot; alt=&quot;&quot; filemime=&quot;image/jpeg&quot; filename=&quot;사용자 지정 6.jpg&quot; height=&quot;268&quot; width=&quot;445&quot;/&gt;&lt;/a&gt;&lt;/div&gt;&amp;nbsp;&lt;/font&gt;&lt;br /&gt;
&lt;font color=&quot;#000000&quot;&gt;wParam과 lParam에 대한 자세한 정보도 볼 수 있습니다.&lt;/font&gt;&lt;br /&gt;
&lt;br /&gt;&lt;font color=&quot;#000000&quot;&gt;뭐 메시지 관련 API함수들을 Hook해서 체크할수도 있지만 툴이 있으므로 이렇게 편하게 확인하면 됩니다.&amp;nbsp;&lt;/font&gt;&lt;br /&gt;
&lt;br /&gt;&lt;font color=&quot;#000000&quot;&gt;그리고 PC_CTL 프로그램은 분석결과&lt;/font&gt;&lt;br /&gt;
&lt;div class=&quot;txc-textbox&quot; style=&quot;color: rgb(0, 0, 0); border-top-style: solid; border-right-style: solid; border-bottom-style: solid; border-left-style: solid; border-top-width: 1px; border-right-width: 1px; border-bottom-width: 1px; border-left-width: 1px; border-top-color: rgb(219, 232, 251); border-right-color: rgb(219, 232, 251); border-bottom-color: rgb(219, 232, 251); border-left-color: rgb(219, 232, 251); background-color: rgb(219, 232, 251); padding-top: 10px; padding-right: 10px; padding-bottom: 10px; padding-left: 10px; &quot;&gt;&lt;p style=&quot;margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; &quot;&gt;&lt;font color=&quot;#000000&quot;&gt;Windows 작업 관리자&lt;/font&gt;&lt;/p&gt;
&lt;div style=&quot;color: rgb(51, 51, 51); &quot;&gt;&lt;font color=&quot;#000000&quot;&gt;레지스트리 편집기&lt;/font&gt;&lt;/div&gt;
&lt;div style=&quot;color: rgb(51, 51, 51); &quot;&gt;&lt;font color=&quot;#000000&quot;&gt;컴퓨터 관리&lt;/font&gt;&lt;/div&gt;
&lt;div style=&quot;color: rgb(51, 51, 51); &quot;&gt;&lt;font color=&quot;#000000&quot;&gt;서비스&lt;/font&gt;&lt;/div&gt;
&lt;div style=&quot;color: rgb(51, 51, 51); &quot;&gt;&lt;font color=&quot;#000000&quot;&gt;시스템 구성 유틸리티&lt;/font&gt;&lt;/div&gt;
&lt;/div&gt;&lt;div&gt;
&lt;br /&gt;&lt;font color=&quot;#000000&quot;&gt;위 5개의 프로그램이 켜질경우 자동으로 해당 프로그램들을 꺼버리는데요.&lt;/font&gt;&lt;br /&gt;
&lt;font color=&quot;#000000&quot;&gt;그냥 전 각 프로세스의 핸들을 얻어서 TerminateProcess함수로 종료시키는줄 알았습니다만..&lt;/font&gt;&lt;br /&gt;
&lt;font color=&quot;#000000&quot;&gt; BP를 걸고 running 해봐도 멈추지 않는걸로 보아 그건 아니더군요.&amp;nbsp;&lt;/font&gt;&lt;br /&gt;
&lt;br /&gt;&lt;font color=&quot;#000000&quot;&gt;그래서 한번 봐보았습니다.&amp;nbsp;&lt;/font&gt;&lt;br /&gt;
&lt;font color=&quot;#000000&quot;&gt;메시지 로깅을 원하는 윈도우를 설정하고 작업관리자를 켜보았습니다. 당연히 작업관리자는 죽겠지요.&amp;nbsp;&lt;/font&gt;&lt;br /&gt;
&lt;br /&gt;&lt;font color=&quot;#000000&quot;&gt;&lt;div class=&quot;imageblock&quot; style=&quot;display:inline;&quot;&gt;&lt;a href=&quot;http://cfile30.uf.tistory.com/original/1206D84B4F38B4ED1632BE&quot; rel=&quot;lightbox&quot; target=&quot;_blank&quot;&gt;&lt;img src=&quot;http://cfile30.uf.tistory.com/image/1206D84B4F38B4ED1632BE&quot; alt=&quot;&quot; filemime=&quot;image/jpeg&quot; filename=&quot;사용자 지정 7.jpg&quot; height=&quot;187&quot; width=&quot;531&quot;/&gt;&lt;/a&gt;&lt;/div&gt;&amp;nbsp;&lt;/font&gt;&lt;br /&gt;
&lt;font color=&quot;#000000&quot;&gt;그랬더니 이와 같이 로그가 남았습니다.&lt;/font&gt;&lt;br /&gt;
&lt;br /&gt;&lt;font color=&quot;#000000&quot;&gt;그러면 이벤트로 작업관리자를 죽이는것 같네요.&lt;/font&gt;&lt;br /&gt;
&lt;br /&gt;&lt;font color=&quot;#000000&quot;&gt;작업 관리자의 이벤트를 로깅해봤습니다.&amp;nbsp;&lt;/font&gt;&lt;br /&gt;
&lt;font color=&quot;#000000&quot;&gt;&lt;div class=&quot;imageblock&quot; style=&quot;display:inline;&quot;&gt;&lt;a href=&quot;http://cfile27.uf.tistory.com/original/135E0E474F38B7FC123271&quot; rel=&quot;lightbox&quot; target=&quot;_blank&quot;&gt;&lt;img src=&quot;http://cfile27.uf.tistory.com/image/135E0E474F38B7FC123271&quot; alt=&quot;&quot; filemime=&quot;image/jpeg&quot; filename=&quot;사용자 지정 8.jpg&quot; height=&quot;342&quot; width=&quot;586&quot;/&gt;&lt;/a&gt;&lt;/div&gt;&amp;nbsp;&lt;/font&gt;&lt;br /&gt;
&lt;font color=&quot;#000000&quot;&gt;위에 WM_TIMER는 1초에 한번씩 발생하는걸로 봐서 프로세스목록을 1초에 한번씩 얻어오고 있나봅니다.&lt;/font&gt;&lt;br /&gt;
&lt;font color=&quot;#000000&quot;&gt;빨간색 네모친것보면 WM_CLOSE이벤트가 발생했군요. &lt;/font&gt;&lt;br /&gt;
&lt;font color=&quot;#e31600&quot;&gt;PC_CTL 프로세스가 SendMessage 혹은 PostMessage를 사용해 WM_CLOSE 이벤트로 작업관리자를 죽였나봅니다.&lt;/font&gt;&lt;font color=&quot;#000000&quot;&gt;&amp;nbsp;&lt;/font&gt;&lt;br /&gt;
&lt;br /&gt;&lt;font color=&quot;#000000&quot;&gt;&lt;div class=&quot;imageblock&quot; style=&quot;display:inline;&quot;&gt;&lt;a href=&quot;http://cfile4.uf.tistory.com/original/1750DB4F4F38B95235E643&quot; rel=&quot;lightbox&quot; target=&quot;_blank&quot;&gt;&lt;img src=&quot;http://cfile4.uf.tistory.com/image/1750DB4F4F38B95235E643&quot; alt=&quot;&quot; filemime=&quot;image/jpeg&quot; filename=&quot;사용자 지정 9.jpg&quot; height=&quot;332&quot; width=&quot;683&quot;/&gt;&lt;/a&gt;&lt;/div&gt;&lt;/font&gt;&lt;br /&gt;
&lt;b&gt;&lt;font color=&quot;#e31600&quot;&gt;정답!&lt;/font&gt;&lt;/b&gt;&lt;br /&gt;
&lt;br /&gt;&lt;font color=&quot;#000000&quot;&gt;아무튼 이외에도 기능이 많으니 한번만 써보셔도 괜찮은 툴이라는 것을 알 수 있을 것 입니다. 더 괜찮은 메시지 로깅 툴이 있다면 추천 바랍니다 ^^;&amp;nbsp;&lt;/font&gt;&lt;/div&gt;&lt;div class=&quot;entry-ccl&quot; style=&quot;clear: both; text-align: right; margin-bottom: 10px&quot;&gt;
	&lt;img id=&quot;ccl-icon-363-0&quot; class=&quot;entry-ccl-by&quot; src=&quot;http://i1.daumcdn.net/cfs.tistory/v/0/static/admin/editor/ccl_black01.png&quot; alt=&quot;저작자 표시&quot;/&gt;
	&lt;!--
	&lt;rdf:RDF xmlns=&quot;http://web.resource.org/cc/&quot; xmlns:dc=&quot;http://purl.org/dc/elements/1.1/&quot; xmlns:rdf=&quot;http://www.w3.org/1999/02/22-rdf-syntax-ns#&quot;&gt;
		&lt;Work rdf:about=&quot;&quot;&gt;
			&lt;license rdf:resource=&quot;http://creativecommons.org/licenses/by-fr/2.0/kr/&quot; /&gt;
		&lt;/Work&gt;
		&lt;License rdf:about=&quot;http://creativecommons.org/licenses/by-fr/&quot;&gt;
			&lt;permits rdf:resource=&quot;http://web.resource.org/cc/Reproduction&quot;/&gt;
			&lt;permits rdf:resource=&quot;http://web.resource.org/cc/Distribution&quot;/&gt;
			&lt;requires rdf:resource=&quot;http://web.resource.org/cc/Notice&quot;/&gt;
			&lt;requires rdf:resource=&quot;http://web.resource.org/cc/Attribution&quot;/&gt;
			&lt;permits rdf:resource=&quot;http://web.resource.org/cc/DerivativeWorks&quot;/&gt;
		&lt;/License&gt;
	&lt;/rdf:RDF&gt;
	--&gt;
&lt;/div&gt;
&lt;div class=&quot;another_category another_category_color_gray&quot;&gt;
&lt;h4&gt;'&lt;a href=&quot;/category/My%20Study&quot;&gt;My Study&lt;/a&gt;&amp;nbsp;&gt;&amp;nbsp;&lt;a href=&quot;/category/My%20Study/Program&quot;&gt;Program&lt;/a&gt;' 카테고리의 다른 글&lt;/h4&gt;
&lt;table&gt;
&lt;tr&gt;
&lt;th&gt;
&lt;a href=&quot;/367&quot; &gt;Windows8-ConsumerPreview-32bit-English&lt;/a&gt;&amp;nbsp;&amp;nbsp;&lt;span&gt;(0)&lt;/span&gt;
&lt;/th&gt;
&lt;td&gt;
2012/03/03&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;th&gt;
&lt;a href=&quot;/366&quot; &gt;GOMENCODER(곰인코더) Crack - 2012/02/28&lt;/a&gt;&amp;nbsp;&amp;nbsp;&lt;span&gt;(4)&lt;/span&gt;
&lt;/th&gt;
&lt;td&gt;
2012/03/01&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;th&gt;
&lt;a href=&quot;/363&quot; &gt;Windows Message Logging Tool&lt;/a&gt;&amp;nbsp;&amp;nbsp;&lt;span&gt;(0)&lt;/span&gt;
&lt;/th&gt;
&lt;td&gt;
2012/02/13&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;th&gt;
&lt;a href=&quot;/340&quot; &gt;.text section disasm&lt;/a&gt;&amp;nbsp;&amp;nbsp;&lt;span&gt;(0)&lt;/span&gt;
&lt;/th&gt;
&lt;td&gt;
2011/07/26&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;th&gt;
&lt;a href=&quot;/318&quot; &gt;ASCII Generator&lt;/a&gt;&amp;nbsp;&amp;nbsp;&lt;span&gt;(2)&lt;/span&gt;
&lt;/th&gt;
&lt;td&gt;
2011/04/19&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;th&gt;
&lt;a href=&quot;/291&quot; &gt;Ezbeat Keygen Template&lt;/a&gt;&amp;nbsp;&amp;nbsp;&lt;span&gt;(3)&lt;/span&gt;
&lt;/th&gt;
&lt;td&gt;
2010/12/09&lt;/td&gt;
&lt;/tr&gt;
&lt;/table&gt;&lt;/div&gt;</description>
			<category>Program</category>
			<category>++</category>
			<category>Handle</category>
			<category>Hwnd</category>
			<category>Logging</category>
			<category>message</category>
			<category>msservices</category>
			<category>pc_ctl</category>
			<category>process</category>
			<category>Spy</category>
			<category>spyxx.exe</category>
			<category>window</category>
			<category>Windows Message Logging</category>
			<category>WM_CLOSE</category>
			<author>Ezbeat</author>
			<guid>http://ezbeat.tistory.com/363</guid>
			<comments>http://ezbeat.tistory.com/363#entry363comment</comments>
			<pubDate>Mon, 13 Feb 2012 16:21:57 +0900</pubDate>
		</item>
		<item>
			<title>TIOBE 프로그래밍 인기 순위</title>
			<link>http://ezbeat.tistory.com/362</link>
			<description>&lt;font color=&quot;#000000&quot;&gt;사이트&lt;/font&gt;&lt;br /&gt;
&lt;font color=&quot;#3058d2&quot;&gt;&lt;a href=&quot;http://www.tiobe.com/index.php/content/paperinfo/tpci/index.html&quot; target=&quot;_blank&quot; title=&quot;[http://www.tiobe.com/index.php/content/paperinfo/tpci/index.html]로 이동합니다.&quot;&gt;http://www.tiobe.com/index.php/content/paperinfo/tpci/index.html&lt;/a&gt;&amp;nbsp;&lt;/font&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;font color=&quot;#000000&quot;&gt;많은 분들이 포스팅을 해주셨지만 제 블로그 역시 포스팅..할래요. .ㅎㅎ&lt;/font&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;b&gt;&lt;font color=&quot;#e31600&quot;&gt;현재 2012년 1월 자료&lt;/font&gt;&lt;/b&gt;&lt;font color=&quot;#000000&quot;&gt;까지 나왔습니다.&lt;/font&gt;&lt;br /&gt;
&lt;font color=&quot;#000000&quot;&gt;사이트에도 나와있듯이&lt;/font&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;span style=&quot;color: rgb(0, 0, 0); font-family: Arial, Verdana, Helvetica, sans-serif; text-align: left; background-color: rgb(195, 215, 231); &quot;&gt;The TIOBE Programming Community index is an indicator of the popularity of programming languages.&lt;/span&gt;&lt;font color=&quot;#000000&quot;&gt;&amp;nbsp;&lt;/font&gt;&lt;br /&gt;
&lt;font color=&quot;#000000&quot;&gt;프로그래밍 언어의 인기 지표랍니다.&amp;nbsp;&lt;br /&gt;
1년 전 순위와 비교해 상승/하락 정도도 보여주네요.&lt;/font&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;font color=&quot;#000000&quot;&gt;&lt;div class=&quot;imageblock&quot; style=&quot;display:inline;&quot;&gt;&lt;a href=&quot;http://cfile1.uf.tistory.com/original/207E1D454F29E1D31033FB&quot; rel=&quot;lightbox&quot; target=&quot;_blank&quot;&gt;&lt;img src=&quot;http://cfile1.uf.tistory.com/image/207E1D454F29E1D31033FB&quot; alt=&quot;&quot; filemime=&quot;image/jpeg&quot; filename=&quot;사용자 지정 1.jpg&quot; height=&quot;580&quot; width=&quot;570&quot;/&gt;&lt;/a&gt;&lt;/div&gt;&lt;/font&gt;&lt;br /&gt;
&lt;font color=&quot;#000000&quot;&gt;&lt;div class=&quot;imageblock&quot; style=&quot;display:inline;&quot;&gt;&lt;a href=&quot;http://cfile10.uf.tistory.com/original/145432454F29E1D337E31A&quot; rel=&quot;lightbox&quot; target=&quot;_blank&quot;&gt;&lt;img src=&quot;http://cfile10.uf.tistory.com/image/145432454F29E1D337E31A&quot; alt=&quot;&quot; filemime=&quot;image/jpeg&quot; filename=&quot;사용자 지정 2.jpg&quot; height=&quot;776&quot; width=&quot;266&quot;/&gt;&lt;/a&gt;&lt;/div&gt;&lt;/font&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;font color=&quot;#000000&quot;&gt;역시 제가 좋아하는 C언어.. C++도 잘 활용할줄 알아야하는데.. 큰일입니다. &lt;/font&gt;&lt;br /&gt;
&lt;font color=&quot;#000000&quot;&gt;아무튼 이렇게 많은 언어들이 있다는 것도 첨 알았네요. 별별 언어가 다있네요 =_=;;&lt;/font&gt;&lt;div class=&quot;entry-ccl&quot; style=&quot;clear: both; text-align: right; margin-bottom: 10px&quot;&gt;
	&lt;img id=&quot;ccl-icon-362-0&quot; class=&quot;entry-ccl-by&quot; src=&quot;http://i1.daumcdn.net/cfs.tistory/v/0/static/admin/editor/ccl_black01.png&quot; alt=&quot;저작자 표시&quot;/&gt;
	&lt;!--
	&lt;rdf:RDF xmlns=&quot;http://web.resource.org/cc/&quot; xmlns:dc=&quot;http://purl.org/dc/elements/1.1/&quot; xmlns:rdf=&quot;http://www.w3.org/1999/02/22-rdf-syntax-ns#&quot;&gt;
		&lt;Work rdf:about=&quot;&quot;&gt;
			&lt;license rdf:resource=&quot;http://creativecommons.org/licenses/by-fr/2.0/kr/&quot; /&gt;
		&lt;/Work&gt;
		&lt;License rdf:about=&quot;http://creativecommons.org/licenses/by-fr/&quot;&gt;
			&lt;permits rdf:resource=&quot;http://web.resource.org/cc/Reproduction&quot;/&gt;
			&lt;permits rdf:resource=&quot;http://web.resource.org/cc/Distribution&quot;/&gt;
			&lt;requires rdf:resource=&quot;http://web.resource.org/cc/Notice&quot;/&gt;
			&lt;requires rdf:resource=&quot;http://web.resource.org/cc/Attribution&quot;/&gt;
			&lt;permits rdf:resource=&quot;http://web.resource.org/cc/DerivativeWorks&quot;/&gt;
		&lt;/License&gt;
	&lt;/rdf:RDF&gt;
	--&gt;
&lt;/div&gt;
&lt;div class=&quot;another_category another_category_color_gray&quot;&gt;
&lt;h4&gt;'&lt;a href=&quot;/category/My%20Study&quot;&gt;My Study&lt;/a&gt;&amp;nbsp;&gt;&amp;nbsp;&lt;a href=&quot;/category/My%20Study/etc&quot;&gt;etc&lt;/a&gt;' 카테고리의 다른 글&lt;/h4&gt;
&lt;table&gt;
&lt;tr&gt;
&lt;th&gt;
&lt;a href=&quot;/370&quot; &gt;Melon Crack은 나쁜 것&lt;/a&gt;&amp;nbsp;&amp;nbsp;&lt;span&gt;(5)&lt;/span&gt;
&lt;/th&gt;
&lt;td&gt;
2012/04/16&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;th&gt;
&lt;a href=&quot;/362&quot; &gt;TIOBE 프로그래밍 인기 순위&lt;/a&gt;&amp;nbsp;&amp;nbsp;&lt;span&gt;(2)&lt;/span&gt;
&lt;/th&gt;
&lt;td&gt;
2012/02/02&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;th&gt;
&lt;a href=&quot;/360&quot; &gt;ipad 사용자 권한&lt;/a&gt;&amp;nbsp;&amp;nbsp;&lt;span&gt;(0)&lt;/span&gt;
&lt;/th&gt;
&lt;td&gt;
2012/01/27&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;th&gt;
&lt;a href=&quot;/342&quot; &gt;바로가기&lt;/a&gt;&amp;nbsp;&amp;nbsp;&lt;span&gt;(2)&lt;/span&gt;
&lt;/th&gt;
&lt;td&gt;
2011/07/31&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;th&gt;
&lt;a href=&quot;/329&quot; &gt;PC로 카톡 쓰기~&lt;/a&gt;&amp;nbsp;&amp;nbsp;&lt;span&gt;(8)&lt;/span&gt;
&lt;/th&gt;
&lt;td&gt;
2011/05/30&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;th&gt;
&lt;a href=&quot;/328&quot; &gt;UHA 확장자&lt;/a&gt;&amp;nbsp;&amp;nbsp;&lt;span&gt;(0)&lt;/span&gt;
&lt;/th&gt;
&lt;td&gt;
2011/05/27&lt;/td&gt;
&lt;/tr&gt;
&lt;/table&gt;&lt;/div&gt;</description>
			<category>etc</category>
			<category>popularity</category>
			<category>Programming</category>
			<category>Tiobe</category>
			<category>순위</category>
			<category>인기</category>
			<category>프로그래밍</category>
			<author>Ezbeat</author>
			<guid>http://ezbeat.tistory.com/362</guid>
			<comments>http://ezbeat.tistory.com/362#entry362comment</comments>
			<pubDate>Thu, 02 Feb 2012 10:10:28 +0900</pubDate>
		</item>
		<item>
			<title>Themida 2.1.2.0 Virtual Machine</title>
			<link>http://ezbeat.tistory.com/361</link>
			<description>&lt;font color=&quot;#000000&quot;&gt;리버싱을 하는데 있어서 가장 우리를 난감하게 만드는 놈은 바로 안리 리버싱이 걸려있는 바이너리 입니다.&lt;br /&gt;
이러한 안티리버싱 기술을 자동적으로 바이너리에 덮어씌워주는 놈은 바로 프로텍터들입니다. 대표적인 프로텍터로는&lt;br /&gt;
VMProtect 나 Themida 같은 프로그램들이 있습니다.&lt;br /&gt;
&lt;br /&gt;
두 프로텍터는 역시 명성에 걸맞게 강력한 안티리버싱 기술들이 구현이 되어 있는데 그 중 하나는 Virtual Machine 기술입니다. 쫌 더 직관적으로 말하면 코드 가상화 기술입니다. 사실 아직 제대로 분석을 해보진 못하였지만 차차 분석을 해봐야되므로 간략히 그에 대한 코드를 분석해보았습니다. 전 일단 &lt;/font&gt;&lt;font color=&quot;#e31600&quot;&gt;Themida 2.1.2.0 버전에 있는 Virtual Machine 기능&lt;/font&gt;&lt;font color=&quot;#000000&quot;&gt;을 살펴보았습니다.&amp;nbsp;&lt;br /&gt;
&lt;br /&gt;
&lt;div class=&quot;imageblock&quot; style=&quot;display:inline;&quot;&gt;&lt;a href=&quot;http://cfile27.uf.tistory.com/original/181C6F454F28DF83215B90&quot; rel=&quot;lightbox&quot; target=&quot;_blank&quot;&gt;&lt;img src=&quot;http://cfile27.uf.tistory.com/image/181C6F454F28DF83215B90&quot; alt=&quot;&quot; filemime=&quot;image/jpeg&quot; filename=&quot;사용자 지정 2.jpg&quot; height=&quot;419&quot; width=&quot;527&quot;/&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;
더미다의 Virtual Machine 옵션입니다.&lt;br /&gt;
&lt;br /&gt;
코드 가상화라 함은 원래의 명령어를 가상화를 시키고 가상화된 코드를 본체에 있는 하드웨어적인 CPU가 처리하는 것이 아닌 개발자가 만든 소프트웨어적인 핸들러가 처리를 하게 되는 것입니다. 그 때의 핸들러를 보통 가상화된 명령어를 처리하는 CPU라고 하는데 위 그림에서 Processor Specifications 에서 지정하는 것이 바로 그 소프트웨어적인 CPU를 어떻게 만들 것인지에 대한 옵션입니다. 일단 전 위와 같이 옵션을 지정하였고 위 옵션은 디폴트 옵션보단 조금 더 강력한 옵션입니다.&lt;br /&gt;
&lt;br /&gt;
옆의 Entry Point Virtualization 옵션은 엔트리포인트로부터 몇 개의 명령어를 가상화 시킬 것인가를 지정하는 옵션입니다.&lt;br /&gt;
위와 같이 지정하면 2Byte가 아닌! 2개의 명령어가 가상화 되는 것입니다.&lt;br /&gt;
&lt;br /&gt;
그 외로는&lt;br /&gt;
API 함수에 대한 가상화 레벨을 지정할수도 있고 Multi Branch Techology는 그냥 분석을 더욱 어렵게 하기 위해 분기문을 마구 꼬아놓는 그러한 옵션 같습니다.&lt;br /&gt;
&lt;br /&gt;
아무튼 위와 같은 옵션으로 패킹을 진행하겠습니다. 먼저 원본 파일의 Entry Point를 봐보겠습니다.&amp;nbsp;&lt;br /&gt;
&lt;div class=&quot;imageblock&quot; style=&quot;display:inline;&quot;&gt;&lt;a href=&quot;http://cfile6.uf.tistory.com/original/202CB94B4F28E0450529F7&quot; rel=&quot;lightbox&quot; target=&quot;_blank&quot;&gt;&lt;img src=&quot;http://cfile6.uf.tistory.com/image/202CB94B4F28E0450529F7&quot; alt=&quot;&quot; filemime=&quot;image/jpeg&quot; filename=&quot;사용자 지정 3.jpg&quot; height=&quot;257&quot; width=&quot;512&quot;/&gt;&lt;/a&gt;&lt;/div&gt;&amp;nbsp;&lt;br /&gt;
&lt;br /&gt;
익숙한 Entry Point 죠?? 아무튼 이번엔 패킹된 파일의 Entry Point를 봐보도록 하겠습니다.&amp;nbsp;&lt;br /&gt;
&lt;div class=&quot;imageblock&quot; style=&quot;display:inline;&quot;&gt;&lt;a href=&quot;http://cfile4.uf.tistory.com/original/190AE2384F28E0BE1F73CA&quot; rel=&quot;lightbox&quot; target=&quot;_blank&quot;&gt;&lt;img src=&quot;http://cfile4.uf.tistory.com/image/190AE2384F28E0BE1F73CA&quot; alt=&quot;&quot; filemime=&quot;image/jpeg&quot; filename=&quot;사용자 지정 4.jpg&quot; height=&quot;354&quot; width=&quot;463&quot;/&gt;&lt;/a&gt;&lt;/div&gt;&amp;nbsp;&lt;br /&gt;
&lt;br /&gt;
옵션대로 위 2개의 명령어가 사라져있고 그 자리엔 쓰레기 값이 채워져 있습니다. 사실상 저 부분은 가상화가 되서 더이상 제어가 저 위치로 오지도 않을 뿐더러 실행도 하지 않습니다. 그렇기 때문에 그냥 저 부분엔 아무 값이나 채워놔도 무방합니다. 그 코드는 그러면 어디서 실행이 되냐구요?? 그건 가상화된 명령어를 실행해줄 소프트웨어적인 CPU가 수행해 주겠지요.&lt;br /&gt;
&lt;br /&gt;
또한 가상화된 명령어는 메모리 어딘가에 마구마구 인코딩되서 짱박혀 있겠지요.&lt;br /&gt;
&lt;br /&gt;
제가 &lt;/font&gt;&lt;font color=&quot;#e31600&quot;&gt;간략히 분석해본 더미다 가상화 기술&lt;/font&gt;&lt;font color=&quot;#000000&quot;&gt;입니다.&lt;br /&gt;
&lt;div class=&quot;imageblock&quot; style=&quot;display:inline;&quot;&gt;&lt;a href=&quot;http://cfile6.uf.tistory.com/original/15464D374F28EE691BE5E1&quot; rel=&quot;lightbox&quot; target=&quot;_blank&quot;&gt;&lt;img src=&quot;http://cfile6.uf.tistory.com/image/15464D374F28EE691BE5E1&quot; alt=&quot;&quot; filemime=&quot;image/jpeg&quot; filename=&quot;사용자 지정 5.jpg&quot; height=&quot;368&quot; width=&quot;683&quot;/&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;
&lt;br /&gt;
&amp;nbsp;먼저 Entry Point에서 두개의 명령어는 이미 가상화가 되어서 Virtualized Code 상에 존재할 것이고 해당 위치에는 쓰레기 코드가 있습니다. 그리고 Virtualized Code 부분에는 Code Section에 있는 가상화된 명령어만 있는게 아닌 Themida의 원래 기능인 코드, 리소스 등 이런 부분들 인코딩, 압축 되어 있는 것을 디코딩, 압축 해제 시키는 코드도 있는데 그 부분 또한 전부 가상화가 되어서 Virtualized Code 부분에 있는 것 같네요.&lt;br /&gt;
&lt;br /&gt;
그리고 빨간색 화살표는 진행 방향인데요. Themida는 EntryPoint에 있는 CALL 명령어 부분만 가상화 했지 CALL 내부는 가상화 하지 않았습니다. 그렇기 때문에 가상화된 코드를 Virtual CPU가 돌리는 동안 Code Section부분으로 넘어와 Normal Code를 실행 후 다시 가상화된 코드를 실행시키는 것입니다. 이 때 CPU 제어 이동이 있겠지요.&amp;nbsp;&lt;br /&gt;
&lt;br /&gt;
&amp;nbsp;가상화된 코드는 Virtual CPU가 실행시키고 Normal Code는 하드웨어적인 제 컴퓨터론 Intel CPU가 처리를 하게됩니다.&amp;nbsp;&lt;br /&gt;
&lt;br /&gt;
간단하게 실제 코드 상으로 한번 봐볼까요??&amp;nbsp;&lt;br /&gt;
&lt;div class=&quot;imageblock&quot; style=&quot;display:inline;&quot;&gt;&lt;a href=&quot;http://cfile8.uf.tistory.com/original/190EF8334F28F052085A3C&quot; rel=&quot;lightbox&quot; target=&quot;_blank&quot;&gt;&lt;img src=&quot;http://cfile8.uf.tistory.com/image/190EF8334F28F052085A3C&quot; alt=&quot;&quot; filemime=&quot;image/jpeg&quot; filename=&quot;사용자 지정 6.jpg&quot; height=&quot;281&quot; width=&quot;579&quot;/&gt;&lt;/a&gt;&lt;/div&gt;&amp;nbsp;&lt;br /&gt;
더미다 패킹 된 프로그램의 EntryPoint입니다. 이제부터 쭉쭉 인코딩된 코드를 디코딩 시킵니다...&lt;br /&gt;
&lt;br /&gt;
계속 실행하다보면 무한반복하는 부분이 생기는데 아마 명령어를 fetch해서 해석하는 부분이겠지요.&lt;br /&gt;
&lt;div class=&quot;imageblock&quot; style=&quot;display:inline;&quot;&gt;&lt;a href=&quot;http://cfile2.uf.tistory.com/original/200EA0334F28F1090CA54B&quot; rel=&quot;lightbox&quot; target=&quot;_blank&quot;&gt;&lt;img src=&quot;http://cfile2.uf.tistory.com/image/200EA0334F28F1090CA54B&quot; alt=&quot;&quot; filemime=&quot;image/jpeg&quot; filename=&quot;사용자 지정 7.jpg&quot; height=&quot;80&quot; width=&quot;524&quot;/&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;
&lt;br /&gt;
저 부분에서 Virtual CPU의 Instruction Handler를 호출합니다.. EAX를 Index로 사용하네요.&lt;br /&gt;
( EDI : 0x0044A5E8, EAX : 0x00000057 )&lt;br /&gt;
EDI를 봐보겠습니다.&lt;br /&gt;
&lt;div class=&quot;imageblock&quot; style=&quot;display:inline;&quot;&gt;&lt;a href=&quot;http://cfile25.uf.tistory.com/original/2006F34D4F28F1AC2992EC&quot; rel=&quot;lightbox&quot; target=&quot;_blank&quot;&gt;&lt;img src=&quot;http://cfile25.uf.tistory.com/image/2006F34D4F28F1AC2992EC&quot; alt=&quot;&quot; filemime=&quot;image/jpeg&quot; filename=&quot;사용자 지정 8.jpg&quot; height=&quot;643&quot; width=&quot;262&quot;/&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;
빨간색 네모친 부분이 Virtual CPU에서 사용하는 레지스터 입니다.&lt;br /&gt;
또한 그 아래 노란색 네모친 부분이 Instruction Handlers 입니다.&lt;br /&gt;
EAX가 Index가 되서 저 Handler 들 중 하나로 점프를 하게 되는 것입니다.&lt;br /&gt;
개수는 676개입니다.&lt;br /&gt;
&lt;br /&gt;
하지만 Themida Virtual Machine 옵션을 낮게 주고도 해보았는데 차이점이 있었습니다.&lt;br /&gt;
위 가상화 기술 그림은 옵션을 약하게 줬을 경우이고 높게 주었을 경우에는 아래와 같이 됩니다.&lt;br /&gt;
&lt;div class=&quot;imageblock&quot; style=&quot;display:inline;&quot;&gt;&lt;a href=&quot;http://cfile25.uf.tistory.com/original/14427D384F28F4BB3074C0&quot; rel=&quot;lightbox&quot; target=&quot;_blank&quot;&gt;&lt;img src=&quot;http://cfile25.uf.tistory.com/image/14427D384F28F4BB3074C0&quot; alt=&quot;&quot; filemime=&quot;image/jpeg&quot; filename=&quot;사용자 지정 9.jpg&quot; height=&quot;503&quot; width=&quot;683&quot;/&gt;&lt;/a&gt;&lt;/div&gt;두 번째로 실행되는 Virtual CPU에서 실질적인 Code 섹션에 있는 가상화된 코드를 실행해줍니다.&lt;br /&gt;
&lt;br /&gt;
뭐 더욱 분석이 복잡해 졌네요.&lt;br /&gt;
&lt;br /&gt;
아직 각각의 Instruction Handler 들이 어떤 식으로 작동하는지는 분석을 안해봐서 모르겠네요. 하지만 분명히 하나의 Intel 명령어를 처리하기 위해서 여러개의 Virtualized Code가 수행되는 것은 분명합니다. &lt;br /&gt;
&lt;br /&gt;
JMP xxxxxxxx&lt;br /&gt;
와 같은 명령어 하나만 처리를 하더라도&amp;nbsp;&lt;br /&gt;
&lt;div class=&quot;imageblock&quot; style=&quot;display:inline;&quot;&gt;&lt;a href=&quot;http://cfile8.uf.tistory.com/original/2060A0384F28F5B41152EA&quot; rel=&quot;lightbox&quot; target=&quot;_blank&quot;&gt;&lt;img src=&quot;http://cfile8.uf.tistory.com/image/2060A0384F28F5B41152EA&quot; alt=&quot;&quot; filemime=&quot;image/jpeg&quot; filename=&quot;사용자 지정 10.jpg&quot; height=&quot;17&quot; width=&quot;176&quot;/&gt;&lt;/a&gt;&lt;/div&gt;&amp;nbsp;&lt;br /&gt;
이 부분이 무려 116번이나 호출된 것을 보면 알 수 있겠지요.&lt;br /&gt;
아마 코드를 가상화 시키면서 까지 거기에 쓰레기 코드 또한 많이 넣어놨을 것입니다.&lt;br /&gt;
&lt;br /&gt;
또한! Instruction Handler들 내부에도 전부 쓰레기 코드왕창에 난독화도 무지되어있습니다.&lt;br /&gt;
또한! 더미다 패킹을 하게되면 생성되는 난독화 방법이나 쓰레기 코드들도 달라지며 opcode 순서도 바뀌게 되며 레지스터 순서도 바뀌고 아무튼 싹다 바뀌더군요. 하나를 제대로 분석했다 하더라도 다른 파일 분석이 힘든.. ㅠ_ㅠ&amp;nbsp;&lt;br /&gt;
&lt;br /&gt;
이번 글에서는 Themida 가상화 기술 관련해서 살짝만 맛 보았습니다.&lt;br /&gt;
왠지 제가 원하는 방법으로 구현이 되어 있는것 같아서 마음에 드네요.&lt;br /&gt;
&lt;br /&gt;
나중엔 더욱 깊이 분석해보고 다른 패커에 쓰인 가상화 기술도 분석해봐야겠습니다.&amp;nbsp;&lt;br /&gt;
&lt;br /&gt;
=========== 2월 7일 추가 분석 ============&lt;br /&gt;
&amp;nbsp;VM CPU로 제어가 넘어오는 부분이 있네요&lt;br /&gt;
&lt;div class=&quot;imageblock&quot; style=&quot;display:inline;&quot;&gt;&lt;a href=&quot;http://cfile4.uf.tistory.com/original/1206F2384F30EC8212FD97&quot; rel=&quot;lightbox&quot; target=&quot;_blank&quot;&gt;&lt;img src=&quot;http://cfile4.uf.tistory.com/image/1206F2384F30EC8212FD97&quot; alt=&quot;&quot; filemime=&quot;image/jpeg&quot; filename=&quot;사용자 지정 1.jpg&quot; height=&quot;120&quot; width=&quot;506&quot;/&gt;&lt;/a&gt;&lt;/div&gt;&amp;nbsp;&lt;br /&gt;
일단 이 부분이 VM Entry로 들어오는 루틴입니다. 빨간색으로 표시된걸로 봐서 앞 코드에 의해 디코딩이 되었나봅니다.&lt;br /&gt;
그리고 저 루틴을 들어오기 전에 &amp;nbsp;&lt;br /&gt;
&lt;br /&gt;
&lt;div class=&quot;imageblock&quot; style=&quot;display:inline;&quot;&gt;&lt;a href=&quot;http://cfile10.uf.tistory.com/original/171557384F31443026930A&quot; rel=&quot;lightbox&quot; target=&quot;_blank&quot;&gt;&lt;img src=&quot;http://cfile10.uf.tistory.com/image/171557384F31443026930A&quot; alt=&quot;&quot; filemime=&quot;image/jpeg&quot; filename=&quot;사용자 지정 20.jpg&quot; height=&quot;335&quot; width=&quot;536&quot;/&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;
이러한 부분도 있는데 잘 보시면 0x0041E7D2로 VM Entry로 점프하는 루틴이 많은것을 볼 수 있습니다. &lt;br /&gt;
그리고 각 JMP하기전에 어떠한 값을 push를 하는데 push 하는 값의 용도는 확실히는 모르겠습니다.&lt;br /&gt;
예상으론 외부로 나갔다가 들어오면서 다시 가상화된 코드 부분을 돌리는데 해당 부분을 뜻하는 것 같습니다.&amp;nbsp;&lt;br /&gt;
&lt;br /&gt;
각 push에 bp를 걸고 trace를 해본 결과 5번 정도 LoadLibrary를 호출하고 GetLocalTime 함수도 호출을 하더군요.&lt;br /&gt;
아래서 다섯번째 JMP 문이 code영역에 nop처리 된 부분에 원래의 api함수로 채워넣고 안티 디버깅 기술이 걸렸다면 여기서 걸릴 뿐더러 안걸릴 경우 code 영역으로 들어가 정상적인 코드 실행까지 하게 됩니다. 저 JMP문으로 들어갔을 때의 동작방식을 알아봐야겠군요. :-)&lt;br /&gt;
&lt;br /&gt;
그리고....&lt;br /&gt;
VM Entry를 들어왔을 때&amp;nbsp;&lt;br /&gt;
&lt;div class=&quot;imageblock&quot; style=&quot;display:inline;&quot;&gt;&lt;a href=&quot;http://cfile25.uf.tistory.com/original/166678444F3148D631F2A0&quot; rel=&quot;lightbox&quot; target=&quot;_blank&quot;&gt;&lt;img src=&quot;http://cfile25.uf.tistory.com/image/166678444F3148D631F2A0&quot; alt=&quot;&quot; filemime=&quot;image/jpeg&quot; filename=&quot;사용자 지정 1.jpg&quot; height=&quot;53&quot; width=&quot;513&quot;/&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;
이 부분 저 부분에서 ESI가 가리키는 메모리 영역에서 1Byte씩 al로 가져옵니다. 또한..&lt;br /&gt;
&lt;br /&gt;
&lt;div class=&quot;imageblock&quot; style=&quot;display:inline;&quot;&gt;&lt;a href=&quot;http://cfile8.uf.tistory.com/original/2060A0384F28F5B41152EA&quot; rel=&quot;lightbox&quot; target=&quot;_blank&quot;&gt;&lt;img src=&quot;http://cfile8.uf.tistory.com/image/2060A0384F28F5B41152EA&quot; alt=&quot;&quot; filemime=&quot;&quot; filename=&quot;사용자 지정 10.jpg&quot; height=&quot;17&quot; width=&quot;176&quot;/&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;
이 부분하고 1:1로 한번씩 번갈아가면서 실행... 핸들러 수행이 끝나면 LODS 명령어로 점프를 하게 됩니다.&lt;br /&gt;
JMP문은 그 가상화된 명령어를 수행하기 위한 핸들러를 호출하는 부분이구요.&lt;br /&gt;
&lt;br /&gt;
그러면 저기서 LODS했을 때의 AL(1)과 JMP문의 EAX(2)가 같냐? 그건 아닙니다. 뭐 같은 필요는 없겠죠. 꼬아놨다면요.&lt;br /&gt;
하지만...!! 값이 다르더라도 1:1 매치가 되면 좋지만 1:1 매치가 아닙니다. 다대다 관계 더군요. 즉..!&lt;br /&gt;
&lt;br /&gt;
(1)이 2c,f9,f6이 나왔을 때&lt;br /&gt;
(2)는 62 만 계속 나올 때도 있습니다.&lt;br /&gt;
&lt;br /&gt;
그 반대의 경우도 마찬가지구요.&lt;br /&gt;
&lt;br /&gt;
(2)가 62일 경우 (1) 값을 계속 뽑아 50개를 뽑아봤는데.. 규칙이 없습니다.&lt;br /&gt;
&lt;br /&gt;
그래서 트레이스해본 결과 수행되는 루틴이 다를줄 알았는데 (1)에서 (2)로 가는데 까지의 루틴은 항상 같습니다.&lt;br /&gt;
중간에 메모리에 있는 값을 가져와 연산을 수행하는 부분에서 달라지겠군요. 이 부분도 자세히 분석을 해봐야겠군요.&lt;br /&gt;
&lt;br /&gt;조금 더 자세히 분석해본 결과&lt;br /&gt;
(1) 의 값은 도데체 어디에 영향을 미치는지는 잘 모르겠습니다.&lt;br /&gt;
(1) 값은 핸들러 Index를 만드는 과정에 영향을 끼치지는 않더군요.&amp;nbsp;&lt;br /&gt;
&lt;br /&gt;그러면 핸들러 인덱스를 누가 만드느냐??&lt;br /&gt;
위위 그림에서 PUSH EBX를 하고 있는데 저 EBX의 BL 값에 의해 인덱스가 만들어집니다.&lt;br /&gt;
그러면 BL값 또한 무작위인데 핸들러 인덱스가 같은 경우도 있지 않냐?? .. 라고 의문을..?&lt;br /&gt;
&lt;br /&gt;바로 &lt;br /&gt;
BL + Handler Index&amp;nbsp;&lt;br /&gt;
의 계산으로 인해 만들어집니다...만;;&lt;br /&gt;
이게 전부는 아닌 것 같군요. 특정 핸들러가 수행되면 EBX값이 BL부분만 바뀌는게 아닌 EBX 전체 값이 바뀌어버리게됩니다.&lt;br /&gt;
더 이상은 너무 시간이 걸려 ....&lt;br /&gt;
&lt;br /&gt;아래는 분석 결과..&lt;br /&gt;
a = push ebx할 때의 bl 값&lt;br /&gt;
b = jmp할 때 handler index&lt;br /&gt;
c = jmp루틴 왔을 때 바뀐 bl값&lt;br /&gt;
&lt;br /&gt;전부다는 아니지만&lt;br /&gt;
c == a + b&lt;br /&gt;
가 성립하고 있는 것을 알 수 있습니다.&lt;br /&gt;
&lt;br /&gt;&lt;div&gt;
BL(a)&lt;span class=&quot;Apple-tab-span&quot; style=&quot;white-space:pre&quot;&gt;	&lt;/span&gt;AL(b)&lt;span class=&quot;Apple-tab-span&quot; style=&quot;white-space:pre&quot;&gt;	&lt;/span&gt;BL(c)&lt;/div&gt;
&lt;div&gt;--------------------------&lt;/div&gt;
&lt;div&gt;8E&lt;span class=&quot;Apple-tab-span&quot; style=&quot;white-space:pre&quot;&gt;		&lt;/span&gt;A9&lt;span class=&quot;Apple-tab-span&quot; style=&quot;white-space:pre&quot;&gt;		&lt;/span&gt;37&lt;/div&gt;
&lt;div&gt;37&lt;span class=&quot;Apple-tab-span&quot; style=&quot;white-space:pre&quot;&gt;		&lt;/span&gt;B5&lt;span class=&quot;Apple-tab-span&quot; style=&quot;white-space:pre&quot;&gt;		&lt;/span&gt;EC&lt;/div&gt;
&lt;div&gt;EF&lt;span class=&quot;Apple-tab-span&quot; style=&quot;white-space:pre&quot;&gt;		&lt;/span&gt;62&lt;span class=&quot;Apple-tab-span&quot; style=&quot;white-space:pre&quot;&gt;		&lt;/span&gt;51&lt;/div&gt;
&lt;div&gt;51&lt;span class=&quot;Apple-tab-span&quot; style=&quot;white-space:pre&quot;&gt;		&lt;/span&gt;55&lt;span class=&quot;Apple-tab-span&quot; style=&quot;white-space:pre&quot;&gt;		&lt;/span&gt;A6&lt;/div&gt;
&lt;div&gt;A6&lt;span class=&quot;Apple-tab-span&quot; style=&quot;white-space:pre&quot;&gt;		&lt;/span&gt;39&lt;span class=&quot;Apple-tab-span&quot; style=&quot;white-space:pre&quot;&gt;		&lt;/span&gt;DF&lt;/div&gt;
&lt;div&gt;C8&lt;span class=&quot;Apple-tab-span&quot; style=&quot;white-space:pre&quot;&gt;		&lt;/span&gt;B5&lt;span class=&quot;Apple-tab-span&quot; style=&quot;white-space:pre&quot;&gt;		&lt;/span&gt;7D&lt;/div&gt;
&lt;div&gt;83&lt;span class=&quot;Apple-tab-span&quot; style=&quot;white-space:pre&quot;&gt;		&lt;/span&gt;62&lt;span class=&quot;Apple-tab-span&quot; style=&quot;white-space:pre&quot;&gt;		&lt;/span&gt;E5&lt;/div&gt;
&lt;div&gt;E5&lt;span class=&quot;Apple-tab-span&quot; style=&quot;white-space:pre&quot;&gt;		&lt;/span&gt;3D&lt;span class=&quot;Apple-tab-span&quot; style=&quot;white-space:pre&quot;&gt;		&lt;/span&gt;22&lt;/div&gt;
&lt;div&gt;22&lt;span class=&quot;Apple-tab-span&quot; style=&quot;white-space:pre&quot;&gt;		&lt;/span&gt;B5&lt;span class=&quot;Apple-tab-span&quot; style=&quot;white-space:pre&quot;&gt;		&lt;/span&gt;D7&lt;/div&gt;
&lt;div&gt;DD&lt;span class=&quot;Apple-tab-span&quot; style=&quot;white-space:pre&quot;&gt;		&lt;/span&gt;62&lt;span class=&quot;Apple-tab-span&quot; style=&quot;white-space:pre&quot;&gt;		&lt;/span&gt;3F&lt;/div&gt;
&lt;div&gt;3F&lt;span class=&quot;Apple-tab-span&quot; style=&quot;white-space:pre&quot;&gt;		&lt;/span&gt;60&lt;span class=&quot;Apple-tab-span&quot; style=&quot;white-space:pre&quot;&gt;		&lt;/span&gt;9F&lt;/div&gt;
&lt;div&gt;9F&lt;span class=&quot;Apple-tab-span&quot; style=&quot;white-space:pre&quot;&gt;		&lt;/span&gt;8A&lt;span class=&quot;Apple-tab-span&quot; style=&quot;white-space:pre&quot;&gt;		&lt;/span&gt;29&lt;/div&gt;
&lt;div&gt;2C&lt;span class=&quot;Apple-tab-span&quot; style=&quot;white-space:pre&quot;&gt;		&lt;/span&gt;62&lt;span class=&quot;Apple-tab-span&quot; style=&quot;white-space:pre&quot;&gt;		&lt;/span&gt;8E&lt;/div&gt;
&lt;div&gt;8E&lt;span class=&quot;Apple-tab-span&quot; style=&quot;white-space:pre&quot;&gt;		&lt;/span&gt;A9&lt;span class=&quot;Apple-tab-span&quot; style=&quot;white-space:pre&quot;&gt;		&lt;/span&gt;37&lt;/div&gt;
&lt;div&gt;37&lt;span class=&quot;Apple-tab-span&quot; style=&quot;white-space:pre&quot;&gt;		&lt;/span&gt;B5&lt;span class=&quot;Apple-tab-span&quot; style=&quot;white-space:pre&quot;&gt;		&lt;/span&gt;EC&lt;/div&gt;
&lt;div&gt;EC&lt;span class=&quot;Apple-tab-span&quot; style=&quot;white-space:pre&quot;&gt;		&lt;/span&gt;62&lt;span class=&quot;Apple-tab-span&quot; style=&quot;white-space:pre&quot;&gt;		&lt;/span&gt;4E&lt;/div&gt;
&lt;div&gt;4E&lt;span class=&quot;Apple-tab-span&quot; style=&quot;white-space:pre&quot;&gt;		&lt;/span&gt;60&lt;span class=&quot;Apple-tab-span&quot; style=&quot;white-space:pre&quot;&gt;		&lt;/span&gt;AE&lt;/div&gt;
&lt;div&gt;AE&lt;span class=&quot;Apple-tab-span&quot; style=&quot;white-space:pre&quot;&gt;		&lt;/span&gt;62&lt;span class=&quot;Apple-tab-span&quot; style=&quot;white-space:pre&quot;&gt;		&lt;/span&gt;10&lt;/div&gt;
&lt;div&gt;10&lt;span class=&quot;Apple-tab-span&quot; style=&quot;white-space:pre&quot;&gt;		&lt;/span&gt;55&lt;span class=&quot;Apple-tab-span&quot; style=&quot;white-space:pre&quot;&gt;		&lt;/span&gt;65&lt;/div&gt;
&lt;div&gt;65&lt;span class=&quot;Apple-tab-span&quot; style=&quot;white-space:pre&quot;&gt;		&lt;/span&gt;A9&lt;span class=&quot;Apple-tab-span&quot; style=&quot;white-space:pre&quot;&gt;		&lt;/span&gt;0E&lt;/div&gt;
0E&lt;span class=&quot;Apple-tab-span&quot; style=&quot;white-space: pre; &quot;&gt;		&lt;/span&gt;39&lt;span class=&quot;Apple-tab-span&quot; style=&quot;white-space: pre; &quot;&gt;		&lt;/span&gt;47&amp;nbsp;&lt;/font&gt;&lt;div class=&quot;entry-ccl&quot; style=&quot;clear: both; text-align: right; margin-bottom: 10px&quot;&gt;
	&lt;img id=&quot;ccl-icon-361-0&quot; class=&quot;entry-ccl-by&quot; src=&quot;http://i1.daumcdn.net/cfs.tistory/v/0/static/admin/editor/ccl_black01.png&quot; alt=&quot;저작자 표시&quot;/&gt;
	&lt;!--
	&lt;rdf:RDF xmlns=&quot;http://web.resource.org/cc/&quot; xmlns:dc=&quot;http://purl.org/dc/elements/1.1/&quot; xmlns:rdf=&quot;http://www.w3.org/1999/02/22-rdf-syntax-ns#&quot;&gt;
		&lt;Work rdf:about=&quot;&quot;&gt;
			&lt;license rdf:resource=&quot;http://creativecommons.org/licenses/by-fr/2.0/kr/&quot; /&gt;
		&lt;/Work&gt;
		&lt;License rdf:about=&quot;http://creativecommons.org/licenses/by-fr/&quot;&gt;
			&lt;permits rdf:resource=&quot;http://web.resource.org/cc/Reproduction&quot;/&gt;
			&lt;permits rdf:resource=&quot;http://web.resource.org/cc/Distribution&quot;/&gt;
			&lt;requires rdf:resource=&quot;http://web.resource.org/cc/Notice&quot;/&gt;
			&lt;requires rdf:resource=&quot;http://web.resource.org/cc/Attribution&quot;/&gt;
			&lt;permits rdf:resource=&quot;http://web.resource.org/cc/DerivativeWorks&quot;/&gt;
		&lt;/License&gt;
	&lt;/rdf:RDF&gt;
	--&gt;
&lt;/div&gt;
&lt;div class=&quot;another_category another_category_color_gray&quot;&gt;
&lt;h4&gt;'&lt;a href=&quot;/category/My%20Study&quot;&gt;My Study&lt;/a&gt;&amp;nbsp;&gt;&amp;nbsp;&lt;a href=&quot;/category/My%20Study/Reversing&quot;&gt;Reversing&lt;/a&gt;' 카테고리의 다른 글&lt;/h4&gt;
&lt;table&gt;
&lt;tr&gt;
&lt;th&gt;
&lt;a href=&quot;/372&quot; &gt;백신 Avast의 Anti-attach 우회하기&lt;/a&gt;&amp;nbsp;&amp;nbsp;&lt;span&gt;(8)&lt;/span&gt;
&lt;/th&gt;
&lt;td&gt;
2012/04/19&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;th&gt;
&lt;a href=&quot;/371&quot; &gt;NtSetInformationThread 를 이용한 Anti-Debugging&lt;/a&gt;&amp;nbsp;&amp;nbsp;&lt;span&gt;(0)&lt;/span&gt;
&lt;/th&gt;
&lt;td&gt;
2012/04/17&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;th&gt;
&lt;a href=&quot;/361&quot; &gt;Themida 2.1.2.0 Virtual Machine&lt;/a&gt;&amp;nbsp;&amp;nbsp;&lt;span&gt;(7)&lt;/span&gt;
&lt;/th&gt;
&lt;td&gt;
2012/02/01&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;th&gt;
&lt;a href=&quot;/358&quot; &gt;ARM CPU 공부시작.. ㅠ_ㅠ&lt;/a&gt;&amp;nbsp;&amp;nbsp;&lt;span&gt;(6)&lt;/span&gt;
&lt;/th&gt;
&lt;td&gt;
2012/01/25&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;th&gt;
&lt;a href=&quot;/338&quot; &gt;Code Virtualized&lt;/a&gt;&amp;nbsp;&amp;nbsp;&lt;span&gt;(7)&lt;/span&gt;
&lt;/th&gt;
&lt;td&gt;
2011/06/27&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;th&gt;
&lt;a href=&quot;/309&quot; &gt;ZwSetSystemInformation&lt;/a&gt;&amp;nbsp;&amp;nbsp;&lt;span&gt;(2)&lt;/span&gt;
&lt;/th&gt;
&lt;td&gt;
2011/01/11&lt;/td&gt;
&lt;/tr&gt;
&lt;/table&gt;&lt;/div&gt;</description>
			<category>Reversing</category>
			<category>2.1.2.0</category>
			<category>Entry Point</category>
			<category>Garbage Code</category>
			<category>Handlers</category>
			<category>Instruction</category>
			<category>Multi Branch Techology</category>
			<category>themida</category>
			<category>vcp</category>
			<category>virtual machine</category>
			<author>Ezbeat</author>
			<guid>http://ezbeat.tistory.com/361</guid>
			<comments>http://ezbeat.tistory.com/361#entry361comment</comments>
			<pubDate>Wed, 01 Feb 2012 17:31:53 +0900</pubDate>
		</item>
		<item>
			<title>ipad 사용자 권한</title>
			<link>http://ezbeat.tistory.com/360</link>
			<description>&lt;font color=&quot;#000000&quot;&gt;ios5에서 어플 디버깅을 하지못해 애 먹고 있던 도중 그냥 재미난걸 보았습니다.&lt;br /&gt;
&lt;br /&gt;현재 제 ipad 에 있는 passwd 파일입니다.&lt;br /&gt;
&lt;div class=&quot;imageblock&quot; style=&quot;display:inline;&quot;&gt;&lt;a href=&quot;http://cfile10.uf.tistory.com/original/1809914B4F2264332DBD06&quot; rel=&quot;lightbox&quot; target=&quot;_blank&quot;&gt;&lt;img src=&quot;http://cfile10.uf.tistory.com/image/1809914B4F2264332DBD06&quot; alt=&quot;&quot; filemime=&quot;image/jpeg&quot; filename=&quot;사용자 지정 1.jpg&quot; height=&quot;166&quot; width=&quot;81&quot;/&gt;&lt;/a&gt;&lt;/div&gt;&amp;nbsp;&lt;br /&gt;
&lt;br /&gt;중요한건 root 계정과 mobile 계정입니다.&amp;nbsp;&lt;br /&gt;
이번엔 현재 실행 중인 프로세스를 봐보겠습니다.&amp;nbsp;&lt;br /&gt;
&lt;div class=&quot;imageblock&quot; style=&quot;display:inline;&quot;&gt;&lt;a href=&quot;http://cfile9.uf.tistory.com/original/196725454F2264B012F77C&quot; rel=&quot;lightbox&quot; target=&quot;_blank&quot;&gt;&lt;img src=&quot;http://cfile9.uf.tistory.com/image/196725454F2264B012F77C&quot; alt=&quot;&quot; filemime=&quot;image/jpeg&quot; filename=&quot;사용자 지정 2.jpg&quot; height=&quot;438&quot; width=&quot;683&quot;/&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;
&lt;br /&gt;제가 ipad에서 오목 어플을 켜봤는데 해당 오목 어플은 mobile이라는 계정의 권한으로 실행이 되게 됩니다.&lt;br /&gt;
뭐 당연히 어플들이 root 권한으로 실행되면 안되겠죠.&lt;br /&gt;
&lt;br /&gt;그러면 저 어플을 root 권한으로 실행시키면?? 당연히 mobile 권한으로는 해당 어플을 끌 수가 없을 것입니다.&lt;br /&gt;
Operation not permitted 라는 오류가 납니다.&lt;br /&gt;
&lt;br /&gt;일단 root 권한으로 저&amp;nbsp;GomokuOnline 프로그램을 켜보겠습니다.&lt;br /&gt;
&lt;div class=&quot;imageblock&quot; style=&quot;display:inline;&quot;&gt;&lt;a href=&quot;http://cfile5.uf.tistory.com/original/150292404F22662429CF56&quot; rel=&quot;lightbox&quot; target=&quot;_blank&quot;&gt;&lt;img src=&quot;http://cfile5.uf.tistory.com/image/150292404F22662429CF56&quot; alt=&quot;&quot; filemime=&quot;image/jpeg&quot; filename=&quot;사용자 지정 3.jpg&quot; height=&quot;50&quot; width=&quot;545&quot;/&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;
켰습니다. 하지만 ipad 화면이나 아래 bar에는 오목 어플이 없습니다.&lt;br /&gt;
&lt;br /&gt;&lt;div class=&quot;imageblock&quot; style=&quot;display:inline;&quot;&gt;&lt;a href=&quot;http://cfile1.uf.tistory.com/original/124C80504F22670E12F3D1&quot; rel=&quot;lightbox&quot; target=&quot;_blank&quot;&gt;&lt;img src=&quot;http://cfile1.uf.tistory.com/image/124C80504F22670E12F3D1&quot; alt=&quot;&quot; filemime=&quot;image/jpeg&quot; filename=&quot;사용자 지정 4.jpg&quot; height=&quot;513&quot; width=&quot;384&quot;/&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;
&lt;br /&gt;이렇게 말이죠. 하지만 분명히 root 권한으로 실행은 시켰으니 메모리에 올라와 있긴 할 겁니다. &lt;br /&gt;
아직 mobile 계정에서 처리를 못한 것이지요. 여기서 ipad로 해당 어플을 켜줍니다.&lt;br /&gt;
&lt;br /&gt;그러면 mobile에서는 새로 어플리케이션을 실행하는 것이 아닌 이미&amp;nbsp;GomokuOnline 프로그램은 프로세스 목록이 있으니&lt;br /&gt;
어플리케이션을 그냥 ipad 화면에 보여주기만 할 것입니다. 이제 ipad 화면에 보이는 오목 프로그램은 root 권한으로&amp;nbsp;&lt;br /&gt;
실행되고 있습니다.&lt;br /&gt;
&lt;br /&gt;ipad 에서 끌 수 있을까요?? 절대 못끕니다. 왜냐하면 mobile 계정은 root 가 실행시킨 프로그램을 끌 수 없기 때문이죠.&lt;br /&gt;
&lt;br /&gt;뭐 당연한거겠죠. &lt;br /&gt;
이럴 때가 아니라 ios5에서 gdb를 써야하는데 애를 먹네요. ㅠ&lt;br /&gt;
&lt;br /&gt;아.. 끌 때는 그냥 root 계정으로 프로세스 kill 해줌 됩니다. =_=;;&amp;nbsp;&lt;/font&gt;&lt;div class=&quot;entry-ccl&quot; style=&quot;clear: both; text-align: right; margin-bottom: 10px&quot;&gt;
	&lt;img id=&quot;ccl-icon-360-0&quot; class=&quot;entry-ccl-by&quot; src=&quot;http://i1.daumcdn.net/cfs.tistory/v/0/static/admin/editor/ccl_black01.png&quot; alt=&quot;저작자 표시&quot;/&gt;
	&lt;!--
	&lt;rdf:RDF xmlns=&quot;http://web.resource.org/cc/&quot; xmlns:dc=&quot;http://purl.org/dc/elements/1.1/&quot; xmlns:rdf=&quot;http://www.w3.org/1999/02/22-rdf-syntax-ns#&quot;&gt;
		&lt;Work rdf:about=&quot;&quot;&gt;
			&lt;license rdf:resource=&quot;http://creativecommons.org/licenses/by-fr/2.0/kr/&quot; /&gt;
		&lt;/Work&gt;
		&lt;License rdf:about=&quot;http://creativecommons.org/licenses/by-fr/&quot;&gt;
			&lt;permits rdf:resource=&quot;http://web.resource.org/cc/Reproduction&quot;/&gt;
			&lt;permits rdf:resource=&quot;http://web.resource.org/cc/Distribution&quot;/&gt;
			&lt;requires rdf:resource=&quot;http://web.resource.org/cc/Notice&quot;/&gt;
			&lt;requires rdf:resource=&quot;http://web.resource.org/cc/Attribution&quot;/&gt;
			&lt;permits rdf:resource=&quot;http://web.resource.org/cc/DerivativeWorks&quot;/&gt;
		&lt;/License&gt;
	&lt;/rdf:RDF&gt;
	--&gt;
&lt;/div&gt;
&lt;div class=&quot;another_category another_category_color_gray&quot;&gt;
&lt;h4&gt;'&lt;a href=&quot;/category/My%20Study&quot;&gt;My Study&lt;/a&gt;&amp;nbsp;&gt;&amp;nbsp;&lt;a href=&quot;/category/My%20Study/etc&quot;&gt;etc&lt;/a&gt;' 카테고리의 다른 글&lt;/h4&gt;
&lt;table&gt;
&lt;tr&gt;
&lt;th&gt;
&lt;a href=&quot;/370&quot; &gt;Melon Crack은 나쁜 것&lt;/a&gt;&amp;nbsp;&amp;nbsp;&lt;span&gt;(5)&lt;/span&gt;
&lt;/th&gt;
&lt;td&gt;
2012/04/16&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;th&gt;
&lt;a href=&quot;/362&quot; &gt;TIOBE 프로그래밍 인기 순위&lt;/a&gt;&amp;nbsp;&amp;nbsp;&lt;span&gt;(2)&lt;/span&gt;
&lt;/th&gt;
&lt;td&gt;
2012/02/02&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;th&gt;
&lt;a href=&quot;/360&quot; &gt;ipad 사용자 권한&lt;/a&gt;&amp;nbsp;&amp;nbsp;&lt;span&gt;(0)&lt;/span&gt;
&lt;/th&gt;
&lt;td&gt;
2012/01/27&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;th&gt;
&lt;a href=&quot;/342&quot; &gt;바로가기&lt;/a&gt;&amp;nbsp;&amp;nbsp;&lt;span&gt;(2)&lt;/span&gt;
&lt;/th&gt;
&lt;td&gt;
2011/07/31&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;th&gt;
&lt;a href=&quot;/329&quot; &gt;PC로 카톡 쓰기~&lt;/a&gt;&amp;nbsp;&amp;nbsp;&lt;span&gt;(8)&lt;/span&gt;
&lt;/th&gt;
&lt;td&gt;
2011/05/30&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;th&gt;
&lt;a href=&quot;/328&quot; &gt;UHA 확장자&lt;/a&gt;&amp;nbsp;&amp;nbsp;&lt;span&gt;(0)&lt;/span&gt;
&lt;/th&gt;
&lt;td&gt;
2011/05/27&lt;/td&gt;
&lt;/tr&gt;
&lt;/table&gt;&lt;/div&gt;</description>
			<category>etc</category>
			<category>gdb</category>
			<category>GomokuOnline</category>
			<category>iOS5</category>
			<category>Mobile</category>
			<category>passwd</category>
			<category>root</category>
			<author>Ezbeat</author>
			<guid>http://ezbeat.tistory.com/360</guid>
			<comments>http://ezbeat.tistory.com/360#entry360comment</comments>
			<pubDate>Fri, 27 Jan 2012 18:08:13 +0900</pubDate>
		</item>
		<item>
			<title>ARM 명령어 공부</title>
			<link>http://ezbeat.tistory.com/359</link>
			<description>&lt;font color=&quot;#e31600&quot; style=&quot;background-color: transparent; &quot;&gt;ipad2에는 A5라는 CPU가 탑제&lt;/font&gt;&lt;font color=&quot;#000000&quot; style=&quot;background-color: transparent; &quot;&gt;되어 있습니다&amp;nbsp;&lt;br /&gt;
&lt;div class=&quot;imageblock&quot; style=&quot;display:inline;&quot;&gt;&lt;a href=&quot;http://cfile5.uf.tistory.com/original/2029713F4F20B12710C9A9&quot; rel=&quot;lightbox&quot; target=&quot;_blank&quot;&gt;&lt;img src=&quot;http://cfile5.uf.tistory.com/image/2029713F4F20B12710C9A9&quot; alt=&quot;&quot; filemime=&quot;image/jpeg&quot; filename=&quot;iphone5apple2011liveblogkeynote1411.jpg&quot; height=&quot;399&quot; width=&quot;600&quot;/&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;
&lt;br /&gt;ARM 회사에서 만들었기 때문에 리버싱을 하려면 당연히 ARM CPU에 대해서 적당한 지식이 있어야합니다.&lt;br /&gt;
여기선 조금씩 알아보고 더욱 자세한 내용은 ARM CPU 문서들을 참고해주세요~&lt;br /&gt;
&lt;br /&gt;ARM CPU는 내부적으로 32Bit의 데이터 버스와 32Bit의 어드레드 버스를 제공합니다. &lt;br /&gt;
또한 잘 알려져 있듯이&lt;/font&gt;&lt;font color=&quot;#e31600&quot; style=&quot;background-color: transparent; &quot;&gt; ARM은 대표적인 RISC 코어&lt;/font&gt;&lt;font color=&quot;#000000&quot; style=&quot;background-color: transparent; &quot;&gt;입니다.&lt;/font&gt;&lt;br /&gt;
&lt;br /&gt;&lt;b style=&quot;background-color: transparent; &quot;&gt;&lt;font color=&quot;#801fbf&quot;&gt;RISC 설명&lt;/font&gt;&lt;/b&gt;&lt;br /&gt;
&lt;font color=&quot;#3058d2&quot; style=&quot;background-color: transparent; &quot;&gt;&lt;a href=&quot;http://terms.co.kr/RISC.htm&quot;&gt;http://terms.co.kr/RISC.htm&lt;/a&gt;&amp;nbsp;&lt;/font&gt;&lt;br /&gt;
&lt;br /&gt;&lt;font color=&quot;#000000&quot; style=&quot;background-color: transparent; &quot;&gt;즉, ARM의 명령어는 그 종류가 적으면서도, 다양하게 적용시킬 수 있는 특징이 있습니다. &lt;/font&gt;&lt;br /&gt;
&lt;font color=&quot;#000000&quot; style=&quot;background-color: transparent; &quot;&gt;하나씩 알아보면서 느껴보도록 하죠.&lt;/font&gt;&lt;br /&gt;
&lt;br /&gt;&lt;b style=&quot;background-color: transparent; &quot;&gt;&lt;font color=&quot;#e31600&quot;&gt;ARM 구조&lt;/font&gt;&lt;/b&gt;&lt;br /&gt;
&lt;font color=&quot;#000000&quot; style=&quot;background-color: transparent; &quot;&gt;&lt;b&gt;1. 레지스터&lt;/b&gt;&lt;/font&gt;&lt;br /&gt;
&lt;font color=&quot;#000000&quot; style=&quot;background-color: transparent; &quot;&gt;&amp;nbsp;ARM은 31개의 32Bit 범용 레지스터가 있습니다. 또한 동작모드에 따라는 6개의 Status 레지스터도 있습니다.&lt;/font&gt;&lt;br /&gt;
&lt;br /&gt;&lt;font color=&quot;#000000&quot; style=&quot;background-color: transparent; &quot;&gt;&lt;b&gt;2. ALU&lt;/b&gt;&lt;/font&gt;&lt;br /&gt;
&lt;font color=&quot;#000000&quot; style=&quot;background-color: transparent; &quot;&gt;&amp;nbsp;32Bit 연산이 가능한 ALU가 제공됩니다. ARM의 ALU 장점으로는 보통 다른 CPU에서는 shift 명령이 따로 있었는데, ARM에서는 따로 존재하는 것이 아닌 대부분의 명령에서 옵션으로 적용시킬 수 있습니다. ( Barrel Shifter )&lt;/font&gt;&lt;br /&gt;
&lt;br /&gt;&lt;font color=&quot;#000000&quot; style=&quot;background-color: transparent; &quot;&gt;&lt;b&gt;3. Booth's 곱셈기&lt;/b&gt;&lt;/font&gt;&lt;br /&gt;
&lt;font color=&quot;#000000&quot; style=&quot;background-color: transparent; &quot;&gt;&amp;nbsp;곱셈 기능을 제공하는 32Bit Booth's 곱셈기가 있습니다. 곱셈기는 32Bit 연산을 지원하며, 32Bit의 두 입력을 받아서 곱하여, 결과가 32Bit를 넘더라도 넘는 부분은 버리고 32Bit만을 남깁니다.&amp;nbsp;&lt;/font&gt;&lt;br /&gt;
&lt;br /&gt;&lt;b style=&quot;background-color: transparent; &quot;&gt;&lt;font color=&quot;#e31600&quot;&gt;ARM의 레지스터&lt;/font&gt;&lt;/b&gt;&lt;br /&gt;
&lt;font color=&quot;#000000&quot; style=&quot;background-color: transparent; &quot;&gt;&amp;nbsp;위에서 모두 32Bit인 31개의 범용 레지스터와 6개의 상태레지스터가 있다고 했습니다.&lt;/font&gt;&lt;br /&gt;
&lt;font color=&quot;#000000&quot; style=&quot;background-color: transparent; &quot;&gt;하지만 ARM 어셈블러에서 사용하는 범용 레지스터 키워드는 r0~r15까지 16개밖에 되지 않습니다. 즉, 다시 말해서 사용자가 한번에 사용할 수 있는 레지스터는 16개입니다. 그 중에 몇개는 프로그램 카운터(PC) 스택 포인터(SP) 등의 용도로 사용됩니다. 그러면 그 나머지는?? 나머지 레지스터는 CPU 동작모드와 관련되어 r0~r15로 리-맵핑되어 사용됩니다.&lt;/font&gt;&lt;br /&gt;
&lt;br /&gt;&lt;font color=&quot;#000000&quot; style=&quot;background-color: transparent; &quot;&gt;&lt;b&gt;1. Special Purpose General Register&lt;/b&gt;&lt;/font&gt;&lt;br /&gt;
&lt;font color=&quot;#000000&quot; style=&quot;background-color: transparent; &quot;&gt;&amp;nbsp;위에서 사용자가 프로그램 할 때 레지스터 지정을 위해 사용할 수 있는 키워드는 r0~r15 입니다. 그 중에 특별한 목적을 위해 사용되는 레지스터를 알아보겠습니다.&amp;nbsp;&lt;/font&gt;&lt;br /&gt;
&lt;br /&gt;&lt;font color=&quot;#000000&quot; style=&quot;background-color: transparent; &quot;&gt;&amp;nbsp;- Program Counter ( r15 )&amp;nbsp;&lt;/font&gt;&lt;br /&gt;
&lt;font color=&quot;#000000&quot; style=&quot;background-color: transparent; &quot;&gt;r15는 다른 CPU에서와 마찬가지로 PC 와 같은 역할을 합니다. 다만 차이점이 있다면 r15를 일반 다른 레지스터처럼 오퍼랜드로 사용할 수 있다는 점이고 ARM 어셈블러에서는 pc라는 키워드와 r15를 동일하게 취급합니다.&lt;/font&gt;&lt;br /&gt;
&lt;font color=&quot;#000000&quot; style=&quot;background-color: transparent; &quot;&gt;&amp;nbsp;* Intel CPU 어셈블러에서는 오퍼렌트로 PC와 같은 역할을 하는 EIP 레지스터를 오퍼렌드로 사용할 수 없습니다.&amp;nbsp;&lt;/font&gt;&lt;br /&gt;
&lt;br /&gt;&lt;font color=&quot;#000000&quot; style=&quot;background-color: transparent; &quot;&gt;&amp;nbsp;- Stack Pointer ( r13 )&lt;/font&gt;&lt;br /&gt;
&lt;font color=&quot;#000000&quot; style=&quot;background-color: transparent; &quot;&gt;ARM 에서는 Stack을 위한 명령어가 따로 없습니다. 즉, Push나 Pop 등의 명령어가 제공되지 않습니다. 그러나 sp라는 키워드를 사용하여 r13을 쓸 수 있는데, 묵시적으로 r13을 스택포인터로 사용할 수 있도록 정해 놓은 듯 합니다. 그리고, Push, Pop 같은 명령어가 없으므로, ARM에서는 같은 기능을 일반 데이터 전송 명령을 통해 해결합니다. ARM 의 데이터 전송명령은 Auto Increment 기능이 있어서 하나의 인스트럭션으로 Push나 Pop과 동일한 기능을 수행 할 수 있습니다.&lt;/font&gt;&lt;br /&gt;
&lt;font color=&quot;#000000&quot; style=&quot;background-color: transparent; &quot;&gt;( 라고 제가 읽는 문서에서는 설명을 하였지만.. 실제로 현재 최신 ARM CPU는 지원을 합니다.&amp;nbsp;&lt;/font&gt;&lt;br /&gt;
&lt;font color=&quot;#000000&quot; style=&quot;background-color: transparent; &quot;&gt;&amp;nbsp;&amp;nbsp;&lt;/font&gt;&lt;font color=&quot;#3058d2&quot; style=&quot;background-color: transparent; &quot;&gt;
&lt;a href=&quot;http://infocenter.arm.com/help/index.jsp?topic=/com.arm.doc.dui0204ik/Babefbce.html&quot;&gt;http://infocenter.arm.com/help/index.jsp?topic=/com.arm.doc.dui0204ik/Babefbce.html&lt;/a&gt;&amp;nbsp; &lt;/font&gt;&lt;br /&gt;
&lt;font color=&quot;#000000&quot; style=&quot;background-color: transparent; &quot;&gt;&amp;nbsp; &amp;nbsp;위 링크를 따라 가보시면.. ;; &amp;nbsp;)&lt;/font&gt;&lt;br /&gt;
&lt;br /&gt;&lt;font color=&quot;#000000&quot; style=&quot;background-color: transparent; &quot;&gt;&amp;nbsp;- Link Register ( r14 )&lt;/font&gt;&lt;br /&gt;
&lt;font color=&quot;#000000&quot; style=&quot;background-color: transparent; &quot;&gt;&amp;nbsp;r14는 링크 레지스터라고 부릅니다. 이 레지스터는 Intel CPU에서 보지 못했던 기능의 레지스터인데요. Intel CPU등의 CPU에서는 서브루틴을 호출할 경우 CALL을 사용하면 다음에 수행될 PC를 스택에 넣고, 호출될 번지를 PC에 넣는 동작을 하게됩니다. 하지만 ARM에서는 CALL과 RET와 &amp;nbsp;같은 명령이 없습니다. 대신 Branch With Link라는 명령(BL)이 있는데, 해당 명령을 수행하면, CALL과 비슷하게 다음에 수행될 pc(r15) 값을 스택이 아니라 lr(r14)에 넣고 분기 번지를 pc(r15)에 넣어 분기합니다. 즉, 스택을 사용하지 않는 것이지요. 복귀할 때는 RET 대신 mov pc,lr 이라는 데이터 전송명령으로 복귀합니다.&lt;/font&gt;&lt;br /&gt;
&lt;br /&gt;&lt;font color=&quot;#000000&quot; style=&quot;background-color: transparent; &quot;&gt;이러한 방식은 나름대로 장단점이 있습니다.&lt;/font&gt;&lt;br /&gt;
&lt;font color=&quot;#000000&quot; style=&quot;background-color: transparent; &quot;&gt;단점&lt;/font&gt;&lt;br /&gt;
&lt;font color=&quot;#000000&quot; style=&quot;background-color: transparent; &quot;&gt;어떤 서브루틴이 콜 되었을 때, 서브루틴에서 복귀번지가 r14에 들어있는 상태가 됩니다. 문제는 해당 서브루틴에서 다시 한번 다른 서브루틴을 콜 한다면, 원래 r14에 보관되어 있던 복귀 번지 값이 덮어씌워지는 결과가 생깁니다. 이런 경우엔, 수동으로 sp(r13)를 이용하여 스택에 r14 값을 보관해 두어야 합니다. 즉, 분기(BL) 하기전에 r14를 스택에 보관해 두고, 리턴해서 복구하는 과정을 거치는 셈&lt;/font&gt;&lt;br /&gt;
&lt;br /&gt;&lt;font color=&quot;#000000&quot; style=&quot;background-color: transparent; &quot;&gt;그러면 왜 굳이 이러한 방법을 쓸까요?? 여러번 분기(BL)하는 경우가 아닌 한번만 분기(BL) 하는 경우라면, 스택을 사용하지 않고 레지스터를 사용함으로써, 그 속도에서 이익을 얻게 되는 것!&amp;nbsp;&lt;/font&gt;&lt;br /&gt;
&lt;br /&gt;&lt;font color=&quot;#000000&quot; style=&quot;background-color: transparent; &quot;&gt;&amp;nbsp;또한 분석가 입장에서 보면 CALL, RET 명령어가 없어서 가독성 면에서 떨어질 것 같습니다. 이건 저도 아직 경험해 보지 않은 것이지만 이렇게 이론적으로 공부하더라도 그럴 것 같네요.&lt;/font&gt;&lt;br /&gt;
&lt;br /&gt;&lt;font color=&quot;#000000&quot; style=&quot;background-color: transparent; &quot;&gt;&lt;b&gt;2. ARM Status Register &amp;nbsp;&lt;/b&gt;&lt;/font&gt;&lt;br /&gt;
&lt;font color=&quot;#000000&quot; style=&quot;background-color: transparent; &quot;&gt;&amp;nbsp;위에서 Status 레지스터는 32Bit 짜리 레지스터 6개가 있다고 했습니다. 그러나 6개 모두를 한꺼번에 사용하지는 못하고, 또 그럴 필요도 없습니다. 일단 하나의 32Bit Status 레지스터만 생각하면 됩니다.&lt;/font&gt;&lt;br /&gt;
&lt;br /&gt;&lt;font color=&quot;#000000&quot; style=&quot;background-color: transparent; &quot;&gt;&amp;nbsp; Status 레지스터는 PSR이라고 부릅니다. 그리고 일반적으로 CPSR이라고 하여 Current Program Status Register라고 부릅니다. PSR은 크게 Flag Bits부분과 Control Bits 부분으로 나뉩니다.&lt;/font&gt;&lt;br /&gt;
&lt;br /&gt;&lt;font color=&quot;#000000&quot; style=&quot;background-color: transparent; &quot;&gt;&amp;nbsp;- Flag Bits&lt;/font&gt;&lt;br /&gt;
&lt;font color=&quot;#000000&quot; style=&quot;background-color: transparent; &quot;&gt;&amp;nbsp;어떤 인스트럭션의 결과 등을 나타내는 부분으로 4Bit가 있습니다. 다른 CPU의 Flag Register와 비슷한데 각각 N, Z, C ,V의 4가지 입니다.&amp;nbsp;&lt;/font&gt;&lt;br /&gt;
&lt;div class=&quot;txc-textbox&quot; style=&quot;border-top-style: solid; border-right-style: solid; border-bottom-style: solid; border-left-style: solid; border-top-width: 1px; border-right-width: 1px; border-bottom-width: 1px; border-left-width: 1px; border-top-color: rgb(219, 232, 251); border-right-color: rgb(219, 232, 251); border-bottom-color: rgb(219, 232, 251); border-left-color: rgb(219, 232, 251); background-color: rgb(219, 232, 251); padding-top: 10px; padding-right: 10px; padding-bottom: 10px; padding-left: 10px; &quot;&gt;&lt;p style=&quot;margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; &quot;&gt;&lt;font color=&quot;#000000&quot;&gt;&amp;nbsp;1) Negative/Less Than Flag&lt;/font&gt;&lt;br /&gt;
&lt;font color=&quot;#000000&quot;&gt;&amp;nbsp; &amp;nbsp;N으로 표기되는 이 플래그는 연산의 결과가 마이너스인 경우에 세트됩니다.&amp;nbsp;&lt;/font&gt;&lt;br /&gt;
&lt;font color=&quot;#000000&quot;&gt;&amp;nbsp;2) Zero Flag&lt;/font&gt;&lt;br /&gt;
&lt;font color=&quot;#000000&quot;&gt;&amp;nbsp; &amp;nbsp;Z로 표기되는 이 플래그는 연산의 결과가 0이 되었을 경우에 세트됩니다.&lt;/font&gt;&lt;br /&gt;
&lt;font color=&quot;#000000&quot;&gt;&amp;nbsp;3) Carry/Borrow/Extend Flag&lt;/font&gt;&lt;br /&gt;
&lt;font color=&quot;#000000&quot;&gt;&amp;nbsp; &amp;nbsp;C로 표기되는 이 플래그는 자리올림이나 내림이 발생한 경우, 그리고 Shift 연산 등에서 사용됩니다.&lt;/font&gt;&lt;br /&gt;
&lt;font color=&quot;#000000&quot;&gt;&amp;nbsp;4) Overflow Flag&lt;/font&gt;&lt;br /&gt;
&lt;font color=&quot;#000000&quot;&gt;&amp;nbsp; &amp;nbsp;V로 표기되는 이 플래그는 연산의 결과가 오버플로우 되었을 경우 사용됩니다.&lt;/font&gt;
&lt;/p&gt;
&lt;/div&gt;&lt;font color=&quot;#000000&quot; style=&quot;background-color: transparent; &quot;&gt;&lt;br /&gt;
이상의 Flag Bit들은 다른 칩의 상태 레지스터와 다르지 않습니다.&lt;/font&gt;&lt;br /&gt;
&lt;br /&gt;&lt;font color=&quot;#000000&quot; style=&quot;background-color: transparent; &quot;&gt;&amp;nbsp;- Control Bits&lt;/font&gt;&lt;br /&gt;
&lt;font color=&quot;#000000&quot; style=&quot;background-color: transparent; &quot;&gt;&amp;nbsp;컨트롤 비트들은 인터럽트를 제어하는 비트와 계속해서 언급되기만하고 실체를 드러내지 않고 있는 Exception과 관련된 CPU 동작모드를 설정하거나 확인할 수 있는 기능을 가진 Bit가 있습니다.&lt;/font&gt;&lt;br /&gt;
&lt;div class=&quot;txc-textbox&quot; style=&quot;border-top-style: solid; border-right-style: solid; border-bottom-style: solid; border-left-style: solid; border-top-width: 1px; border-right-width: 1px; border-bottom-width: 1px; border-left-width: 1px; border-top-color: rgb(219, 232, 251); border-right-color: rgb(219, 232, 251); border-bottom-color: rgb(219, 232, 251); border-left-color: rgb(219, 232, 251); background-color: rgb(219, 232, 251); padding-top: 10px; padding-right: 10px; padding-bottom: 10px; padding-left: 10px; &quot;&gt;&lt;p style=&quot;margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; &quot;&gt;&lt;font color=&quot;#000000&quot;&gt;&amp;nbsp;1) IRQ/FIQ Disable Bit&lt;/font&gt;&lt;br /&gt;
&lt;font color=&quot;#000000&quot;&gt;&amp;nbsp; ARM 인터럽트 중에서 IRQ와 FIQ를 금지시킬 수 있는 클래그입니다. 인터럽트의 종류는 이밖에도 몇 가지가 더 있는데, 그 중에서 IRQ, FIQ는 PSR를 통해 금지시키거나 가능하도록 설정할 수 있습니다.&lt;/font&gt;&lt;br /&gt;
&lt;font color=&quot;#000000&quot;&gt;&amp;nbsp;2) Mode Bits&lt;/font&gt;&lt;br /&gt;
&lt;font color=&quot;#000000&quot;&gt;&amp;nbsp; M0에서 M4까지의 모드 비트는 CPU의 6개의 동작 상태를 나타냅니다. 즉, 간단히 말하면 ARM은 6개의 동작 모드를 가지는데, 이를테면 User모드와 인터럽트 모드 등입니다.&lt;/font&gt;
&lt;/p&gt;
&lt;/div&gt;&lt;font color=&quot;#000000&quot; style=&quot;background-color: transparent; &quot;&gt;&lt;br /&gt;
이제 상태 레지스터를 그림으로 봐보겠습니다.&lt;/font&gt;&lt;br /&gt;
&lt;font color=&quot;#000000&quot; style=&quot;background-color: transparent; &quot;&gt;&lt;div class=&quot;imageblock&quot; style=&quot;display:inline;&quot;&gt;&lt;a href=&quot;http://cfile6.uf.tistory.com/original/1606C83A4F20CA4D24414F&quot; rel=&quot;lightbox&quot; target=&quot;_blank&quot;&gt;&lt;img src=&quot;http://cfile6.uf.tistory.com/image/1606C83A4F20CA4D24414F&quot; alt=&quot;&quot; filemime=&quot;&quot; filename=&quot;사용자 지정 1.jpg&quot; height=&quot;44&quot; width=&quot;683&quot;/&gt;&lt;/a&gt;&lt;/div&gt;&lt;/font&gt;&lt;br /&gt;
&lt;br /&gt;&lt;font color=&quot;#000000&quot; style=&quot;background-color: transparent; &quot;&gt;지금까지 레지스터를 알아보았는데 Exception 관련된 부분은 필요할 때 추후 올리겠습니다.&lt;/font&gt;&lt;br /&gt;
&lt;br /&gt;&lt;font color=&quot;#000000&quot; style=&quot;background-color: transparent; &quot;&gt;이번엔 Instruction Set을 알아보도록 하죠.&amp;nbsp;&lt;/font&gt;&lt;br /&gt;
&lt;br /&gt;&lt;b style=&quot;background-color: transparent; &quot;&gt;&lt;font color=&quot;#e31600&quot;&gt;ARM 명령어 특징&lt;/font&gt;&lt;/b&gt;&lt;br /&gt;
&lt;font color=&quot;#000000&quot; style=&quot;background-color: transparent; &quot;&gt;&amp;nbsp;ARM은 32Bit 코어입니다. 특징적인 것은 모든 명령어가 32Bit 하나의 Word로 구성된다는 것입니다. Intel CPU 경우엔 명령어에 따라 대략 1Byte~7Byte까지 있습니다. 하지만 ARM은 모든 명령어를 한 Word로 처리합니다. 일단은 명령어의 개수가 몇 안되고, 주소는 상태주소 방식을 사용하며, 심지어 Immediate 상수 값도 32Bit 값을 그대로 넣을 수 없습니다.&lt;/font&gt;&lt;br /&gt;
&lt;font color=&quot;#000000&quot; style=&quot;background-color: transparent; &quot;&gt;&amp;nbsp;만약 r0에 32Bit 상수를 넣고 싶다면, 몇몇 예외를 제외하고는 메모리에 미리 넣어두고 해당 메모리를 상태 주소로 참조해서 얻어와야 한다는 뜻입니다.&lt;/font&gt;&lt;br /&gt;
&lt;br /&gt;&lt;font color=&quot;#000000&quot; style=&quot;background-color: transparent; &quot;&gt;&amp;nbsp;역시 장단점이 있습니다.&lt;/font&gt;&lt;br /&gt;
&lt;font color=&quot;#000000&quot; style=&quot;background-color: transparent; &quot;&gt;&lt;b&gt;장점&lt;/b&gt;&lt;/font&gt;&lt;br /&gt;
&lt;font color=&quot;#000000&quot; style=&quot;background-color: transparent; &quot;&gt;&amp;nbsp;모든 명령어를 같은 사이즈로 처리함에 따라 파이프라인 구현이 용이하다는 점이 있습니다. 그리고 명령어 해석기를 설계할 경우 예외 처리부분이 없으므로, 쉽고 고속으로 처리할 수 있겠지요.&lt;/font&gt;&lt;br /&gt;
&lt;br /&gt;&lt;font color=&quot;#000000&quot; style=&quot;background-color: transparent; &quot;&gt;&lt;b&gt;단점&lt;/b&gt;&lt;/font&gt;&lt;br /&gt;
&lt;font color=&quot;#000000&quot; style=&quot;background-color: transparent; &quot;&gt;&amp;nbsp;코딩 시에 몇몇 제한이 따른다는 점 입니다. 상대 주소 지정 방식은, 이 때 사용하는 Offset이 24+2=26Bit 이므로, 상대주소라고는 하지만 거의 불편이 없고, 다만 Immediate 오퍼랜드를 지정할 경우에 좀 번거롭다는 점이 있습니다. 그러나 8Bit 해상도를 가지는 오퍼랜드라면 한 Word 내에서 처리가능 합니다.&amp;nbsp;&lt;/font&gt;&lt;br /&gt;
&lt;br /&gt;&lt;font color=&quot;#000000&quot; style=&quot;background-color: transparent; &quot;&gt;&amp;nbsp; ARM 명령어의 다른 특징으로는 모든 명령어를 조건적으로 실행시킬 수 있다는 것입니다. 예를 들어, Intel CPU에서는 jz, jc와 같은 점프 명령어를 사용합니다. 그 의미는 jz 같은 경우 zf가 설정되어 있으면 점프를 해라, 혹은 jc같은 경우는 cf가 설정되어 있으면 점프를 해라. 라는 의미입니다. 무조건 점프시에는 jmp를 쓰지요.&lt;/font&gt;&lt;br /&gt;
&lt;br /&gt;&lt;font color=&quot;#000000&quot; style=&quot;background-color: transparent; &quot;&gt;&amp;nbsp;ARM의 경우엔 그런 플래그의 사용이 점프 명령에 국한되지 않고, 예외 없이 모든 명령어에 사용할 수 있습니다.&lt;/font&gt;&lt;br /&gt;
&lt;font color=&quot;#000000&quot; style=&quot;background-color: transparent; &quot;&gt;&lt;div class=&quot;imageblock&quot; style=&quot;display:inline;&quot;&gt;&lt;a href=&quot;http://cfile3.uf.tistory.com/original/170B274B4F20CC7E05BE4C&quot; rel=&quot;lightbox&quot; target=&quot;_blank&quot;&gt;&lt;img src=&quot;http://cfile3.uf.tistory.com/image/170B274B4F20CC7E05BE4C&quot; alt=&quot;&quot; filemime=&quot;image/jpeg&quot; filename=&quot;사용자 지정 2.jpg&quot; height=&quot;66&quot; width=&quot;535&quot;/&gt;&lt;/a&gt;&lt;/div&gt;&lt;/font&gt;&lt;br /&gt;
&lt;font color=&quot;#000000&quot; style=&quot;background-color: transparent; &quot;&gt;위의 경우를 보시면 jmp에 해당하는 B명령 뿐만 아니라 MOV 와 같은 데이터 전송명령에도 플래그 옵션을 사용했음을 볼 수 있습니다.&lt;/font&gt;&lt;br /&gt;
&lt;br /&gt;&lt;font color=&quot;#000000&quot; style=&quot;background-color: transparent; &quot;&gt;&amp;nbsp;삼항 연산자로 예를 들어보겠습니다.&lt;/font&gt;&lt;br /&gt;
&lt;font color=&quot;#000000&quot; style=&quot;background-color: transparent; &quot;&gt;a = (b==c) ? d:e;&lt;/font&gt;&lt;br /&gt;
&lt;font color=&quot;#000000&quot; style=&quot;background-color: transparent; &quot;&gt;의미는 b와 c가 같으면 d를 a에 넣고 다르면 e를 a에 넣는 것입니다.&lt;/font&gt;&lt;br /&gt;
&lt;br /&gt;&lt;font color=&quot;#000000&quot; style=&quot;background-color: transparent; &quot;&gt;일단 Intel CPU에서는??&lt;/font&gt;&lt;br /&gt;
&lt;font color=&quot;#000000&quot; style=&quot;background-color: transparent; &quot;&gt;&lt;div class=&quot;imageblock&quot; style=&quot;display:inline;&quot;&gt;&lt;a href=&quot;http://cfile23.uf.tistory.com/original/196402444F20D24510A1CB&quot; rel=&quot;lightbox&quot; target=&quot;_blank&quot;&gt;&lt;img src=&quot;http://cfile23.uf.tistory.com/image/196402444F20D24510A1CB&quot; alt=&quot;&quot; filemime=&quot;image/jpeg&quot; filename=&quot;사용자 지정 4.jpg&quot; height=&quot;121&quot; width=&quot;341&quot;/&gt;&lt;/a&gt;&lt;/div&gt;&lt;/font&gt;&lt;br /&gt;
&lt;br /&gt;&lt;font color=&quot;#000000&quot; style=&quot;background-color: transparent; &quot;&gt;이와 같이 됩니다. ARM CPU를 봐보도록 하겠습니다.&lt;/font&gt;&lt;br /&gt;
&lt;font color=&quot;#000000&quot; style=&quot;background-color: transparent; &quot;&gt;제 ipad2 에서 gcc로 컴파일 할 경우 최적화 문제 때문에 원하는 표현이 잘 안나오는 것 같지만&lt;/font&gt;&lt;br /&gt;
&lt;font color=&quot;#000000&quot; style=&quot;background-color: transparent; &quot;&gt;ARM CPU의 명령어를 사용하면&lt;/font&gt;&lt;br /&gt;
&lt;br /&gt;&lt;font color=&quot;#801fbf&quot; style=&quot;background-color: transparent; &quot;&gt;CMPS r2,r3&lt;br /&gt;
MOVEQ r1,r4&lt;br /&gt;
MOVNE r1,r5&lt;br /&gt;
&lt;/font&gt;&lt;br /&gt;
&lt;font color=&quot;#000000&quot; style=&quot;background-color: transparent; &quot;&gt;이렇게 짧게 표현 가능합니다. 중요한 것은 Intel CPU에서는 점프문은 꼭 필요한 반면 ARM CPU에서는 점프문이 꼭 필요하진 않습니다.&lt;/font&gt;&lt;br /&gt;
&lt;br /&gt;&lt;font color=&quot;#000000&quot; style=&quot;background-color: transparent; &quot;&gt;&amp;nbsp;다시 한번 강조하지만 ARM에서는 이와 같은 조건 옵션을 모든 명령어에 사용 가능합니다. 실제로 모든 OP 코드의 상위 4Bit는 이런 조건 옵션을 나타내는데 사용되는 비트입니다. 각 조건에 사용되는 접미사 목록입니다.&lt;/font&gt;&lt;br /&gt;
&lt;font color=&quot;#000000&quot; style=&quot;background-color: transparent; &quot;&gt;&lt;div class=&quot;imageblock&quot; style=&quot;display:inline;&quot;&gt;&lt;a href=&quot;http://cfile24.uf.tistory.com/original/150D1D484F20D4452018EB&quot; rel=&quot;lightbox&quot; target=&quot;_blank&quot;&gt;&lt;img src=&quot;http://cfile24.uf.tistory.com/image/150D1D484F20D4452018EB&quot; alt=&quot;&quot; filemime=&quot;image/jpeg&quot; filename=&quot;사용자 지정 5.jpg&quot; height=&quot;667&quot; width=&quot;620&quot;/&gt;&lt;/a&gt;&lt;/div&gt;&lt;/font&gt;&lt;br /&gt;
&lt;font color=&quot;#000000&quot; style=&quot;background-color: transparent; &quot;&gt;총 15개로 15 = 1111b 딱 4Bit 맞군요. 다 외울 필요는 없고 여기에서는 그냥 이런 것들이 있구나 하는 정도면 알면 됩니다.&lt;/font&gt;&lt;br /&gt;
&lt;font color=&quot;#000000&quot; style=&quot;background-color: transparent; &quot;&gt;필요할 때 보면되기 때문이죠. 명령어를 볼 땐 명령어에서 다 문자로 표시줍니다.&lt;/font&gt;&lt;br /&gt;
&lt;br /&gt;&lt;font color=&quot;#000000&quot; style=&quot;background-color: transparent; &quot;&gt;다음 특징은 대부분의 명령어에 S라는 접미사를 사용하여 플래그 레지스터에 영향을 줄지 여부를 결정할 수 있다는 것입니다. 특히 연산명령을 수행할 때 'S' 를 붙히면 해당 결과에 따라서 플래그 값들이 변하게 되고, 붙히지 않으면 영향을 미치지 않도록 할 수 있습니다. Intel CPU에서는 연산의 결과에 따라 항상 플래그 값이 영향을 받는거와는 다르군요. 사실 이러한 점 때문에 Intel CPU에서는 특정 연산을 수행시 Push , Pop을 사용해 레지스터를 스택에 저장해 두고 연산이 끝난 후 다시 빼오는 방법을 사용하는데.. 귀찮습니다.&amp;nbsp;&lt;/font&gt;&lt;br /&gt;
&lt;br /&gt;&lt;font color=&quot;#000000&quot; style=&quot;background-color: transparent; &quot;&gt;&lt;b&gt;&amp;nbsp;● Branch and Branch with link (B, BL)&lt;/b&gt;&lt;/font&gt;&lt;br /&gt;
&lt;font color=&quot;#000000&quot; style=&quot;background-color: transparent; &quot;&gt;&lt;div class=&quot;imageblock&quot; style=&quot;display:inline;&quot;&gt;&lt;a href=&quot;http://cfile24.uf.tistory.com/original/1553B54D4F20D62F21E99E&quot; rel=&quot;lightbox&quot; target=&quot;_blank&quot;&gt;&lt;img src=&quot;http://cfile24.uf.tistory.com/image/1553B54D4F20D62F21E99E&quot; alt=&quot;&quot; filemime=&quot;image/jpeg&quot; filename=&quot;사용자 지정 6.jpg&quot; height=&quot;43&quot; width=&quot;562&quot;/&gt;&lt;/a&gt;&lt;/div&gt;&lt;/font&gt;&lt;br /&gt;
&lt;br /&gt;&lt;font color=&quot;#000000&quot; style=&quot;background-color: transparent; &quot;&gt;Cond 부분은 위에 있는 조건 옵션입니다. 101은 B 명령 코드입니다.&lt;/font&gt;&lt;br /&gt;
&lt;font color=&quot;#000000&quot; style=&quot;background-color: transparent; &quot;&gt;L 부분은 1일 경우 BL이 되는 것이고 0이면 B 명령입니다. B는 JMP라고 생각하시면되고, BL은 CALL로 생각하시면 됩니다.&lt;/font&gt;&lt;br /&gt;
&lt;font color=&quot;#000000&quot; style=&quot;background-color: transparent; &quot;&gt;다만 BL의 경우엔 PC값을 스택에 넣는 것이 아니라 r14(lr)에 넣는다는 것에 차이가 있습니다. 나머지 하위 24Bit가 Offset으로 사용되는데 ARM은 모든 명령어들이 Word 단위 이므로 총 +/- 32MB 영역을 커버합니다.&amp;nbsp;&lt;/font&gt;&lt;br /&gt;
&lt;br /&gt;&lt;font color=&quot;#000000&quot; style=&quot;background-color: transparent; &quot;&gt;&lt;b&gt;&amp;nbsp;● Data Processing Instruction&lt;/b&gt;&lt;/font&gt;&lt;br /&gt;
&lt;font color=&quot;#000000&quot; style=&quot;background-color: transparent; &quot;&gt;데이터 프로세싱 명령은 ARM의 50% 정도에 해당하는 명령입니다. 실제 개수는 16개이고, 연산명령, 비교명령, 비트 연산 명령, 데이터 전송 명령 등이 포함됩니다.&lt;/font&gt;&lt;br /&gt;
&lt;font color=&quot;#000000&quot; style=&quot;background-color: transparent; &quot;&gt;&lt;div class=&quot;imageblock&quot; style=&quot;display:inline;&quot;&gt;&lt;a href=&quot;http://cfile22.uf.tistory.com/original/1809F54A4F20DA50390D56&quot; rel=&quot;lightbox&quot; target=&quot;_blank&quot;&gt;&lt;img src=&quot;http://cfile22.uf.tistory.com/image/1809F54A4F20DA50390D56&quot; alt=&quot;&quot; filemime=&quot;&quot; filename=&quot;사용자 지정 7.jpg&quot; height=&quot;49&quot; width=&quot;683&quot;/&gt;&lt;/a&gt;&lt;/div&gt;&lt;/font&gt;&lt;br /&gt;
&lt;br /&gt;&lt;font color=&quot;#000000&quot; style=&quot;background-color: transparent; &quot;&gt;&amp;nbsp;1) &amp;lt;Cond&amp;gt;&lt;/font&gt;&lt;br /&gt;
&lt;font color=&quot;#000000&quot; style=&quot;background-color: transparent; &quot;&gt;&amp;nbsp; 해당 명령의 조건 실행 플래그입니다. 데이터 프로세싱 명령어에도 당연히 포함됩니다.&lt;/font&gt;&lt;br /&gt;
&lt;font color=&quot;#000000&quot; style=&quot;background-color: transparent; &quot;&gt;&amp;nbsp;해당 플래그를 통해 명령을 현재 플래그 레지스터(CPSR)의 상태에 따라 실행 여부를 결정하는데 사용되는 플래그입니다.&amp;nbsp;&lt;/font&gt;&lt;br /&gt;
&lt;font color=&quot;#000000&quot; style=&quot;background-color: transparent; &quot;&gt;&amp;nbsp;&lt;/font&gt;&lt;br /&gt;
&lt;font color=&quot;#000000&quot; style=&quot;background-color: transparent; &quot;&gt;&amp;nbsp;2) &amp;lt;I&amp;gt;&lt;/font&gt;&lt;br /&gt;
&lt;font color=&quot;#000000&quot; style=&quot;background-color: transparent; &quot;&gt;&amp;nbsp; Operland 2로 지정되어 있는 부분이 Immediate Operand 인지 아닌지 여부를 나타내는 비트. Immediate Operand라 함은, 예를 들어 Intel CPU에서 MOV AX, 01234h 라고 했을 경우 1234h를 가리키는 말입니다.&lt;/font&gt;&lt;br /&gt;
&lt;br /&gt;&lt;font color=&quot;#000000&quot; style=&quot;background-color: transparent; &quot;&gt;&amp;nbsp;3) &amp;lt;OpCode&amp;gt;&lt;/font&gt;&lt;br /&gt;
&lt;font color=&quot;#000000&quot; style=&quot;background-color: transparent; &quot;&gt;&amp;nbsp; 데이터 프로세싱 명령 중 어떤 명령인지를 나타내는 필드. 해당 필드와 명령어는 다음과 같습니다.&lt;/font&gt;&lt;br /&gt;
 &lt;font color=&quot;#000000&quot; style=&quot;background-color: transparent; &quot;&gt;&lt;div class=&quot;imageblock&quot; style=&quot;display:inline;&quot;&gt;&lt;a href=&quot;http://cfile10.uf.tistory.com/original/183B4C4B4F20DB540B5230&quot; rel=&quot;lightbox&quot; target=&quot;_blank&quot;&gt;&lt;img src=&quot;http://cfile10.uf.tistory.com/image/183B4C4B4F20DB540B5230&quot; alt=&quot;&quot; filemime=&quot;image/jpeg&quot; filename=&quot;사용자 지정 8.jpg&quot; height=&quot;535&quot; width=&quot;506&quot;/&gt;&lt;/a&gt;&lt;/div&gt;&lt;/font&gt;&lt;br /&gt;
&lt;br /&gt;&lt;font color=&quot;#000000&quot; style=&quot;background-color: transparent; &quot;&gt;&amp;nbsp;4) &amp;lt;S&amp;gt;&lt;/font&gt;&lt;br /&gt;
&lt;font color=&quot;#000000&quot; style=&quot;background-color: transparent; &quot;&gt;&amp;nbsp; S 비트가 1인 경우는 데이터 프로세싱 명령의 결과가 CPSR에 영향을 미칩니다. 즉, 0인 경우에는 CPSR은 변하지 않습니다.&lt;/font&gt;&lt;br /&gt;
&lt;br /&gt;&lt;font color=&quot;#000000&quot; style=&quot;background-color: transparent; &quot;&gt;&amp;nbsp;5) &amp;lt;Rn&amp;gt;&lt;/font&gt;&lt;br /&gt;
&lt;font color=&quot;#000000&quot; style=&quot;background-color: transparent; &quot;&gt;&amp;nbsp; ARM 데이터 프로세싱 명령은 그 결과와 첫 번째 오퍼랜드는 항상 레지스터로 지정해야 합니다. Rn은 첫 번째 오퍼랜드를 가리키는 것으로 위에서 Op1으로 표기한 것에 해당합니다. ARM에서 한번에 볼 수 있는 범용 레지스터는 sp, lr, pc 등을 포함해서 r0~r15까지입니다. 즉, 4Bit를 통해 레지스터를 나타내게 됩니다. 해당 필드는 명령에 따라 사용되지 않기도 합니다. MOV나 MVN등이 이에 해당합니다.&lt;/font&gt;&lt;br /&gt;
&lt;br /&gt;&lt;font color=&quot;#000000&quot; style=&quot;background-color: transparent; &quot;&gt;&amp;nbsp;6) &amp;lt;Rd&amp;gt;&lt;/font&gt;&lt;br /&gt;
&lt;font color=&quot;#000000&quot; style=&quot;background-color: transparent; &quot;&gt;&amp;nbsp; 오퍼레이션의 결과가 저장될 레지스터를 의미합니다. 역시 레지스터를 가리키므로 4Bit를 사용하고 모든 명령에서 디폴트로 사용되는 필드. ARM의 데이터 프로세싱 명령의 결과는 항상 레지스터로 들어갑니다.&lt;/font&gt;&lt;br /&gt;
&lt;font color=&quot;#000000&quot; style=&quot;background-color: transparent; &quot;&gt;&amp;nbsp;&amp;nbsp;&lt;/font&gt;&lt;br /&gt;
&lt;font color=&quot;#000000&quot; style=&quot;background-color: transparent; &quot;&gt;&amp;nbsp;7) &amp;lt;Operand 2&amp;gt;&lt;/font&gt;&lt;br /&gt;
&lt;font color=&quot;#000000&quot; style=&quot;background-color: transparent; &quot;&gt;Immediate Operand 혹은 레지스터 Operand 입니다. &amp;lt;I&amp;gt; 필드가 0일 경우 레지스터 입니다. 이에 관해선 많은 설명이 있지만 일단 여기까지만... 필요하면 추후..;&lt;/font&gt;&lt;br /&gt;
&lt;br /&gt;&lt;br /&gt;
&lt;font color=&quot;#000000&quot; style=&quot;background-color: transparent; &quot;&gt;이제 조금 더 명령어의 세부 비트 개념이 아닌 관점을 명령어를 읽는 것에 초점을 맞춰보겠습니다.&lt;/font&gt;&lt;br /&gt;
&lt;br /&gt;&lt;font color=&quot;#801fbf&quot; style=&quot;background-color: transparent; &quot;&gt;&lt;b&gt;&amp;nbsp;1. MOV{cond}{S} Rd, Op2&lt;/b&gt;&lt;/font&gt;&lt;br /&gt;
&lt;font color=&quot;#000000&quot; style=&quot;background-color: transparent; &quot;&gt;&amp;nbsp; Assembler에서 가장 기본적으로 사용되는 데이터 전송명령입니다. ARM에서의 MOV는 다른 칩의 MOV와 비슷하지만 그 Target이 되는 부분이 항상 레지스터라는 점 입니다.&lt;/font&gt;&lt;br /&gt;
&lt;font color=&quot;#000000&quot; style=&quot;background-color: transparent; &quot;&gt;&amp;nbsp;즉, Intel CPU같은 경우 아래 두 명령어 처리가 가능하지만&lt;/font&gt;&lt;br /&gt;
&lt;font color=&quot;#000000&quot; style=&quot;background-color: transparent; &quot;&gt;MOV EAX,[EBX]&amp;nbsp;&lt;/font&gt;&lt;br /&gt;
&lt;font color=&quot;#000000&quot; style=&quot;background-color: transparent; &quot;&gt;MOV EAX,EBX&amp;nbsp;&lt;/font&gt;&lt;br /&gt;
&lt;font color=&quot;#000000&quot; style=&quot;background-color: transparent; &quot;&gt;&amp;nbsp;&lt;/font&gt;&lt;br /&gt;
&lt;font color=&quot;#000000&quot; style=&quot;background-color: transparent; &quot;&gt;ARM같은 경우는 첫 번째는 처리할 수 없는 명령어 입니다. 즉, 레지스터나 Immediate 값 같은 것들을 레지스터에 넣는 명령입니다. 참고로.. Target 레지스터가 PC인 경우 S옵션을 사용하면, Exception 모드에서 보통 상태로 빠져 나오는 역할을 하게 됩니다. 예시 코드를 보겠습니다.&lt;/font&gt;&lt;br /&gt;
&lt;br /&gt;&lt;font color=&quot;#ffffff&quot; style=&quot;background-color: rgb(186, 52, 166);&quot;&gt;MOV r0,r1&lt;/font&gt;&lt;br /&gt;
&lt;font color=&quot;#000000&quot; style=&quot;background-color: transparent; &quot;&gt;단순히 r1에 있는 내용을 r0에 넣는 것입니다.&lt;/font&gt;&lt;br /&gt;
&lt;br /&gt;&lt;font style=&quot;background-color: rgb(186, 52, 166);&quot; color=&quot;#ffffff&quot;&gt;MOV r0,#0&lt;/font&gt;&lt;br /&gt;
&lt;font color=&quot;#000000&quot; style=&quot;background-color: transparent; &quot;&gt;r0에 상수 0을 넣는 명령입니다. ARM에서는 상수에 #을 붙혀서 사용합니다. 또 진법 표현은 C에서의 방법을 사용합니다. 즉, MOV r0,#0x30 이런 식으로 사용할 수도 있습니다. 혹은 &amp;amp;을 붙여서 16진수를 나타낼 수도 있습니다.&amp;nbsp;&lt;/font&gt;&lt;br /&gt;
&lt;br /&gt;&lt;font style=&quot;background-color: rgb(186, 52, 166);&quot; color=&quot;#ffffff&quot;&gt;MOV r0, #0xfc000003&lt;/font&gt;&lt;br /&gt;
&lt;font color=&quot;#000000&quot; style=&quot;background-color: transparent; &quot;&gt;r0에 상수 값 0xfc000003을 넣는 명령입니다. 해당 값은 8Bit 값 0xFF를 32Bit로 확장하고 오른쪽으로 두 번 Rotate 시킨 값입니다. 그래서 에러가 나지 않습니다.&lt;/font&gt;&lt;br /&gt;
&lt;br /&gt;&lt;font style=&quot;background-color: rgb(186, 52, 166);&quot; color=&quot;#ffffff&quot;&gt;MOV r0, r1, LSL #1&amp;nbsp;&lt;/font&gt;&lt;br /&gt;
&lt;font color=&quot;#000000&quot; style=&quot;background-color: transparent; &quot;&gt;r1을 왼쪽으로 1bit Shift한 값을 r0에 넣는 것입니다. LSL( Logical Shift Left )&amp;nbsp;&lt;/font&gt;&lt;br /&gt;
&lt;br /&gt;&lt;font style=&quot;background-color: rgb(186, 52, 166);&quot; color=&quot;#ffffff&quot;&gt;MOV r0, r1, LSR r2&lt;/font&gt;&lt;br /&gt;
&lt;font color=&quot;#000000&quot; style=&quot;background-color: transparent; &quot;&gt;r1을 r2 만큼 오른쪽으로 Shift 한 값을 r0에 넣는 명령입니다. LSR ( Logical Shift Right )&lt;/font&gt;&lt;br /&gt;
&lt;br /&gt;&lt;font style=&quot;background-color: rgb(186, 52, 166);&quot; color=&quot;#ffffff&quot;&gt;MOV r0, r0, ASR #24&lt;/font&gt;&lt;br /&gt;
&lt;font color=&quot;#000000&quot; style=&quot;background-color: transparent; &quot;&gt;r0을 오른쪽으로 24bit 만큼 Shift 한 값을 r0에 넣는다. ASR ( Arithmetic Shift Right )&lt;/font&gt;&lt;br /&gt;
&lt;font color=&quot;#000000&quot; style=&quot;background-color: transparent; &quot;&gt;LSR와 차이점은 최 상위 비트가 1인 경우 새로 계속 해당 비트 값을 유지시킨다는 것입니다.&amp;nbsp;&lt;/font&gt;&lt;br /&gt;
&lt;font color=&quot;#000000&quot; style=&quot;background-color: transparent; &quot;&gt;LSR 같은 경우는 새로 들어오는 최상위 비트는 항상 0입니다.&lt;/font&gt;&lt;br /&gt;
&lt;br /&gt;&lt;font style=&quot;background-color: rgb(186, 52, 166);&quot; color=&quot;#ffffff&quot;&gt;MOVS r0, r1, LSR #1&lt;/font&gt;&lt;font color=&quot;#000000&quot; style=&quot;background-color: transparent; &quot;&gt; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;; C(flag) = r1[0]&lt;/font&gt;&lt;br /&gt;
&lt;font style=&quot;background-color: rgb(186, 52, 166);&quot; color=&quot;#ffffff&quot;&gt;MOVCC r0, #10 &lt;/font&gt;&lt;font color=&quot;#000000&quot; style=&quot;background-color: transparent; &quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; ; if C == 0 then r0 = 10&amp;nbsp;&lt;/font&gt;&lt;br /&gt;
&lt;font style=&quot;background-color: rgb(186, 52, 166);&quot; color=&quot;#ffffff&quot;&gt;MOVCS r0, #11&lt;/font&gt;&lt;font color=&quot;#000000&quot; style=&quot;background-color: transparent; &quot;&gt; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; ; if C == 1 then r0 = 11&lt;/font&gt;&lt;br /&gt;
&lt;font color=&quot;#000000&quot; style=&quot;background-color: transparent; &quot;&gt;r1을 오른쪽으로 1bit Shift 한 값을 r0에 넣는다. 이 때 연산의 결과가 플래그에 영향을 미치도록 하기 위해 S를 붙힌 것이다.&lt;/font&gt;&lt;br /&gt;
&lt;font color=&quot;#000000&quot; style=&quot;background-color: transparent; &quot;&gt;만약 Carry Flag가 셋팅 됬을 때와 안됬을 때의 차이로 r0에 넣는 값이 달라진다.&lt;/font&gt;&lt;br /&gt;
&lt;br /&gt;&lt;font style=&quot;background-color: rgb(186, 52, 166);&quot; color=&quot;#ffffff&quot;&gt;MOVS r0, r4 &amp;nbsp; &lt;/font&gt;&lt;font color=&quot;#000000&quot; style=&quot;background-color: transparent; &quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;; if r4 == 0 then r0 = 0&lt;/font&gt;&lt;br /&gt;
&lt;font style=&quot;background-color: rgb(186, 52, 166);&quot; color=&quot;#ffffff&quot;&gt;MOVNE r0, #1 &lt;/font&gt;&lt;font color=&quot;#000000&quot; style=&quot;background-color: transparent; &quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; ; else r0 = 1&lt;/font&gt;&lt;br /&gt;
&lt;font color=&quot;#000000&quot; style=&quot;background-color: transparent; &quot;&gt;r0에 처음에 무조건 r4 값이 들어가고 MOVNE에서 r4 값이 0이면 0과 1은 다르므로 false로 MOVNE문은 실행되지 않습니다.&lt;/font&gt;&lt;br /&gt;
&lt;br /&gt;&lt;font style=&quot;background-color: transparent; &quot; color=&quot;#801fbf&quot;&gt;&lt;b&gt;2. MVN{cond}{s} &amp;nbsp; Rd, Op2&amp;nbsp;&lt;/b&gt;&lt;/font&gt;&lt;br /&gt;
&lt;font color=&quot;#000000&quot; style=&quot;background-color: transparent; &quot;&gt;&amp;nbsp;이 명령어는 Rd = NOT Operand2 의 의미를 가진 명령입니다. 기존 어셈블러에서는 볼 수 없던 명령이죠. 기능은 MOV 처럼 값을 넣긴 넣는데 NOT을 해서 넣는 명령입니다.&lt;/font&gt;&lt;br /&gt;
&lt;br /&gt;&lt;font style=&quot;background-color: rgb(186, 52, 166);&quot; color=&quot;#ffffff&quot;&gt;MVN r0, #0 &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; ; r0 = -1&lt;/font&gt;&lt;br /&gt;
&lt;font color=&quot;#000000&quot; style=&quot;background-color: transparent; &quot;&gt;&amp;nbsp;0을 NOT 하면 FF..FFF 이므로 -1 이 되게 됩니다.&lt;/font&gt;&lt;br /&gt;
&lt;font color=&quot;#000000&quot; style=&quot;background-color: transparent; &quot;&gt;또한 MOV r0, #0xFFFFFFFF 이렇게 하면 에러가 발생합니다. ARM의 모든 명령이 32bit 한 word이고 Immediate 어포랜드처리를 8bit 값을 Rotate 시키는 방식으로 사용하기 때문인데, MVN을 사용함으로써 해당 값을 넣을 수 있습니다.&amp;nbsp;&lt;/font&gt;&lt;br /&gt;
&lt;br /&gt;&lt;b&gt;&lt;font color=&quot;#801fbf&quot;&gt;&lt;font style=&quot;background-color: transparent; &quot;&gt;3. ADD{cond}{S} &amp;nbsp;Rd, Rn, Op2&lt;/font&gt;&lt;br /&gt;
&lt;font style=&quot;background-color: transparent; &quot;&gt;&amp;nbsp; &amp;nbsp;ADC{cond}{S} &amp;nbsp;Rd, Rn, Op2&lt;/font&gt;&lt;/font&gt;&lt;/b&gt;&lt;br /&gt;
&lt;font color=&quot;#000000&quot; style=&quot;background-color: transparent; &quot;&gt;더하기 명령입니다. Intel CPU와 차이점은 오퍼랜드를 3개 지정한다는 것입니다. Rd 는 결과가 저장될 레지스터로, Data Processing 명령 모두는 그 결과가 Rd로 들어가야만 합니다. 나머지 두개가 서로 더해질 오퍼랜드 입니다. 두개의 오퍼랜드 중 하나는 또 항상 레지스터여야만 합니다. Op2는 Shifted Register 혹은 Immediate Value 중 하나입니다.&amp;nbsp;&lt;/font&gt;&lt;br /&gt;
&lt;br /&gt;&lt;font style=&quot;background-color: rgb(186, 52, 166);&quot; color=&quot;#ffffff&quot;&gt;ADD r0, r0, #1 &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; ; r0 = r0 + 1&lt;/font&gt;&lt;br /&gt;
&lt;font color=&quot;#000000&quot; style=&quot;background-color: transparent; &quot;&gt;r0에 1을 더한 후 그 값을 r0 넣는 것입니다.&lt;/font&gt;&lt;br /&gt;
&lt;br /&gt;&lt;font style=&quot;background-color: rgb(186, 52, 166);&quot; color=&quot;#ffffff&quot;&gt;ADD r0, r1, r2 &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; ; r0 = r1 + r2&lt;/font&gt;&lt;br /&gt;
&lt;font color=&quot;#000000&quot; style=&quot;background-color: transparent; &quot;&gt;생략..&lt;/font&gt;&lt;br /&gt;
&lt;br /&gt;&lt;font style=&quot;background-color: rgb(186, 52, 166);&quot; color=&quot;#ffffff&quot;&gt;ADDS r0, r1, r1, LSL #2 &amp;nbsp; &amp;nbsp; ; r0 = r1 * 5&lt;/font&gt;&lt;br /&gt;
&lt;font color=&quot;#000000&quot; style=&quot;background-color: transparent; &quot;&gt;알아서 유추... 모든 수의 &amp;lt;&amp;lt;1 은.. x2..&lt;/font&gt;&lt;br /&gt;
&lt;br /&gt;&lt;font style=&quot;background-color: rgb(186, 52, 166);&quot; color=&quot;#ffffff&quot;&gt;ADD r0, r0, r1&lt;/font&gt;&lt;font color=&quot;#000000&quot; style=&quot;background-color: transparent; &quot;&gt; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; ; r0 = r0 + r1&lt;/font&gt;&lt;br /&gt;
&lt;font style=&quot;background-color: rgb(186, 52, 166);&quot; color=&quot;#ffffff&quot;&gt;MOV pc, lr&lt;/font&gt;&lt;font color=&quot;#000000&quot; style=&quot;background-color: transparent; &quot;&gt; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;; return&lt;/font&gt;&lt;br /&gt;
&lt;font color=&quot;#000000&quot; style=&quot;background-color: transparent; &quot;&gt;r0 과 r1을 더해 r0에 넣고 리턴 하고 있습니다. 리턴 값은 r0 레지스터에 들어가게 됩니다.&lt;/font&gt;&lt;br /&gt;
&lt;br /&gt;&lt;b&gt;&lt;font color=&quot;#801fbf&quot;&gt;&lt;font style=&quot;background-color: transparent; &quot;&gt;4. SUB{cond}{S} &amp;nbsp; &amp;nbsp; Rd, Rn, Op2&lt;/font&gt;&lt;br /&gt;
&lt;font style=&quot;background-color: transparent; &quot;&gt;&amp;nbsp; &amp;nbsp;
SBC{cond}{S} &amp;nbsp; &amp;nbsp; Rd, Rn, Op2&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; ; Carry Flag와 관련되어 있는 명령&lt;/font&gt;&lt;br /&gt;
&lt;font style=&quot;background-color: transparent; &quot;&gt;&amp;nbsp; &amp;nbsp; RSB{cond}{S} &amp;nbsp; &amp;nbsp; Rd, Rn, Op2&amp;nbsp;&amp;nbsp;&lt;/font&gt;&lt;br /&gt;
&lt;font style=&quot;background-color: transparent; &quot;&gt;&amp;nbsp; &amp;nbsp; RSC{cond}{S} &amp;nbsp; &amp;nbsp; Rd, Rn, Op2&amp;nbsp;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;;&amp;nbsp;Carry Flag와 관련되어 있는 명령&amp;nbsp;&lt;/font&gt;&lt;/font&gt;&lt;/b&gt;&lt;br /&gt;
&lt;br /&gt;&lt;font color=&quot;#000000&quot; style=&quot;background-color: transparent; &quot;&gt;위 네 명령은 빼기 명령입니다. R로 시작하는 명령은 Rn과 Op2를 바꿔서 명령하는 명령입니다. 즉,&lt;/font&gt;&lt;br /&gt;
&lt;font color=&quot;#000000&quot; style=&quot;background-color: transparent; &quot;&gt;SUB Rd, Rn, Op2 &amp;nbsp; =&amp;gt; Rd = Rn - Op2&lt;/font&gt;&lt;br /&gt;
&lt;font color=&quot;#000000&quot; style=&quot;background-color: transparent; &quot;&gt;RSB Rd, Rn, Op2 &amp;nbsp; =&amp;gt; Rd = Op2 - Rn&amp;nbsp;&lt;/font&gt;&lt;br /&gt;
&lt;br /&gt;&lt;font color=&quot;#000000&quot; style=&quot;background-color: transparent; &quot;&gt;SBC Rd, Rn, Op2 &amp;nbsp; =&amp;gt; Rd = &amp;nbsp;Rn - Op2 + Carry - 1&lt;/font&gt;&lt;br /&gt;
&lt;br /&gt;&lt;b&gt;&lt;font color=&quot;#801fbf&quot;&gt;&lt;font style=&quot;background-color: transparent; &quot;&gt;5. AND{cond}{S} &amp;nbsp;Rd, Rn, Op2&lt;/font&gt;&lt;br /&gt;
&lt;font style=&quot;background-color: transparent; &quot;&gt;&amp;nbsp; &amp;nbsp; EOR{cond}{S} &amp;nbsp;Rd, Rn, Op2&lt;/font&gt;&lt;br /&gt;
&lt;font style=&quot;background-color: transparent; &quot;&gt;&amp;nbsp; &amp;nbsp; ORR{cond}{S} &amp;nbsp;Rd, Rn, Op2&lt;/font&gt;&lt;/font&gt;&lt;/b&gt;&lt;br /&gt;
&lt;br /&gt;&lt;font color=&quot;#000000&quot; style=&quot;background-color: transparent; &quot;&gt;이번엔 Bit 연산에 관련된 명령어들입니다. &lt;/font&gt;&lt;br /&gt;
&lt;font color=&quot;#000000&quot; style=&quot;background-color: transparent; &quot;&gt;AND =&amp;gt; AND&lt;/font&gt;&lt;br /&gt;
&lt;font color=&quot;#000000&quot; style=&quot;background-color: transparent; &quot;&gt;EOR =&amp;gt; XOR&lt;/font&gt;&lt;br /&gt;
&lt;font color=&quot;#000000&quot; style=&quot;background-color: transparent; &quot;&gt;ORR =&amp;gt; OR&amp;nbsp;&lt;/font&gt;&lt;br /&gt;
&lt;br /&gt;&lt;font color=&quot;#000000&quot; style=&quot;background-color: transparent; &quot;&gt;B 명령을 제외하고는 왠만한 명령어는 모두 3글자라서 ORR로 했나봅니다.&lt;/font&gt;&lt;br /&gt;
&lt;br /&gt;&lt;font style=&quot;background-color: rgb(186, 52, 166);&quot; color=&quot;#ffffff&quot;&gt;AND r0, r0, #0xFF&lt;/font&gt;&lt;br /&gt;
&lt;font color=&quot;#000000&quot; style=&quot;background-color: transparent; &quot;&gt;r0과 0xFF를 and 연산 후 그 결과를 r0에 넣습니다. r0의 8bit만 남기는 명령입니다.&lt;/font&gt;&lt;br /&gt;
&lt;br /&gt;&lt;font style=&quot;background-color: rgb(186, 52, 166);&quot; color=&quot;#ffffff&quot;&gt;ANDCSS r0, r1, ASR r3&amp;nbsp;&lt;/font&gt;&lt;br /&gt;
&lt;font color=&quot;#000000&quot; style=&quot;background-color: transparent; &quot;&gt;만약 캐리플래그가 설정되어 있다면 r0 = r0 AND ( r1 &amp;gt;&amp;gt; r3 ) 을 수행합니다. 계산 결과는 플래그에 영향을 미칩니다.&lt;/font&gt;&lt;br /&gt;
&lt;br /&gt;&lt;font style=&quot;background-color: rgb(186, 52, 166);&quot; color=&quot;#ffffff&quot;&gt;EORS r0, r0, r0&lt;/font&gt;&lt;br /&gt;
&lt;font color=&quot;#000000&quot; style=&quot;background-color: transparent; &quot;&gt;&amp;nbsp;r0 = r0 XOR r0 을 수행하는 명령인데 r0을 0으로 만들고 NF는 0, ZF는 1로 만듭니다.&lt;/font&gt;&lt;br /&gt;
&lt;br /&gt;&lt;span style=&quot;background-color: rgb(186, 52, 166);&quot;&gt;&lt;font color=&quot;#ffffff&quot;&gt;MOV r0, #0xFF&lt;br /&gt;
ORR r0, r0, #0xFF00&lt;/font&gt;&lt;/span&gt;&lt;br /&gt;
&lt;font color=&quot;#000000&quot; style=&quot;background-color: transparent; &quot;&gt;최종적으로 r0을 0xFFFF를 만드는 과정입니다.&lt;/font&gt;&lt;br /&gt;
&lt;br /&gt;&lt;font style=&quot;background-color: transparent; &quot; color=&quot;#801fbf&quot;&gt;&lt;b&gt;6. BIC{cond}{S} &amp;nbsp; &amp;nbsp;Rd, Rn, Op2&lt;/b&gt;&lt;/font&gt;&lt;br /&gt;
&lt;font color=&quot;#000000&quot; style=&quot;background-color: transparent; &quot;&gt;&amp;nbsp;Rd = Rn AND (NOT Op2) 로 설명이 되어 있는 명링입니다.&lt;/font&gt;&lt;br /&gt;
&lt;br /&gt;&lt;font style=&quot;background-color: rgb(186, 52, 166);&quot; color=&quot;#ffffff&quot;&gt;BIC r0, r1, #3&lt;/font&gt;&lt;br /&gt;
&lt;font color=&quot;#000000&quot; style=&quot;background-color: transparent; &quot;&gt;r0 = r1 AND 0xFFFFFFFC 의미입니다.&lt;/font&gt;&lt;br /&gt;
&lt;br /&gt;&lt;b&gt;&lt;font color=&quot;#801fbf&quot;&gt;&lt;font style=&quot;background-color: transparent; &quot;&gt;7. CMP{cond} &amp;nbsp;Rn, Op2&lt;/font&gt;&lt;br /&gt;
&lt;font style=&quot;background-color: transparent; &quot;&gt;&amp;nbsp; &amp;nbsp;CMN{cond} &amp;nbsp;Rn, Op2&lt;/font&gt;&lt;/font&gt;&lt;/b&gt;&lt;br /&gt;
&lt;br /&gt;&lt;font color=&quot;#000000&quot; style=&quot;background-color: transparent; &quot;&gt;비교 명령입니다. MOV, MVN처럼 인수가 2개이지만 Rd가 없습니다.&lt;/font&gt;&lt;br /&gt;
&lt;font color=&quot;#000000&quot; style=&quot;background-color: transparent; &quot;&gt;CMP는 우리가 알던 CMP명령입니다. Rn에서 Op2를 빼 보는 명령이죠. 해당 명령은 레지스터에는 영향을 미치지 않고 플래그에만 영향을 미치는데 이 명령어들은 S 옵션이 없어도 디폴트로 S 옵션을 준 효과가 나타납니다. S 옵션마저 꺼지면.. -_-&lt;/font&gt;&lt;br /&gt;
&lt;font color=&quot;#000000&quot; style=&quot;background-color: transparent; &quot;&gt;Nop 같은 명령어가 되는건가요?? ㅎ&lt;/font&gt;&lt;br /&gt;
&lt;br /&gt;&lt;font color=&quot;#000000&quot; style=&quot;background-color: transparent; &quot;&gt;CMN은 CMP와 반대로 두 오퍼랜드를 더해보는 명령입니다.&lt;/font&gt;&lt;br /&gt;
&lt;br /&gt;&lt;font style=&quot;background-color: rgb(186, 52, 166);&quot; color=&quot;#ffffff&quot;&gt;CMP r2, #23&lt;/font&gt;&lt;br /&gt;
&lt;font style=&quot;background-color: rgb(186, 52, 166);&quot; color=&quot;#ffffff&quot;&gt;MOVEQ r2, #45&lt;/font&gt;&lt;br /&gt;
&lt;font color=&quot;#000000&quot; style=&quot;background-color: transparent; &quot;&gt;&amp;nbsp;만약 r2가 23이면 45를 넣어라..&lt;/font&gt;&lt;br /&gt;
&lt;br /&gt;&lt;span style=&quot;background-color: rgb(186, 52, 166);&quot;&gt;&lt;font color=&quot;#ffffff&quot;&gt;CMP r0, #0&lt;br /&gt;
CMPEQ r1, #0&lt;br /&gt;
CMPEQ r2, #0&lt;br /&gt;
CMPEQ r3, #0&lt;br /&gt;
MOVEQ r4, #12&lt;/font&gt;&lt;/span&gt;&lt;br /&gt;
&lt;font color=&quot;#000000&quot; style=&quot;background-color: transparent; &quot;&gt;r0부터 r3까지 모두 0이라면 r4에 12를 넣는 명령&amp;nbsp;&lt;/font&gt;&lt;br /&gt;
&lt;br /&gt;&lt;span style=&quot;background-color: rgb(186, 52, 166);&quot;&gt;&lt;font color=&quot;#ffffff&quot;&gt;CMN r1, r2&lt;br /&gt;
MOVEQ r0, #0&lt;br /&gt;
MVNNE r0, #1&lt;/font&gt;&lt;/span&gt;&lt;br /&gt;
&lt;font color=&quot;#000000&quot; style=&quot;background-color: transparent; &quot;&gt;r0 = (r1 + r2) == 0 ? 0, -1 &amp;nbsp;이라는 의미.. 영어 해석 같네요.. -_-;&lt;/font&gt;&lt;br /&gt;
&lt;br /&gt;&lt;b&gt;&lt;font color=&quot;#801fbf&quot;&gt;&lt;font style=&quot;background-color: transparent; &quot;&gt;8. TEQ{cond} &amp;nbsp;Rn, Op2&lt;/font&gt;&lt;br /&gt;
&lt;font style=&quot;background-color: transparent; &quot;&gt;&amp;nbsp; &amp;nbsp;TST{cond} &amp;nbsp;Rn, Op2&lt;/font&gt;&lt;/font&gt;&lt;/b&gt;&lt;br /&gt;
&lt;br /&gt;&lt;font color=&quot;#000000&quot; style=&quot;background-color: transparent; &quot;&gt;CMP와 거의 비슷한 구조를 갖는 명령입니다. 기능도 거의 유사..&lt;/font&gt;&lt;br /&gt;
&lt;font color=&quot;#000000&quot; style=&quot;background-color: transparent; &quot;&gt;CMP가 빼기, CMN가 더하기라면&lt;/font&gt;&lt;br /&gt;
&lt;font color=&quot;#000000&quot; style=&quot;background-color: transparent; &quot;&gt;TEQ는 XOR, TST는 AND 연산을 통해 같은 일을 합니다. &lt;/font&gt;&lt;br /&gt;
&lt;font color=&quot;#000000&quot; style=&quot;background-color: transparent; &quot;&gt;하지만 특징이라면 Logical 연산이 일어날 경우 플래그 중에서 VF(Overflow)는 영향을 받지 않습니다.&lt;/font&gt;&lt;br /&gt;
&lt;br /&gt;&lt;font style=&quot;background-color: rgb(186, 52, 166);&quot; color=&quot;#ffffff&quot;&gt;CMP r0, #31&lt;/font&gt;&lt;font color=&quot;#000000&quot; style=&quot;background-color: transparent; &quot;&gt; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; ; r0 &amp;lt;= 31&lt;/font&gt;&lt;br /&gt;
&lt;font style=&quot;background-color: rgb(186, 52, 166);&quot; color=&quot;#ffffff&quot;&gt;TEQ r0, #127&lt;/font&gt;&lt;font color=&quot;#000000&quot; style=&quot;background-color: transparent; &quot;&gt; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;; r0 == 127&lt;/font&gt;&lt;br /&gt;
&lt;font style=&quot;background-color: rgb(186, 52, 166);&quot; color=&quot;#ffffff&quot;&gt;MOVLS r0,#'.'&lt;/font&gt;&lt;font color=&quot;#000000&quot; style=&quot;background-color: transparent; &quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; ; if either then r0 ='.'&lt;/font&gt;&lt;br /&gt;
&lt;br /&gt;&lt;span style=&quot;background-color: rgb(186, 52, 166);&quot;&gt;&lt;font color=&quot;#ffffff&quot;&gt;TST r1, #3 &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;&amp;nbsp;&lt;br /&gt;
MOVEQ r0, #1 &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;&lt;br /&gt;
MOVNE r0, #0&amp;nbsp;&lt;/font&gt;&lt;/span&gt;&lt;br /&gt;
&lt;font color=&quot;#000000&quot; style=&quot;background-color: transparent; &quot;&gt;r0 = (r1 &amp;amp; 3) == 0 ? 1 : 0 이러한 의미 같습니다.&lt;/font&gt;&lt;br /&gt;
&lt;br /&gt;&lt;font color=&quot;#000000&quot; style=&quot;background-color: transparent; &quot;&gt;&lt;b&gt;&amp;nbsp;● PSR Transfer&amp;nbsp;&lt;/b&gt;&lt;/font&gt;&lt;br /&gt;
&lt;font color=&quot;#000000&quot; style=&quot;background-color: transparent; &quot;&gt;PSR이란 Program Status Register 로서 플래그 비트와 Control 비트들로 구성된 레지스터 입니다. 해당 레지스터의 값을 일반 레지스터로 옮기거나 반대의 일을 하는 명령이 PSR Transfer 명령입니다.&amp;nbsp;&lt;/font&gt;&lt;br /&gt;
&lt;br /&gt;&lt;font color=&quot;#000000&quot; style=&quot;background-color: transparent; &quot;&gt;&amp;nbsp;PSR은 32Bit 레지스터입니다. CPSR, SPSR 5개를 합쳐서 총 6개가 있습니다. 여기서 SPSR은 Exception 모드에 따라 여분으로 존재하는 PSR을 말합니다. 실행 모드에 따라서 User가 접근할 수 있는 PSR은 한개, 혹은 2개로 제한됩니다. 예를 들어 User모드에서는 CPSR에만 접근 할 수 있고, IRQ모드에서는 CPSR과 SPSR_irp 에 접근할 수 있습니다.&lt;/font&gt;&lt;br /&gt;
&lt;br /&gt;&lt;font color=&quot;#000000&quot; style=&quot;background-color: transparent; &quot;&gt;아래 명령어는 그닦 쓸일이 없고 CPU 동작 모드를 임의로 설정하거나, 현재 동작모드를 확인하기 위해서 사용되는 경우가 있습니다.&amp;nbsp;&lt;/font&gt;&lt;br /&gt;
&lt;br /&gt;&lt;b&gt;&lt;font color=&quot;#801fbf&quot;&gt;&lt;font style=&quot;background-color: transparent; &quot;&gt;1. &amp;nbsp;MRS{cond} &amp;nbsp;Rd,&amp;lt;psr&amp;gt; &amp;nbsp; &amp;nbsp; : Transfer PSR contents to a register&lt;/font&gt;&lt;br /&gt;
&lt;font style=&quot;background-color: transparent; &quot;&gt;&amp;nbsp; &amp;nbsp; MSR{cond} &amp;nbsp;&amp;lt;psr&amp;gt;, Rm &amp;nbsp; &amp;nbsp;: Transfer register contents to PSR&lt;/font&gt;&lt;br /&gt;
&lt;font style=&quot;background-color: transparent; &quot;&gt;&amp;nbsp; &amp;nbsp; MSR{cond} &amp;nbsp;&amp;lt;psrf&amp;gt;, Rm &amp;nbsp; : Transfer register contents to PSR flag bits only&lt;/font&gt;&lt;/font&gt;&lt;/b&gt;&lt;br /&gt;
&lt;br /&gt;&lt;font color=&quot;#000000&quot; style=&quot;background-color: transparent; &quot;&gt;MRS명령과 MSR 명령의 의미가 애매할 수도 있습니다. M을 Move로, R을 레지스터로, S를 PSF로 파악하면 MRS의 경우엔 Move Reg PSR 정도로 생각할 수 있습니다. 즉, 레지스터에 PSR 값을 넣는 명령&lt;/font&gt;&lt;br /&gt;
&lt;br /&gt;&lt;font color=&quot;#000000&quot; style=&quot;background-color: transparent; &quot;&gt;예제 생략.. = _ =&lt;/font&gt;&lt;br /&gt;
&lt;br /&gt;&lt;font color=&quot;#000000&quot; style=&quot;background-color: transparent; &quot;&gt;&lt;b&gt;&amp;nbsp;● 곱하기 명령(MUL, MLA)&lt;/b&gt;&lt;/font&gt;&lt;br /&gt;
&lt;font color=&quot;#000000&quot; style=&quot;background-color: transparent; &quot;&gt;ARM에서는 곱하기 명령이 크게 두 종류가 있습니다. 하나는 그냥 곱하는 것이고, 다른 하나는 곱해서 더하는 것입니다.&lt;/font&gt;&lt;br /&gt;
&lt;br /&gt;&lt;font style=&quot;background-color: transparent; &quot; color=&quot;#801fbf&quot;&gt;&lt;b&gt;&amp;nbsp;1. MUL{cond}{S} &amp;nbsp; Rd, Rm, Rs&amp;nbsp;&lt;/b&gt;&lt;/font&gt;&lt;br /&gt;
&lt;font color=&quot;#000000&quot; style=&quot;background-color: transparent; &quot;&gt;이 명령에서는 레지스터만을 사용해야 합니다.&lt;/font&gt;&lt;br /&gt;
&lt;br /&gt;&lt;font style=&quot;background-color: rgb(186, 52, 166);&quot; color=&quot;#ffffff&quot;&gt;MUL r1, r2, r3&lt;/font&gt;&lt;font color=&quot;#000000&quot; style=&quot;background-color: transparent; &quot;&gt; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;; r1 = r2 * r3&lt;/font&gt;&lt;br /&gt;
&lt;font color=&quot;#000000&quot; style=&quot;background-color: transparent; &quot;&gt;참고로 곱하기의 결과가 32Bit를 넘는다면, 하위 32Bit만 결과 레지스터에 남습니다.&lt;/font&gt;&lt;br /&gt;
&lt;br /&gt;&lt;font style=&quot;background-color: transparent; &quot; color=&quot;#801fbf&quot;&gt;&lt;b&gt;&amp;nbsp;2. MLA{cond}{S} &amp;nbsp; Rd, Rm, Rs, Rn&lt;/b&gt;&lt;/font&gt;&lt;br /&gt;
&lt;font color=&quot;#000000&quot; style=&quot;background-color: transparent; &quot;&gt;이번엔 레지스터가 4개 입니다.&lt;/font&gt;&lt;br /&gt;
&lt;br /&gt;&lt;font color=&quot;#000000&quot; style=&quot;background-color: transparent; &quot;&gt;Rd = Rm * Rs + Rn 의 의미 입니다.&amp;nbsp;&lt;/font&gt;&lt;br /&gt;
&lt;br /&gt;&lt;font color=&quot;#000000&quot; style=&quot;background-color: transparent; &quot;&gt;&lt;b&gt;&amp;nbsp;● Single Data Transfer( LDR, STR )&lt;/b&gt;&lt;/font&gt;&lt;br /&gt;
&lt;font color=&quot;#000000&quot; style=&quot;background-color: transparent; &quot;&gt;해당 명령은 레지스터와 외부 메모리와의 데이터 전송을 담당하는 명령입니다. 무척 사용 빈도가 높은 명령. Intel CPU에서는 MOV 하나로 레지스터간의 데이터 전송과, 외부메모리와의 데이터 전송의 두 가지 목적으로 사용하지만 ARM에서는 구분이 되어 있습니다.&lt;/font&gt;&lt;br /&gt;
&lt;br /&gt;&lt;font color=&quot;#000000&quot; style=&quot;background-color: transparent; &quot;&gt;&amp;nbsp;즉, MOV 명령은 레지스터간의 전송명령, 데이터 처리명령으로 분류되고&lt;/font&gt;&lt;br /&gt;
&lt;font color=&quot;#000000&quot; style=&quot;background-color: transparent; &quot;&gt;LDR, STR은 데이터 전송명령으로 분류됩니다.&amp;nbsp;&lt;/font&gt;&lt;br /&gt;
&lt;br /&gt;&lt;font color=&quot;#000000&quot; style=&quot;background-color: transparent; &quot;&gt;LDR은 Load라는 의미로 외부 메모리로부터 레지스터로 데이터를 읽어오는 명령이고,&lt;/font&gt;&lt;br /&gt;
&lt;font color=&quot;#000000&quot; style=&quot;background-color: transparent; &quot;&gt;STR은 Storage라는 의미로 레지스터로부터 외부 메모리로 데이터를 저장하라는 명령입니다.&lt;/font&gt;&lt;br /&gt;
&lt;br /&gt;&lt;b&gt;&lt;font color=&quot;#801fbf&quot;&gt;&lt;font style=&quot;background-color: transparent; &quot;&gt;1. LDR{cond}{B} &amp;nbsp;Rd, address{!} &amp;nbsp; &amp;nbsp; &amp;nbsp; ; Rd = Contents of address&lt;/font&gt;&lt;br /&gt;
&lt;font style=&quot;background-color: transparent; &quot;&gt;&amp;nbsp; &amp;nbsp;LDR{cond}{B} &amp;nbsp;Rd, =expression &amp;nbsp; &amp;nbsp; &amp;nbsp;; Rd = expression&lt;/font&gt;&lt;br /&gt;
&lt;font style=&quot;background-color: transparent; &quot;&gt;&amp;nbsp; &amp;nbsp;STR{cond}{B} &amp;nbsp;Rd, address{!} &amp;nbsp; &amp;nbsp; &amp;nbsp; ; contents of address = Rd&lt;/font&gt;&lt;/font&gt;&lt;/b&gt;&lt;br /&gt;
&lt;br /&gt;&lt;font color=&quot;#000000&quot; style=&quot;background-color: transparent; &quot;&gt;LDR과 STR은 Single Data 전송 명령입니다. 비슷한 명령으로 LDM, STM은 여러 개의 레지스터 내용을 전송할 수 있는 명령입니다. 이 밖에 SWP라는 스왑 명령이 있는데, 해당 5개의 명령만이 외부 메모리와 레지스터간의 전송을 가능하게 하는 명령입니다. &lt;/font&gt;&lt;br /&gt;
&lt;br /&gt;&lt;font color=&quot;#000000&quot; style=&quot;background-color: transparent; &quot;&gt;&amp;nbsp;LDR과 STR의 경우 전송 단위를 바이트, 혹은 워드(32bit)단위로 수행 할 수 있습니다.&lt;/font&gt;&lt;br /&gt;
&lt;font color=&quot;#000000&quot; style=&quot;background-color: transparent; &quot;&gt;바이트 단위 전송의 경우 해당 레지스터의 어떤 부분이 사용될지의 여부는 해당 프로세서의 Endian에 달려 있습니다.&lt;/font&gt;&lt;br /&gt;
&lt;font color=&quot;#000000&quot; style=&quot;background-color: transparent; &quot;&gt;또, 워드 전송 명령을 사용할 경우, 메모리 주소는 Word align이 되어야 합니다.&lt;/font&gt;&lt;br /&gt;
&lt;br /&gt;&lt;font color=&quot;#000000&quot; style=&quot;background-color: transparent; &quot;&gt;Endian 설명&lt;/font&gt;&lt;br /&gt;
&lt;a href=&quot;http://ko.wikipedia.org/wiki/%EC%97%94%EB%94%94%EC%96%B8&quot; style=&quot;background-color: transparent; color: rgb(0, 0, 0); &quot;&gt;http://ko.wikipedia.org/wiki/%EC%97%94%EB%94%94%EC%96%B8&lt;/a&gt;&lt;font color=&quot;#000000&quot; style=&quot;background-color: transparent; &quot;&gt;&amp;nbsp;&amp;nbsp;&lt;/font&gt;&lt;br /&gt;
&lt;br /&gt;&lt;font color=&quot;#000000&quot; style=&quot;background-color: transparent; &quot;&gt;아래 그림은 LDR과 STR에서 사용하는 전송 모드를 나타낸 것입니다.&lt;/font&gt;&lt;br /&gt;
&lt;font color=&quot;#000000&quot; style=&quot;background-color: transparent; &quot;&gt;&lt;div class=&quot;imageblock&quot; style=&quot;display:inline;&quot;&gt;&lt;a href=&quot;http://cfile23.uf.tistory.com/original/137448464F210B881AAFE7&quot; rel=&quot;lightbox&quot; target=&quot;_blank&quot;&gt;&lt;img src=&quot;http://cfile23.uf.tistory.com/image/137448464F210B881AAFE7&quot; alt=&quot;&quot; filemime=&quot;image/jpeg&quot; filename=&quot;사용자 지정 10.jpg&quot; height=&quot;407&quot; width=&quot;532&quot;/&gt;&lt;/a&gt;&lt;/div&gt;&lt;/font&gt;&lt;br /&gt;
&lt;br /&gt;&lt;font color=&quot;#000000&quot; style=&quot;background-color: transparent; &quot;&gt;&lt;b&gt;&amp;nbsp;1) Pre-Indexed Addressing Mode&lt;/b&gt;&lt;/font&gt;&lt;br /&gt;
&lt;font color=&quot;#000000&quot; style=&quot;background-color: transparent; &quot;&gt;이 모드에서는 Rn을 베이스 주소로 사용합니다. 여기에 더해서 Offset을 지정하거나, 혹은 지정하지 않을 수 있습니다. Offset을 사용할 경우에는 해당 Offset을 베이스 주소에서 더하도록 하거나 뺄 수 있는데, 위의 그림에서 +,- 기호가 그것을 나타냅니다.&lt;/font&gt;&lt;br /&gt;
&lt;br /&gt;&lt;font style=&quot;background-color: rgb(186, 52, 166);&quot; color=&quot;#ffffff&quot;&gt;LDR r0, [r1]&amp;nbsp;&lt;/font&gt;&lt;br /&gt;
&lt;font color=&quot;#000000&quot; style=&quot;background-color: transparent; &quot;&gt;r1을 베이스로 사용하고 Offset은 지정하지 않은 형태입니다. r0에 r1을 번지로 하는 워드를 읽어드립니다.&lt;/font&gt;&lt;br /&gt;
&lt;br /&gt;&lt;font style=&quot;background-color: rgb(186, 52, 166);&quot; color=&quot;#ffffff&quot;&gt;LDR r0, [r1, #132]&lt;/font&gt;&lt;font color=&quot;#000000&quot; style=&quot;background-color: transparent; &quot;&gt;&amp;nbsp;&lt;/font&gt;&lt;br /&gt;
&lt;font color=&quot;#000000&quot; style=&quot;background-color: transparent; &quot;&gt;Offset으로 132를 지정한 형태입니다.&lt;/font&gt;&lt;br /&gt;
&lt;br /&gt;&lt;font style=&quot;background-color: rgb(186, 52, 166);&quot; color=&quot;#ffffff&quot;&gt;STR r0, [r1, r2]&lt;/font&gt;&lt;br /&gt;
&lt;font color=&quot;#000000&quot; style=&quot;background-color: transparent; &quot;&gt;베이스는 r1, Offset은 r2를 사용한 형태입니다. 즉,&lt;/font&gt;&lt;br /&gt;
&lt;font color=&quot;#000000&quot; style=&quot;background-color: transparent; &quot;&gt;*(r1 + r2) = r0&lt;/font&gt;&lt;br /&gt;
&lt;font color=&quot;#000000&quot; style=&quot;background-color: transparent; &quot;&gt;사람 해깔리게 우 =&amp;gt; 좌가 아닌 이 명령어는 좌 =&amp;gt; 우 &amp;nbsp; 네요..;&lt;/font&gt;&lt;br /&gt;
&lt;br /&gt;&lt;font style=&quot;background-color: rgb(186, 52, 166);&quot; color=&quot;#ffffff&quot;&gt;LDR r0, [r1, r2, LSL #2]&lt;/font&gt;&lt;br /&gt;
&lt;font color=&quot;#000000&quot; style=&quot;background-color: transparent; &quot;&gt;베이스 r1, Offset은 r2 &amp;lt;&amp;lt; 2 의 형태&lt;/font&gt;&lt;br /&gt;
&lt;br /&gt;&lt;font color=&quot;#000000&quot; style=&quot;background-color: transparent; &quot;&gt;이번에는 Write-Back 기능입니다. LDR 명령의 경우 옵션으로 Write-Back을 지정할 수 있는데, 지정할 경우 원래 베이스에 Offset을 더한 값을 다시 베이스 레지스터로 넣는 기능을 합니다.&amp;nbsp;&lt;/font&gt;&lt;br /&gt;
&lt;br /&gt;&lt;span style=&quot;background-color: rgb(186, 52, 166);&quot;&gt;&lt;font color=&quot;#ffffff&quot;&gt;STR r2, [r0, #-4]!&lt;br /&gt;
r2 = *(r0 - 4)&lt;br /&gt;
r0 = r0 - 4&lt;/font&gt;&lt;/span&gt;&lt;br /&gt;
&lt;font color=&quot;#000000&quot; style=&quot;background-color: transparent; &quot;&gt;이와 같은 의미가 됩니다. Offset을 적용 시켜서 먼저 명령어를 수행 한 후 베이스 주소와 Offset을 더해주는 것이죠.&amp;nbsp;&lt;/font&gt;&lt;br /&gt;
&lt;font color=&quot;#000000&quot; style=&quot;background-color: transparent; &quot;&gt;아무튼 여기서 Pre-Index Mode이기 때문에 실제 주소를 구할 때 Offset을 먼저 빼준 것입니다.&amp;nbsp;&lt;/font&gt;&lt;br /&gt;
&lt;br /&gt;&lt;font color=&quot;#000000&quot; style=&quot;background-color: transparent; &quot;&gt;&lt;b&gt;&amp;nbsp;2) Post-Indexed Addressing Mode&lt;/b&gt;&lt;/font&gt;&lt;br /&gt;
&lt;font color=&quot;#000000&quot; style=&quot;background-color: transparent; &quot;&gt;Post 인덱스 모드의 경우에는 Pre 인덱스 모드에 비해 Effective Address는 항상 Rn, 즉, 베이스 주소를 나타내는 레지스터의 값입니다. 그리고 한가지 알아두어야할 것은 Post 인덱스 모드의 경우엔 따로 !를 사용하지 않더라도 이폴트로 Write-Back 모드가 사용됩니다. Post인데 Write-Back이 안된다면, Offset을 사용할 이유가 없군요.&lt;/font&gt;&lt;br /&gt;
&lt;br /&gt;&lt;font style=&quot;background-color: rgb(186, 52, 166);&quot; color=&quot;#ffffff&quot;&gt;LDR r0, [r1], r2&lt;/font&gt;&lt;font color=&quot;#000000&quot; style=&quot;background-color: transparent; &quot;&gt;&amp;nbsp;&lt;/font&gt;&lt;br /&gt;
&lt;font color=&quot;#000000&quot; style=&quot;background-color: transparent; &quot;&gt;대괄호의 사용이 Pre 인덱스의 경우와 다릅니다.&lt;/font&gt;&lt;br /&gt;
&lt;font color=&quot;#000000&quot; style=&quot;background-color: transparent; &quot;&gt;r0 에다 r1을 주소로 하여 값을 읽어오고 다시 r1에는 r2를 더해주는 일을 합니다.&lt;/font&gt;&lt;br /&gt;
&lt;br /&gt;&lt;font color=&quot;#000000&quot; style=&quot;background-color: transparent; &quot;&gt;&lt;b&gt;&amp;nbsp;3) Relative Addressing Mode&lt;/b&gt;&lt;/font&gt;&lt;br /&gt;
&lt;font color=&quot;#000000&quot; style=&quot;background-color: transparent; &quot;&gt;해당 Addressing 모드는 어셈블러가 적절히 지원하여 변환해 주는 모드라고 생각하면 됩니다.&amp;nbsp;&lt;/font&gt;&lt;br /&gt;
&lt;br /&gt;&lt;font color=&quot;#000000&quot; style=&quot;background-color: transparent; &quot;&gt;LDR r5, ThreeCubed&amp;nbsp;&lt;/font&gt;&lt;br /&gt;
&lt;font color=&quot;#000000&quot; style=&quot;background-color: transparent; &quot;&gt;ThreeCubed DCD 27&amp;nbsp;&lt;/font&gt;&lt;br /&gt;
&lt;br /&gt;&lt;font color=&quot;#000000&quot; style=&quot;background-color: transparent; &quot;&gt;위와 같은 경우 실제로는&lt;/font&gt;&lt;br /&gt;
&lt;font style=&quot;background-color: rgb(186, 52, 166);&quot; color=&quot;#ffffff&quot;&gt;LDR r5, [PC, #constant]&lt;/font&gt;&lt;br /&gt;
&lt;font color=&quot;#000000&quot; style=&quot;background-color: transparent; &quot;&gt;형태의 코드로 번역해 줍니다. 즉, PC를 베이스로 삼아서 코드를 만드는 것이지요. 만약 해당 Symbol이 지정하는 범위가 너무 커서 상수로 지정할 수 없다면 어셈블을 할 때 에러를 내게 됩니다.&lt;/font&gt;&lt;br /&gt;
&lt;br /&gt;&lt;font style=&quot;background-color: rgb(186, 52, 166);&quot; color=&quot;#ffffff&quot;&gt;LDR r0, =0x12345678&lt;/font&gt;&lt;br /&gt;
&lt;font color=&quot;#000000&quot; style=&quot;background-color: transparent; &quot;&gt;이 경우 어셈블러가 해당 상수 값을 특정 공간에 모아서 삽입 해 주고(이 공간을 Literal Pool 이라 하는군요.) 역시 마찬가지로 PC를 베이스로 해서 명령코드를 만듭니다.&amp;nbsp;&lt;/font&gt;&lt;br /&gt;
&lt;br /&gt;&lt;font color=&quot;#000000&quot; style=&quot;background-color: transparent; &quot;&gt;&lt;b&gt;&amp;nbsp;● Block Data Transfer 명령(LDM, STM)&lt;/b&gt;&lt;/font&gt;&lt;br /&gt;
&lt;font color=&quot;#000000&quot; style=&quot;background-color: transparent; &quot;&gt;해당 명령은 LDR, STR과 마찬가지로 실제 메모리에 레지스터의 내용을 전달하거나, 전달받을 수 있는 명령입니다.&lt;/font&gt;&lt;br /&gt;
&lt;font color=&quot;#000000&quot; style=&quot;background-color: transparent; &quot;&gt;LDR 명령이 메모리 번지의 내용을 지정된 레지스터로 가져오는 명령이라면 LDM은 가져오긴 하는데, 여러 개의 레지스터의 내용을 한 큐에 가져오는 명령입니다. 가장 많이 사용되는 경우는 스택 연산인 것 같습니다. ARM에는 Push, Pop 명령이 없습니다. 대신 LDR이나 STR을 쓸 수도 있겠고 ,또 LDM, STM을 쓸 수도 있죠.&amp;nbsp;&lt;/font&gt;&lt;br /&gt;
&lt;br /&gt;&lt;font color=&quot;#000000&quot; style=&quot;background-color: transparent; &quot;&gt;push eax&lt;/font&gt;&lt;br /&gt;
&lt;font color=&quot;#000000&quot; style=&quot;background-color: transparent; &quot;&gt;push ebx&lt;/font&gt;&lt;br /&gt;
&lt;font color=&quot;#000000&quot; style=&quot;background-color: transparent; &quot;&gt;push ecx&lt;/font&gt;&lt;br /&gt;
&lt;font color=&quot;#000000&quot; style=&quot;background-color: transparent; &quot;&gt;push edx&lt;/font&gt;&lt;br /&gt;
&lt;font color=&quot;#000000&quot; style=&quot;background-color: transparent; &quot;&gt;와 같은 Intel CPU 명령이 있다면&lt;/font&gt;&lt;br /&gt;
&lt;br /&gt;&lt;font color=&quot;#000000&quot; style=&quot;background-color: transparent; &quot;&gt;ARM Single 데이터 전송 명령으론..&lt;/font&gt;&lt;br /&gt;
&lt;font color=&quot;#000000&quot; style=&quot;background-color: transparent; &quot;&gt;STR r0,[sp],#-4&amp;nbsp;&lt;/font&gt;&lt;br /&gt;
&lt;font color=&quot;#000000&quot; style=&quot;background-color: transparent; &quot;&gt;STR r1,[sp],#-4&amp;nbsp;&lt;/font&gt;&lt;br /&gt;
&lt;font color=&quot;#000000&quot; style=&quot;background-color: transparent; &quot;&gt;STR r2,[sp],#-4&amp;nbsp;&lt;/font&gt;&lt;br /&gt;
&lt;font color=&quot;#000000&quot; style=&quot;background-color: transparent; &quot;&gt;STR r3,[sp],#-4&amp;nbsp;&amp;nbsp;&lt;/font&gt;&lt;br /&gt;
&lt;br /&gt;&lt;font color=&quot;#000000&quot; style=&quot;background-color: transparent; &quot;&gt;ARM Multiple 전송 명령으론..&lt;/font&gt;&lt;br /&gt;
&lt;font style=&quot;background-color: rgb(186, 52, 166);&quot; color=&quot;#ffffff&quot;&gt;STMEA sp!,{r0,r1,r2,r3}&lt;/font&gt;&lt;br /&gt;
&lt;br /&gt;&lt;font color=&quot;#000000&quot; style=&quot;background-color: transparent; &quot;&gt;{ Reg_List }&lt;/font&gt;&lt;br /&gt;
&lt;font color=&quot;#000000&quot; style=&quot;background-color: transparent; &quot;&gt;중괄호 사이에 전송 대상이 되는 레지스터를 넣어주면 됩니다.&lt;/font&gt;&lt;br /&gt;
&lt;font color=&quot;#000000&quot; style=&quot;background-color: transparent; &quot;&gt;ARM 에서 한 시점에 사용할 수 있는 레지스터의 개수는 r0~r15까지 총 16개입니다.&lt;/font&gt;&lt;br /&gt;
&lt;br /&gt;&lt;font color=&quot;#000000&quot; style=&quot;background-color: transparent; &quot;&gt;또한 LDM 명령의 니모닉상에 16bit의 공간이 있어서 각 비트가 레지스터 r0~r15와 1:1대응이 된다는 사실입니다.&lt;/font&gt;&lt;br /&gt;
&lt;font color=&quot;#000000&quot; style=&quot;background-color: transparent; &quot;&gt;따라서 { Reg_List }에는 어떠한 레지스터의 조합도 올 수 있습니다.&lt;/font&gt;&lt;br /&gt;
&lt;br /&gt;&lt;font color=&quot;#000000&quot; style=&quot;background-color: transparent; &quot;&gt;{r3,r2,r1} 과 {r1,r2,r3}를 했을 경우 메모리에 저장되는 순서는 같습니다. 위 이유 때문..&lt;/font&gt;&lt;br /&gt;
&lt;br /&gt;&lt;font color=&quot;#000000&quot; style=&quot;background-color: transparent; &quot;&gt;위 Multiple 전송 명령에서 STMEA라고 적었는데 EA가 동작모드를 지정하는 부분입니다. 이와 같은 키워드가 8가지가 있고, 동작모드는 4가지가 있습니다.&lt;/font&gt;&lt;br /&gt;
&lt;br /&gt;&lt;font color=&quot;#000000&quot; style=&quot;background-color: transparent; &quot;&gt;&amp;nbsp;여기서 동작모드는 여러 개의 레지스터 값을 메모리로(로부터) 전송할 경우 해당 메모리 번지를 증가시키면서 저장할지, 혹은 감소시키면서 저장할지를 지정하는 것과, 증/감을 하는데, 저장하기 전에 증/감을 할지, 아니면 저장하고나서 증/감을 할지를 지정하는 것을 의미합니다.&amp;nbsp;&amp;nbsp;&lt;/font&gt;&lt;br /&gt;
&lt;br /&gt;&lt;font color=&quot;#000000&quot; style=&quot;background-color: transparent; &quot;&gt;STMFD/LDMFD : Full Desending Stack &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; ; ARM 컴파일러가 사용하는 스택&lt;/font&gt;&lt;br /&gt;
&lt;font color=&quot;#000000&quot; style=&quot;background-color: transparent; &quot;&gt;STMFA/LDMFA : Full Ascending Stack&lt;/font&gt;&lt;br /&gt;
&lt;font color=&quot;#000000&quot; style=&quot;background-color: transparent; &quot;&gt;STMED/LDMED : Empty Descending Stack&lt;/font&gt;&lt;br /&gt;
&lt;font color=&quot;#000000&quot; style=&quot;background-color: transparent; &quot;&gt;STMEA/LDMEA : Empty Ascending Stack&lt;/font&gt;&lt;br /&gt;
&lt;br /&gt;&lt;font color=&quot;#000000&quot; style=&quot;background-color: transparent; &quot;&gt;깔끔하게 그림 한장으로 보시겠습니다.&lt;/font&gt;&lt;br /&gt;
&lt;font color=&quot;#000000&quot; style=&quot;background-color: transparent; &quot;&gt;&lt;div class=&quot;imageblock&quot; style=&quot;display:inline;&quot;&gt;&lt;a href=&quot;http://cfile29.uf.tistory.com/original/141DBA3D4F21431F1690A4&quot; rel=&quot;lightbox&quot; target=&quot;_blank&quot;&gt;&lt;img src=&quot;http://cfile29.uf.tistory.com/image/141DBA3D4F21431F1690A4&quot; alt=&quot;&quot; filemime=&quot;image/jpeg&quot; filename=&quot;사용자 지정 16.jpg&quot; height=&quot;399&quot; width=&quot;683&quot;/&gt;&lt;/a&gt;&lt;/div&gt;&lt;/font&gt;&lt;br /&gt;
&lt;br /&gt;&lt;font color=&quot;#000000&quot; style=&quot;background-color: transparent; &quot;&gt;&lt;b&gt;&amp;nbsp;● Single Data Swap&lt;/b&gt;&lt;/font&gt;&lt;br /&gt;
&lt;br /&gt;&lt;font style=&quot;background-color: transparent; &quot; color=&quot;#801fbf&quot;&gt;&lt;b&gt;1. SWP{cond}{B} &amp;nbsp; Rd, Rm, [Rn]&lt;/b&gt;&lt;/font&gt;&lt;br /&gt;
&lt;font color=&quot;#000000&quot; style=&quot;background-color: transparent; &quot;&gt;레지스터를 3개 지정하도록!. 실제 동작은 Rd = [Rn], [Rn] = Rm이 한번에 일어나는 명령&lt;/font&gt;&lt;br /&gt;
&lt;font color=&quot;#000000&quot; style=&quot;background-color: transparent; &quot;&gt;B는 Operation이 아니라 Byte Operation을 의미합니다.&lt;/font&gt;&lt;br /&gt;
&lt;br /&gt;&lt;font style=&quot;background-color: rgb(186, 52, 166);&quot; color=&quot;#ffffff&quot;&gt;SWP r0, r1, [r2] &lt;/font&gt;&lt;font color=&quot;#000000&quot; style=&quot;background-color: transparent; &quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; ; r0 = [r2], [r2] = r1&lt;/font&gt;&lt;br /&gt;
&lt;font style=&quot;background-color: rgb(186, 52, 166);&quot; color=&quot;#ffffff&quot;&gt;SWPB r2, r3, [r4]&lt;/font&gt;&lt;font color=&quot;#000000&quot; style=&quot;background-color: transparent; &quot;&gt; &amp;nbsp; &amp;nbsp; &amp;nbsp; ; r2 = [r4], [r4] = r3 &amp;nbsp; &amp;nbsp; Bit 0~7까지만 영향을 미침&amp;nbsp;&lt;/font&gt;&lt;br /&gt;
&lt;br /&gt;&lt;font color=&quot;#000000&quot; style=&quot;background-color: transparent; &quot;&gt;&lt;b&gt;&amp;nbsp;● Software Interrupt&lt;/b&gt;&lt;/font&gt;&lt;br /&gt;
&lt;br /&gt;&lt;font style=&quot;background-color: transparent; &quot; color=&quot;#801fbf&quot;&gt;&lt;b&gt;&amp;nbsp;1. SWI{cond} &amp;nbsp; &amp;nbsp;&amp;lt;expression&amp;gt;&lt;/b&gt;&lt;/font&gt;&lt;br /&gt;
&lt;font color=&quot;#000000&quot; style=&quot;background-color: transparent; &quot;&gt;SWI는 소프트웨어 인터럽트 명령입니다. SWI 명령이 걸리면 동작모드가 변화합니다. Supervisor 상태로 진입을 하게 됩니다. 이러한 특성 때문에 pSOS의 경우는 System Call의 진입방법으로 사용합니다.&amp;nbsp;&lt;/font&gt;&lt;br /&gt;
&lt;br /&gt;&lt;font color=&quot;#000000&quot; style=&quot;background-color: transparent; &quot;&gt;pSOS 설명&lt;/font&gt;&lt;br /&gt;
&lt;font color=&quot;#3058d2&quot;&gt;&lt;a href=&quot;http://en.wikipedia.org/wiki/PSOS&quot; style=&quot;background-color: transparent; &quot;&gt;http://en.wikipedia.org/wiki/PSOS&lt;/a&gt;&lt;font style=&quot;background-color: transparent; &quot;&gt;&amp;nbsp;&amp;nbsp;&lt;/font&gt;&lt;/font&gt;&lt;br /&gt;
&lt;br /&gt;&lt;b style=&quot;background-color: rgb(0, 0, 0); &quot;&gt;&lt;font color=&quot;#ffffff&quot;&gt;===========================================================================================&lt;/font&gt;&lt;/b&gt;&lt;br /&gt;
&lt;font color=&quot;#000000&quot; style=&quot;background-color: transparent; &quot;&gt;으아........... 대략 5시간의 시간을 걸쳐 겨우겨우 하나의 문서를 읽으면서 정리해보았군요.&lt;/font&gt;&lt;br /&gt;
&lt;br /&gt;&lt;font color=&quot;#000000&quot; style=&quot;background-color: transparent; &quot;&gt;이제 대충 ARM CPU에 대해 알았고 명령어들을 알아보았으니 실제로 프로그래밍을 해본다음 간단한 명령어들을 해석해보고 그만쓰겠습니다......... 제발!!&lt;b&gt; 저장하기&lt;/b&gt;좀 누르고 싶네요 -_-ㅋㅋㅋ&lt;/font&gt;&lt;br /&gt;
&lt;br /&gt;&lt;font color=&quot;#000000&quot; style=&quot;background-color: transparent; &quot;&gt;간단히 두 수를 입력받아 합을 구해주는 프로그램 입니다.&lt;/font&gt;&lt;br /&gt;
&lt;font color=&quot;#000000&quot; style=&quot;background-color: transparent; &quot;&gt;main 함수 부분을 봐보겠습니다.&amp;nbsp;&lt;/font&gt;&lt;br /&gt;
&lt;font color=&quot;#000000&quot; style=&quot;background-color: transparent; &quot;&gt;&lt;div class=&quot;imageblock dual&quot; style=&quot;text-align: center;&quot;&gt;&lt;table cellspacing=&quot;5&quot; cellpadding=&quot;0&quot; border=&quot;0&quot; style=&quot;margin: 0 auto;&quot;&gt;&lt;tr&gt;&lt;td&gt;&lt;a href=&quot;http://cfile10.uf.tistory.com/original/201D6D364F212369249DF0&quot; rel=&quot;lightbox&quot; target=&quot;_blank&quot;&gt;&lt;img src=&quot;http://cfile10.uf.tistory.com/image/201D6D364F212369249DF0&quot; alt=&quot;&quot; height=&quot;412&quot; width=&quot;336&quot;/&gt;&lt;/a&gt;&lt;/td&gt;&lt;td&gt;&lt;a href=&quot;http://cfile25.uf.tistory.com/original/17429B364F2123B3104701&quot; rel=&quot;lightbox&quot; target=&quot;_blank&quot;&gt;&lt;img src=&quot;http://cfile25.uf.tistory.com/image/17429B364F2123B3104701&quot; alt=&quot;&quot; height=&quot;580&quot; width=&quot;336&quot;/&gt;&lt;/a&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;&lt;/div&gt;&lt;/font&gt;&lt;br /&gt;
&lt;br /&gt;&lt;font style=&quot;background-color: transparent; &quot; color=&quot;#e31600&quot;&gt;왼쪽은 실제 환경에서의 gdb로 봐본 결&lt;/font&gt;&lt;font color=&quot;#000000&quot; style=&quot;background-color: transparent; &quot;&gt;과이고 &lt;/font&gt;&lt;font style=&quot;background-color: transparent; &quot; color=&quot;#e31600&quot;&gt;오른쪽은 Windows에서 IDA로 디스어셈블링을 해본 결과&lt;/font&gt;&lt;font color=&quot;#000000&quot; style=&quot;background-color: transparent; &quot;&gt;입니다.&lt;/font&gt;&lt;br /&gt;
&lt;font color=&quot;#000000&quot; style=&quot;background-color: transparent; &quot;&gt;차이점을 아시겠나요?? :-)&amp;nbsp;&lt;/font&gt;&lt;br /&gt;
&lt;br /&gt;&lt;font color=&quot;#000000&quot;&gt;&lt;font style=&quot;background-color: transparent; &quot;&gt;왼쪽에선 push, pop 명령어가 쓰인 반면 오른쪽에선 STMFD, LDMFD 명령어들이 쓰였습니다.&lt;/font&gt;&lt;br /&gt;
&lt;font style=&quot;background-color: transparent; &quot;&gt;뭐 IDA에서는 최신 ARM 명령어를 지원안하나 보군요. 실제로는 push 명령어를 쓰고 어셈블러에서는 STMFD으로 바뀐다고..하는?!&lt;/font&gt;&lt;/font&gt;&lt;br /&gt;
&lt;br /&gt;&lt;font color=&quot;#000000&quot; style=&quot;background-color: transparent; &quot;&gt;위 스샷에서&lt;/font&gt;&lt;br /&gt;
&lt;b&gt;&lt;font color=&quot;#e31600&quot;&gt;&lt;font style=&quot;background-color: transparent; &quot;&gt;GDB 버전은 6.3.50.20050815-cvs&lt;/font&gt;&lt;br /&gt;
&lt;font style=&quot;background-color: transparent; &quot;&gt;IDA 버전은 6.1.1100421&lt;/font&gt;&lt;/font&gt;&lt;/b&gt;&lt;br /&gt;
&lt;font color=&quot;#000000&quot; style=&quot;background-color: transparent; &quot;&gt;이었습니다.&lt;/font&gt;&lt;br /&gt;
&lt;br /&gt;&lt;font color=&quot;#000000&quot; style=&quot;background-color: transparent; &quot;&gt;일일이 트레이스 해가며 디버깅을 해보려 했으나.. 왜 gdb에서 breakpoint가 안먹히죠..?&lt;/font&gt;&lt;br /&gt;
&lt;font color=&quot;#000000&quot; style=&quot;background-color: transparent; &quot;&gt;그냥 r 누르니까 bp를 다 무시해버리고 그냥 실행되네요.. 할 수 없이 그냥 코드만 보고 분석해봤습니다.&lt;/font&gt;&lt;br /&gt;
&lt;br /&gt;&lt;font style=&quot;background-color: rgb(186, 52, 166);&quot; color=&quot;#ffffff&quot;&gt;STMFD SP!, {R7, LR}&lt;/font&gt;&lt;br /&gt;
&lt;font color=&quot;#000000&quot; style=&quot;background-color: transparent; &quot;&gt;스택에 LR 레지스터 값 저장. main 함수 내부적으로 또 다른 함수 호출하므로 &lt;/font&gt;&lt;br /&gt;
&lt;font color=&quot;#000000&quot; style=&quot;background-color: transparent; &quot;&gt;LR 레지스터에 값이 덮어 씌워지므로 그것을 막기 위함&lt;/font&gt;&lt;br /&gt;
&lt;font color=&quot;#000000&quot; style=&quot;background-color: transparent; &quot;&gt;저장되면 &lt;/font&gt;&lt;br /&gt;
&lt;font color=&quot;#000000&quot; style=&quot;background-color: transparent; &quot;&gt;H&amp;nbsp;|....|LR|R7| L&lt;/font&gt;&lt;br /&gt;
&lt;font color=&quot;#000000&quot; style=&quot;background-color: transparent; &quot;&gt;이런식으로 저장 된다.&amp;nbsp;&lt;/font&gt;&lt;br /&gt;
&lt;br /&gt;&lt;font style=&quot;background-color: rgb(186, 52, 166);&quot; color=&quot;#ffffff&quot;&gt;ADD R7, SP, #0&lt;/font&gt;&lt;br /&gt;
&lt;font color=&quot;#000000&quot; style=&quot;background-color: transparent; &quot;&gt;스택 포인터를 R7 레지스터에 더하고 있다.;;&lt;/font&gt;&lt;br /&gt;
&lt;br /&gt;&lt;font style=&quot;background-color: rgb(186, 52, 166);&quot; color=&quot;#ffffff&quot;&gt;SUB SP, SP, #0x14&lt;/font&gt;&lt;br /&gt;
&lt;font color=&quot;#000000&quot; style=&quot;background-color: transparent; &quot;&gt;스택에 공간을 할당하고 있다. 스택은 높은 주소에서 낮은 주소로 자라기 때문에 ..&lt;/font&gt;&lt;br /&gt;
&lt;br /&gt;&lt;span style=&quot;background-color: rgb(186, 52, 166);&quot;&gt;&lt;font color=&quot;#ffffff&quot;&gt;STR R0, [SP, #0x1c+var_18] &amp;nbsp;=&amp;gt; [SP, #4]&lt;br /&gt;
STR R1, [SP, #0x1c+var_1c] &amp;nbsp;=&amp;gt; [SP]&lt;/font&gt;&lt;/span&gt;&lt;br /&gt;
&lt;font color=&quot;#000000&quot; style=&quot;background-color: transparent; &quot;&gt;R0, R1 레지스터에 있는 값을 스택포인터에서 +4, +0 위치에 각각 저장한다.&lt;/font&gt;&lt;br /&gt;
&lt;br /&gt;&lt;div&gt;
&lt;font style=&quot;background-color: rgb(186, 52, 166);&quot; color=&quot;#ffffff&quot;&gt;LDR &amp;nbsp; &amp;nbsp; R3, =(aInputNumber - 0x2278)&lt;/font&gt;&lt;/div&gt;
&lt;div&gt;&lt;font style=&quot;background-color: rgb(186, 52, 166);&quot; color=&quot;#ffffff&quot;&gt;ADD &amp;nbsp; &amp;nbsp; R3, PC, R3 &amp;nbsp; &amp;nbsp; &amp;nbsp;; &quot;Input number : &quot;&lt;/font&gt;&lt;/div&gt;
&lt;font color=&quot;#000000&quot; style=&quot;background-color: transparent; &quot;&gt;R3에 &quot;Input number : &quot; 문자열 주소를 가져온다.&lt;br /&gt;
&lt;br /&gt;&lt;/font&gt;&lt;div&gt;
&lt;font style=&quot;background-color: rgb(186, 52, 166);&quot; color=&quot;#ffffff&quot;&gt;MOV &amp;nbsp; &amp;nbsp; R0, R3 &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;; char *&lt;/font&gt;&lt;/div&gt;
&lt;div&gt;&lt;font style=&quot;background-color: rgb(186, 52, 166);&quot; color=&quot;#ffffff&quot;&gt;BL &amp;nbsp; &amp;nbsp; &amp;nbsp;_printf&lt;/font&gt;&lt;/div&gt;
&lt;div&gt;&lt;span style=&quot;color: rgb(0, 0, 0); background-color: transparent; &quot;&gt;문자열 주소를 첫 번째 인자로해서 printf를 호출&lt;/span&gt;&lt;br /&gt;
&lt;br /&gt;&lt;span style=&quot;background-color: rgb(186, 52, 166); &quot;&gt;&lt;font color=&quot;#ffffff&quot;&gt;ADD &amp;nbsp; &amp;nbsp; R2, SP, #0x1C+var_10&lt;/font&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;&lt;span style=&quot;background-color: rgb(186, 52, 166); &quot;&gt;&lt;font color=&quot;#ffffff&quot;&gt;ADD &amp;nbsp; &amp;nbsp; R12, SP, #0x1C+var_14&lt;/font&gt;&lt;/span&gt;&lt;br /&gt;
&lt;span style=&quot;color: rgb(0, 0, 0); background-color: transparent; &quot;&gt;sp에서 +12, +8 위치에 떨어진 곳의 주소를 각각 R2, R12에 넣는다.&lt;/span&gt;&lt;br /&gt;
&lt;span style=&quot;color: rgb(0, 0, 0); background-color: transparent; &quot;&gt;인자 값을 받기 위해 주소를 가져오겠지요.&lt;/span&gt;&lt;br /&gt;
&lt;br /&gt;&lt;div&gt;
&lt;font style=&quot;background-color: rgb(186, 52, 166);&quot; color=&quot;#ffffff&quot;&gt;LDR &amp;nbsp; &amp;nbsp; R3, =(aDD - 0x2290)&lt;/font&gt;&lt;/div&gt;
&lt;div&gt;&lt;font style=&quot;background-color: rgb(186, 52, 166);&quot; color=&quot;#ffffff&quot;&gt;ADD &amp;nbsp; &amp;nbsp; R3, PC, R3 &amp;nbsp; &amp;nbsp; &amp;nbsp;; &quot;%d %d&quot;&lt;/font&gt;&lt;/div&gt;
&lt;/div&gt;&lt;div&gt;
&lt;font color=&quot;#000000&quot; style=&quot;background-color: transparent; &quot;&gt;&quot;%d %d&quot; 문자열 있는 주소를 R3로 가져옴&lt;br /&gt;
&lt;br /&gt;&lt;/font&gt;&lt;div&gt;
&lt;font style=&quot;background-color: rgb(186, 52, 166);&quot; color=&quot;#ffffff&quot;&gt;MOV &amp;nbsp; &amp;nbsp; R0, R3 &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;; char *&lt;/font&gt;&lt;/div&gt;
&lt;div&gt;&lt;font style=&quot;background-color: rgb(186, 52, 166);&quot; color=&quot;#ffffff&quot;&gt;MOV &amp;nbsp; &amp;nbsp; R1, R2&lt;/font&gt;&lt;/div&gt;
&lt;div&gt;&lt;font style=&quot;background-color: rgb(186, 52, 166);&quot; color=&quot;#ffffff&quot;&gt;MOV &amp;nbsp; &amp;nbsp; R2, R12&lt;/font&gt;&lt;/div&gt;
&lt;div&gt;&lt;font style=&quot;background-color: rgb(186, 52, 166);&quot; color=&quot;#ffffff&quot;&gt;BL &amp;nbsp; &amp;nbsp; &amp;nbsp;_scanf&lt;/font&gt;&lt;/div&gt;
&lt;font color=&quot;#000000&quot; style=&quot;background-color: transparent; &quot;&gt;각 인자 값 넣어주소 scanf 호출.. 뭐 이런식입니다.&lt;br /&gt;
&lt;br /&gt;이런 부분은 쉬운 부분이므로&amp;nbsp;&amp;nbsp;&lt;br /&gt;
아래는 각자 알아서... &lt;br /&gt;
&lt;br /&gt;그만 쓸래요! 으악!&amp;nbsp;&lt;/font&gt;&lt;/div&gt;&lt;div class=&quot;entry-ccl&quot; style=&quot;clear: both; text-align: right; margin-bottom: 10px&quot;&gt;
	&lt;img id=&quot;ccl-icon-359-0&quot; class=&quot;entry-ccl-by&quot; src=&quot;http://i1.daumcdn.net/cfs.tistory/v/0/static/admin/editor/ccl_black01.png&quot; alt=&quot;저작자 표시&quot;/&gt;
	&lt;!--
	&lt;rdf:RDF xmlns=&quot;http://web.resource.org/cc/&quot; xmlns:dc=&quot;http://purl.org/dc/elements/1.1/&quot; xmlns:rdf=&quot;http://www.w3.org/1999/02/22-rdf-syntax-ns#&quot;&gt;
		&lt;Work rdf:about=&quot;&quot;&gt;
			&lt;license rdf:resource=&quot;http://creativecommons.org/licenses/by-fr/2.0/kr/&quot; /&gt;
		&lt;/Work&gt;
		&lt;License rdf:about=&quot;http://creativecommons.org/licenses/by-fr/&quot;&gt;
			&lt;permits rdf:resource=&quot;http://web.resource.org/cc/Reproduction&quot;/&gt;
			&lt;permits rdf:resource=&quot;http://web.resource.org/cc/Distribution&quot;/&gt;
			&lt;requires rdf:resource=&quot;http://web.resource.org/cc/Notice&quot;/&gt;
			&lt;requires rdf:resource=&quot;http://web.resource.org/cc/Attribution&quot;/&gt;
			&lt;permits rdf:resource=&quot;http://web.resource.org/cc/DerivativeWorks&quot;/&gt;
		&lt;/License&gt;
	&lt;/rdf:RDF&gt;
	--&gt;
&lt;/div&gt;
&lt;div class=&quot;another_category another_category_color_gray&quot;&gt;
&lt;h4&gt;'&lt;a href=&quot;/category/My%20Study&quot;&gt;My Study&lt;/a&gt;&amp;nbsp;&gt;&amp;nbsp;&lt;a href=&quot;/category/My%20Study/Programming%26Theory&quot;&gt;Programming&amp;amp;Theory&lt;/a&gt;' 카테고리의 다른 글&lt;/h4&gt;
&lt;table&gt;
&lt;tr&gt;
&lt;th&gt;
&lt;a href=&quot;/369&quot; &gt;Calling Convention Process for AMD 64 Bit&lt;/a&gt;&amp;nbsp;&amp;nbsp;&lt;span&gt;(4)&lt;/span&gt;
&lt;/th&gt;
&lt;td&gt;
2012/04/02&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;th&gt;
&lt;a href=&quot;/364&quot; &gt;Windows rand() 랜덤 비율&lt;/a&gt;&amp;nbsp;&amp;nbsp;&lt;span&gt;(0)&lt;/span&gt;
&lt;/th&gt;
&lt;td&gt;
2012/02/14&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;th&gt;
&lt;a href=&quot;/359&quot; &gt;ARM 명령어 공부&lt;/a&gt;&amp;nbsp;&amp;nbsp;&lt;span&gt;(2)&lt;/span&gt;
&lt;/th&gt;
&lt;td&gt;
2012/01/27&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;th&gt;
&lt;a href=&quot;/357&quot; &gt;BlockInput Function&lt;/a&gt;&amp;nbsp;&amp;nbsp;&lt;span&gt;(3)&lt;/span&gt;
&lt;/th&gt;
&lt;td&gt;
2012/01/20&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;th&gt;
&lt;a href=&quot;/354&quot; &gt;My BSOD&lt;/a&gt;&amp;nbsp;&amp;nbsp;&lt;span&gt;(2)&lt;/span&gt;
&lt;/th&gt;
&lt;td&gt;
2012/01/08&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;th&gt;
&lt;a href=&quot;/353&quot; &gt;SwapContext를 이용한 프로세스 찾기&lt;/a&gt;&amp;nbsp;&amp;nbsp;&lt;span&gt;(7)&lt;/span&gt;
&lt;/th&gt;
&lt;td&gt;
2012/01/04&lt;/td&gt;
&lt;/tr&gt;
&lt;/table&gt;&lt;/div&gt;</description>
			<category>Programming&amp;Theory</category>
			<category>A5</category>
			<category>ADC</category>
			<category>ADD</category>
			<category>ALU</category>
			<category>and</category>
			<category>ARM</category>
			<category>ARM Status Register</category>
			<category>BIC</category>
			<category>Branch</category>
			<category>C</category>
			<category>CMN</category>
			<category>cmp</category>
			<category>CPU</category>
			<category>Data Processing</category>
			<category>EOR</category>
			<category>flag</category>
			<category>gdb</category>
			<category>IDA</category>
			<category>Instruction</category>
			<category>ipad2</category>
			<category>LDMEA</category>
			<category>LDMED</category>
			<category>LDMFA</category>
			<category>LDMFD</category>
			<category>LDR</category>
			<category>MLA</category>
			<category>Mov</category>
			<category>Mrs</category>
			<category>MSR</category>
			<category>mul</category>
			<category>mvn</category>
			<category>N</category>
			<category>ORR</category>
			<category>pSOS</category>
			<category>PSR</category>
			<category>register</category>
			<category>RISC</category>
			<category>RSB</category>
			<category>RSC</category>
			<category>SBC</category>
			<category>Special Purpose General Register</category>
			<category>STMEA</category>
			<category>STMED</category>
			<category>STMFA</category>
			<category>STMFD</category>
			<category>str</category>
			<category>sub</category>
			<category>swi</category>
			<category>SWP</category>
			<category>TEQ</category>
			<category>TST</category>
			<category>v</category>
			<category>Z</category>
			<category>레지스터</category>
			<author>Ezbeat</author>
			<guid>http://ezbeat.tistory.com/359</guid>
			<comments>http://ezbeat.tistory.com/359#entry359comment</comments>
			<pubDate>Fri, 27 Jan 2012 00:31:37 +0900</pubDate>
		</item>
		<item>
			<title>ARM CPU 공부시작.. ㅠ_ㅠ</title>
			<link>http://ezbeat.tistory.com/358</link>
			<description>&lt;div style=&quot;margin-top: 1px; margin-right: 3px; margin-bottom: 0px; margin-left: 3px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; overflow-x: hidden; overflow-y: hidden; &quot;&gt;
&lt;font color=&quot;#000000&quot;&gt;&lt;span style=&quot;font-size: 9pt; line-height: 1.5;&quot;&gt;ipad2를 산지 어언 반년이상 지난 지금.. 방금까지 탈옥을 해본적이 없다. 사실 탈옥을 해보려고 했지만 패드를 산 이후 멋모르고 ios5로 업데이트를 시켜버리고.. 그냥 쓰고 있었다. 언젠간 탈옥 툴이 나오겠지..라는 마음을 가지고;;&lt;/span&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;span style=&quot;font-size: 9pt; line-height: 1.5;&quot;&gt;뭐 카페를 뒤져보니 나왔더군요 ㅋ 설 담날이라 휴유증에 빠질찰나 마침 재미있겠다 싶어서 바로 탈옥을 했죠. 사실 탈옥해서 가장 써보고 싶은 것은 gdb로 app를 리버싱해보는 것이었습니다. cydia에 재미있는 툴들도 많지만 뭐 일단 제 우선순위에선 gdb에 밀려났습니다.&lt;/span&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;span style=&quot;font-size: 9pt; line-height: 1.5;&quot;&gt;탈옥 후 openSSH를 설치하고 Xshell로 &amp;nbsp;접속해보았습니다.&lt;/span&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;span style=&quot;font-size: 9pt; line-height: 1.5;&quot;&gt;&lt;div class=&quot;imageblock&quot; style=&quot;display:inline;&quot;&gt;&lt;a href=&quot;http://cfile25.uf.tistory.com/original/13189A404F1F9BCB02F45E&quot; rel=&quot;lightbox&quot; target=&quot;_blank&quot;&gt;&lt;img src=&quot;http://cfile25.uf.tistory.com/image/13189A404F1F9BCB02F45E&quot; alt=&quot;&quot; filemime=&quot;image/jpeg&quot; filename=&quot;사용자 지정 1.jpg&quot; height=&quot;320&quot; width=&quot;637&quot;/&gt;&lt;/a&gt;&lt;/div&gt;&lt;/span&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;span style=&quot;font-size: 9pt; line-height: 1.5;&quot;&gt;굿 입니다. 뭔가 설레이는 군요.&lt;/span&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;span style=&quot;font-size: 9pt; line-height: 1.5;&quot;&gt;일단 디버깅에 필요한 툴들을 다운 받아줍니다. 간단히 apt-get을 사용해 설치하면 됩니다.&lt;/span&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;span style=&quot;font-size: 9pt; line-height: 1.5;&quot;&gt;리눅스 커널 정보를 봐볼까요..&lt;/span&gt;&lt;br /&gt;
&lt;span style=&quot;font-size: 9pt; line-height: 1.5;&quot;&gt;&lt;div class=&quot;imageblock&quot; style=&quot;display:inline;&quot;&gt;&lt;a href=&quot;http://cfile2.uf.tistory.com/original/18198A504F1F9C3B0E0226&quot; rel=&quot;lightbox&quot; target=&quot;_blank&quot;&gt;&lt;img src=&quot;http://cfile2.uf.tistory.com/image/18198A504F1F9C3B0E0226&quot; alt=&quot;&quot; filemime=&quot;image/jpeg&quot; filename=&quot;사용자 지정 2.jpg&quot; height=&quot;22&quot; width=&quot;683&quot;/&gt;&lt;/a&gt;&lt;/div&gt;!!!!!!!!!! ARM이래요 ARM.... 흑흑.......&amp;nbsp;&lt;/span&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;span style=&quot;font-size: 9pt; line-height: 1.5;&quot;&gt;사실 지금까지 Intel CPU 리버싱 밖에 공부해 보지 않았기 때문에 기대반 두려움 반이었습니다.&lt;/span&gt;&lt;br /&gt;
&lt;span style=&quot;font-size: 9pt; line-height: 1.5;&quot;&gt;
그래도 포기는 하지 않습니다. 재미있으니까요 :-)&lt;/span&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;span style=&quot;font-size: 9pt; line-height: 1.5;&quot;&gt;오늘은 디버깅 창 까지만 봐보겠습니다. 공부공부..;&lt;/span&gt;&lt;br /&gt;
&lt;span style=&quot;font-size: 9pt; line-height: 1.5;&quot;&gt;&lt;div class=&quot;imageblock&quot; style=&quot;display:inline;&quot;&gt;&lt;a href=&quot;http://cfile30.uf.tistory.com/original/200960474F1F9E692C67BF&quot; rel=&quot;lightbox&quot; target=&quot;_blank&quot;&gt;&lt;img src=&quot;http://cfile30.uf.tistory.com/image/200960474F1F9E692C67BF&quot; alt=&quot;&quot; filemime=&quot;image/jpeg&quot; filename=&quot;사용자 지정 3.jpg&quot; height=&quot;514&quot; width=&quot;384&quot;/&gt;&lt;/a&gt;&lt;/div&gt;&lt;/span&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;span style=&quot;font-size: 9pt; line-height: 1.5;&quot;&gt;이렇게 켜주시고.. 이제 ps 명령어로 프로세스 확인~&lt;/span&gt;&lt;br /&gt;
&lt;span style=&quot;font-size: 9pt; line-height: 1.5;&quot;&gt;&lt;div class=&quot;imageblock&quot; style=&quot;display:inline;&quot;&gt;&lt;a href=&quot;http://cfile25.uf.tistory.com/original/180AA7484F1F9E9A0EE489&quot; rel=&quot;lightbox&quot; target=&quot;_blank&quot;&gt;&lt;img src=&quot;http://cfile25.uf.tistory.com/image/180AA7484F1F9E9A0EE489&quot; alt=&quot;&quot; filemime=&quot;image/jpeg&quot; filename=&quot;사용자 지정 4.jpg&quot; height=&quot;116&quot; width=&quot;683&quot;/&gt;&lt;/a&gt;&lt;/div&gt;&lt;/span&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;span style=&quot;font-size: 9pt; line-height: 1.5;&quot;&gt;현재 GomokuOnline 이라는 프로세스인데 있는 폴더를 보면 Applications 폴더아래 막 이상한 시리얼 넘버같은 폴더로 들어오게 됩니다. 이와 같이 모든 어플리케이션은 저렇게 폴더가 따로 생겨서 설치가 됩니다. IFile 설치해서 보셔도 됩니다.&lt;/span&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;span style=&quot;font-size: 9pt; line-height: 1.5;&quot;&gt;아무튼 gdb 로 attach~&lt;/span&gt;&lt;br /&gt;
&lt;span style=&quot;font-size: 9pt; line-height: 1.5;&quot;&gt;&lt;div class=&quot;imageblock&quot; style=&quot;display:inline;&quot;&gt;&lt;a href=&quot;http://cfile23.uf.tistory.com/original/161E8E404F1F9F580950CE&quot; rel=&quot;lightbox&quot; target=&quot;_blank&quot;&gt;&lt;img src=&quot;http://cfile23.uf.tistory.com/image/161E8E404F1F9F580950CE&quot; alt=&quot;&quot; filemime=&quot;image/jpeg&quot; filename=&quot;사용자 지정 5.jpg&quot; height=&quot;183&quot; width=&quot;683&quot;/&gt;&lt;/a&gt;&lt;/div&gt;&lt;/span&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;span style=&quot;font-size: 9pt; line-height: 1.5;&quot;&gt;성공적이군요. 레지를 봐보면~ ?!&lt;/span&gt;&lt;br /&gt;
&lt;span style=&quot;font-size: 9pt; line-height: 1.5;&quot;&gt;&lt;div class=&quot;imageblock&quot; style=&quot;display:inline;&quot;&gt;&lt;a href=&quot;http://cfile25.uf.tistory.com/original/177870364F1FA3DD08F4EF&quot; rel=&quot;lightbox&quot; target=&quot;_blank&quot;&gt;&lt;img src=&quot;http://cfile25.uf.tistory.com/image/177870364F1FA3DD08F4EF&quot; alt=&quot;&quot; filemime=&quot;image/jpeg&quot; filename=&quot;사용자 지정 6.jpg&quot; height=&quot;273&quot; width=&quot;311&quot;/&gt;&lt;/a&gt;&lt;/div&gt;&amp;nbsp;&lt;/span&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;span style=&quot;font-size: 9pt; line-height: 1.5;&quot;&gt;역시 ARM...흑흑 ㅋㅋ &lt;/span&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;span style=&quot;font-size: 9pt; line-height: 1.5;&quot;&gt;그리고 gcc를 설치해 천천히 ARM CPU공부를 해봐야겠네요.&lt;/span&gt;&lt;br /&gt;
&lt;span style=&quot;font-size: 9pt; line-height: 1.5;&quot;&gt;
gcc는 그냥 cydia에서 GNU C Compiler 설치하면 됩니다. ios5 기준..&lt;/span&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;span style=&quot;font-size: 9pt; line-height: 1.5;&quot;&gt;&lt;div class=&quot;imageblock&quot; style=&quot;display:inline;&quot;&gt;&lt;a href=&quot;http://cfile25.uf.tistory.com/original/1404D34C4F1FA99D29220E&quot; rel=&quot;lightbox&quot; target=&quot;_blank&quot;&gt;&lt;img src=&quot;http://cfile25.uf.tistory.com/image/1404D34C4F1FA99D29220E&quot; alt=&quot;&quot; filemime=&quot;image/jpeg&quot; filename=&quot;사용자 지정 1.jpg&quot; height=&quot;215&quot; width=&quot;319&quot;/&gt;&lt;/a&gt;&lt;/div&gt;&lt;/span&gt;&lt;br /&gt;
&lt;span style=&quot;font-size: 9pt; line-height: 1.5;&quot;&gt;
이렇게.. - -잘 되네요.&lt;/span&gt;&lt;br /&gt;
&lt;br /&gt;&lt;span style=&quot;font-size: 9pt; line-height: 1.5;&quot;&gt;gcc 버전&lt;/span&gt;&lt;br /&gt;
gcc version 4.2.1 (Based on Apple Inc. build 5555)&lt;br /&gt;
&lt;br /&gt;main 함수&lt;br /&gt;
&lt;div class=&quot;imageblock&quot; style=&quot;display:inline;&quot;&gt;&lt;a href=&quot;http://cfile30.uf.tistory.com/original/202375404F1FAA7B393D80&quot; rel=&quot;lightbox&quot; target=&quot;_blank&quot;&gt;&lt;img src=&quot;http://cfile30.uf.tistory.com/image/202375404F1FAA7B393D80&quot; alt=&quot;&quot; filemime=&quot;image/jpeg&quot; filename=&quot;사용자 지정 3.jpg&quot; height=&quot;272&quot; width=&quot;475&quot;/&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;
&lt;br /&gt;&lt;span style=&quot;font-size: 9pt; line-height: 1.5;&quot;&gt;일단 리버싱을 시작해봅시당.. &amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;/font&gt;&lt;/div&gt;&lt;div class=&quot;entry-ccl&quot; style=&quot;clear: both; text-align: right; margin-bottom: 10px&quot;&gt;
	&lt;img id=&quot;ccl-icon-358-0&quot; class=&quot;entry-ccl-by&quot; src=&quot;http://i1.daumcdn.net/cfs.tistory/v/0/static/admin/editor/ccl_black01.png&quot; alt=&quot;저작자 표시&quot;/&gt;
	&lt;!--
	&lt;rdf:RDF xmlns=&quot;http://web.resource.org/cc/&quot; xmlns:dc=&quot;http://purl.org/dc/elements/1.1/&quot; xmlns:rdf=&quot;http://www.w3.org/1999/02/22-rdf-syntax-ns#&quot;&gt;
		&lt;Work rdf:about=&quot;&quot;&gt;
			&lt;license rdf:resource=&quot;http://creativecommons.org/licenses/by-fr/2.0/kr/&quot; /&gt;
		&lt;/Work&gt;
		&lt;License rdf:about=&quot;http://creativecommons.org/licenses/by-fr/&quot;&gt;
			&lt;permits rdf:resource=&quot;http://web.resource.org/cc/Reproduction&quot;/&gt;
			&lt;permits rdf:resource=&quot;http://web.resource.org/cc/Distribution&quot;/&gt;
			&lt;requires rdf:resource=&quot;http://web.resource.org/cc/Notice&quot;/&gt;
			&lt;requires rdf:resource=&quot;http://web.resource.org/cc/Attribution&quot;/&gt;
			&lt;permits rdf:resource=&quot;http://web.resource.org/cc/DerivativeWorks&quot;/&gt;
		&lt;/License&gt;
	&lt;/rdf:RDF&gt;
	--&gt;
&lt;/div&gt;
&lt;div class=&quot;another_category another_category_color_gray&quot;&gt;
&lt;h4&gt;'&lt;a href=&quot;/category/My%20Study&quot;&gt;My Study&lt;/a&gt;&amp;nbsp;&gt;&amp;nbsp;&lt;a href=&quot;/category/My%20Study/Reversing&quot;&gt;Reversing&lt;/a&gt;' 카테고리의 다른 글&lt;/h4&gt;
&lt;table&gt;
&lt;tr&gt;
&lt;th&gt;
&lt;a href=&quot;/371&quot; &gt;NtSetInformationThread 를 이용한 Anti-Debugging&lt;/a&gt;&amp;nbsp;&amp;nbsp;&lt;span&gt;(0)&lt;/span&gt;
&lt;/th&gt;
&lt;td&gt;
2012/04/17&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;th&gt;
&lt;a href=&quot;/361&quot; &gt;Themida 2.1.2.0 Virtual Machine&lt;/a&gt;&amp;nbsp;&amp;nbsp;&lt;span&gt;(7)&lt;/span&gt;
&lt;/th&gt;
&lt;td&gt;
2012/02/01&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;th&gt;
&lt;a href=&quot;/358&quot; &gt;ARM CPU 공부시작.. ㅠ_ㅠ&lt;/a&gt;&amp;nbsp;&amp;nbsp;&lt;span&gt;(6)&lt;/span&gt;
&lt;/th&gt;
&lt;td&gt;
2012/01/25&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;th&gt;
&lt;a href=&quot;/338&quot; &gt;Code Virtualized&lt;/a&gt;&amp;nbsp;&amp;nbsp;&lt;span&gt;(7)&lt;/span&gt;
&lt;/th&gt;
&lt;td&gt;
2011/06/27&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;th&gt;
&lt;a href=&quot;/309&quot; &gt;ZwSetSystemInformation&lt;/a&gt;&amp;nbsp;&amp;nbsp;&lt;span&gt;(2)&lt;/span&gt;
&lt;/th&gt;
&lt;td&gt;
2011/01/11&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;th&gt;
&lt;a href=&quot;/307&quot; &gt;User Callback Address&lt;/a&gt;&amp;nbsp;&amp;nbsp;&lt;span&gt;(0)&lt;/span&gt;
&lt;/th&gt;
&lt;td&gt;
2011/01/10&lt;/td&gt;
&lt;/tr&gt;
&lt;/table&gt;&lt;/div&gt;</description>
			<category>Reversing</category>
			<category>ARM</category>
			<category>CPU</category>
			<category>Cydia</category>
			<category>gcc</category>
			<category>gdb</category>
			<category>iOS5</category>
			<category>ipad</category>
			<category>Main</category>
			<category>ssh</category>
			<category>탈옥</category>
			<author>Ezbeat</author>
			<guid>http://ezbeat.tistory.com/358</guid>
			<comments>http://ezbeat.tistory.com/358#entry358comment</comments>
			<pubDate>Wed, 25 Jan 2012 15:21:23 +0900</pubDate>
		</item>
		<item>
			<title>BlockInput Function</title>
			<link>http://ezbeat.tistory.com/357</link>
			<description>&lt;b&gt;&lt;font color=&quot;#3058d2&quot;&gt;BlockInput&lt;/font&gt;&lt;/b&gt;&lt;font color=&quot;#000000&quot;&gt;이라는 함수가 있다.&amp;nbsp;&lt;/font&gt;&lt;br /&gt;
&lt;font color=&quot;#000000&quot;&gt;msdn의 친절한 설명을 봐보면..&lt;/font&gt;&lt;br /&gt;
&lt;br /&gt;&lt;span style=&quot;color: rgb(0, 0, 0); font-family: 'Segoe UI', 'Lucida Grande', Verdana, Arial, Helvetica, sans-serif; &quot;&gt;Blocks keyboard and mouse input events from reaching applications.&lt;/span&gt;&lt;font color=&quot;#000000&quot;&gt;&amp;nbsp;&lt;/font&gt;&lt;br /&gt;
&lt;font color=&quot;#000000&quot;&gt;그냥 키보드와 마우스의 입력 이벤트를 막는다고 되어 있다.&lt;/font&gt;&lt;br /&gt;
&lt;br /&gt;&lt;font color=&quot;#000000&quot;&gt;하지만 유일하는 먹히는 키 조합.. Ctrl + Alt + Del 키를 누르면 풀린다.&lt;/font&gt;&lt;br /&gt;
&lt;font color=&quot;#000000&quot;&gt;음.. 그래도 저 키조합도 막을 수 있는 방법을 구글에 찾아보면 소스코드도 포함된 글이 많다~&lt;/font&gt;&lt;br /&gt;
&lt;br /&gt;&lt;font color=&quot;#000000&quot;&gt;해당 함수는 인자로 BOOL 값을 하나 받는데.. &lt;/font&gt;&lt;b&gt;&lt;font color=&quot;#e31600&quot;&gt;1이면 block하는 것이고 0이면 unblock하는 것&lt;/font&gt;&lt;/b&gt;&lt;font color=&quot;#000000&quot;&gt;이다.&lt;/font&gt;&lt;br /&gt;
&lt;font color=&quot;#000000&quot;&gt;Anti Reversing 기법으로 사용되는 함수이기도 하는데 밥 먹고 소화겸 어떻게 작동하는지 분석을 해보았다.&lt;/font&gt;&lt;br /&gt;
&lt;br /&gt;&lt;font color=&quot;#000000&quot;&gt;&lt;div class=&quot;imageblock&quot; style=&quot;display:inline;&quot;&gt;&lt;a href=&quot;http://cfile3.uf.tistory.com/original/122435334F18F7C11B0FA6&quot; rel=&quot;lightbox&quot; target=&quot;_blank&quot;&gt;&lt;img src=&quot;http://cfile3.uf.tistory.com/image/122435334F18F7C11B0FA6&quot; alt=&quot;&quot; filemime=&quot;image/jpeg&quot; filename=&quot;사용자 지정 1.jpg&quot; height=&quot;186&quot; width=&quot;497&quot;/&gt;&lt;/a&gt;&lt;/div&gt;&lt;/font&gt;&lt;br /&gt;
&lt;font color=&quot;#000000&quot;&gt;아 참고로.. 위 테스트 환경은 Windows XP SP3 이다.&lt;/font&gt;&lt;br /&gt;
&lt;br /&gt;&lt;font color=&quot;#000000&quot;&gt;user에서 BlockInput 함수를 호출하면 커널에서는 NtUserBlockInput 함수를 호출하게 된다.&lt;/font&gt;&lt;br /&gt;
&lt;font color=&quot;#000000&quot;&gt;딱 봐도 중요한 함수는 _BlockInput 함수 같다. 앞뒤로 있는 EnterCrit, LeaveCrit 함수는 저 부분을 감싸고 있는 걸로봐선 임계영역을 위한 함수들 같다. 함수 명만봐도..ㅋ&lt;/font&gt;&lt;br /&gt;
&lt;br /&gt;&lt;font color=&quot;#000000&quot;&gt;일단 _BlockInput 함수를 봐보자.&lt;/font&gt;&lt;br /&gt;
&lt;font color=&quot;#000000&quot;&gt;&lt;div class=&quot;imageblock&quot; style=&quot;display:inline;&quot;&gt;&lt;a href=&quot;http://cfile5.uf.tistory.com/original/14555B4D4F18FB680934FB&quot; rel=&quot;lightbox&quot; target=&quot;_blank&quot;&gt;&lt;img src=&quot;http://cfile5.uf.tistory.com/image/14555B4D4F18FB680934FB&quot; alt=&quot;&quot; filemime=&quot;image/jpeg&quot; filename=&quot;사용자 지정 2.jpg&quot; height=&quot;631&quot; width=&quot;683&quot;/&gt;&lt;/a&gt;&lt;/div&gt;&lt;/font&gt;&lt;br /&gt;
&lt;font color=&quot;#000000&quot;&gt;그렇게 길지도 않다.&lt;/font&gt;&lt;br /&gt;
&lt;br /&gt;&lt;font color=&quot;#000000&quot;&gt;일단 빨간색 네모 친 부분을 잘 보면 된다.&lt;/font&gt;&lt;br /&gt;
&lt;br /&gt;&lt;font color=&quot;#000000&quot;&gt;파란색 네모 친 부분에서는 gptiBlockInput 변수가 0인지 체크를 한다. 즉 현재 블록 상태인지 아닌지를 체크한다.&lt;/font&gt;&lt;br /&gt;
&lt;font color=&quot;#000000&quot;&gt;0이 라면 블록 상태가 아니라는 뜻이므로 보라색 명령어가 실행이되면서 esi에 있는 값이 들어간다. &lt;/font&gt;&lt;br /&gt;
&lt;font color=&quot;#000000&quot;&gt;그 값은 (0xe1df1008) 값이다. 하지만 저 값이 항상 일정하지는 않는 듯 싶다. 여러번 해보니 값이 바뀌는 것 같다.&lt;/font&gt;&lt;br /&gt;
&lt;br /&gt;&lt;font color=&quot;#000000&quot;&gt;아무튼 무슨 값이&amp;nbsp;gptiBlockInput&amp;nbsp;변수로 들어간다는 것이다.&lt;/font&gt;&lt;br /&gt;
&lt;br /&gt;&lt;font color=&quot;#000000&quot;&gt;하지만&amp;nbsp;gptiBlockInput 값이 0이 아니라면 분홍색 네모 친 부분이 실행된다. 먼저 esi와 비교를 하는데 같으면 그 아래 있는 분홍색 명령어를 실행함으로써&lt;/font&gt;
&lt;font color=&quot;#000000&quot;&gt;gptiBlockInput 변수 값을 0으로 만든다. 다를 경우에는 그냥 종료를 하게된다. 무슨 뜻이냐면 이미 블록이 풀려버렸다는 뜻이다. 왜..? Ctrl + Alt + Del 키를 눌러서 미리 풀어버린 경우에 저렇게 된다.&lt;/font&gt;&lt;br /&gt;
&lt;br /&gt;&lt;font color=&quot;#000000&quot;&gt;일단&amp;nbsp;gptiBlockInput 변수에 들어가는 값에 따라 블록이 되고 안되고가 결정이 된다.&lt;/font&gt;&lt;br /&gt;
&lt;font color=&quot;#000000&quot;&gt;그러면 그냥 커널에서 저 값을 강제로 바꿔보면??..&lt;/font&gt;&lt;br /&gt;
&lt;font color=&quot;#000000&quot;&gt;&lt;div class=&quot;imageblock&quot; style=&quot;display:inline;&quot;&gt;&lt;a href=&quot;http://cfile29.uf.tistory.com/original/1408CA504F18FDDB3B7083&quot; rel=&quot;lightbox&quot; target=&quot;_blank&quot;&gt;&lt;img src=&quot;http://cfile29.uf.tistory.com/image/1408CA504F18FDDB3B7083&quot; alt=&quot;&quot; filemime=&quot;image/jpeg&quot; filename=&quot;사용자 지정 4.jpg&quot; height=&quot;123&quot; width=&quot;364&quot;/&gt;&lt;/a&gt;&lt;/div&gt;&lt;/font&gt;&lt;br /&gt;
&lt;font color=&quot;#000000&quot;&gt;&lt;div class=&quot;imageblock&quot; style=&quot;display:inline;&quot;&gt;&lt;a href=&quot;http://cfile9.uf.tistory.com/original/126EDC4B4F18FE7D2B3170&quot; rel=&quot;lightbox&quot; target=&quot;_blank&quot;&gt;&lt;img src=&quot;http://cfile9.uf.tistory.com/image/126EDC4B4F18FE7D2B3170&quot; alt=&quot;&quot; filemime=&quot;image/jpeg&quot; filename=&quot;사용자 지정 5.jpg&quot; height=&quot;322&quot; width=&quot;243&quot;/&gt;&lt;/a&gt;&lt;/div&gt;&lt;/font&gt;&lt;br /&gt;
&lt;font color=&quot;#000000&quot;&gt;-_-;;;;;;;;; 바꾸려고 봤더니 변수가 사라졌다... 또한 NtUserBlockInput 함수도 메모리에 존재하지 않는다. &lt;/font&gt;&lt;br /&gt;
&lt;br /&gt;&lt;font color=&quot;#000000&quot;&gt;이유는 윈도우에는 nt함수를 위한 user 함수를 위한 각각의 ServiceTable이 있는데&lt;/font&gt;&lt;br /&gt;
&lt;font color=&quot;#000000&quot;&gt;nt함수들은 KiServiceTable에 있고 user함수들은 W32pServiceTable에 있다.&lt;/font&gt;&lt;br /&gt;
&lt;br /&gt;&lt;font color=&quot;#000000&quot;&gt;아래는 각 모듈 정보&amp;nbsp;&lt;/font&gt;&lt;br /&gt;
&lt;div class=&quot;txc-textbox&quot; style=&quot;border-top-style: solid; border-right-style: solid; border-bottom-style: solid; border-left-style: solid; border-top-width: 1px; border-right-width: 1px; border-bottom-width: 1px; border-left-width: 1px; border-top-color: rgb(219, 232, 251); border-right-color: rgb(219, 232, 251); border-bottom-color: rgb(219, 232, 251); border-left-color: rgb(219, 232, 251); background-color: rgb(219, 232, 251); padding-top: 10px; padding-right: 10px; padding-bottom: 10px; padding-left: 10px; &quot;&gt;&lt;p style=&quot;margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; &quot;&gt;&lt;div&gt;
&lt;font color=&quot;#000000&quot;&gt;kd&amp;gt; !address &lt;/font&gt;&lt;b&gt;&lt;font color=&quot;#e31600&quot;&gt;kiServiceTable&lt;/font&gt;&lt;/b&gt;&lt;/div&gt;
&lt;div&gt;&lt;font color=&quot;#000000&quot;&gt;&amp;nbsp; 804d9000 - 001f9000 &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;/font&gt;&lt;/div&gt;
&lt;div&gt;&lt;font color=&quot;#000000&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; Usage &amp;nbsp; &amp;nbsp; &amp;nbsp; KernelSpaceUsageImage&lt;/font&gt;&lt;/div&gt;
&lt;div&gt;&lt;font color=&quot;#000000&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; ImageName &amp;nbsp; ntkrnlpa.exe&lt;br /&gt;
&lt;br /&gt;&lt;/font&gt;&lt;div&gt;
&lt;font color=&quot;#000000&quot;&gt;kd&amp;gt; !address &lt;/font&gt;&lt;b&gt;&lt;font color=&quot;#e31600&quot;&gt;W32pServiceTable&lt;/font&gt;&lt;/b&gt;&lt;/div&gt;
&lt;div&gt;&lt;font color=&quot;#000000&quot;&gt;&amp;nbsp; bf800000 - 001c3000 &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;/font&gt;&lt;/div&gt;
&lt;div&gt;&lt;font color=&quot;#000000&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; Usage &amp;nbsp; &amp;nbsp; &amp;nbsp; KernelSpaceUsageImage&lt;/font&gt;&lt;/div&gt;
&lt;div&gt;&lt;font color=&quot;#000000&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; ImageName &amp;nbsp; \SystemRoot\System32\win32k.sys&lt;/font&gt;&lt;/div&gt;
&lt;/div&gt;&lt;/p&gt;
&lt;/div&gt;&lt;font color=&quot;#000000&quot;&gt;&lt;br /&gt;
&lt;/font&gt;&lt;div&gt;
&lt;div&gt;&lt;font color=&quot;#000000&quot;&gt;또한 분석을 해보면 KiServiceTable은 항상 메모리에 올라와 있지만&lt;/font&gt;&lt;font color=&quot;#e31600&quot;&gt;&amp;nbsp;W32pServiceTable는&amp;nbsp;W32pServiceTable 내부 함수가 호출될 경우에만 메모리에 올라온다.&lt;/font&gt;&lt;br /&gt;
&lt;font color=&quot;#000000&quot;&gt;&lt;div class=&quot;imageblock&quot; style=&quot;display:inline;&quot;&gt;&lt;a href=&quot;http://cfile1.uf.tistory.com/original/1325F7474F1902C9103A18&quot; rel=&quot;lightbox&quot; target=&quot;_blank&quot;&gt;&lt;img src=&quot;http://cfile1.uf.tistory.com/image/1325F7474F1902C9103A18&quot; alt=&quot;&quot; filemime=&quot;image/jpeg&quot; filename=&quot;사용자 지정 6.jpg&quot; height=&quot;236&quot; width=&quot;198&quot;/&gt;&lt;/a&gt;&lt;/div&gt;&amp;nbsp;&lt;/font&gt;&lt;br /&gt;
&lt;font color=&quot;#000000&quot;&gt;이와 같이..;;&lt;/font&gt;&lt;br /&gt;
&lt;br /&gt;&lt;font color=&quot;#000000&quot;&gt;그래서 W32pServiceTable&amp;nbsp;가 메모리에 올라왔을 경우&amp;nbsp;gptiBlockInput&amp;nbsp;변수에 접근할 수 있는데 그 때 값을 바꿔주니&lt;/font&gt;&lt;br /&gt;
&lt;font color=&quot;#000000&quot;&gt;BlockInput 함수를 호출하지 않아도 똑같은 동작은 내 맘대로 제어할 수 있었다.&lt;/font&gt;&lt;br /&gt;
&lt;br /&gt;&lt;font color=&quot;#000000&quot;&gt;그러면 커널에서는 저 값을 어디서 사용하는 것일까? 당연히 키보드와 마우스의 이벤트를 막는 역할을 할 것이다.&lt;/font&gt;&lt;br /&gt;
&lt;font color=&quot;#000000&quot;&gt;한번 하드웨어 브포를 걸어놓고 살펴보자.&lt;/font&gt;&lt;br /&gt;
&lt;br /&gt;&lt;font color=&quot;#000000&quot;&gt;WinDbg에서 &lt;/font&gt;&lt;br /&gt;
&lt;font color=&quot;#000000&quot;&gt;&lt;b&gt;ba r4 gptiBlockInput&lt;/b&gt;&lt;/font&gt;&lt;br /&gt;
&lt;font color=&quot;#000000&quot;&gt;이와 같이 하면 해당 변수에 4Byte read 시 BP가 걸리게 된다.&lt;/font&gt;&lt;br /&gt;
&lt;br /&gt;&lt;font color=&quot;#000000&quot;&gt;어디서 멈췄을까요?&amp;nbsp;&lt;/font&gt;&lt;br /&gt;
&lt;font color=&quot;#e31600&quot;&gt;win32k!ProcessMouseInput&lt;/font&gt;&lt;font color=&quot;#000000&quot;&gt; 함수에서 멈췄습니다. 처음 부분을 봐보죠.&lt;/font&gt;&lt;br /&gt;
&lt;font color=&quot;#000000&quot;&gt;&lt;div class=&quot;imageblock&quot; style=&quot;display:inline;&quot;&gt;&lt;a href=&quot;http://cfile10.uf.tistory.com/original/147B354E4F1912C234638E&quot; rel=&quot;lightbox&quot; target=&quot;_blank&quot;&gt;&lt;img src=&quot;http://cfile10.uf.tistory.com/image/147B354E4F1912C234638E&quot; alt=&quot;&quot; filemime=&quot;image/jpeg&quot; filename=&quot;사용자 지정 7.jpg&quot; height=&quot;237&quot; width=&quot;683&quot;/&gt;&lt;/a&gt;&lt;/div&gt;&lt;/font&gt;&lt;br /&gt;
&lt;br /&gt;&lt;font color=&quot;#000000&quot;&gt;gptiBlockInput 변수가 0인지 비교를 하고 0이 아니라면 0xbf886745 로 점프를 하게 됩니다.&lt;/font&gt;&lt;br /&gt;
&lt;font color=&quot;#000000&quot;&gt;&lt;div class=&quot;imageblock&quot; style=&quot;display:inline;&quot;&gt;&lt;a href=&quot;http://cfile25.uf.tistory.com/original/1910B74D4F1912FE35BB1C&quot; rel=&quot;lightbox&quot; target=&quot;_blank&quot;&gt;&lt;img src=&quot;http://cfile25.uf.tistory.com/image/1910B74D4F1912FE35BB1C&quot; alt=&quot;&quot; filemime=&quot;image/jpeg&quot; filename=&quot;사용자 지정 8.jpg&quot; height=&quot;75&quot; width=&quot;286&quot;/&gt;&lt;/a&gt;&lt;/div&gt;&amp;nbsp;&lt;/font&gt;&lt;br /&gt;
&lt;font color=&quot;#000000&quot;&gt;가보면 그냥 함수 에필로그 부분인 것을 알 수 있습니다.&lt;/font&gt;&lt;br /&gt;
&lt;br /&gt;&lt;font color=&quot;#000000&quot;&gt;즉, 처음에 블록 상태를 나타내는 변수를 검사 후 0이 아닌 값이 있으면 그냥 이벤트 수행 루틴을 건너 뛰어버리는 것 입니다.&lt;/font&gt;&lt;br /&gt;
&lt;font color=&quot;#000000&quot;&gt;참 변수를 직관적으로 잘 사용하고 있군요.&lt;/font&gt;&lt;br /&gt;
&lt;br /&gt;&lt;font color=&quot;#000000&quot;&gt;키보드 같은 경우도 봐보겠습니다.&lt;/font&gt;&lt;br /&gt;
&lt;font color=&quot;#000000&quot;&gt;&lt;div class=&quot;imageblock&quot; style=&quot;display:inline;&quot;&gt;&lt;a href=&quot;http://cfile1.uf.tistory.com/original/16522D474F1913A532DEF0&quot; rel=&quot;lightbox&quot; target=&quot;_blank&quot;&gt;&lt;img src=&quot;http://cfile1.uf.tistory.com/image/16522D474F1913A532DEF0&quot; alt=&quot;&quot; filemime=&quot;image/jpeg&quot; filename=&quot;사용자 지정 9.jpg&quot; height=&quot;120&quot; width=&quot;573&quot;/&gt;&lt;/a&gt;&lt;/div&gt;&lt;/font&gt;&lt;br /&gt;
&lt;font color=&quot;#000000&quot;&gt;xxxKeyEvent 함수에서 해당 변수에 접근을 하고 있고 저 부분에서 0인지 아닌지 검사를 하게 됩니다.&lt;/font&gt;&lt;br /&gt;
&lt;font color=&quot;#000000&quot;&gt;0이라면 test 명령어이기 때문에 and 연산 후 값이 0이므로 점프하지 않습니다. 0 이 아닌 경우 점프를 하게 되겠죠.&lt;/font&gt;&lt;br /&gt;
&lt;font color=&quot;#000000&quot;&gt;점프 했을 경우엔... 뭐 위와 비슷하게 처리루틴이 아닌 다른 루틴으로 가겠지요..;&lt;/font&gt;&lt;br /&gt;
&lt;br /&gt;&lt;font color=&quot;#000000&quot;&gt;결론.................. BlockInput 함수.. 이렇게 작동합니다. .ㅎㅎ 허무..;&amp;nbsp;&lt;/font&gt;&lt;/div&gt;
&lt;/div&gt;&lt;div class=&quot;entry-ccl&quot; style=&quot;clear: both; text-align: right; margin-bottom: 10px&quot;&gt;
	&lt;img id=&quot;ccl-icon-357-0&quot; class=&quot;entry-ccl-by&quot; src=&quot;http://i1.daumcdn.net/cfs.tistory/v/0/static/admin/editor/ccl_black01.png&quot; alt=&quot;저작자 표시&quot;/&gt;
	&lt;!--
	&lt;rdf:RDF xmlns=&quot;http://web.resource.org/cc/&quot; xmlns:dc=&quot;http://purl.org/dc/elements/1.1/&quot; xmlns:rdf=&quot;http://www.w3.org/1999/02/22-rdf-syntax-ns#&quot;&gt;
		&lt;Work rdf:about=&quot;&quot;&gt;
			&lt;license rdf:resource=&quot;http://creativecommons.org/licenses/by-fr/2.0/kr/&quot; /&gt;
		&lt;/Work&gt;
		&lt;License rdf:about=&quot;http://creativecommons.org/licenses/by-fr/&quot;&gt;
			&lt;permits rdf:resource=&quot;http://web.resource.org/cc/Reproduction&quot;/&gt;
			&lt;permits rdf:resource=&quot;http://web.resource.org/cc/Distribution&quot;/&gt;
			&lt;requires rdf:resource=&quot;http://web.resource.org/cc/Notice&quot;/&gt;
			&lt;requires rdf:resource=&quot;http://web.resource.org/cc/Attribution&quot;/&gt;
			&lt;permits rdf:resource=&quot;http://web.resource.org/cc/DerivativeWorks&quot;/&gt;
		&lt;/License&gt;
	&lt;/rdf:RDF&gt;
	--&gt;
&lt;/div&gt;
&lt;div class=&quot;another_category another_category_color_gray&quot;&gt;
&lt;h4&gt;'&lt;a href=&quot;/category/My%20Study&quot;&gt;My Study&lt;/a&gt;&amp;nbsp;&gt;&amp;nbsp;&lt;a href=&quot;/category/My%20Study/Programming%26Theory&quot;&gt;Programming&amp;amp;Theory&lt;/a&gt;' 카테고리의 다른 글&lt;/h4&gt;
&lt;table&gt;
&lt;tr&gt;
&lt;th&gt;
&lt;a href=&quot;/364&quot; &gt;Windows rand() 랜덤 비율&lt;/a&gt;&amp;nbsp;&amp;nbsp;&lt;span&gt;(0)&lt;/span&gt;
&lt;/th&gt;
&lt;td&gt;
2012/02/14&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;th&gt;
&lt;a href=&quot;/359&quot; &gt;ARM 명령어 공부&lt;/a&gt;&amp;nbsp;&amp;nbsp;&lt;span&gt;(2)&lt;/span&gt;
&lt;/th&gt;
&lt;td&gt;
2012/01/27&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;th&gt;
&lt;a href=&quot;/357&quot; &gt;BlockInput Function&lt;/a&gt;&amp;nbsp;&amp;nbsp;&lt;span&gt;(3)&lt;/span&gt;
&lt;/th&gt;
&lt;td&gt;
2012/01/20&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;th&gt;
&lt;a href=&quot;/354&quot; &gt;My BSOD&lt;/a&gt;&amp;nbsp;&amp;nbsp;&lt;span&gt;(2)&lt;/span&gt;
&lt;/th&gt;
&lt;td&gt;
2012/01/08&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;th&gt;
&lt;a href=&quot;/353&quot; &gt;SwapContext를 이용한 프로세스 찾기&lt;/a&gt;&amp;nbsp;&amp;nbsp;&lt;span&gt;(7)&lt;/span&gt;
&lt;/th&gt;
&lt;td&gt;
2012/01/04&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;th&gt;
&lt;a href=&quot;/352&quot; &gt;Remote Library Injection&lt;/a&gt;&amp;nbsp;&amp;nbsp;&lt;span&gt;(4)&lt;/span&gt;
&lt;/th&gt;
&lt;td&gt;
2011/12/29&lt;/td&gt;
&lt;/tr&gt;
&lt;/table&gt;&lt;/div&gt;</description>
			<category>Programming&amp;Theory</category>
			<category>Anti Reversing</category>
			<category>BlockInput</category>
			<category>breakpoint</category>
			<category>EnterCrit</category>
			<category>Events</category>
			<category>gptiBlockInput</category>
			<category>HardWare</category>
			<category>KEYBOARD</category>
			<category>KiServiceTable</category>
			<category>LeaveCrit</category>
			<category>Mouse</category>
			<category>NtUserBlockInput</category>
			<category>ProcessMouseInput</category>
			<category>W32pServiceTable</category>
			<category>WinDbg</category>
			<category>xxxKeyEvent</category>
			<author>Ezbeat</author>
			<guid>http://ezbeat.tistory.com/357</guid>
			<comments>http://ezbeat.tistory.com/357#entry357comment</comments>
			<pubDate>Fri, 20 Jan 2012 16:57:23 +0900</pubDate>
		</item>
		<item>
			<title>Codegate 2011 B500 writeup</title>
			<link>http://ezbeat.tistory.com/355</link>
			<description>&lt;font color=&quot;#000000&quot;&gt;대회가 끝난 .. 오래된 이 시점.. 가상화 프로젝트를 진행도중 예전에 가상화 관련해서 리버싱 문제가 하나 있었던거 같은데 그 당시 대회때는 건들어보지도 못했고; 나중에 시간 있을 때 한번 풀어봐야지 하고 문제만 가지고 있었는데 이제서야 풀어보게 되네요~ b100,200,300,400 다 풀었는데 시간상..ㅠㅠ 보지도 못한..;&lt;/font&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;font color=&quot;#000000&quot;&gt;문제를 풀어보면서 느낀건데 이거 만든 사람이 참 대단하게 느껴지더군요. 뭐 일단은 문제를 풀어보도록 하죠.&lt;/font&gt;&lt;br /&gt;
&lt;font color=&quot;#000000&quot;&gt;( 혹시 혼자서 먼저 풀어보실 분은 풀어보셔요. )&lt;/font&gt;&lt;br /&gt;
&lt;b&gt;&lt;font color=&quot;#e31600&quot;&gt;문제 파일&lt;/font&gt;&lt;/b&gt;&lt;br /&gt;
&lt;div class=&quot;imageblock&quot; style=&quot;display:inline;&quot;&gt;&lt;a href=&quot;http://ezbeat.tistory.com/attachment/cfile10.uf@1756F33F4F16CF2A13FF63&quot;&gt;&lt;img src=&quot;http://i1.daumcdn.net/cfs.tistory/v/110706133414/blog/image/extension/unknown.gif&quot; alt=&quot;&quot; style=&quot;vertical-align: middle;&quot; /&gt; 7CAC6AF2303FC01ACD2CEB350DAC0518&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;b&gt;&lt;font color=&quot;#801fbf&quot;&gt;Q :&amp;nbsp;Find a key.&lt;/font&gt;&lt;/b&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;font color=&quot;#000000&quot;&gt;일단 문제를 실행해보겠습니다.&lt;/font&gt;&lt;br /&gt;
&lt;font color=&quot;#000000&quot;&gt;&lt;div class=&quot;imageblock&quot; style=&quot;display:inline;&quot;&gt;&lt;a href=&quot;http://cfile24.uf.tistory.com/original/154CE33D4F16833C0DA459&quot; rel=&quot;lightbox&quot; target=&quot;_blank&quot;&gt;&lt;img src=&quot;http://cfile24.uf.tistory.com/image/154CE33D4F16833C0DA459&quot; alt=&quot;&quot; filemime=&quot;image/jpeg&quot; filename=&quot;사용자 지정 2.jpg&quot; height=&quot;76&quot; width=&quot;380&quot;/&gt;&lt;/a&gt;&lt;/div&gt;&lt;/font&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;font color=&quot;#000000&quot;&gt;출제가의 오타가 보이는 군요. 아무튼 키 파일을 체크를 하는데 해당 파일이 없다고 뜹니다.&lt;/font&gt;&lt;br /&gt;
&lt;font color=&quot;#000000&quot;&gt;뭐 리버싱을 해서 원하는 키 파일이 뭔지 알아내야겠지요. 일단 리버싱을 들어가기 전에&lt;/font&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;font color=&quot;#000000&quot;&gt;문제의 정보를 봐보았습니다.&lt;/font&gt;&lt;br /&gt;
&lt;font color=&quot;#000000&quot;&gt;&lt;div class=&quot;imageblock&quot; style=&quot;display:inline;&quot;&gt;&lt;a href=&quot;http://cfile7.uf.tistory.com/original/127B73404F168245206372&quot; rel=&quot;lightbox&quot; target=&quot;_blank&quot;&gt;&lt;img src=&quot;http://cfile7.uf.tistory.com/image/127B73404F168245206372&quot; alt=&quot;&quot; filemime=&quot;image/jpeg&quot; filename=&quot;윈도우 1.jpg&quot; height=&quot;326&quot; width=&quot;564&quot;/&gt;&lt;/a&gt;&lt;/div&gt;&lt;/font&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;font color=&quot;#000000&quot;&gt;&lt;div class=&quot;imageblock&quot; style=&quot;display:inline;&quot;&gt;&lt;a href=&quot;http://cfile7.uf.tistory.com/original/113F95414F1682681D5AEC&quot; rel=&quot;lightbox&quot; target=&quot;_blank&quot;&gt;&lt;img src=&quot;http://cfile7.uf.tistory.com/image/113F95414F1682681D5AEC&quot; alt=&quot;&quot; filemime=&quot;image/jpeg&quot; filename=&quot;윈도우 2.jpg&quot; height=&quot;326&quot; width=&quot;564&quot;/&gt;&lt;/a&gt;&lt;/div&gt;&lt;/font&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;font color=&quot;#000000&quot;&gt;해당 바이너리의 ImageBase와 EntryPoint를 살펴보니 시작하는 섹션이 .text 섹션이 아닌 .VM 섹션이라는 것을 알 수 있습니다. 0x409000 부터 .VM 섹션이기 때문이죠. 제가 공부하고 구현해보았던 코드 가상화 기법과는 또 다른 것 같습니다.&lt;/font&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;font color=&quot;#000000&quot;&gt;아무튼 부푼 기대를 가지고 한번 리버싱을 해보죠.&amp;nbsp;&lt;/font&gt;&lt;br /&gt;
&lt;font color=&quot;#000000&quot;&gt;&lt;div class=&quot;imageblock&quot; style=&quot;display:inline;&quot;&gt;&lt;a href=&quot;http://cfile25.uf.tistory.com/original/165F2C424F1682F008573F&quot; rel=&quot;lightbox&quot; target=&quot;_blank&quot;&gt;&lt;img src=&quot;http://cfile25.uf.tistory.com/image/165F2C424F1682F008573F&quot; alt=&quot;&quot; filemime=&quot;image/jpeg&quot; filename=&quot;사용자 지정 1.jpg&quot; height=&quot;276&quot; width=&quot;507&quot;/&gt;&lt;/a&gt;&lt;/div&gt;&amp;nbsp;&lt;/font&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;font color=&quot;#000000&quot;&gt;올디로 처음 열어보았을 때 화면입니다.&amp;nbsp;&lt;/font&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;font color=&quot;#000000&quot;&gt;뭔가 시작부터 복잡하다고 느껴집니다. 전 미친척 하고 일일이 분석을 해보았지요.. =_=;; ㅎㅎ 사실 여러 가상화 기법들을 봐보아야 했기 때문에 겸사겸사 분석해본 것입니다.&amp;nbsp;&lt;/font&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;font color=&quot;#000000&quot;&gt;여기에 모든 분석한 위치를 담기엔 뭐해서 대충 설명을 적겠습니다.&lt;/font&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;font color=&quot;#000000&quot;&gt;일단 두 번의 가상 메모리를 할당합니다.&lt;/font&gt;&lt;br /&gt;
&lt;font color=&quot;#000000&quot;&gt;VirtualAlloc(NULL,0x1000,0x1000,PAGE_EXECUTE_READWRITE);&lt;/font&gt;&lt;br /&gt;
&lt;font color=&quot;#000000&quot;&gt;첫번째 VirtualAlloc된 메모리 : V100&lt;/font&gt;&lt;br /&gt;
&lt;font color=&quot;#000000&quot;&gt;두번째 VirtualAlloc된 메모리 : V200&amp;nbsp;&lt;/font&gt;&lt;br /&gt;
&lt;font color=&quot;#000000&quot;&gt;으로 일단 가정..&lt;/font&gt;&lt;br /&gt;
&lt;font color=&quot;#000000&quot;&gt;그림이 있어서 말해보면 위 그림에서&amp;nbsp;&lt;/font&gt;&lt;br /&gt;
&lt;font color=&quot;#000000&quot;&gt;call dword ptr ds:[eax]&lt;/font&gt;&lt;br /&gt;
&lt;font color=&quot;#000000&quot;&gt;이 위치에서 한번 VirtualAlloc을 합니다.&lt;/font&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;font color=&quot;#000000&quot;&gt;아무튼 위 과정이 끝나고 쭉쭉 트레이스 하다보면&lt;/font&gt;&lt;br /&gt;
&lt;font color=&quot;#000000&quot;&gt;&lt;div class=&quot;imageblock&quot; style=&quot;display:inline;&quot;&gt;&lt;a href=&quot;http://cfile7.uf.tistory.com/original/157B61444F1684981387D2&quot; rel=&quot;lightbox&quot; target=&quot;_blank&quot;&gt;&lt;img src=&quot;http://cfile7.uf.tistory.com/image/157B61444F1684981387D2&quot; alt=&quot;&quot; filemime=&quot;image/jpeg&quot; filename=&quot;사용자 지정 3.jpg&quot; height=&quot;290&quot; width=&quot;513&quot;/&gt;&lt;/a&gt;&lt;/div&gt;&lt;/font&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;font color=&quot;#000000&quot;&gt;위와 같은 루틴으로 점프해서 들어오게 되는데 이 루틴이 핵심적인 부분 중 하나입니다.&lt;/font&gt;&lt;br /&gt;
&lt;font color=&quot;#000000&quot;&gt;이 루틴은 분석할만한 가치가 100% +_+ ㅋㅋ &amp;nbsp; ㅠ_ㅠ @==^^ 설명이나 얼른..&lt;/font&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;font color=&quot;#000000&quot;&gt;이 루틴에서는 스택 재구성은 물론 별의별 짓을 합니다.&lt;/font&gt;&lt;br /&gt;
&lt;font color=&quot;#000000&quot;&gt;트레이스 하다보면&lt;/font&gt;&lt;br /&gt;
&lt;font color=&quot;#000000&quot;&gt;0x0040B1D4 에 있는 값과 0x0040B1D4 + 1 위치에 있는 값을 가져와 xor를 시킵니다.&lt;/font&gt;&lt;br /&gt;
&lt;font color=&quot;#000000&quot;&gt;그리고 0x0040B1D4 + 1 위치에 있는 값에서 xor된 크기 Byte만큼 데이터를 가져옵니다.&lt;/font&gt;&lt;br /&gt;
&lt;font color=&quot;#000000&quot;&gt;가져와서 또 지지고 볶고.. 쿵짝쿵짝&lt;/font&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;font color=&quot;#000000&quot;&gt;그리고 나면 V100+0xFD4 위치에 특정 명령어가 생성이 됩니다.&lt;/font&gt;&lt;br /&gt;
&lt;font color=&quot;#000000&quot;&gt;위 루틴의 끝 부분을 보시겠습니다.&lt;/font&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;font color=&quot;#000000&quot;&gt;&lt;div class=&quot;imageblock&quot; style=&quot;display:inline;&quot;&gt;&lt;a href=&quot;http://cfile5.uf.tistory.com/original/1963833B4F16861911238A&quot; rel=&quot;lightbox&quot; target=&quot;_blank&quot;&gt;&lt;img src=&quot;http://cfile5.uf.tistory.com/image/1963833B4F16861911238A&quot; alt=&quot;&quot; filemime=&quot;image/jpeg&quot; filename=&quot;사용자 지정 4.jpg&quot; height=&quot;73&quot; width=&quot;338&quot;/&gt;&lt;/a&gt;&lt;/div&gt;&lt;/font&gt;&lt;br /&gt;
&lt;font color=&quot;#000000&quot;&gt;이번 실행때 V100이 0x250000 였나보군요. 아무튼 push하고 retn하므로 저 주소로 뛰겠죠. 가보겠습니다.&lt;/font&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;font color=&quot;#000000&quot;&gt;&lt;div class=&quot;imageblock&quot; style=&quot;display:inline;&quot;&gt;&lt;a href=&quot;http://cfile25.uf.tistory.com/original/15703C474F168659320D50&quot; rel=&quot;lightbox&quot; target=&quot;_blank&quot;&gt;&lt;img src=&quot;http://cfile25.uf.tistory.com/image/15703C474F168659320D50&quot; alt=&quot;&quot; filemime=&quot;image/jpeg&quot; filename=&quot;사용자 지정 5.jpg&quot; height=&quot;62&quot; width=&quot;521&quot;/&gt;&lt;/a&gt;&lt;/div&gt;&lt;/font&gt;&lt;br /&gt;
&lt;font color=&quot;#000000&quot;&gt;push ebx를 하고 난 후 0x40ABBD로 점프를 하게 됩니다.&amp;nbsp;&lt;/font&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;font color=&quot;#000000&quot;&gt;저 push ebx가 뭘까.... 메모리에 이미 있는 값을 지지고 볶고 한 후 생성된 값인데.. &lt;/font&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;font color=&quot;#000000&quot;&gt;아무튼 계속 트레이스 해본 결과 위 과정이 반복 된다는 것을 확인할 수 있었습니다.&lt;/font&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;font color=&quot;#000000&quot;&gt;그래서~ 0x0040ABBC 위치에 BP를 잡고 0x00250FD4 위치의 명령어를 계속 확인하면서 적어본 결과입니다.&amp;nbsp;&lt;/font&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;div class=&quot;txc-textbox&quot; style=&quot;border-top-style: solid; border-right-style: solid; border-bottom-style: solid; border-left-style: solid; border-top-width: 1px; border-right-width: 1px; border-bottom-width: 1px; border-left-width: 1px; border-top-color: rgb(219, 232, 251); border-right-color: rgb(219, 232, 251); border-bottom-color: rgb(219, 232, 251); border-left-color: rgb(219, 232, 251); background-color: rgb(219, 232, 251); padding-top: 10px; padding-right: 10px; padding-bottom: 10px; padding-left: 10px; &quot;&gt;
&lt;p style=&quot;margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; &quot;&gt;&lt;/p&gt;
&lt;p style=&quot;margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; &quot;&gt;&lt;font color=&quot;#000000&quot;&gt;00250FD4 &amp;nbsp; &amp;nbsp;6A 00 &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; PUSH 0&lt;/font&gt;&lt;/p&gt;
&lt;p style=&quot;margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; &quot;&gt;&lt;font color=&quot;#000000&quot;&gt;00250FD4 &amp;nbsp; &amp;nbsp;6A 00 &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; PUSH 0&lt;/font&gt;&lt;/p&gt;
&lt;p style=&quot;margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; &quot;&gt;&lt;font color=&quot;#000000&quot;&gt;00250FD4 &amp;nbsp; &amp;nbsp;60 &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;PUSHAD&lt;/font&gt;&lt;/p&gt;
&lt;p style=&quot;margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; &quot;&gt;&lt;font color=&quot;#000000&quot;&gt;00250FD4 &amp;nbsp; &amp;nbsp;9C &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;PUSHFD&lt;/font&gt;&lt;/p&gt;
&lt;p style=&quot;margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; &quot;&gt;&lt;font color=&quot;#000000&quot;&gt;00250FD4 &amp;nbsp; &amp;nbsp;9C &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;PUSHFD&lt;/font&gt;&lt;/p&gt;
&lt;p style=&quot;margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; &quot;&gt;&lt;font color=&quot;#000000&quot;&gt;00250FD4 &amp;nbsp; &amp;nbsp;58 &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;POP EAX&lt;/font&gt;&lt;/p&gt;
&lt;p style=&quot;margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; &quot;&gt;&lt;font color=&quot;#000000&quot;&gt;00250FD4 &amp;nbsp; &amp;nbsp;50 &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;PUSH EAX&lt;/font&gt;&lt;/p&gt;
&lt;p style=&quot;margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; &quot;&gt;&lt;font color=&quot;#000000&quot;&gt;00250FD4 &amp;nbsp; &amp;nbsp;68 03954000 &amp;nbsp; &amp;nbsp; PUSH 409503&lt;/font&gt;&lt;/p&gt;
&lt;p style=&quot;margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; &quot;&gt;&lt;font color=&quot;#000000&quot;&gt;00250FD4 &amp;nbsp; &amp;nbsp;58 &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;POP EAX &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; &amp;nbsp; &amp;nbsp; &amp;nbsp; ; 7CAC6AF2.00409503&lt;/font&gt;&lt;/p&gt;
&lt;p style=&quot;margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; &quot;&gt;&lt;font color=&quot;#000000&quot;&gt;00250FD4 &amp;nbsp; &amp;nbsp;8B05 F0914000 &amp;nbsp; MOV EAX,DWORD PTR DS:[4091F0]&lt;/font&gt;&lt;/p&gt;
&lt;p style=&quot;margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; &quot;&gt;&lt;font color=&quot;#000000&quot;&gt;00250FD4 &amp;nbsp; &amp;nbsp;8D05 F80F3600 &amp;nbsp; LEA EAX,DWORD PTR DS:[360FF8]&lt;/font&gt;&lt;/p&gt;
&lt;p style=&quot;margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; &quot;&gt;&lt;font color=&quot;#000000&quot;&gt;00250FD4 &amp;nbsp; &amp;nbsp;8925 F80F3600 &amp;nbsp; MOV DWORD PTR DS:[360FF8],ESP&lt;/font&gt;&lt;/p&gt;
&lt;p style=&quot;margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; &quot;&gt;&lt;font color=&quot;#000000&quot;&gt;00250FD4 &amp;nbsp; &amp;nbsp;8300 04 &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; ADD DWORD PTR DS:[EAX],4&lt;/font&gt;&lt;/p&gt;
&lt;p style=&quot;margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; &quot;&gt;&lt;font color=&quot;#000000&quot;&gt;00250FD4 &amp;nbsp; &amp;nbsp;58 &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;POP EAX&lt;/font&gt;&lt;/p&gt;
&lt;p style=&quot;margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; &quot;&gt;&lt;font color=&quot;#000000&quot;&gt;00250FD4 &amp;nbsp; &amp;nbsp;8BF2 &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;MOV ESI,EDX &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; &amp;nbsp; ; 7CAC6AF2.00409987&lt;/font&gt;&lt;/p&gt;
&lt;p style=&quot;margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; &quot;&gt;&lt;font color=&quot;#000000&quot;&gt;00250FD4 &amp;nbsp; &amp;nbsp;46 &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;INC ESI &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; &amp;nbsp; &amp;nbsp; &amp;nbsp; ; 7CAC6AF2.00409987&lt;/font&gt;&lt;/p&gt;
&lt;p style=&quot;margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; &quot;&gt;&lt;font color=&quot;#000000&quot;&gt;00250FD4 &amp;nbsp; &amp;nbsp;8A02 &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;MOV AL,BYTE PTR DS:[EDX]&lt;/font&gt;&lt;/p&gt;
&lt;p style=&quot;margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; &quot;&gt;&lt;font color=&quot;#000000&quot;&gt;00250FD4 &amp;nbsp; &amp;nbsp;3242 01 &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; XOR AL,BYTE PTR DS:[EDX+1]&lt;/font&gt;&lt;/p&gt;
&lt;p style=&quot;margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; &quot;&gt;&lt;font color=&quot;#000000&quot;&gt;00250FD4 &amp;nbsp; &amp;nbsp;0FB6C0 &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;MOVZX EAX,AL&lt;/font&gt;&lt;/p&gt;
&lt;p style=&quot;margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; &quot;&gt;&lt;font color=&quot;#000000&quot;&gt;00250FD4 &amp;nbsp; &amp;nbsp;50 &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;PUSH EAX&lt;/font&gt;&lt;/p&gt;
&lt;p style=&quot;margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; &quot;&gt;&lt;font color=&quot;#000000&quot;&gt;00250FD4 &amp;nbsp; &amp;nbsp;56 &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;PUSH ESI &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; &amp;nbsp; &amp;nbsp; &amp;nbsp;; 7CAC6AF2.00409988&lt;/font&gt;&lt;/p&gt;
&lt;p style=&quot;margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; &quot;&gt;&lt;font color=&quot;#000000&quot;&gt;00250FD4 &amp;nbsp; &amp;nbsp;57 &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;PUSH EDI&lt;/font&gt;&lt;/p&gt;
&lt;p style=&quot;margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; &quot;&gt;&lt;font color=&quot;#000000&quot;&gt;&lt;br /&gt;
&lt;/font&gt;&lt;/p&gt;
&lt;p style=&quot;margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; &quot;&gt;&lt;font color=&quot;#000000&quot;&gt;00250F7C &amp;nbsp; &amp;nbsp;60 &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;PUSHAD&lt;/font&gt;&lt;/p&gt;
&lt;p style=&quot;margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; &quot;&gt;&lt;font color=&quot;#000000&quot;&gt;00250F7C &amp;nbsp; &amp;nbsp;8B0D CC0F3600 &amp;nbsp; MOV ECX,DWORD PTR DS:[360FCC]&lt;/font&gt;&lt;/p&gt;
&lt;p style=&quot;margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; &quot;&gt;&lt;font color=&quot;#000000&quot;&gt;00250F7C &amp;nbsp; &amp;nbsp;8B35 C80F3600 &amp;nbsp; MOV ESI,DWORD PTR DS:[360FC8] &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; ; 7CAC6AF2.00409988&lt;/font&gt;&lt;/p&gt;
&lt;p style=&quot;margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; &quot;&gt;&lt;font color=&quot;#000000&quot;&gt;00250F7C &amp;nbsp; &amp;nbsp;8B3D C40F3600 &amp;nbsp; MOV EDI,DWORD PTR DS:[360FC4]&lt;/font&gt;&lt;/p&gt;
&lt;p style=&quot;margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; &quot;&gt;&lt;font color=&quot;#000000&quot;&gt;00250F7C &amp;nbsp; &amp;nbsp;F3:A4 &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; REP MOVS BYTE PTR ES:[EDI],BYTE PTR DS:[ESI]&lt;/font&gt;&lt;/p&gt;
&lt;p style=&quot;margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; &quot;&gt;&lt;font color=&quot;#000000&quot;&gt;00250F7C &amp;nbsp; &amp;nbsp;61 &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;POPAD&lt;/font&gt;&lt;/p&gt;
&lt;p style=&quot;margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; &quot;&gt;&lt;font color=&quot;#000000&quot;&gt;&lt;br /&gt;
&lt;/font&gt;&lt;/p&gt;
&lt;p style=&quot;margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; &quot;&gt;&lt;font color=&quot;#000000&quot;&gt;00250FD4 &amp;nbsp; &amp;nbsp;51 &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;PUSH ECX&lt;/font&gt;&lt;/p&gt;
&lt;p style=&quot;margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; &quot;&gt;&lt;font color=&quot;#000000&quot;&gt;00250FD4 &amp;nbsp; &amp;nbsp;50 &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;PUSH EAX&lt;/font&gt;&lt;/p&gt;
&lt;p style=&quot;margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; &quot;&gt;&lt;font color=&quot;#000000&quot;&gt;00250FD4 &amp;nbsp; &amp;nbsp;57 &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;PUSH EDI&lt;/font&gt;&lt;/p&gt;
&lt;p style=&quot;margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; &quot;&gt;&lt;font color=&quot;#000000&quot;&gt;00250FD4 &amp;nbsp; &amp;nbsp;51 &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;PUSH ECX&lt;/font&gt;&lt;/p&gt;
&lt;p style=&quot;margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; &quot;&gt;&lt;font color=&quot;#000000&quot;&gt;00250FD4 &amp;nbsp; &amp;nbsp;68 4B934000 &amp;nbsp; &amp;nbsp; PUSH 40934B&lt;/font&gt;&lt;/p&gt;
&lt;p style=&quot;margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; &quot;&gt;&lt;font color=&quot;#000000&quot;&gt;00250FD4 &amp;nbsp; &amp;nbsp;59 &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;POP ECX &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; &amp;nbsp; &amp;nbsp; &amp;nbsp; ; 7CAC6AF2.0040934B&lt;/font&gt;&lt;/p&gt;
&lt;p style=&quot;margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; &quot;&gt;&lt;font color=&quot;#000000&quot;&gt;00250FD4 &amp;nbsp; &amp;nbsp;8B0D F4914000 &amp;nbsp; MOV ECX,DWORD PTR DS:[4091F4]&lt;/font&gt;&lt;/p&gt;
&lt;p style=&quot;margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; &quot;&gt;&lt;font color=&quot;#000000&quot;&gt;00250FD4 &amp;nbsp; &amp;nbsp;66:390F &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; CMP WORD PTR DS:[EDI],CX&lt;/font&gt;&lt;/p&gt;
&lt;p style=&quot;margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; &quot;&gt;&lt;font color=&quot;#000000&quot;&gt;00250FD4 &amp;nbsp; &amp;nbsp;59 &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;POP ECX&lt;/font&gt;&lt;/p&gt;
&lt;p style=&quot;margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; &quot;&gt;&lt;font color=&quot;#000000&quot;&gt;00250FD4 &amp;nbsp; &amp;nbsp;51 &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;PUSH ECX&lt;/font&gt;&lt;/p&gt;
&lt;p style=&quot;margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; &quot;&gt;&lt;font color=&quot;#000000&quot;&gt;00250FD4 &amp;nbsp; &amp;nbsp;C60438 68 &amp;nbsp; &amp;nbsp; &amp;nbsp; MOV BYTE PTR DS:[EAX+EDI],68&lt;/font&gt;&lt;/p&gt;
&lt;p style=&quot;margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; &quot;&gt;&lt;font color=&quot;#000000&quot;&gt;00250FD4 &amp;nbsp; &amp;nbsp;68 66934000 &amp;nbsp; &amp;nbsp; PUSH 409366&lt;/font&gt;&lt;/p&gt;
&lt;p style=&quot;margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; &quot;&gt;&lt;font color=&quot;#000000&quot;&gt;00250FD4 &amp;nbsp; &amp;nbsp;59 &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;POP ECX &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; &amp;nbsp; &amp;nbsp; &amp;nbsp; ; 7CAC6AF2.00409366&lt;/font&gt;&lt;/p&gt;
&lt;p style=&quot;margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; &quot;&gt;&lt;font color=&quot;#000000&quot;&gt;00250FD4 &amp;nbsp; &amp;nbsp;81C1 47000000 &amp;nbsp; ADD ECX,47&lt;/font&gt;&lt;/p&gt;
&lt;p style=&quot;margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; &quot;&gt;&lt;font color=&quot;#000000&quot;&gt;00250FD4 &amp;nbsp; &amp;nbsp;890D DA0F3600 &amp;nbsp; MOV DWORD PTR DS:[360FDA],ECX &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; ; 7CAC6AF2.004093AD&lt;/font&gt;&lt;/p&gt;
&lt;p style=&quot;margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; &quot;&gt;&lt;font color=&quot;#000000&quot;&gt;00250FD4 &amp;nbsp; &amp;nbsp;C64438 05 C3 &amp;nbsp; &amp;nbsp;MOV BYTE PTR DS:[EAX+EDI+5],0C3&lt;/font&gt;&lt;/p&gt;
&lt;p style=&quot;margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; &quot;&gt;&lt;font color=&quot;#000000&quot;&gt;00250FD4 &amp;nbsp; &amp;nbsp;59 &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;POP ECX &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; &amp;nbsp; &amp;nbsp; &amp;nbsp; ; 7CAC6AF2.004093AD&lt;/font&gt;&lt;/p&gt;
&lt;p style=&quot;margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; &quot;&gt;&lt;font color=&quot;#000000&quot;&gt;00250FD4 &amp;nbsp; &amp;nbsp;8BF2 &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;MOV ESI,EDX &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; &amp;nbsp; ; 7CAC6AF2.0040998D&lt;/font&gt;&lt;/p&gt;
&lt;p style=&quot;margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; &quot;&gt;&lt;font color=&quot;#000000&quot;&gt;00250FD4 &amp;nbsp; &amp;nbsp;46 &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;INC ESI &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; &amp;nbsp; &amp;nbsp; &amp;nbsp; ; 7CAC6AF2.0040998D&lt;/font&gt;&lt;/p&gt;
&lt;p style=&quot;margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; &quot;&gt;&lt;font color=&quot;#000000&quot;&gt;00250FD4 &amp;nbsp; &amp;nbsp;8A02 &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;MOV AL,BYTE PTR DS:[EDX]&lt;/font&gt;&lt;/p&gt;
&lt;p style=&quot;margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; &quot;&gt;&lt;font color=&quot;#000000&quot;&gt;00250FD4 &amp;nbsp; &amp;nbsp;3242 01 &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; XOR AL,BYTE PTR DS:[EDX+1]&lt;/font&gt;&lt;/p&gt;
&lt;p style=&quot;margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; &quot;&gt;&lt;font color=&quot;#000000&quot;&gt;00250FD4 &amp;nbsp; &amp;nbsp;0FB6C0 &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;MOVZX EAX,AL&lt;/font&gt;&lt;/p&gt;
&lt;p style=&quot;margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; &quot;&gt;&lt;font color=&quot;#000000&quot;&gt;00250FD4 &amp;nbsp; &amp;nbsp;50 &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;PUSH EAX&lt;/font&gt;&lt;/p&gt;
&lt;p style=&quot;margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; &quot;&gt;&lt;font color=&quot;#000000&quot;&gt;00250FD4 &amp;nbsp; &amp;nbsp;56 &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;PUSH ESI &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; &amp;nbsp; &amp;nbsp; &amp;nbsp;; 7CAC6AF2.0040998E&lt;/font&gt;&lt;/p&gt;
&lt;p style=&quot;margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; &quot;&gt;&lt;font color=&quot;#000000&quot;&gt;00250FD4 &amp;nbsp; &amp;nbsp;57 &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;PUSH EDI&lt;/font&gt;&lt;/p&gt;
&lt;p style=&quot;margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; &quot;&gt;&lt;font color=&quot;#000000&quot;&gt;&lt;br /&gt;
&lt;/font&gt;&lt;/p&gt;
&lt;p style=&quot;margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; &quot;&gt;&lt;font color=&quot;#000000&quot;&gt;00250F7C &amp;nbsp; &amp;nbsp;60 &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;PUSHAD&lt;/font&gt;&lt;/p&gt;
&lt;p style=&quot;margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; &quot;&gt;&lt;font color=&quot;#000000&quot;&gt;00250F7C &amp;nbsp; &amp;nbsp;8B0D CC0F3600 &amp;nbsp; MOV ECX,DWORD PTR DS:[360FCC]&lt;/font&gt;&lt;/p&gt;
&lt;p style=&quot;margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; &quot;&gt;&lt;font color=&quot;#000000&quot;&gt;00250F7C &amp;nbsp; &amp;nbsp;8B35 C80F3600 &amp;nbsp; MOV ESI,DWORD PTR DS:[360FC8] &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; ; 7CAC6AF2.0040998E&lt;/font&gt;&lt;/p&gt;
&lt;p style=&quot;margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; &quot;&gt;&lt;font color=&quot;#000000&quot;&gt;00250F7C &amp;nbsp; &amp;nbsp;8B3D C40F3600 &amp;nbsp; MOV EDI,DWORD PTR DS:[360FC4]&lt;/font&gt;&lt;/p&gt;
&lt;p style=&quot;margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; &quot;&gt;&lt;font color=&quot;#000000&quot;&gt;00250F7C &amp;nbsp; &amp;nbsp;F3:A4 &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; REP MOVS BYTE PTR ES:[EDI],BYTE PTR DS:[ESI]&lt;/font&gt;&lt;/p&gt;
&lt;p style=&quot;margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; &quot;&gt;&lt;font color=&quot;#000000&quot;&gt;00250F7C &amp;nbsp; &amp;nbsp;61 &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;POPAD&lt;/font&gt;&lt;/p&gt;
&lt;p style=&quot;margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; &quot;&gt;&lt;font color=&quot;#000000&quot;&gt;&lt;br /&gt;
&lt;/font&gt;&lt;/p&gt;
&lt;p style=&quot;margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; &quot;&gt;&lt;font color=&quot;#000000&quot;&gt;00250FD4 &amp;nbsp; &amp;nbsp;51 &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;PUSH ECX&lt;br /&gt;
&lt;br /&gt;
계속 반복............&amp;nbsp;&lt;/font&gt;&lt;/p&gt;
&lt;p&gt;&lt;/p&gt;
&lt;/div&gt;
&lt;font color=&quot;#000000&quot;&gt;&lt;br /&gt;
이러한 값이 생성이 되면서 실행을 하게 됩니다.!! &lt;br /&gt;
일단 여기서 이 가상화에 대한 결론을 내보면 원본 실행 루틴을 문제 만든이의 방법으로 인코딩을 시켜서 메모리에 저장해두고 실행 시 한줄 한줄 디코딩 하면서 실행하는 과정입니다.&lt;br /&gt;
&lt;br /&gt;
너무 값이 많아 살펴보니 비슷비슷한 루틴이 계속 반복되고 있는 것을 알 수 있었습니다. 그리고 반복되는 루틴을 보니..!!&lt;br /&gt;
원본 실행 루틴을 디코딩 시켜서 메모리(V200 +0xFD4)에 저장하는 코드와 동일(너무 비슷?) 함을 알 수 있었습니다. 코드를 전부 분석해보니 눈에 보이더군요. 무튼 디코딩 되서 실행되는 루틴 또한 무언가 값을 디코딩해서 메모리에 저장합니다. 이거 이중 가상화 같군요. 가상화라 해야하나.. 아무튼 그러면 분명히 그 코드를 실행시키는 &amp;nbsp;&lt;br /&gt;
&lt;div class=&quot;imageblock&quot; style=&quot;display:inline;&quot;&gt;&lt;a href=&quot;http://cfile5.uf.tistory.com/original/1963833B4F16861911238A&quot; rel=&quot;lightbox&quot; target=&quot;_blank&quot;&gt;&lt;img src=&quot;http://cfile5.uf.tistory.com/image/1963833B4F16861911238A&quot; alt=&quot;&quot; filemime=&quot;image/jpeg&quot; filename=&quot;사용자 지정 4.jpg&quot; height=&quot;73&quot; width=&quot;338&quot;/&gt;&lt;/a&gt;&lt;/div&gt;&amp;nbsp;&lt;br /&gt;
이와 비슷한 루틴이 분명히 존재할 것입니다.&lt;br /&gt;
&lt;br /&gt;
PUSH V200+0xFD4&lt;br /&gt;
RETN&lt;br /&gt;
이 루틴이 어딘가 존재한다는 말이죠. 없으면.. 사실상 문제 삭제해버릴 생각이었습니다. ㅎㅎㅎㅎ&lt;br /&gt;
있으니 이렇게 풀이를 작성하고 있겠죠?&amp;nbsp;&lt;br /&gt;
&lt;br /&gt;
&lt;div class=&quot;imageblock&quot; style=&quot;display:inline;&quot;&gt;&lt;a href=&quot;http://cfile2.uf.tistory.com/original/193D10504F16891B20DDD6&quot; rel=&quot;lightbox&quot; target=&quot;_blank&quot;&gt;&lt;img src=&quot;http://cfile2.uf.tistory.com/image/193D10504F16891B20DDD6&quot; alt=&quot;&quot; filemime=&quot;image/jpeg&quot; filename=&quot;사용자 지정 6.jpg&quot; height=&quot;83&quot; width=&quot;349&quot;/&gt;&lt;/a&gt;&lt;/div&gt;&amp;nbsp;&lt;br /&gt;
이 위치 입니다. V200이 0x260000 였나보군요.&lt;br /&gt;
RETN 위치로 가보겠습니다.&amp;nbsp;&lt;br /&gt;
&lt;br /&gt;
&lt;div class=&quot;imageblock&quot; style=&quot;display:inline;&quot;&gt;&lt;a href=&quot;http://cfile6.uf.tistory.com/original/18589A504F16894D01E8E9&quot; rel=&quot;lightbox&quot; target=&quot;_blank&quot;&gt;&lt;img src=&quot;http://cfile6.uf.tistory.com/image/18589A504F16894D01E8E9&quot; alt=&quot;&quot; filemime=&quot;image/jpeg&quot; filename=&quot;사용자 지정 7.jpg&quot; height=&quot;75&quot; width=&quot;374&quot;/&gt;&lt;/a&gt;&lt;/div&gt;&amp;nbsp;&lt;br /&gt;
뭐 여기서도 역시나 한줄 실행하고 0x4093AD 위치로 가는 것을 알 수 있습니다.&lt;br /&gt;
이제 0x00260FD4 위치에 있는 값을 또 한줄한줄 잡아볼까요?&lt;br /&gt;
&lt;br /&gt;
아!!~ 그 전에 .text 영역을 잠깐 봐보겠습니다.&amp;nbsp;&lt;br /&gt;
보통 가상화를 시키면 가상화된 코드는 원본 코드보다 크기가 훨씬 크기 때문에 새로운 섹션을 만들어서 거기에 넣어두게 됩니다. 이 문제에서는 .VM 섹션에 있는 거구요. 그러면 원본 코드가 있는 .text 섹션엔?? 뭐 쓰레기 값으로 꽉꽉 넣어놨겠죠. 필요 없는 코드이기 때문에요.&amp;nbsp;&lt;br /&gt;
&lt;br /&gt;
하지만 문제 만든이가 모든 코드를 가상화 시키지 않고 부분부분만 가상화를 시켜놨습니다. 그래서 &amp;nbsp;&lt;br /&gt;
&lt;br /&gt;
&lt;div class=&quot;imageblock&quot; style=&quot;display:inline;&quot;&gt;&lt;a href=&quot;http://cfile9.uf.tistory.com/original/14333E4F4F1689FB18F675&quot; rel=&quot;lightbox&quot; target=&quot;_blank&quot;&gt;&lt;img src=&quot;http://cfile9.uf.tistory.com/image/14333E4F4F1689FB18F675&quot; alt=&quot;&quot; filemime=&quot;image/jpeg&quot; filename=&quot;사용자 지정 8.jpg&quot; height=&quot;652&quot; width=&quot;634&quot;/&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;
&lt;div class=&quot;imageblock&quot; style=&quot;display:inline;&quot;&gt;&lt;a href=&quot;http://cfile2.uf.tistory.com/original/195AAD504F168A2402789D&quot; rel=&quot;lightbox&quot; target=&quot;_blank&quot;&gt;&lt;img src=&quot;http://cfile2.uf.tistory.com/image/195AAD504F168A2402789D&quot; alt=&quot;&quot; filemime=&quot;image/jpeg&quot; filename=&quot;사용자 지정 9.jpg&quot; height=&quot;727&quot; width=&quot;586&quot;/&gt;&lt;/a&gt;&lt;/div&gt;&amp;nbsp;&lt;br /&gt;
&lt;br /&gt;
이와 같이 듬성듬성 있는 코드 이지만.. (nop 된 부분은 전부 가상화된 코드일 것.. ㅠㅠ)&lt;br /&gt;
전부다 BP를 걸어놨습니다. &lt;br /&gt;
&lt;br /&gt;
다시 가상화 코드 부분으로 돌아와&amp;nbsp;0x00260FD4 위치에 있는 값을 잡아보겠습니다.&lt;br /&gt;
&lt;/font&gt;&lt;div class=&quot;txc-textbox&quot; style=&quot;border-top-style: solid; border-right-style: solid; border-bottom-style: solid; border-left-style: solid; border-top-width: 1px; border-right-width: 1px; border-bottom-width: 1px; border-left-width: 1px; border-top-color: rgb(219, 232, 251); border-right-color: rgb(219, 232, 251); border-bottom-color: rgb(219, 232, 251); border-left-color: rgb(219, 232, 251); background-color: rgb(219, 232, 251); padding-top: 10px; padding-right: 10px; padding-bottom: 10px; padding-left: 10px; &quot;&gt;
&lt;p style=&quot;margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; &quot;&gt;&lt;font color=&quot;#000000&quot;&gt;00260FD4 &amp;nbsp; &amp;nbsp;8D0D 40FB1200 &amp;nbsp; LEA ECX,DWORD PTR DS:[12FB40]&lt;/font&gt;&lt;/p&gt;
&lt;/div&gt;
&lt;font color=&quot;#000000&quot;&gt;&lt;br /&gt;
&lt;/font&gt;&lt;div&gt;
&lt;font color=&quot;#000000&quot;&gt;이거 한줄 실행하고 .text섹션으로 들어오네요.&lt;/font&gt;&lt;/div&gt;
&lt;font color=&quot;#000000&quot;&gt;&lt;div class=&quot;imageblock&quot; style=&quot;display:inline;&quot;&gt;&lt;a href=&quot;http://cfile7.uf.tistory.com/original/1863FC494F168C8A29BFBB&quot; rel=&quot;lightbox&quot; target=&quot;_blank&quot;&gt;&lt;img src=&quot;http://cfile7.uf.tistory.com/image/1863FC494F168C8A29BFBB&quot; alt=&quot;&quot; filemime=&quot;image/jpeg&quot; filename=&quot;사용자 지정 10.jpg&quot; height=&quot;174&quot; width=&quot;543&quot;/&gt;&lt;/a&gt;&lt;/div&gt;&lt;/font&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;font color=&quot;#000000&quot;&gt;잘 보니 인자로 &quot;rb&quot;, &quot;codegate.key&quot; 가 들어가는 걸로 봐서 codegate.key 파일명을 가지고 read/binary ? 로 여는 것을 알 수 있었습니다. 그래서 문제 파일과 동일한 폴더에 그냥 codegate.key 라는 파일을 하나 만들고 그안에 아무내용이나 막 채워넣었습니다. 그 다음 RETN을 하면 다시 .VM섹션으로 돌아오게 됩니다.&amp;nbsp;&lt;/font&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;font color=&quot;#000000&quot;&gt;계속&amp;nbsp;0x00260FD4&amp;nbsp;위치에 있는 값을 잡아보겠습니다.&lt;/font&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;font color=&quot;#000000&quot;&gt;&lt;div class=&quot;imageblock&quot; style=&quot;display:inline;&quot;&gt;&lt;a href=&quot;http://cfile7.uf.tistory.com/original/173F33484F169D5E34C955&quot; rel=&quot;lightbox&quot; target=&quot;_blank&quot;&gt;&lt;img src=&quot;http://cfile7.uf.tistory.com/image/173F33484F169D5E34C955&quot; alt=&quot;&quot; filemime=&quot;image/jpeg&quot; filename=&quot;사용자 지정 11.jpg&quot; height=&quot;108&quot; width=&quot;683&quot;/&gt;&lt;/a&gt;&lt;/div&gt;&lt;/font&gt;&lt;br /&gt;
&lt;font color=&quot;#000000&quot;&gt;이렇게 잡고나면 running 상태로 빠지게 되며&amp;nbsp;&lt;/font&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;font color=&quot;#000000&quot;&gt;&lt;div class=&quot;imageblock&quot; style=&quot;display:inline;&quot;&gt;&lt;a href=&quot;http://cfile7.uf.tistory.com/original/130F194D4F169D7E262060&quot; rel=&quot;lightbox&quot; target=&quot;_blank&quot;&gt;&lt;img src=&quot;http://cfile7.uf.tistory.com/image/130F194D4F169D7E262060&quot; alt=&quot;&quot; filemime=&quot;image/jpeg&quot; filename=&quot;사용자 지정 12.jpg&quot; height=&quot;74&quot; width=&quot;422&quot;/&gt;&lt;/a&gt;&lt;/div&gt;&lt;/font&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;font color=&quot;#000000&quot;&gt;이 창에서 멈추게 됩니다. 아무키나 누르면 계속 진행되겠지요. 다시 진행하겠습니다.&amp;nbsp;&lt;/font&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;font color=&quot;#000000&quot;&gt;&lt;div class=&quot;imageblock&quot; style=&quot;display:inline;&quot;&gt;&lt;a href=&quot;http://cfile1.uf.tistory.com/original/135436404F169DDB2D38F5&quot; rel=&quot;lightbox&quot; target=&quot;_blank&quot;&gt;&lt;img src=&quot;http://cfile1.uf.tistory.com/image/135436404F169DDB2D38F5&quot; alt=&quot;&quot; filemime=&quot;image/jpeg&quot; filename=&quot;사용자 지정 13.jpg&quot; height=&quot;57&quot; width=&quot;405&quot;/&gt;&lt;/a&gt;&lt;/div&gt;&amp;nbsp;&lt;/font&gt;&lt;br /&gt;
&lt;font color=&quot;#000000&quot;&gt;이 가상화된 루틴을 실행 후 &amp;nbsp;&lt;/font&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;font color=&quot;#000000&quot;&gt;&lt;div class=&quot;imageblock&quot; style=&quot;display:inline;&quot;&gt;&lt;a href=&quot;http://cfile2.uf.tistory.com/original/153ECA454F169E0D2FE5A8&quot; rel=&quot;lightbox&quot; target=&quot;_blank&quot;&gt;&lt;img src=&quot;http://cfile2.uf.tistory.com/image/153ECA454F169E0D2FE5A8&quot; alt=&quot;&quot; filemime=&quot;image/jpeg&quot; filename=&quot;사용자 지정 14.jpg&quot; height=&quot;89&quot; width=&quot;546&quot;/&gt;&lt;/a&gt;&lt;/div&gt;&lt;/font&gt;&lt;br /&gt;
&lt;font color=&quot;#000000&quot;&gt;.text섹션인 이 부분으로 오게됩니다. 이 부분이 codegate.key 파일이 존재하면 JE문에서 점프하지 않고 없으면 점프하게 됩니다. 즉, 없다면 EAX 값이 0으로. 있다면 0x0B6863BD와 같은 값으로...&lt;/font&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;font color=&quot;#000000&quot;&gt;다시 0x00260FD4로..&amp;nbsp;&lt;/font&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;font color=&quot;#000000&quot;&gt;&lt;div class=&quot;imageblock&quot; style=&quot;display:inline;&quot;&gt;&lt;a href=&quot;http://cfile7.uf.tistory.com/original/152C0B4E4F169E950525B3&quot; rel=&quot;lightbox&quot; target=&quot;_blank&quot;&gt;&lt;img src=&quot;http://cfile7.uf.tistory.com/image/152C0B4E4F169E950525B3&quot; alt=&quot;&quot; filemime=&quot;image/jpeg&quot; filename=&quot;사용자 지정 15.jpg&quot; height=&quot;33&quot; width=&quot;406&quot;/&gt;&lt;/a&gt;&lt;/div&gt;&amp;nbsp;&lt;/font&gt;&lt;br /&gt;
&lt;font color=&quot;#000000&quot;&gt;이 부분 실행 후 다시 .text 섹션..;;&amp;nbsp;&lt;/font&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;font color=&quot;#000000&quot;&gt;&lt;div class=&quot;imageblock&quot; style=&quot;display:inline;&quot;&gt;&lt;a href=&quot;http://cfile25.uf.tistory.com/original/111B084D4F169EB71FBABB&quot; rel=&quot;lightbox&quot; target=&quot;_blank&quot;&gt;&lt;img src=&quot;http://cfile25.uf.tistory.com/image/111B084D4F169EB71FBABB&quot; alt=&quot;&quot; filemime=&quot;image/jpeg&quot; filename=&quot;사용자 지정 16.jpg&quot; height=&quot;30&quot; width=&quot;340&quot;/&gt;&lt;/a&gt;&lt;/div&gt;&amp;nbsp;&lt;/font&gt;&lt;br /&gt;
&lt;font color=&quot;#000000&quot;&gt;이 부분 실행 후 다시 .VM 섹션.. 뭐 무한반복?? [ECX+4] 에는 0x0B6863BD 값이..&lt;/font&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;font color=&quot;#000000&quot;&gt;&lt;div class=&quot;imageblock&quot; style=&quot;display:inline;&quot;&gt;&lt;a href=&quot;http://cfile7.uf.tistory.com/original/187AC8354F16A0650CA795&quot; rel=&quot;lightbox&quot; target=&quot;_blank&quot;&gt;&lt;img src=&quot;http://cfile7.uf.tistory.com/image/187AC8354F16A0650CA795&quot; alt=&quot;&quot; filemime=&quot;image/jpeg&quot; filename=&quot;사용자 지정 17.jpg&quot; height=&quot;35&quot; width=&quot;635&quot;/&gt;&lt;/a&gt;&lt;/div&gt;&amp;nbsp;&lt;/font&gt;&lt;br /&gt;
&lt;font color=&quot;#000000&quot;&gt;위에서 얻어온 값을 가지고 이렇게 비교를 하는 군요. 파일이 없으면 cmp문을 수행 후 I can't find the file 이라는 문장이 출력됩니다. 위 두 문장을 수행 후 다시 .text 섹션으로 오는데 이 부분이 중요합니다.&lt;/font&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;font color=&quot;#000000&quot;&gt;&lt;div class=&quot;imageblock&quot; style=&quot;display:inline;&quot;&gt;&lt;a href=&quot;http://cfile29.uf.tistory.com/original/14472E344F16A0D9324DED&quot; rel=&quot;lightbox&quot; target=&quot;_blank&quot;&gt;&lt;img src=&quot;http://cfile29.uf.tistory.com/image/14472E344F16A0D9324DED&quot; alt=&quot;&quot; filemime=&quot;image/jpeg&quot; filename=&quot;사용자 지정 18.jpg&quot; height=&quot;159&quot; width=&quot;539&quot;/&gt;&lt;/a&gt;&lt;/div&gt;&amp;nbsp;&lt;/font&gt;&lt;br /&gt;
&lt;font color=&quot;#000000&quot;&gt;&amp;nbsp;CALL 문을 호출하는데 들어가는 인자는&lt;/font&gt;&lt;br /&gt;
&lt;font color=&quot;#000000&quot;&gt;Func(0x12FB48,0x200,0x1..) 이렇게 들어갑니다.&lt;/font&gt;&lt;br /&gt;
&lt;font color=&quot;#000000&quot;&gt;실제로 수행을 해보면 0x12FB48 메모리 주소에 0x200 바이트 만큼 codegate.key에서 가져오게 됩니다.&lt;/font&gt;&lt;br /&gt;
&lt;font color=&quot;#000000&quot;&gt;아마 저 함수는 fread 함수 같군요 ㅋㅋ 키 길이는 0x200 Byte인것 같습니다. 계속 계속 gogo&amp;nbsp;&lt;/font&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;font color=&quot;#000000&quot;&gt;&lt;div class=&quot;imageblock&quot; style=&quot;display:inline;&quot;&gt;&lt;a href=&quot;http://cfile28.uf.tistory.com/original/14631A454F16A20B1BE22E&quot; rel=&quot;lightbox&quot; target=&quot;_blank&quot;&gt;&lt;img src=&quot;http://cfile28.uf.tistory.com/image/14631A454F16A20B1BE22E&quot; alt=&quot;&quot; filemime=&quot;image/jpeg&quot; filename=&quot;사용자 지정 19.jpg&quot; height=&quot;23&quot; width=&quot;404&quot;/&gt;&lt;/a&gt;&lt;/div&gt;&amp;nbsp;&lt;/font&gt;&lt;br /&gt;
&lt;font color=&quot;#000000&quot;&gt;한 문장 수행 후 다시 .text.. 지치네요..&amp;nbsp;&lt;/font&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;font color=&quot;#000000&quot;&gt;&lt;div class=&quot;imageblock&quot; style=&quot;display:inline;&quot;&gt;&lt;a href=&quot;http://cfile7.uf.tistory.com/original/20441A424F16A23518605E&quot; rel=&quot;lightbox&quot; target=&quot;_blank&quot;&gt;&lt;img src=&quot;http://cfile7.uf.tistory.com/image/20441A424F16A23518605E&quot; alt=&quot;&quot; filemime=&quot;image/jpeg&quot; filename=&quot;사용자 지정 20.jpg&quot; height=&quot;27&quot; width=&quot;342&quot;/&gt;&lt;/a&gt;&lt;/div&gt;&lt;/font&gt;&lt;br /&gt;
&lt;font color=&quot;#000000&quot;&gt;EAX에 0x0B70139B라는 값 넣고 있습니다.&amp;nbsp;&lt;/font&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;font color=&quot;#000000&quot;&gt;뭐 또 검증 하겠죠. 아무튼 이제 중요한 부분으로 바로 넘어가겠습니다.&lt;/font&gt;&lt;br /&gt;
&lt;font color=&quot;#000000&quot;&gt;계속&amp;nbsp;0x00260FD4&amp;nbsp;에 있는 문을 실행하면&lt;/font&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;font color=&quot;#000000&quot;&gt;&lt;div class=&quot;imageblock&quot; style=&quot;display:inline;&quot;&gt;&lt;a href=&quot;http://cfile27.uf.tistory.com/original/1821ED364F16A3672B988B&quot; rel=&quot;lightbox&quot; target=&quot;_blank&quot;&gt;&lt;img src=&quot;http://cfile27.uf.tistory.com/image/1821ED364F16A3672B988B&quot; alt=&quot;&quot; filemime=&quot;image/jpeg&quot; filename=&quot;사용자 지정 21.jpg&quot; height=&quot;126&quot; width=&quot;683&quot;/&gt;&lt;/a&gt;&lt;/div&gt;&lt;/font&gt;&lt;br /&gt;
&lt;font color=&quot;#000000&quot;&gt;이와 같은 루틴을 실행하게 되는데 주석에 달아놨듯이 [ECX+8]은 codegate.key에서 읽어온 0x200 Byte의 첫번째 데이터 값입니다. 그리고 그 값이 0x64와 xor 한 후 0x90과 비교를 하는데.. 당연히 다르겠죠. 그래서 아래와 같이 틀렸다는 문장을 실행하게 됩니다.&lt;/font&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;font color=&quot;#000000&quot;&gt;이제 cmp al,0x90 위치에 올 때마다 al 값을 옆 값과 맞는 값으로 바꿔주면서 진행해보겠습니다.&lt;/font&gt;&lt;br /&gt;
&lt;font color=&quot;#000000&quot;&gt;혹은 그냥 cmp 실행 후 zero flag를 바꿔줘도 됩니다. ㅋ&lt;/font&gt;&lt;br /&gt;
&lt;font color=&quot;#000000&quot;&gt;&lt;div class=&quot;imageblock&quot; style=&quot;display:inline;&quot;&gt;&lt;a href=&quot;http://cfile9.uf.tistory.com/original/121E08404F16A53605D984&quot; rel=&quot;lightbox&quot; target=&quot;_blank&quot;&gt;&lt;img src=&quot;http://cfile9.uf.tistory.com/image/121E08404F16A53605D984&quot; alt=&quot;&quot; filemime=&quot;image/jpeg&quot; filename=&quot;사용자 지정 22.jpg&quot; height=&quot;466&quot; width=&quot;683&quot;/&gt;&lt;/a&gt;&lt;/div&gt;&lt;/font&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;font color=&quot;#000000&quot;&gt;이런식으로 진행되게 됩니다. 1Byte씩 가져와 특정 값과 xor 한후 특정 값과 비교를 하죠..&lt;/font&gt;&lt;br /&gt;
&lt;font color=&quot;#000000&quot;&gt;이걸 일일이... 해야 하는거겠죠??.. ㅠㅠㅠㅠㅠㅠㅠㅠㅠㅠㅠㅠㅠ&lt;/font&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;font color=&quot;#000000&quot;&gt;잠시 글 쓰는걸 중단하고 노가다 작업좀 하겠습니다.&amp;nbsp;&lt;/font&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;font color=&quot;#000000&quot;&gt;------------ 잠 시 후 ------------&lt;/font&gt;&lt;br /&gt;
&lt;font color=&quot;#000000&quot;&gt;워...... fread로 &amp;nbsp;0x200 Byte나 읽었길래 정말 512번의 저 거지같은 노가다를 해야되는줄 알았습니다.&lt;/font&gt;&lt;br /&gt;
&lt;font color=&quot;#000000&quot;&gt;다행이.. 0x64..즉 100Byte만 저짓거리 한 후 &amp;nbsp;...!&lt;/font&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;font color=&quot;#000000&quot;&gt;&lt;div class=&quot;imageblock&quot; style=&quot;display:inline;&quot;&gt;&lt;a href=&quot;http://cfile24.uf.tistory.com/original/2007A0374F16BD6B1125EE&quot; rel=&quot;lightbox&quot; target=&quot;_blank&quot;&gt;&lt;img src=&quot;http://cfile24.uf.tistory.com/image/2007A0374F16BD6B1125EE&quot; alt=&quot;&quot; filemime=&quot;image/jpeg&quot; filename=&quot;사용자 지정 23.jpg&quot; height=&quot;437&quot; width=&quot;683&quot;/&gt;&lt;/a&gt;&lt;/div&gt;&lt;/font&gt;&lt;br /&gt;
&lt;font color=&quot;#000000&quot;&gt;위와 같은 루틴을 시행하더군요.&lt;/font&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;font color=&quot;#000000&quot;&gt;codegate.key의 값을 읽어온 메모리 값을 다른 메모리로 100byte만큼 옮깁니다.&lt;/font&gt;&lt;br /&gt;
&lt;font color=&quot;#000000&quot;&gt;그리고 나서 pop ecx를 마지막으로 .VM섹션에서 한 후.. .text 섹션으로 넘어오게 됩니다.&amp;nbsp;&lt;/font&gt;&lt;br /&gt;
&lt;font color=&quot;#000000&quot;&gt;이 때 단순히 zf만 1로 바꿔주면서 넘어오신 분들은 여기까지 하고 실제 key file 값을 구해주셔야합니다.&lt;/font&gt;&lt;br /&gt;
&lt;font color=&quot;#000000&quot;&gt;xor되는 값과 cmp되는 값을 xor 시켜주면서 복원.. 100Byte를 말이죠.&lt;/font&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;font color=&quot;#000000&quot;&gt;&lt;div class=&quot;imageblock&quot; style=&quot;display:inline;&quot;&gt;&lt;a href=&quot;http://cfile27.uf.tistory.com/original/135AB44B4F16BE3D12D0A6&quot; rel=&quot;lightbox&quot; target=&quot;_blank&quot;&gt;&lt;img src=&quot;http://cfile27.uf.tistory.com/image/135AB44B4F16BE3D12D0A6&quot; alt=&quot;&quot; filemime=&quot;image/jpeg&quot; filename=&quot;사용자 지정 24.jpg&quot; height=&quot;325&quot; width=&quot;593&quot;/&gt;&lt;/a&gt;&lt;/div&gt;&lt;/font&gt;&lt;br /&gt;
&lt;font color=&quot;#000000&quot;&gt;이 루틴인데 무언가 printf 할 느낌이 팍팍드는 이 좋은 기분은 뭘까요?? ^^&amp;nbsp;&lt;/font&gt;&lt;br /&gt;
&lt;font color=&quot;#000000&quot;&gt;JL점프문에 의해 루프를 돈 다음 나온 화면을 보겠습니다.&lt;/font&gt;&lt;br /&gt;
&lt;font color=&quot;#000000&quot;&gt;&amp;nbsp;&lt;/font&gt;&lt;br /&gt;
&lt;font color=&quot;#000000&quot;&gt;&lt;div class=&quot;imageblock&quot; style=&quot;display:inline;&quot;&gt;&lt;a href=&quot;http://cfile2.uf.tistory.com/original/187D50394F16C9323651EB&quot; rel=&quot;lightbox&quot; target=&quot;_blank&quot;&gt;&lt;img src=&quot;http://cfile2.uf.tistory.com/image/187D50394F16C9323651EB&quot; alt=&quot;&quot; filemime=&quot;image/jpeg&quot; filename=&quot;사용자 지정 25.jpg&quot; height=&quot;532&quot; width=&quot;380&quot;/&gt;&lt;/a&gt;&lt;/div&gt;&lt;/font&gt;&lt;br /&gt;
&lt;font color=&quot;#000000&quot;&gt;올바르게 찾은 것 같군요. 아..... 바로 답을 주진 않고 또 뭔가 이상한 값을 주네요.. :-(&lt;/font&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;font color=&quot;#000000&quot;&gt;하! 지! 만! ㅋㅋ 저도 이렇게 비슷한 유형의 문제를 낸적이 있습니다. 추측해봤지만 맞더군요.&amp;nbsp;&lt;/font&gt;&lt;br /&gt;
&lt;font color=&quot;#000000&quot;&gt;일단 각각의 숫자를 2진수로 바꿉니다. 그리고 1에 색을 넣어서 한번 봐보겠습니다.&lt;/font&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;font color=&quot;#000000&quot;&gt;&lt;div class=&quot;imageblock&quot; style=&quot;display:inline;&quot;&gt;&lt;a href=&quot;http://cfile1.uf.tistory.com/original/142A64334F16CC8B214606&quot; rel=&quot;lightbox&quot; target=&quot;_blank&quot;&gt;&lt;img src=&quot;http://cfile1.uf.tistory.com/image/142A64334F16CC8B214606&quot; alt=&quot;&quot; filemime=&quot;image/jpeg&quot; filename=&quot;사용자 지정 26.jpg&quot; height=&quot;432&quot; width=&quot;464&quot;/&gt;&lt;/a&gt;&lt;/div&gt;&lt;/font&gt;&lt;br /&gt;
&lt;font color=&quot;#000000&quot;&gt;보이십니까?? QR 코드입니다. 하지만 QR코드가 180도 돌아가 있는 것 같군요.&lt;/font&gt;&lt;br /&gt;
&lt;font color=&quot;#000000&quot;&gt;QR코드를 읽을 수 있게끔 변환을 하겠습니다. ( 엑셀 사용.. -.- ) 위 결과를 단 20초면 아래와 같이 변환 가능!&lt;/font&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;font color=&quot;#000000&quot;&gt;&lt;div class=&quot;imageblock&quot; style=&quot;display:inline;&quot;&gt;&lt;a href=&quot;http://cfile29.uf.tistory.com/original/121E57384F16CDE4292893&quot; rel=&quot;lightbox&quot; target=&quot;_blank&quot;&gt;&lt;img src=&quot;http://cfile29.uf.tistory.com/image/121E57384F16CDE4292893&quot; alt=&quot;&quot; filemime=&quot;image/jpeg&quot; filename=&quot;사용자 지정 27.jpg&quot; height=&quot;552&quot; width=&quot;527&quot;/&gt;&lt;/a&gt;&lt;/div&gt;&lt;/font&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;font color=&quot;#000000&quot;&gt;위 값을 나의 패드로 찰칵 찍으면?!&lt;/font&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;b&gt;&lt;font color=&quot;#000000&quot;&gt;답 : &lt;/font&gt;&lt;font color=&quot;#801fbf&quot;&gt;I_am_in_C0d3gat3_2011!!&lt;/font&gt;&lt;/b&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;font color=&quot;#000000&quot;&gt;뿌듯하네요. ㅋㅋ 이거 푸는데.. 가장 많이 시간이 걸린 곳은.. 바로 키파일 100Byte 저거 찾는 부분입니다. ..ㅠ_ㅠ 아흑..&lt;/font&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;b&gt;&lt;font color=&quot;#e31600&quot;&gt;PS.&lt;/font&gt;&lt;/b&gt;&lt;font color=&quot;#000000&quot;&gt; -_-;;;; 이거 조금 찾아보니까.. x86 Virtualizer 툴로 두번 가상화 시킨 것 뿐이네요..;;; 덕분에 x86 가상화 툴 싹다 분석해봤네요.&amp;nbsp;오픈소스 툴이므로 찾아보면 소스코드도 있습니다. 전 아바스트 백신 쓰는데 백신에서 잡네요.&amp;nbsp;&lt;br /&gt;
&lt;br /&gt;&amp;nbsp;그 전까지 이 문제 만든이가 직접 가상화 코드를 구현한줄 알았습니다.;;;&amp;nbsp;&lt;/font&gt;&lt;br /&gt;&lt;div class=&quot;entry-ccl&quot; style=&quot;clear: both; text-align: right; margin-bottom: 10px&quot;&gt;
	&lt;img id=&quot;ccl-icon-355-0&quot; class=&quot;entry-ccl-by&quot; src=&quot;http://i1.daumcdn.net/cfs.tistory/v/0/static/admin/editor/ccl_black01.png&quot; alt=&quot;저작자 표시&quot;/&gt;
	&lt;!--
	&lt;rdf:RDF xmlns=&quot;http://web.resource.org/cc/&quot; xmlns:dc=&quot;http://purl.org/dc/elements/1.1/&quot; xmlns:rdf=&quot;http://www.w3.org/1999/02/22-rdf-syntax-ns#&quot;&gt;
		&lt;Work rdf:about=&quot;&quot;&gt;
			&lt;license rdf:resource=&quot;http://creativecommons.org/licenses/by-fr/2.0/kr/&quot; /&gt;
		&lt;/Work&gt;
		&lt;License rdf:about=&quot;http://creativecommons.org/licenses/by-fr/&quot;&gt;
			&lt;permits rdf:resource=&quot;http://web.resource.org/cc/Reproduction&quot;/&gt;
			&lt;permits rdf:resource=&quot;http://web.resource.org/cc/Distribution&quot;/&gt;
			&lt;requires rdf:resource=&quot;http://web.resource.org/cc/Notice&quot;/&gt;
			&lt;requires rdf:resource=&quot;http://web.resource.org/cc/Attribution&quot;/&gt;
			&lt;permits rdf:resource=&quot;http://web.resource.org/cc/DerivativeWorks&quot;/&gt;
		&lt;/License&gt;
	&lt;/rdf:RDF&gt;
	--&gt;
&lt;/div&gt;
&lt;div class=&quot;another_category another_category_color_gray&quot;&gt;
&lt;h4&gt;'&lt;a href=&quot;/category/My%20Study&quot;&gt;My Study&lt;/a&gt;&amp;nbsp;&gt;&amp;nbsp;&lt;a href=&quot;/category/My%20Study/Crack%20Me&quot;&gt;Crack Me&lt;/a&gt;' 카테고리의 다른 글&lt;/h4&gt;
&lt;table&gt;
&lt;tr&gt;
&lt;th&gt;
&lt;a href=&quot;/355&quot; &gt;Codegate 2011 B500 writeup&lt;/a&gt;&amp;nbsp;&amp;nbsp;&lt;span&gt;(2)&lt;/span&gt;
&lt;/th&gt;
&lt;td&gt;
2012/01/18&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;th&gt;
&lt;a href=&quot;/243&quot; &gt;Defcon 2010 예선 바이너리 3번&lt;/a&gt;&amp;nbsp;&amp;nbsp;&lt;span&gt;(0)&lt;/span&gt;
&lt;/th&gt;
&lt;td&gt;
2010/06/02&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;th&gt;
&lt;a href=&quot;/242&quot; &gt;Defcon 2010 예선 바이너리 2번&lt;/a&gt;&amp;nbsp;&amp;nbsp;&lt;span&gt;(0)&lt;/span&gt;
&lt;/th&gt;
&lt;td&gt;
2010/06/02&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;th&gt;
&lt;a href=&quot;/234&quot; &gt;Defcon 2010 예선 바이너리 1번&lt;/a&gt;&amp;nbsp;&amp;nbsp;&lt;span&gt;(8)&lt;/span&gt;
&lt;/th&gt;
&lt;td&gt;
2010/05/23&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;th&gt;
&lt;a href=&quot;/204&quot; &gt;HellBound Application Cracking 15&lt;/a&gt;&amp;nbsp;&amp;nbsp;&lt;span&gt;(0)&lt;/span&gt;
&lt;/th&gt;
&lt;td&gt;
2010/04/29&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;th&gt;
&lt;a href=&quot;/202&quot; &gt;HellBound Application Cracking 2&lt;/a&gt;&amp;nbsp;&amp;nbsp;&lt;span&gt;(2)&lt;/span&gt;
&lt;/th&gt;
&lt;td&gt;
2010/04/28&lt;/td&gt;
&lt;/tr&gt;
&lt;/table&gt;&lt;/div&gt;</description>
			<category>Crack Me</category>
			<category>2011</category>
			<category>7CAC6AF2303FC01ACD2CEB350DAC0518</category>
			<category>b500</category>
			<category>binary</category>
			<category>Binary 500</category>
			<category>CODE</category>
			<category>codegate</category>
			<category>Contest</category>
			<category>hacker</category>
			<category>qr</category>
			<category>virtualized</category>
			<category>x86 Virtualizer</category>
			<author>Ezbeat</author>
			<guid>http://ezbeat.tistory.com/355</guid>
			<comments>http://ezbeat.tistory.com/355#entry355comment</comments>
			<pubDate>Wed, 18 Jan 2012 22:56:58 +0900</pubDate>
		</item>
		<item>
			<title>My BSOD</title>
			<link>http://ezbeat.tistory.com/354</link>
			<description>&lt;b&gt;&lt;font color=&quot;#3058d2&quot;&gt;BSOD&lt;/font&gt;&lt;/b&gt;&lt;font color=&quot;#000000&quot;&gt;..Blue Screen of Death.. 아주 짜증나는 화면이죠.&lt;/font&gt;&lt;br /&gt;
&lt;br /&gt;&lt;font color=&quot;#000000&quot;&gt;&lt;div class=&quot;imageblock&quot; style=&quot;display:inline;&quot;&gt;&lt;a href=&quot;http://cfile5.uf.tistory.com/original/116628364F08F893050969&quot; rel=&quot;lightbox&quot; target=&quot;_blank&quot;&gt;&lt;img src=&quot;http://cfile5.uf.tistory.com/image/116628364F08F893050969&quot; alt=&quot;&quot; filemime=&quot;image/jpeg&quot; filename=&quot;bsod_realism_by_deviantvicky-d39b1l0.jpg&quot; height=&quot;546&quot; width=&quot;683&quot;/&gt;&lt;/a&gt;&lt;/div&gt;&lt;/font&gt;&lt;br /&gt;
&lt;br /&gt;&lt;font color=&quot;#000000&quot;&gt;이 거지 같은 화면을 좀 바꿔볼까요??&lt;/font&gt;&lt;br /&gt;
&lt;br /&gt;&lt;font color=&quot;#000000&quot;&gt;실제로 드라이버 개발하는 입장에서도 &quot;Inbv&quot; 함수를 사용하면 간단히 BSOD 같은 화면을 구성할 수 있습니다.&lt;/font&gt;&lt;br /&gt;
&lt;font color=&quot;#000000&quot;&gt;심심하신 분들은 한번 만들어보세요 ^^ 간단히 Inbv 함수 몇개 import 시키고 그냥 사용하시면 끝납니다.-.-;&lt;/font&gt;&lt;br /&gt;
&lt;br /&gt;&lt;font color=&quot;#000000&quot;&gt;전 조금 더 나아가 장난쳐보기 위해 &amp;nbsp;&lt;/font&gt;&lt;font color=&quot;#e31600&quot;&gt;실제 윈도우에서 사용하고 있는 블루스크린의 색&lt;/font&gt;&lt;font color=&quot;#000000&quot;&gt;을 바꿔보겠습니다.&lt;/font&gt;&lt;br /&gt;
&lt;br /&gt;&lt;font color=&quot;#000000&quot;&gt;먼저 KeBugCheck 함수 내부에서 블루스크린을 구성하기 위해 호출되는 Inbv 함수가 무엇인지 보겠습니다.&lt;/font&gt;&lt;br /&gt;
&lt;font color=&quot;#000000&quot;&gt;Windows XP 기준으로 봐보았습니다.&lt;/font&gt;&lt;br /&gt;
&lt;br /&gt;&lt;font color=&quot;#000000&quot;&gt;&lt;div class=&quot;imageblock&quot; style=&quot;display:inline;&quot;&gt;&lt;a href=&quot;http://cfile4.uf.tistory.com/original/1335F9444F08FA1F0EA0ED&quot; rel=&quot;lightbox&quot; target=&quot;_blank&quot;&gt;&lt;img src=&quot;http://cfile4.uf.tistory.com/image/1335F9444F08FA1F0EA0ED&quot; alt=&quot;&quot; filemime=&quot;&quot; filename=&quot;사용자 지정 1.jpg&quot; height=&quot;456&quot; width=&quot;683&quot;/&gt;&lt;/a&gt;&lt;/div&gt;&lt;/font&gt;&lt;br /&gt;
&lt;br /&gt;&lt;b&gt;&lt;font color=&quot;#801fbf&quot;&gt;InbvSolidColorFill&lt;/font&gt;&lt;/b&gt;&lt;font color=&quot;#000000&quot;&gt;() 함수가 배경 색이고&lt;/font&gt;&lt;br /&gt;
&lt;b&gt;&lt;font color=&quot;#801fbf&quot;&gt;InbvSetTextColor&lt;/font&gt;&lt;/b&gt;&lt;font color=&quot;#000000&quot;&gt;() 함수가 글자색입니다.&lt;/font&gt;&lt;br /&gt;
&lt;br /&gt;&lt;font color=&quot;#000000&quot;&gt;저 두 부분을 후킹해서 살포시 인자 값만 바꿔주면.... 끝끝끝.. ㅎㅎ&lt;/font&gt;&lt;br /&gt;
&lt;br /&gt;&lt;font color=&quot;#000000&quot;&gt;그래서 나온 제&lt;/font&gt;&lt;b&gt;&lt;font color=&quot;#3058d2&quot;&gt; BSOD&lt;/font&gt;&lt;/b&gt;&lt;font color=&quot;#000000&quot;&gt;입니다. &amp;nbsp;가 아니라 &lt;/font&gt;&lt;b&gt;&lt;font color=&quot;#e31600&quot;&gt;RSOD&lt;/font&gt;&lt;/b&gt;&lt;font color=&quot;#000000&quot;&gt; 입니다. (&lt;b&gt;Red Screen of Death&lt;/b&gt;)&lt;/font&gt;&lt;br /&gt;
&lt;font color=&quot;#000000&quot;&gt;&lt;div class=&quot;imageblock&quot; style=&quot;display:inline;&quot;&gt;&lt;a href=&quot;http://cfile29.uf.tistory.com/original/130C7A3F4F08FF5B1495D2&quot; rel=&quot;lightbox&quot; target=&quot;_blank&quot;&gt;&lt;img src=&quot;http://cfile29.uf.tistory.com/image/130C7A3F4F08FF5B1495D2&quot; alt=&quot;&quot; filemime=&quot;image/jpeg&quot; filename=&quot;사용자 지정 3.jpg&quot; height=&quot;513&quot; width=&quot;676&quot;/&gt;&lt;/a&gt;&lt;/div&gt;&lt;/font&gt;&lt;br /&gt;
&lt;br /&gt;&lt;font color=&quot;#000000&quot;&gt;눈 아프네요.. @_@;;&lt;/font&gt;&lt;div class=&quot;entry-ccl&quot; style=&quot;clear: both; text-align: right; margin-bottom: 10px&quot;&gt;
	&lt;img id=&quot;ccl-icon-354-0&quot; class=&quot;entry-ccl-by&quot; src=&quot;http://i1.daumcdn.net/cfs.tistory/v/0/static/admin/editor/ccl_black01.png&quot; alt=&quot;저작자 표시&quot;/&gt;
	&lt;!--
	&lt;rdf:RDF xmlns=&quot;http://web.resource.org/cc/&quot; xmlns:dc=&quot;http://purl.org/dc/elements/1.1/&quot; xmlns:rdf=&quot;http://www.w3.org/1999/02/22-rdf-syntax-ns#&quot;&gt;
		&lt;Work rdf:about=&quot;&quot;&gt;
			&lt;license rdf:resource=&quot;http://creativecommons.org/licenses/by-fr/2.0/kr/&quot; /&gt;
		&lt;/Work&gt;
		&lt;License rdf:about=&quot;http://creativecommons.org/licenses/by-fr/&quot;&gt;
			&lt;permits rdf:resource=&quot;http://web.resource.org/cc/Reproduction&quot;/&gt;
			&lt;permits rdf:resource=&quot;http://web.resource.org/cc/Distribution&quot;/&gt;
			&lt;requires rdf:resource=&quot;http://web.resource.org/cc/Notice&quot;/&gt;
			&lt;requires rdf:resource=&quot;http://web.resource.org/cc/Attribution&quot;/&gt;
			&lt;permits rdf:resource=&quot;http://web.resource.org/cc/DerivativeWorks&quot;/&gt;
		&lt;/License&gt;
	&lt;/rdf:RDF&gt;
	--&gt;
&lt;/div&gt;
&lt;div class=&quot;another_category another_category_color_gray&quot;&gt;
&lt;h4&gt;'&lt;a href=&quot;/category/My%20Study&quot;&gt;My Study&lt;/a&gt;&amp;nbsp;&gt;&amp;nbsp;&lt;a href=&quot;/category/My%20Study/Programming%26Theory&quot;&gt;Programming&amp;amp;Theory&lt;/a&gt;' 카테고리의 다른 글&lt;/h4&gt;
&lt;table&gt;
&lt;tr&gt;
&lt;th&gt;
&lt;a href=&quot;/359&quot; &gt;ARM 명령어 공부&lt;/a&gt;&amp;nbsp;&amp;nbsp;&lt;span&gt;(2)&lt;/span&gt;
&lt;/th&gt;
&lt;td&gt;
2012/01/27&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;th&gt;
&lt;a href=&quot;/357&quot; &gt;BlockInput Function&lt;/a&gt;&amp;nbsp;&amp;nbsp;&lt;span&gt;(3)&lt;/span&gt;
&lt;/th&gt;
&lt;td&gt;
2012/01/20&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;th&gt;
&lt;a href=&quot;/354&quot; &gt;My BSOD&lt;/a&gt;&amp;nbsp;&amp;nbsp;&lt;span&gt;(2)&lt;/span&gt;
&lt;/th&gt;
&lt;td&gt;
2012/01/08&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;th&gt;
&lt;a href=&quot;/353&quot; &gt;SwapContext를 이용한 프로세스 찾기&lt;/a&gt;&amp;nbsp;&amp;nbsp;&lt;span&gt;(7)&lt;/span&gt;
&lt;/th&gt;
&lt;td&gt;
2012/01/04&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;th&gt;
&lt;a href=&quot;/352&quot; &gt;Remote Library Injection&lt;/a&gt;&amp;nbsp;&amp;nbsp;&lt;span&gt;(4)&lt;/span&gt;
&lt;/th&gt;
&lt;td&gt;
2011/12/29&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;th&gt;
&lt;a href=&quot;/350&quot; &gt;OpenProcess를 막는 방법은??&lt;/a&gt;&amp;nbsp;&amp;nbsp;&lt;span&gt;(11)&lt;/span&gt;
&lt;/th&gt;
&lt;td&gt;
2011/12/20&lt;/td&gt;
&lt;/tr&gt;
&lt;/table&gt;&lt;/div&gt;</description>
			<category>Programming&amp;Theory</category>
			<category>blue screen of death</category>
			<category>BSOD</category>
			<category>error</category>
			<category>InbvSetTextColor</category>
			<category>InbvSolidColorFill</category>
			<category>red screen of death</category>
			<category>RSOD</category>
			<category>windows</category>
			<author>Ezbeat</author>
			<guid>http://ezbeat.tistory.com/354</guid>
			<comments>http://ezbeat.tistory.com/354#entry354comment</comments>
			<pubDate>Sun, 08 Jan 2012 11:31:08 +0900</pubDate>
		</item>
		<item>
			<title>SwapContext를 이용한 프로세스 찾기</title>
			<link>http://ezbeat.tistory.com/353</link>
			<description>&lt;font color=&quot;#000000&quot;&gt;지금껏 시스템 프로그래밍을 많이 해왔지만 프로세스를 찾는 프로그래밍은.. 안해본것 같군요.&lt;/font&gt;&lt;br /&gt;
&lt;font color=&quot;#000000&quot;&gt;기껏해봐야 &amp;nbsp;&lt;/font&gt;&lt;br /&gt;
&lt;font color=&quot;#801fbf&quot;&gt;&lt;b&gt;CreateToolhelp32Snapshot()&amp;nbsp;&lt;br /&gt;
Process32First()&lt;br /&gt;
Process32Next()&amp;nbsp;&lt;/b&gt;&lt;/font&gt;&lt;br /&gt;
&lt;font color=&quot;#000000&quot;&gt;세 함수를 사용한 유저모드에서 프로세스 찾는...;;&amp;nbsp;&lt;/font&gt;&lt;br /&gt;
&lt;br /&gt;&lt;font color=&quot;#000000&quot;&gt;커널에서도 찾는 방법이 여러가지가 있을 껀데 &lt;/font&gt;&lt;br /&gt;
&lt;font color=&quot;#801fbf&quot;&gt;ZwQuerySystemInformation&lt;/font&gt;&lt;font color=&quot;#000000&quot;&gt;함수를 사용하는 &amp;nbsp;방법..&lt;/font&gt;&lt;br /&gt;
&lt;font color=&quot;#000000&quot;&gt;또한 System 프로세스의 EPROCESS 구조체 주소를 구해 링크드 리스트로 연결된 EPROCESS를 쭉 따라가면서 찾는 방법..&lt;/font&gt;&lt;br /&gt;
&lt;br /&gt;&lt;font color=&quot;#000000&quot;&gt;등등 여러가지가 있었습니다. 하지만 API함수를 사용하는 방법은 간단히 후킹해 내 프로세스 정보를 없애버리면 되는것이고&lt;/font&gt;&lt;br /&gt;
&lt;font color=&quot;#000000&quot;&gt;EPROCESS 구조체를 쭉 따라가면서 탐지하는 방법은 내 프로세스의 링크를 끊어버리면 탐지가 어렵게 되는.. ;;&lt;/font&gt;&lt;br /&gt;
&lt;br /&gt;&lt;font color=&quot;#000000&quot;&gt;그래서 루트킷 책을 보니깐 &lt;/font&gt;&lt;font color=&quot;#e31600&quot;&gt;nt!SwapContext 함수를 후킹해 탐지하는 방법&lt;/font&gt;&lt;font color=&quot;#000000&quot;&gt;이 있더군요.&lt;/font&gt;&lt;br /&gt;
&lt;font color=&quot;#000000&quot;&gt;해당 함수는 현재 실행 중인 스레드의 컨텍스트가 바로 다음에 실행될 스레드의 컨텍스트로 스왑될 때 호출되는 함수입니다. 고로.... IRQL은..?! &lt;/font&gt;&lt;font color=&quot;#3058d2&quot;&gt;PASSIVE_LEVEL&lt;/font&gt;&lt;font color=&quot;#000000&quot;&gt;이 아닌 &lt;/font&gt;&lt;font color=&quot;#3058d2&quot;&gt;&lt;b&gt;DISPATCH_LEVEL&lt;/b&gt;&lt;/font&gt;&lt;font color=&quot;#000000&quot;&gt;에서 이루어지겠죠. 무튼무튼&lt;/font&gt;&lt;br /&gt;
&lt;br /&gt;&lt;font color=&quot;#000000&quot;&gt;해당 함수에 들어오게되면 &lt;/font&gt;&lt;br /&gt;
&lt;font color=&quot;#e31600&quot;&gt;EDI 레지스터는 다음에 실행될 스레드(ETHREAD)&lt;/font&gt;&lt;font color=&quot;#000000&quot;&gt;를 가리키며 &lt;/font&gt;&lt;font color=&quot;#e31600&quot;&gt;ESI는 현재 실행 중이며 곧 스왑될 스레드(ETHREAD)&lt;/font&gt;&lt;font color=&quot;#000000&quot;&gt;를 가리킵니다. 실제로 그런지 봐볼까요?&lt;/font&gt;&lt;br /&gt;
&lt;font color=&quot;#000000&quot;&gt;아 ~ 그리고 이 모든 테스트는 Windows XP SP3에서 테스트 됬습니다. 그렇다고 Windows 7이라고 뭐 다를건 없습니다. -_-;&lt;/font&gt;&lt;br /&gt;
&lt;div class=&quot;txc-textbox&quot; style=&quot;border-top-style: solid; border-right-style: solid; border-bottom-style: solid; border-left-style: solid; border-top-width: 1px; border-right-width: 1px; border-bottom-width: 1px; border-left-width: 1px; border-top-color: rgb(219, 232, 251); border-right-color: rgb(219, 232, 251); border-bottom-color: rgb(219, 232, 251); border-left-color: rgb(219, 232, 251); background-color: rgb(219, 232, 251); padding-top: 10px; padding-right: 10px; padding-bottom: 10px; padding-left: 10px; &quot;&gt;&lt;p style=&quot;margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; &quot;&gt;&lt;font color=&quot;#000000&quot;&gt;&lt;b&gt;&amp;nbsp;kd&amp;gt; ln nt!SwapContext&lt;/b&gt;&lt;/font&gt;&lt;div&gt;
&lt;font color=&quot;#000000&quot;&gt;(&lt;/font&gt;&lt;font color=&quot;#e31600&quot;&gt;805438e0&lt;/font&gt;&lt;font color=&quot;#000000&quot;&gt;) &amp;nbsp; nt!SwapContext &amp;nbsp; | &amp;nbsp;(80543a38) &amp;nbsp; nt!KeInterlockedSwapPte&lt;/font&gt;&lt;/div&gt;
&lt;div&gt;&lt;font color=&quot;#000000&quot;&gt;Exact matches:&lt;/font&gt;&lt;/div&gt;
&lt;div&gt;&lt;font color=&quot;#000000&quot;&gt;&amp;nbsp; &amp;nbsp; nt!SwapContext = &amp;lt;no type information&amp;gt;&lt;br /&gt;
&amp;nbsp;&lt;/font&gt;&lt;/div&gt;
&lt;div&gt;&lt;font color=&quot;#000000&quot;&gt;&lt;b&gt;kd&amp;gt; bp 805438e0&lt;/b&gt;&lt;br /&gt;
&amp;nbsp;&lt;/font&gt;&lt;/div&gt;
&lt;div&gt;&lt;font color=&quot;#000000&quot;&gt;&lt;b&gt;kd&amp;gt; g&lt;/b&gt;&lt;/font&gt;&lt;/div&gt;
&lt;div&gt;&lt;font color=&quot;#000000&quot;&gt;Breakpoint 0 hit&lt;/font&gt;&lt;/div&gt;
&lt;div&gt;&lt;font color=&quot;#000000&quot;&gt;nt!SwapContext:&lt;/font&gt;&lt;/div&gt;
&lt;div&gt;&lt;font color=&quot;#000000&quot;&gt;805438e0 0ac9 &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;or &amp;nbsp; &amp;nbsp; &amp;nbsp;cl,cl&lt;/font&gt;&lt;/div&gt;
&lt;/p&gt;&lt;/div&gt;
&lt;div&gt;&lt;font color=&quot;#000000&quot;&gt;&lt;br /&gt;
현재 SwapContext 함수 처음 부분에 멈춰있는 상태입니다. EDI 레지스터를 확인하고 ETHREAD 구조체에 맵핑 시켜보죠.&amp;nbsp;&lt;br /&gt;
&lt;/font&gt;&lt;div class=&quot;txc-textbox&quot; style=&quot;border-top-style: solid; border-right-style: solid; border-bottom-style: solid; border-left-style: solid; border-top-width: 1px; border-right-width: 1px; border-bottom-width: 1px; border-left-width: 1px; border-top-color: rgb(219, 232, 251); border-right-color: rgb(219, 232, 251); border-bottom-color: rgb(219, 232, 251); border-left-color: rgb(219, 232, 251); background-color: rgb(219, 232, 251); padding-top: 10px; padding-right: 10px; padding-bottom: 10px; padding-left: 10px; &quot;&gt;
&lt;p style=&quot;margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; &quot;&gt;&lt;div&gt;
&lt;font color=&quot;#000000&quot;&gt;&lt;b&gt;kd&amp;gt; r&lt;/b&gt;&lt;/font&gt;&lt;/div&gt;
&lt;div&gt;&lt;font color=&quot;#000000&quot;&gt;eax=00001000 ebx=ffdff000 ecx=00000001 edx=80555880 esi=825b2b30 &lt;/font&gt;&lt;b&gt;&lt;font color=&quot;#e31600&quot;&gt;edi=825b6020&lt;/font&gt;&lt;/b&gt;&lt;/div&gt;
&lt;div&gt;&lt;font color=&quot;#000000&quot;&gt;eip=805438e0 esp=f8afdce0 ebp=f8afdcf4 iopl=0 &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; nv up ei pl nz na pe nc&lt;/font&gt;&lt;/div&gt;
&lt;div&gt;&lt;font color=&quot;#000000&quot;&gt;cs=0008 &amp;nbsp;ss=0010 &amp;nbsp;ds=0023 &amp;nbsp;es=0023 &amp;nbsp;fs=0030 &amp;nbsp;gs=0000 &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; efl=00000206&lt;/font&gt;&lt;/div&gt;
&lt;div&gt;&lt;font color=&quot;#000000&quot;&gt;nt!SwapContext:&lt;/font&gt;&lt;/div&gt;
&lt;div&gt;&lt;font color=&quot;#000000&quot;&gt;805438e0 0ac9 &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;or &amp;nbsp; &amp;nbsp; &amp;nbsp;cl,cl&lt;br /&gt;
&amp;nbsp;&lt;/font&gt;&lt;/div&gt;
&lt;div&gt;&lt;font color=&quot;#000000&quot;&gt;&lt;b&gt;kd&amp;gt; dt _ETHREAD 825b6020&lt;/b&gt;&lt;/font&gt;&lt;/div&gt;
&lt;div&gt;&lt;font color=&quot;#000000&quot;&gt;ntdll!_ETHREAD&lt;/font&gt;&lt;/div&gt;
&lt;div&gt;&lt;font color=&quot;#000000&quot;&gt;&amp;nbsp; &amp;nbsp;+0x000 Tcb &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;: _KTHREAD&lt;/font&gt;&lt;/div&gt;
&lt;div&gt;&lt;font color=&quot;#000000&quot;&gt;&amp;nbsp; &amp;nbsp;+0x1c0 CreateTime &amp;nbsp; &amp;nbsp; &amp;nbsp; : _LARGE_INTEGER 0xe6654fd`d4418200&lt;/font&gt;&lt;/div&gt;
&lt;div&gt;&lt;font color=&quot;#000000&quot;&gt;&amp;nbsp; &amp;nbsp;+0x1c0 NestedFaultCount : 0y00&lt;/font&gt;&lt;/div&gt;
&lt;div&gt;&lt;font color=&quot;#000000&quot;&gt;&amp;nbsp; &amp;nbsp;+0x1c0 ApcNeeded &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;: 0y0&lt;/font&gt;&lt;/div&gt;
&lt;div&gt;&lt;font color=&quot;#000000&quot;&gt;&amp;nbsp; &amp;nbsp;+0x1c8 ExitTime &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; : _LARGE_INTEGER 0x825b61e8`825b61e8&lt;/font&gt;&lt;/div&gt;
&lt;div&gt;&lt;font color=&quot;#000000&quot;&gt;&amp;nbsp; &amp;nbsp;+0x1c8 LpcReplyChain &amp;nbsp; &amp;nbsp;: _LIST_ENTRY [ 0x825b61e8 - 0x825b61e8 ]&lt;/font&gt;&lt;/div&gt;
&lt;div&gt;&lt;font color=&quot;#000000&quot;&gt;&amp;nbsp; &amp;nbsp;+0x1c8 KeyedWaitChain &amp;nbsp; : _LIST_ENTRY [ 0x825b61e8 - 0x825b61e8 ]&lt;/font&gt;&lt;/div&gt;
&lt;div&gt;&lt;font color=&quot;#000000&quot;&gt;&amp;nbsp; &amp;nbsp;+0x1d0 ExitStatus &amp;nbsp; &amp;nbsp; &amp;nbsp; : 0n0&lt;/font&gt;&lt;/div&gt;
&lt;div&gt;&lt;font color=&quot;#000000&quot;&gt;&amp;nbsp; &amp;nbsp;+0x1d0 OfsChain &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; : (null)&amp;nbsp;&lt;/font&gt;&lt;/div&gt;
&lt;div&gt;&lt;font color=&quot;#000000&quot;&gt;&amp;nbsp; &amp;nbsp;+0x1d4 PostBlockList &amp;nbsp; &amp;nbsp;: _LIST_ENTRY [ 0x825b61f4 - 0x825b61f4 ]&lt;/font&gt;&lt;/div&gt;
&lt;div&gt;&lt;font color=&quot;#000000&quot;&gt;&amp;nbsp; &amp;nbsp;+0x1dc TerminationPort &amp;nbsp;: (null)&amp;nbsp;&lt;/font&gt;&lt;/div&gt;
&lt;div&gt;&lt;font color=&quot;#000000&quot;&gt;&amp;nbsp; &amp;nbsp;+0x1dc ReaperLink &amp;nbsp; &amp;nbsp; &amp;nbsp; : (null)&amp;nbsp;&lt;/font&gt;&lt;/div&gt;
&lt;div&gt;&lt;font color=&quot;#000000&quot;&gt;&amp;nbsp; &amp;nbsp;+0x1dc KeyedWaitValue &amp;nbsp; : (null)&amp;nbsp;&lt;/font&gt;&lt;/div&gt;
&lt;div&gt;&lt;font color=&quot;#000000&quot;&gt;&amp;nbsp; &amp;nbsp;+0x1e0 ActiveTimerListLock : 0&lt;/font&gt;&lt;/div&gt;
&lt;div&gt;&lt;font color=&quot;#000000&quot;&gt;&amp;nbsp; &amp;nbsp;+0x1e4 ActiveTimerListHead : _LIST_ENTRY [ 0x825b6204 - 0x825b6204 ]&lt;/font&gt;&lt;/div&gt;
&lt;div&gt;&lt;font color=&quot;#000000&quot;&gt;&amp;nbsp; &amp;nbsp;+0x1ec Cid &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;: _CLIENT_ID&lt;/font&gt;&lt;/div&gt;
&lt;div&gt;&lt;font color=&quot;#000000&quot;&gt;&amp;nbsp; &amp;nbsp;+0x1f4 LpcReplySemaphore : _KSEMAPHORE&lt;/font&gt;&lt;/div&gt;
&lt;div&gt;&lt;font color=&quot;#000000&quot;&gt;&amp;nbsp; &amp;nbsp;+0x1f4 KeyedWaitSemaphore : _KSEMAPHORE&lt;/font&gt;&lt;/div&gt;
&lt;div&gt;&lt;font color=&quot;#000000&quot;&gt;&amp;nbsp; &amp;nbsp;+0x208 LpcReplyMessage &amp;nbsp;: (null)&amp;nbsp;&lt;/font&gt;&lt;/div&gt;
&lt;div&gt;&lt;font color=&quot;#000000&quot;&gt;&amp;nbsp; &amp;nbsp;+0x208 LpcWaitingOnPort : (null)&amp;nbsp;&lt;/font&gt;&lt;/div&gt;
&lt;div&gt;&lt;font color=&quot;#000000&quot;&gt;&amp;nbsp; &amp;nbsp;+0x20c ImpersonationInfo : 0xe163d390 _PS_IMPERSONATION_INFORMATION&lt;/font&gt;&lt;/div&gt;
&lt;div&gt;&lt;font color=&quot;#000000&quot;&gt;&amp;nbsp; &amp;nbsp;+0x210 IrpList &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;: _LIST_ENTRY [ 0x824541e8 - 0x824541e8 ]&lt;/font&gt;&lt;/div&gt;
&lt;div&gt;&lt;font color=&quot;#000000&quot;&gt;&amp;nbsp; &amp;nbsp;+0x218 TopLevelIrp &amp;nbsp; &amp;nbsp; &amp;nbsp;: 0&lt;/font&gt;&lt;/div&gt;
&lt;div&gt;&lt;font color=&quot;#000000&quot;&gt;&amp;nbsp; &amp;nbsp;+0x21c DeviceToVerify &amp;nbsp; : (null)&amp;nbsp;&lt;/font&gt;&lt;/div&gt;
&lt;div&gt;&lt;b&gt;&lt;font color=&quot;#e31600&quot;&gt;&amp;nbsp; &amp;nbsp;+0x220 ThreadsProcess &amp;nbsp; : 0x825b9830 _EPROCESS&lt;/font&gt;&lt;/b&gt;&lt;/div&gt;
&lt;div&gt;&lt;font color=&quot;#000000&quot;&gt;&amp;nbsp; &amp;nbsp;+0x224 StartAddress &amp;nbsp; &amp;nbsp; : 0x80536b02 Void&lt;/font&gt;&lt;/div&gt;
&lt;div&gt;&lt;font color=&quot;#000000&quot;&gt;&amp;nbsp; &amp;nbsp;+0x228 Win32StartAddress : (null)&amp;nbsp;&lt;/font&gt;&lt;/div&gt;
&lt;div&gt;&lt;font color=&quot;#000000&quot;&gt;&amp;nbsp; &amp;nbsp;+0x228 LpcReceivedMessageId : 0&lt;/font&gt;&lt;/div&gt;
&lt;div&gt;&lt;font color=&quot;#000000&quot;&gt;&amp;nbsp; &amp;nbsp;+0x22c ThreadListEntry &amp;nbsp;: _LIST_ENTRY [ 0x825b6fd4 - 0x825b75f4 ]&lt;/font&gt;&lt;/div&gt;
&lt;div&gt;&lt;font color=&quot;#000000&quot;&gt;&amp;nbsp; &amp;nbsp;+0x234 RundownProtect &amp;nbsp; : _EX_RUNDOWN_REF&lt;/font&gt;&lt;/div&gt;
&lt;div&gt;&lt;font color=&quot;#000000&quot;&gt;&amp;nbsp; &amp;nbsp;+0x238 ThreadLock &amp;nbsp; &amp;nbsp; &amp;nbsp; : _EX_PUSH_LOCK&lt;/font&gt;&lt;/div&gt;
&lt;div&gt;&lt;font color=&quot;#000000&quot;&gt;&amp;nbsp; &amp;nbsp;+0x23c LpcReplyMessageId : 0&lt;/font&gt;&lt;/div&gt;
&lt;div&gt;&lt;font color=&quot;#000000&quot;&gt;&amp;nbsp; &amp;nbsp;+0x240 ReadClusterSize &amp;nbsp;: 7&lt;/font&gt;&lt;/div&gt;
&lt;div&gt;&lt;font color=&quot;#000000&quot;&gt;&amp;nbsp; &amp;nbsp;+0x244 GrantedAccess &amp;nbsp; &amp;nbsp;: 0x1f03ff&lt;/font&gt;&lt;/div&gt;
&lt;div&gt;&lt;font color=&quot;#000000&quot;&gt;&amp;nbsp; &amp;nbsp;+0x248 CrossThreadFlags : 0x10&lt;/font&gt;&lt;/div&gt;
&lt;div&gt;&lt;font color=&quot;#000000&quot;&gt;&amp;nbsp; &amp;nbsp;+0x248 Terminated &amp;nbsp; &amp;nbsp; &amp;nbsp; : 0y0&lt;/font&gt;&lt;/div&gt;
&lt;div&gt;&lt;font color=&quot;#000000&quot;&gt;&amp;nbsp; &amp;nbsp;+0x248 DeadThread &amp;nbsp; &amp;nbsp; &amp;nbsp; : 0y0&lt;/font&gt;&lt;/div&gt;
&lt;div&gt;&lt;font color=&quot;#000000&quot;&gt;&amp;nbsp; &amp;nbsp;+0x248 HideFromDebugger : 0y0&lt;/font&gt;&lt;/div&gt;
&lt;div&gt;&lt;font color=&quot;#000000&quot;&gt;&amp;nbsp; &amp;nbsp;+0x248 ActiveImpersonationInfo : 0y0&lt;/font&gt;&lt;/div&gt;
&lt;div&gt;&lt;font color=&quot;#000000&quot;&gt;&amp;nbsp; &amp;nbsp;+0x248 SystemThread &amp;nbsp; &amp;nbsp; : 0y1&lt;/font&gt;&lt;/div&gt;
&lt;div&gt;&lt;font color=&quot;#000000&quot;&gt;&amp;nbsp; &amp;nbsp;+0x248 HardErrorsAreDisabled : 0y0&lt;/font&gt;&lt;/div&gt;
&lt;div&gt;&lt;font color=&quot;#000000&quot;&gt;&amp;nbsp; &amp;nbsp;+0x248 BreakOnTermination : 0y0&lt;/font&gt;&lt;/div&gt;
&lt;div&gt;&lt;font color=&quot;#000000&quot;&gt;&amp;nbsp; &amp;nbsp;+0x248 SkipCreationMsg &amp;nbsp;: 0y0&lt;/font&gt;&lt;/div&gt;
&lt;div&gt;&lt;font color=&quot;#000000&quot;&gt;&amp;nbsp; &amp;nbsp;+0x248 SkipTerminationMsg : 0y0&lt;/font&gt;&lt;/div&gt;
&lt;div&gt;&lt;font color=&quot;#000000&quot;&gt;&amp;nbsp; &amp;nbsp;+0x24c SameThreadPassiveFlags : 3&lt;/font&gt;&lt;/div&gt;
&lt;div&gt;&lt;font color=&quot;#000000&quot;&gt;&amp;nbsp; &amp;nbsp;+0x24c ActiveExWorker &amp;nbsp; : 0y1&lt;/font&gt;&lt;/div&gt;
&lt;div&gt;&lt;font color=&quot;#000000&quot;&gt;&amp;nbsp; &amp;nbsp;+0x24c ExWorkerCanWaitUser : 0y1&lt;/font&gt;&lt;/div&gt;
&lt;div&gt;&lt;font color=&quot;#000000&quot;&gt;&amp;nbsp; &amp;nbsp;+0x24c MemoryMaker &amp;nbsp; &amp;nbsp; &amp;nbsp;: 0y0&lt;/font&gt;&lt;/div&gt;
&lt;div&gt;&lt;font color=&quot;#000000&quot;&gt;&amp;nbsp; &amp;nbsp;+0x250 SameThreadApcFlags : 0&lt;/font&gt;&lt;/div&gt;
&lt;div&gt;&lt;font color=&quot;#000000&quot;&gt;&amp;nbsp; &amp;nbsp;+0x250 LpcReceivedMsgIdValid : 0y0&lt;/font&gt;&lt;/div&gt;
&lt;div&gt;&lt;font color=&quot;#000000&quot;&gt;&amp;nbsp; &amp;nbsp;+0x250 LpcExitThreadCalled : 0y0&lt;/font&gt;&lt;/div&gt;
&lt;div&gt;&lt;font color=&quot;#000000&quot;&gt;&amp;nbsp; &amp;nbsp;+0x250 AddressSpaceOwner : 0y0&lt;/font&gt;&lt;/div&gt;
&lt;div&gt;&lt;font color=&quot;#000000&quot;&gt;&amp;nbsp; &amp;nbsp;+0x254 ForwardClusterOnly : 0 ''&lt;/font&gt;&lt;/div&gt;
&lt;font color=&quot;#000000&quot;&gt;&amp;nbsp; &amp;nbsp;+0x255 DisablePageFaultClustering : 0 ''&amp;nbsp;&lt;br /&gt;
&lt;/font&gt;&lt;/p&gt;
&lt;/div&gt;&lt;div&gt;
&lt;font color=&quot;#000000&quot;&gt;&lt;br /&gt;
&lt;/font&gt;&lt;/div&gt;
&lt;font color=&quot;#000000&quot;&gt;&amp;nbsp;저기서&amp;nbsp;&amp;nbsp; &amp;nbsp;&lt;/font&gt;&lt;br /&gt;
&lt;font color=&quot;#e31600&quot;&gt;+0x220 ThreadsProcess &amp;nbsp; : 0x825b9830 _EPROCESS&lt;/font&gt;&lt;br /&gt;
&lt;font color=&quot;#000000&quot;&gt;이 부분이 바로 &amp;nbsp;해당 스레드를 가지고 있는 프로세스의 EPROCESS 구조체 주소 정보가 있는 곳입니다.&lt;/font&gt;&lt;br /&gt;
&lt;font color=&quot;#000000&quot;&gt;해당 EPROCESS를 따라가보죠.&amp;nbsp;&lt;/font&gt;&lt;br /&gt;
&lt;br /&gt;&lt;div class=&quot;txc-textbox&quot; style=&quot;border-top-style: solid; border-right-style: solid; border-bottom-style: solid; border-left-style: solid; border-top-width: 1px; border-right-width: 1px; border-bottom-width: 1px; border-left-width: 1px; border-top-color: rgb(219, 232, 251); border-right-color: rgb(219, 232, 251); border-bottom-color: rgb(219, 232, 251); border-left-color: rgb(219, 232, 251); background-color: rgb(219, 232, 251); padding-top: 10px; padding-right: 10px; padding-bottom: 10px; padding-left: 10px; &quot;&gt;
&lt;p style=&quot;margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; &quot;&gt;&lt;div&gt;
&lt;font color=&quot;#000000&quot;&gt;&lt;b&gt;kd&amp;gt; dt _EPROCESS 0x825b9830&lt;/b&gt;&lt;/font&gt;&lt;/div&gt;
&lt;div&gt;&lt;font color=&quot;#000000&quot;&gt;ntdll!_EPROCESS&lt;/font&gt;&lt;/div&gt;
&lt;div&gt;&lt;font color=&quot;#000000&quot;&gt;&amp;nbsp; &amp;nbsp;+0x000 Pcb &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;: _KPROCESS&lt;/font&gt;&lt;/div&gt;
&lt;div&gt;&lt;font color=&quot;#000000&quot;&gt;&amp;nbsp; &amp;nbsp;+0x06c ProcessLock &amp;nbsp; &amp;nbsp; &amp;nbsp;: _EX_PUSH_LOCK&lt;/font&gt;&lt;/div&gt;
&lt;div&gt;&lt;font color=&quot;#000000&quot;&gt;&amp;nbsp; &amp;nbsp;+0x070 CreateTime &amp;nbsp; &amp;nbsp; &amp;nbsp; : _LARGE_INTEGER 0x0&lt;/font&gt;&lt;/div&gt;
&lt;div&gt;&lt;font color=&quot;#000000&quot;&gt;&amp;nbsp; &amp;nbsp;+0x078 ExitTime &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; : _LARGE_INTEGER 0x0&lt;/font&gt;&lt;/div&gt;
&lt;div&gt;&lt;font color=&quot;#000000&quot;&gt;&amp;nbsp; &amp;nbsp;+0x080 RundownProtect &amp;nbsp; : _EX_RUNDOWN_REF&lt;/font&gt;&lt;/div&gt;
&lt;div&gt;&lt;font color=&quot;#000000&quot;&gt;&amp;nbsp; &amp;nbsp;+0x084 UniqueProcessId &amp;nbsp;: 0x00000004 Void&lt;/font&gt;&lt;/div&gt;
&lt;div&gt;&lt;font color=&quot;#000000&quot;&gt;&amp;nbsp; &amp;nbsp;+0x088 ActiveProcessLinks : _LIST_ENTRY [ 0x821a3310 - 0x8055c158 ]&lt;/font&gt;&lt;/div&gt;
&lt;div&gt;&lt;font color=&quot;#000000&quot;&gt;&amp;nbsp; &amp;nbsp;+0x090 QuotaUsage &amp;nbsp; &amp;nbsp; &amp;nbsp; : [3] 0&lt;/font&gt;&lt;/div&gt;
&lt;div&gt;&lt;font color=&quot;#000000&quot;&gt;&amp;nbsp; &amp;nbsp;+0x09c QuotaPeak &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;: [3] 0&lt;/font&gt;&lt;/div&gt;
&lt;div&gt;&lt;font color=&quot;#000000&quot;&gt;&amp;nbsp; &amp;nbsp;+0x0a8 CommitCharge &amp;nbsp; &amp;nbsp; : 7&lt;/font&gt;&lt;/div&gt;
&lt;div&gt;&lt;font color=&quot;#000000&quot;&gt;&amp;nbsp; &amp;nbsp;+0x0ac PeakVirtualSize &amp;nbsp;: 0x293000&lt;/font&gt;&lt;/div&gt;
&lt;div&gt;&lt;font color=&quot;#000000&quot;&gt;&amp;nbsp; &amp;nbsp;+0x0b0 VirtualSize &amp;nbsp; &amp;nbsp; &amp;nbsp;: 0x1cf000&lt;/font&gt;&lt;/div&gt;
&lt;div&gt;&lt;font color=&quot;#000000&quot;&gt;&amp;nbsp; &amp;nbsp;+0x0b4 SessionProcessLinks : _LIST_ENTRY [ 0x0 - 0x0 ]&lt;/font&gt;&lt;/div&gt;
&lt;div&gt;&lt;font color=&quot;#000000&quot;&gt;&amp;nbsp; &amp;nbsp;+0x0bc DebugPort &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;: (null)&amp;nbsp;&lt;/font&gt;&lt;/div&gt;
&lt;div&gt;&lt;font color=&quot;#000000&quot;&gt;&amp;nbsp; &amp;nbsp;+0x0c0 ExceptionPort &amp;nbsp; &amp;nbsp;: (null)&amp;nbsp;&lt;/font&gt;&lt;/div&gt;
&lt;div&gt;&lt;font color=&quot;#000000&quot;&gt;&amp;nbsp; &amp;nbsp;+0x0c4 ObjectTable &amp;nbsp; &amp;nbsp; &amp;nbsp;: 0xe1000cc0 _HANDLE_TABLE&lt;/font&gt;&lt;/div&gt;
&lt;div&gt;&lt;font color=&quot;#000000&quot;&gt;&amp;nbsp; &amp;nbsp;+0x0c8 Token &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;: _EX_FAST_REF&lt;/font&gt;&lt;/div&gt;
&lt;div&gt;&lt;font color=&quot;#000000&quot;&gt;&amp;nbsp; &amp;nbsp;+0x0cc WorkingSetLock &amp;nbsp; : _FAST_MUTEX&lt;/font&gt;&lt;/div&gt;
&lt;div&gt;&lt;font color=&quot;#000000&quot;&gt;&amp;nbsp; &amp;nbsp;+0x0ec WorkingSetPage &amp;nbsp; : 0&lt;/font&gt;&lt;/div&gt;
&lt;div&gt;&lt;font color=&quot;#000000&quot;&gt;&amp;nbsp; &amp;nbsp;+0x0f0 AddressCreationLock : _FAST_MUTEX&lt;/font&gt;&lt;/div&gt;
&lt;div&gt;&lt;font color=&quot;#000000&quot;&gt;&amp;nbsp; &amp;nbsp;+0x110 HyperSpaceLock &amp;nbsp; : 0&lt;/font&gt;&lt;/div&gt;
&lt;div&gt;&lt;font color=&quot;#000000&quot;&gt;&amp;nbsp; &amp;nbsp;+0x114 ForkInProgress &amp;nbsp; : (null)&amp;nbsp;&lt;/font&gt;&lt;/div&gt;
&lt;div&gt;&lt;font color=&quot;#000000&quot;&gt;&amp;nbsp; &amp;nbsp;+0x118 HardwareTrigger &amp;nbsp;: 0&lt;/font&gt;&lt;/div&gt;
&lt;div&gt;&lt;font color=&quot;#000000&quot;&gt;&amp;nbsp; &amp;nbsp;+0x11c VadRoot &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;: 0x825b5200 Void&lt;/font&gt;&lt;/div&gt;
&lt;div&gt;&lt;font color=&quot;#000000&quot;&gt;&amp;nbsp; &amp;nbsp;+0x120 VadHint &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;: 0x825b5200 Void&lt;/font&gt;&lt;/div&gt;
&lt;div&gt;&lt;font color=&quot;#000000&quot;&gt;&amp;nbsp; &amp;nbsp;+0x124 CloneRoot &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;: (null)&amp;nbsp;&lt;/font&gt;&lt;/div&gt;
&lt;div&gt;&lt;font color=&quot;#000000&quot;&gt;&amp;nbsp; &amp;nbsp;+0x128 NumberOfPrivatePages : 3&lt;/font&gt;&lt;/div&gt;
&lt;div&gt;&lt;font color=&quot;#000000&quot;&gt;&amp;nbsp; &amp;nbsp;+0x12c NumberOfLockedPages : 0&lt;/font&gt;&lt;/div&gt;
&lt;div&gt;&lt;font color=&quot;#000000&quot;&gt;&amp;nbsp; &amp;nbsp;+0x130 Win32Process &amp;nbsp; &amp;nbsp; : (null)&amp;nbsp;&lt;/font&gt;&lt;/div&gt;
&lt;div&gt;&lt;font color=&quot;#000000&quot;&gt;&amp;nbsp; &amp;nbsp;+0x134 Job &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;: (null)&amp;nbsp;&lt;/font&gt;&lt;/div&gt;
&lt;div&gt;&lt;font color=&quot;#000000&quot;&gt;&amp;nbsp; &amp;nbsp;+0x138 SectionObject &amp;nbsp; &amp;nbsp;: (null)&amp;nbsp;&lt;/font&gt;&lt;/div&gt;
&lt;div&gt;&lt;font color=&quot;#000000&quot;&gt;&amp;nbsp; &amp;nbsp;+0x13c SectionBaseAddress : (null)&amp;nbsp;&lt;/font&gt;&lt;/div&gt;
&lt;div&gt;&lt;font color=&quot;#000000&quot;&gt;&amp;nbsp; &amp;nbsp;+0x140 QuotaBlock &amp;nbsp; &amp;nbsp; &amp;nbsp; : 0x8055c200 _EPROCESS_QUOTA_BLOCK&lt;/font&gt;&lt;/div&gt;
&lt;div&gt;&lt;font color=&quot;#000000&quot;&gt;&amp;nbsp; &amp;nbsp;+0x144 WorkingSetWatch &amp;nbsp;: (null)&amp;nbsp;&lt;/font&gt;&lt;/div&gt;
&lt;div&gt;&lt;font color=&quot;#000000&quot;&gt;&amp;nbsp; &amp;nbsp;+0x148 Win32WindowStation : (null)&amp;nbsp;&lt;/font&gt;&lt;/div&gt;
&lt;div&gt;&lt;font color=&quot;#000000&quot;&gt;&amp;nbsp; &amp;nbsp;+0x14c InheritedFromUniqueProcessId : (null)&amp;nbsp;&lt;/font&gt;&lt;/div&gt;
&lt;div&gt;&lt;font color=&quot;#000000&quot;&gt;&amp;nbsp; &amp;nbsp;+0x150 LdtInformation &amp;nbsp; : (null)&amp;nbsp;&lt;/font&gt;&lt;/div&gt;
&lt;div&gt;&lt;font color=&quot;#000000&quot;&gt;&amp;nbsp; &amp;nbsp;+0x154 VadFreeHint &amp;nbsp; &amp;nbsp; &amp;nbsp;: (null)&amp;nbsp;&lt;/font&gt;&lt;/div&gt;
&lt;div&gt;&lt;font color=&quot;#000000&quot;&gt;&amp;nbsp; &amp;nbsp;+0x158 VdmObjects &amp;nbsp; &amp;nbsp; &amp;nbsp; : (null)&amp;nbsp;&lt;/font&gt;&lt;/div&gt;
&lt;div&gt;&lt;font color=&quot;#000000&quot;&gt;&amp;nbsp; &amp;nbsp;+0x15c DeviceMap &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;: 0xe1004440 Void&lt;/font&gt;&lt;/div&gt;
&lt;div&gt;&lt;font color=&quot;#000000&quot;&gt;&amp;nbsp; &amp;nbsp;+0x160 PhysicalVadList &amp;nbsp;: _LIST_ENTRY [ 0x825b9990 - 0x825b9990 ]&lt;/font&gt;&lt;/div&gt;
&lt;div&gt;&lt;font color=&quot;#000000&quot;&gt;&amp;nbsp; &amp;nbsp;+0x168 PageDirectoryPte : _HARDWARE_PTE_X86&lt;/font&gt;&lt;/div&gt;
&lt;div&gt;&lt;font color=&quot;#000000&quot;&gt;&amp;nbsp; &amp;nbsp;+0x168 Filler &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; : 0&lt;/font&gt;&lt;/div&gt;
&lt;div&gt;&lt;font color=&quot;#000000&quot;&gt;&amp;nbsp; &amp;nbsp;+0x170 Session &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;: (null)&amp;nbsp;&lt;/font&gt;&lt;/div&gt;
&lt;div&gt;&lt;b&gt;&lt;font color=&quot;#e31600&quot;&gt;&amp;nbsp; &amp;nbsp;+0x174 ImageFileName &amp;nbsp; &amp;nbsp;: [16] &amp;nbsp;&quot;System&quot;&lt;/font&gt;&lt;/b&gt;&lt;/div&gt;
&lt;div&gt;&lt;font color=&quot;#000000&quot;&gt;&amp;nbsp; &amp;nbsp;+0x184 JobLinks &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; : _LIST_ENTRY [ 0x0 - 0x0 ]&lt;/font&gt;&lt;/div&gt;
&lt;div&gt;&lt;font color=&quot;#000000&quot;&gt;&amp;nbsp; &amp;nbsp;+0x18c LockedPagesList &amp;nbsp;: (null)&amp;nbsp;&lt;/font&gt;&lt;/div&gt;
&lt;div&gt;&lt;font color=&quot;#000000&quot;&gt;&amp;nbsp; &amp;nbsp;+0x190 ThreadListHead &amp;nbsp; : _LIST_ENTRY [ 0x825b97e4 - 0x8246fbb4 ]&lt;/font&gt;&lt;/div&gt;
&lt;div&gt;&lt;font color=&quot;#000000&quot;&gt;&amp;nbsp; &amp;nbsp;+0x198 SecurityPort &amp;nbsp; &amp;nbsp; : 0xe19c27b0 Void&lt;/font&gt;&lt;/div&gt;
&lt;div&gt;&lt;font color=&quot;#000000&quot;&gt;&amp;nbsp; &amp;nbsp;+0x19c PaeTop &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; : (null)&amp;nbsp;&lt;/font&gt;&lt;/div&gt;
&lt;div&gt;&lt;font color=&quot;#000000&quot;&gt;&amp;nbsp; &amp;nbsp;+0x1a0 ActiveThreads &amp;nbsp; &amp;nbsp;: 0x39&lt;/font&gt;&lt;/div&gt;
&lt;div&gt;&lt;font color=&quot;#000000&quot;&gt;&amp;nbsp; &amp;nbsp;+0x1a4 GrantedAccess &amp;nbsp; &amp;nbsp;: 0x1f0fff&lt;/font&gt;&lt;/div&gt;
&lt;div&gt;&lt;font color=&quot;#000000&quot;&gt;&amp;nbsp; &amp;nbsp;+0x1a8 DefaultHardErrorProcessing : 1&lt;/font&gt;&lt;/div&gt;
&lt;div&gt;&lt;font color=&quot;#000000&quot;&gt;&amp;nbsp; &amp;nbsp;+0x1ac LastThreadExitStatus : 0n0&lt;/font&gt;&lt;/div&gt;
&lt;div&gt;&lt;font color=&quot;#000000&quot;&gt;&amp;nbsp; &amp;nbsp;+0x1b0 Peb &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;: (null)&amp;nbsp;&lt;/font&gt;&lt;/div&gt;
&lt;div&gt;&lt;font color=&quot;#000000&quot;&gt;&amp;nbsp; &amp;nbsp;+0x1b4 PrefetchTrace &amp;nbsp; &amp;nbsp;: _EX_FAST_REF&lt;/font&gt;&lt;/div&gt;
&lt;div&gt;&lt;font color=&quot;#000000&quot;&gt;&amp;nbsp; &amp;nbsp;+0x1b8 ReadOperationCount : _LARGE_INTEGER 0x65&lt;/font&gt;&lt;/div&gt;
&lt;div&gt;&lt;font color=&quot;#000000&quot;&gt;&amp;nbsp; &amp;nbsp;+0x1c0 WriteOperationCount : _LARGE_INTEGER 0x1c7&lt;/font&gt;&lt;/div&gt;
&lt;div&gt;&lt;font color=&quot;#000000&quot;&gt;&amp;nbsp; &amp;nbsp;+0x1c8 OtherOperationCount : _LARGE_INTEGER 0x12e5&lt;/font&gt;&lt;/div&gt;
&lt;div&gt;&lt;font color=&quot;#000000&quot;&gt;&amp;nbsp; &amp;nbsp;+0x1d0 ReadTransferCount : _LARGE_INTEGER 0x9a53c&lt;/font&gt;&lt;/div&gt;
&lt;div&gt;&lt;font color=&quot;#000000&quot;&gt;&amp;nbsp; &amp;nbsp;+0x1d8 WriteTransferCount : _LARGE_INTEGER 0x2c1cd6&lt;/font&gt;&lt;/div&gt;
&lt;div&gt;&lt;font color=&quot;#000000&quot;&gt;&amp;nbsp; &amp;nbsp;+0x1e0 OtherTransferCount : _LARGE_INTEGER 0x76c46&lt;/font&gt;&lt;/div&gt;
&lt;div&gt;&lt;font color=&quot;#000000&quot;&gt;&amp;nbsp; &amp;nbsp;+0x1e8 CommitChargeLimit : 0&lt;/font&gt;&lt;/div&gt;
&lt;div&gt;&lt;font color=&quot;#000000&quot;&gt;&amp;nbsp; &amp;nbsp;+0x1ec CommitChargePeak : 0x1cd&lt;/font&gt;&lt;/div&gt;
&lt;div&gt;&lt;font color=&quot;#000000&quot;&gt;&amp;nbsp; &amp;nbsp;+0x1f0 AweInfo &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;: (null)&amp;nbsp;&lt;/font&gt;&lt;/div&gt;
&lt;div&gt;&lt;font color=&quot;#000000&quot;&gt;&amp;nbsp; &amp;nbsp;+0x1f4 SeAuditProcessCreationInfo : _SE_AUDIT_PROCESS_CREATION_INFO&lt;/font&gt;&lt;/div&gt;
&lt;div&gt;&lt;font color=&quot;#000000&quot;&gt;&amp;nbsp; &amp;nbsp;+0x1f8 Vm &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; : _MMSUPPORT&lt;/font&gt;&lt;/div&gt;
&lt;div&gt;&lt;font color=&quot;#000000&quot;&gt;&amp;nbsp; &amp;nbsp;+0x238 LastFaultCount &amp;nbsp; : 0&lt;/font&gt;&lt;/div&gt;
&lt;div&gt;&lt;font color=&quot;#000000&quot;&gt;&amp;nbsp; &amp;nbsp;+0x23c ModifiedPageCount : 0xcc3&lt;/font&gt;&lt;/div&gt;
&lt;div&gt;&lt;font color=&quot;#000000&quot;&gt;&amp;nbsp; &amp;nbsp;+0x240 NumberOfVads &amp;nbsp; &amp;nbsp; : 4&lt;/font&gt;&lt;/div&gt;
&lt;div&gt;&lt;font color=&quot;#000000&quot;&gt;&amp;nbsp; &amp;nbsp;+0x244 JobStatus &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;: 0&lt;/font&gt;&lt;/div&gt;
&lt;div&gt;&lt;font color=&quot;#000000&quot;&gt;&amp;nbsp; &amp;nbsp;+0x248 Flags &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;: 0x40000&lt;/font&gt;&lt;/div&gt;
&lt;div&gt;&lt;font color=&quot;#000000&quot;&gt;&amp;nbsp; &amp;nbsp;+0x248 CreateReported &amp;nbsp; : 0y0&lt;/font&gt;&lt;/div&gt;
&lt;div&gt;&lt;font color=&quot;#000000&quot;&gt;&amp;nbsp; &amp;nbsp;+0x248 NoDebugInherit &amp;nbsp; : 0y0&lt;/font&gt;&lt;/div&gt;
&lt;div&gt;&lt;font color=&quot;#000000&quot;&gt;&amp;nbsp; &amp;nbsp;+0x248 ProcessExiting &amp;nbsp; : 0y0&lt;/font&gt;&lt;/div&gt;
&lt;div&gt;&lt;font color=&quot;#000000&quot;&gt;&amp;nbsp; &amp;nbsp;+0x248 ProcessDelete &amp;nbsp; &amp;nbsp;: 0y0&lt;/font&gt;&lt;/div&gt;
&lt;div&gt;&lt;font color=&quot;#000000&quot;&gt;&amp;nbsp; &amp;nbsp;+0x248 Wow64SplitPages &amp;nbsp;: 0y0&lt;/font&gt;&lt;/div&gt;
&lt;div&gt;&lt;font color=&quot;#000000&quot;&gt;&amp;nbsp; &amp;nbsp;+0x248 VmDeleted &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;: 0y0&lt;/font&gt;&lt;/div&gt;
&lt;div&gt;&lt;font color=&quot;#000000&quot;&gt;&amp;nbsp; &amp;nbsp;+0x248 OutswapEnabled &amp;nbsp; : 0y0&lt;/font&gt;&lt;/div&gt;
&lt;div&gt;&lt;font color=&quot;#000000&quot;&gt;&amp;nbsp; &amp;nbsp;+0x248 Outswapped &amp;nbsp; &amp;nbsp; &amp;nbsp; : 0y0&lt;/font&gt;&lt;/div&gt;
&lt;div&gt;&lt;font color=&quot;#000000&quot;&gt;&amp;nbsp; &amp;nbsp;+0x248 ForkFailed &amp;nbsp; &amp;nbsp; &amp;nbsp; : 0y0&lt;/font&gt;&lt;/div&gt;
&lt;div&gt;&lt;font color=&quot;#000000&quot;&gt;&amp;nbsp; &amp;nbsp;+0x248 HasPhysicalVad &amp;nbsp; : 0y0&lt;/font&gt;&lt;/div&gt;
&lt;div&gt;&lt;font color=&quot;#000000&quot;&gt;&amp;nbsp; &amp;nbsp;+0x248 AddressSpaceInitialized : 0y00&lt;/font&gt;&lt;/div&gt;
&lt;div&gt;&lt;font color=&quot;#000000&quot;&gt;&amp;nbsp; &amp;nbsp;+0x248 SetTimerResolution : 0y0&lt;/font&gt;&lt;/div&gt;
&lt;div&gt;&lt;font color=&quot;#000000&quot;&gt;&amp;nbsp; &amp;nbsp;+0x248 BreakOnTermination : 0y0&lt;/font&gt;&lt;/div&gt;
&lt;div&gt;&lt;font color=&quot;#000000&quot;&gt;&amp;nbsp; &amp;nbsp;+0x248 SessionCreationUnderway : 0y0&lt;/font&gt;&lt;/div&gt;
&lt;div&gt;&lt;font color=&quot;#000000&quot;&gt;&amp;nbsp; &amp;nbsp;+0x248 WriteWatch &amp;nbsp; &amp;nbsp; &amp;nbsp; : 0y0&lt;/font&gt;&lt;/div&gt;
&lt;div&gt;&lt;font color=&quot;#000000&quot;&gt;&amp;nbsp; &amp;nbsp;+0x248 ProcessInSession : 0y0&lt;/font&gt;&lt;/div&gt;
&lt;div&gt;&lt;font color=&quot;#000000&quot;&gt;&amp;nbsp; &amp;nbsp;+0x248 OverrideAddressSpace : 0y0&lt;/font&gt;&lt;/div&gt;
&lt;div&gt;&lt;font color=&quot;#000000&quot;&gt;&amp;nbsp; &amp;nbsp;+0x248 HasAddressSpace &amp;nbsp;: 0y1&lt;/font&gt;&lt;/div&gt;
&lt;div&gt;&lt;font color=&quot;#000000&quot;&gt;&amp;nbsp; &amp;nbsp;+0x248 LaunchPrefetched : 0y0&lt;/font&gt;&lt;/div&gt;
&lt;div&gt;&lt;font color=&quot;#000000&quot;&gt;&amp;nbsp; &amp;nbsp;+0x248 InjectInpageErrors : 0y0&lt;/font&gt;&lt;/div&gt;
&lt;div&gt;&lt;font color=&quot;#000000&quot;&gt;&amp;nbsp; &amp;nbsp;+0x248 VmTopDown &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;: 0y0&lt;/font&gt;&lt;/div&gt;
&lt;div&gt;&lt;font color=&quot;#000000&quot;&gt;&amp;nbsp; &amp;nbsp;+0x248 Unused3 &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;: 0y0&lt;/font&gt;&lt;/div&gt;
&lt;div&gt;&lt;font color=&quot;#000000&quot;&gt;&amp;nbsp; &amp;nbsp;+0x248 Unused4 &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;: 0y0&lt;/font&gt;&lt;/div&gt;
&lt;div&gt;&lt;font color=&quot;#000000&quot;&gt;&amp;nbsp; &amp;nbsp;+0x248 VdmAllowed &amp;nbsp; &amp;nbsp; &amp;nbsp; : 0y0&lt;/font&gt;&lt;/div&gt;
&lt;div&gt;&lt;font color=&quot;#000000&quot;&gt;&amp;nbsp; &amp;nbsp;+0x248 Unused &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; : 0y00000 (0)&lt;/font&gt;&lt;/div&gt;
&lt;div&gt;&lt;font color=&quot;#000000&quot;&gt;&amp;nbsp; &amp;nbsp;+0x248 Unused1 &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;: 0y0&lt;/font&gt;&lt;/div&gt;
&lt;div&gt;&lt;font color=&quot;#000000&quot;&gt;&amp;nbsp; &amp;nbsp;+0x248 Unused2 &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;: 0y0&lt;/font&gt;&lt;/div&gt;
&lt;div&gt;&lt;font color=&quot;#000000&quot;&gt;&amp;nbsp; &amp;nbsp;+0x24c ExitStatus &amp;nbsp; &amp;nbsp; &amp;nbsp; : 0n259&lt;/font&gt;&lt;/div&gt;
&lt;div&gt;&lt;font color=&quot;#000000&quot;&gt;&amp;nbsp; &amp;nbsp;+0x250 NextPageColor &amp;nbsp; &amp;nbsp;: 0x5bf6&lt;/font&gt;&lt;/div&gt;
&lt;div&gt;&lt;font color=&quot;#000000&quot;&gt;&amp;nbsp; &amp;nbsp;+0x252 SubSystemMinorVersion : 0 ''&lt;/font&gt;&lt;/div&gt;
&lt;div&gt;&lt;font color=&quot;#000000&quot;&gt;&amp;nbsp; &amp;nbsp;+0x253 SubSystemMajorVersion : 0 ''&lt;/font&gt;&lt;/div&gt;
&lt;div&gt;&lt;font color=&quot;#000000&quot;&gt;&amp;nbsp; &amp;nbsp;+0x252 SubSystemVersion : 0&lt;/font&gt;&lt;/div&gt;
&lt;div&gt;&lt;font color=&quot;#000000&quot;&gt;&amp;nbsp; &amp;nbsp;+0x254 PriorityClass &amp;nbsp; &amp;nbsp;: 0x2 ''&lt;/font&gt;&lt;/div&gt;
&lt;div&gt;&lt;font color=&quot;#000000&quot;&gt;&amp;nbsp; &amp;nbsp;+0x255 WorkingSetAcquiredUnsafe : 0 ''&lt;/font&gt;&lt;/div&gt;
&lt;font color=&quot;#000000&quot;&gt;&amp;nbsp; &amp;nbsp;+0x258 Cookie &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; : 0&amp;nbsp;&lt;br /&gt;
&lt;/font&gt;&lt;/p&gt;
&lt;/div&gt;&lt;div&gt;
&lt;font color=&quot;#000000&quot;&gt;&lt;br /&gt;
&lt;/font&gt;&lt;/div&gt;
&lt;font color=&quot;#000000&quot;&gt;이부분&lt;/font&gt;&lt;br /&gt;
&lt;font color=&quot;#e31600&quot;&gt;&amp;nbsp; &amp;nbsp;+0x174 ImageFileName &amp;nbsp; &amp;nbsp;: [16] &amp;nbsp;&quot;System&quot;&amp;nbsp;&lt;/font&gt;&lt;br /&gt;
&lt;font color=&quot;#000000&quot;&gt;이 부분에 바로 해당 프로세스의 이름이 담겨 있는 곳입니다.&lt;/font&gt;&lt;br /&gt;
&lt;font color=&quot;#000000&quot;&gt;이 부분만 후킹해서 슬쩍슬쩍 빼오면 되는 것이지요. EDI, ESI 두 레지스터에서 전부 말이죠.&lt;/font&gt;&lt;br /&gt;
&lt;br /&gt;&lt;font color=&quot;#000000&quot;&gt;방법은 간단합니다.&lt;br /&gt;
&lt;div class=&quot;txc-textbox&quot; style=&quot;border-top-style: solid; border-right-style: solid; border-bottom-style: solid; border-left-style: solid; border-top-width: 1px; border-right-width: 1px; border-bottom-width: 1px; border-left-width: 1px; border-top-color: rgb(254, 222, 199); border-right-color: rgb(254, 222, 199); border-bottom-color: rgb(254, 222, 199); border-left-color: rgb(254, 222, 199); background-color: rgb(254, 222, 199); padding-top: 10px; padding-right: 10px; padding-bottom: 10px; padding-left: 10px; &quot;&gt;&lt;p style=&quot;margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; &quot;&gt;&lt;font color=&quot;#000000&quot;&gt;1. nt!SwapContext 함수를 인라인 후킹을 한다. 처음 5Byte를 MyRoutine() 함수로 Jmp하게끔&amp;nbsp;&lt;/font&gt;&lt;br style=&quot;color: rgb(51, 51, 51); &quot;&gt;&lt;font color=&quot;#000000&quot;&gt;2. MyRoutine() 함수에서는 EDI, ESI 레지스터에서 ETHREAD -&amp;gt; EPROCESS -&amp;gt; ImageFileName 주소를 구한다.&lt;/font&gt;&lt;br style=&quot;color: rgb(51, 51, 51); &quot;&gt;&lt;font color=&quot;#000000&quot;&gt;3. nt!SwapContext 함수로 다시 점프한다.&lt;/font&gt;
&lt;/p&gt;
&lt;/div&gt;&amp;nbsp;&lt;/font&gt;&lt;br /&gt;
&lt;font color=&quot;#000000&quot;&gt;끝입니다. 구현하면서 중요시 해야될 부분은 보통 API 함수 후킹할 때는 &lt;/font&gt;&lt;br /&gt;
&lt;font color=&quot;#e31600&quot;&gt;후킹 -&amp;gt; My 함수 호출되면 -&amp;gt; 인자값 조작 -&amp;gt; 언후킹 -&amp;gt; 오리지널 함수 호출 -&amp;gt; 후킹 -&amp;gt; 리턴 값 조작....&lt;/font&gt;&lt;br /&gt;
&lt;font color=&quot;#000000&quot;&gt;이런식으로 진행이 되는데 이 함수는 그렇게 하면 안됩니다.&lt;/font&gt;&lt;br /&gt;
&lt;br /&gt;&lt;font color=&quot;#000000&quot;&gt;일단 문서화된 함수가 아니고.. 찾아보니까 함수의 원형을 도저히 모르겠더군요. 또한 이건 함수라고 하기도 뭐한게 [ebp+8].. 이런식으로 인자 값을 가져와서 하는게 아닌 단순 EDI, ESI 에 있는 값을 모니터링 하기 때문이죠. 일반적인 API함수가 아닌..&lt;/font&gt;&lt;br /&gt;
&lt;font color=&quot;#000000&quot;&gt;또한 안다 하더라도 위와같은 방식을 사용하면 스레드가 스왑될 때마다 언후킹, 후킹을 하게 되는데 이러면 상당히 오버헤드가 발생하게 됩니다. Windows 같은 경우 하나의 스레드가 사용할 수 있는 퀀텀을 다 사용하면서 스왑된다 하더라도 스왑되는 주기가 매우 짧기 때문이죠. 고로 이런 방식으로 진행됩니다.&lt;/font&gt;&lt;br /&gt;
&lt;br /&gt;&lt;font color=&quot;#e31600&quot;&gt;후킹 -&amp;gt; (naked)My 함수 호출 -&amp;gt; EDI, ESI로부터 프로세스 이름 얻음(함수로 처리) -&amp;gt; nt!SwapContext 함수로 점프&lt;/font&gt;&lt;br /&gt;
&lt;br /&gt;&lt;font color=&quot;#000000&quot;&gt;이런식입니다. 즉 언후킹은 해당 후킹 드라이버가 언로드 될 때만 해주는 것입니다.&amp;nbsp;&lt;/font&gt;&lt;br /&gt;
&lt;font color=&quot;#000000&quot;&gt;그리고 언후킹을 하지 않기 때문에 저 같은 경우는 &amp;nbsp;아래와 같이 구현했습니다;;&lt;/font&gt;&lt;br /&gt;
&lt;br /&gt;&lt;b&gt;&lt;font color=&quot;#3058d2&quot;&gt;Windows XP SP3 SwapContext 처음 부분&lt;/font&gt;&lt;/b&gt;&lt;br /&gt;
&lt;div&gt;&lt;font color=&quot;#000000&quot;&gt;&lt;span class=&quot;Apple-tab-span&quot; style=&quot;white-space:pre&quot;&gt;	&lt;/span&gt;805438e0 0ac9 &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; or &amp;nbsp; &amp;nbsp; &amp;nbsp;cl,cl&lt;/font&gt;&lt;/div&gt;
&lt;div&gt;&lt;font color=&quot;#000000&quot;&gt;&lt;span class=&quot;Apple-tab-span&quot; style=&quot;white-space:pre&quot;&gt;	&lt;/span&gt;805438e2 26c6462d02 &amp;nbsp; &amp;nbsp; &amp;nbsp;mov &amp;nbsp; &amp;nbsp; byte ptr es:[esi+2Dh],2&lt;/font&gt;&lt;/div&gt;
&lt;span class=&quot;Apple-tab-span&quot; style=&quot;color: rgb(0, 0, 0); white-space: pre; &quot;&gt;	&lt;/span&gt;&lt;font color=&quot;#000000&quot;&gt;805438e7 9c &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;pushfd&amp;nbsp;&lt;/font&gt;&lt;br /&gt;
&lt;br /&gt;&lt;b&gt;&lt;font color=&quot;#3058d2&quot;&gt;My 함수 끝 부분&lt;/font&gt;&lt;/b&gt;&lt;br /&gt;
&lt;font color=&quot;#000000&quot;&gt;&amp;nbsp;&lt;/font&gt;&lt;span class=&quot;Apple-tab-span&quot; style=&quot;color: rgb(0, 0, 0); white-space: pre; &quot;&gt;		&lt;/span&gt;&lt;font color=&quot;#000000&quot;&gt;or cl,cl&lt;/font&gt;&lt;/div&gt;
&lt;div&gt;&lt;font color=&quot;#000000&quot;&gt;&lt;span class=&quot;Apple-tab-span&quot; style=&quot;white-space:pre&quot;&gt;		&lt;/span&gt;mov byte ptr [esi+0x2D],2&lt;/font&gt;&lt;/div&gt;
&lt;div&gt;&lt;font color=&quot;#000000&quot;&gt;&lt;br /&gt;
&lt;/font&gt;&lt;/div&gt;
&lt;div&gt;&lt;font color=&quot;#000000&quot;&gt;&lt;span class=&quot;Apple-tab-span&quot; style=&quot;white-space:pre&quot;&gt;		&lt;/span&gt;jmp swapContext_Trampoline &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; ; SwapContext_Address + 7&lt;br /&gt;
&lt;br /&gt;이런식으로 5Byte가 jmp문으로 바뀐것에 대해 내부적으로 수행해주고 SwapContext 주소에서 +7 자리로 점프를 해서 실행하는 것입니다. 이러면 언후킹할 필요가 없더군요. 오버헤드 막기 성공.. ;;&lt;br /&gt;
&lt;br /&gt;아무튼 구현하니 잘 작동은 합니다.&lt;br /&gt;
&lt;br /&gt;사실 이렇게 끝내면 안되고 당연히 프로세스 이름을 담을 테이블을 만들고 중복 처리도 해주고&amp;nbsp;&lt;br /&gt;
프로세스가 종료되면 해당 프로세스를 테이블에서 빼주고도 하고 유저와 통신을 하면서&amp;nbsp;&lt;br /&gt;
사용자에게 보여주기도 해야하는 과정이 남았지만 이건 나중에 실질적으로 필요할 때가 생기면 구현을 해봐야겠습니다.&amp;nbsp;&lt;br /&gt;
&lt;br /&gt;아래는 그냥 DbgPrint를 사용해 프로세스 이름을 출력하는 과정만 보여주었습니다.&amp;nbsp;&lt;br /&gt;
또한 DKOM방법으로 숨긴 프로세스 또한 찾아지는지 보겠습니다.&lt;br /&gt;
&lt;br /&gt;&lt;embed width=&quot;402&quot; height=&quot;324&quot; src=&quot;/attachment/cfile10.uf@114A58494F03F71231CE33.swf&quot; quality=&quot;high&quot; allowScriptAccess=&quot;always&quot; type=&quot;application/x-shockwave-flash&quot; pluginspage=&quot;http://www.macromedia.com/go/getflashplayer&quot;/&gt;&amp;nbsp;&lt;br /&gt;
&lt;br /&gt;이제 이렇게 SwapContext를 후킹해 프로세스를 찾아내는 방법 우회해 프로세스를 숨길 수 있는 방법은 무엇이 있을까요?&lt;br /&gt;
무조건 프로그램을 사용하게 되면 해당 프로세스 내부에 있는 스레드는 걸리게 될 것이고.. 걸리면 탐지가 되는거고..&lt;br /&gt;
안걸리게 해야될탠데.. 안걸리려면 프로세스가 작동을 안해야한다는.. 작동 안할꺼면 필요도 없는 거고..;&lt;br /&gt;
우회할 수 있는 방법엔 무엇이 있을까요?? &amp;nbsp;좋은 방법 아시는 분은 댓글로 저에게 조언 부탁드려요! 막상 바로 떠오르진 않군요.&lt;/font&gt;&lt;/div&gt;&lt;div class=&quot;entry-ccl&quot; style=&quot;clear: both; text-align: right; margin-bottom: 10px&quot;&gt;
	&lt;img id=&quot;ccl-icon-353-0&quot; class=&quot;entry-ccl-by&quot; src=&quot;http://i1.daumcdn.net/cfs.tistory/v/0/static/admin/editor/ccl_black01.png&quot; alt=&quot;저작자 표시&quot;/&gt;
	&lt;!--
	&lt;rdf:RDF xmlns=&quot;http://web.resource.org/cc/&quot; xmlns:dc=&quot;http://purl.org/dc/elements/1.1/&quot; xmlns:rdf=&quot;http://www.w3.org/1999/02/22-rdf-syntax-ns#&quot;&gt;
		&lt;Work rdf:about=&quot;&quot;&gt;
			&lt;license rdf:resource=&quot;http://creativecommons.org/licenses/by-fr/2.0/kr/&quot; /&gt;
		&lt;/Work&gt;
		&lt;License rdf:about=&quot;http://creativecommons.org/licenses/by-fr/&quot;&gt;
			&lt;permits rdf:resource=&quot;http://web.resource.org/cc/Reproduction&quot;/&gt;
			&lt;permits rdf:resource=&quot;http://web.resource.org/cc/Distribution&quot;/&gt;
			&lt;requires rdf:resource=&quot;http://web.resource.org/cc/Notice&quot;/&gt;
			&lt;requires rdf:resource=&quot;http://web.resource.org/cc/Attribution&quot;/&gt;
			&lt;permits rdf:resource=&quot;http://web.resource.org/cc/DerivativeWorks&quot;/&gt;
		&lt;/License&gt;
	&lt;/rdf:RDF&gt;
	--&gt;
&lt;/div&gt;
&lt;div class=&quot;another_category another_category_color_gray&quot;&gt;
&lt;h4&gt;'&lt;a href=&quot;/category/My%20Study&quot;&gt;My Study&lt;/a&gt;&amp;nbsp;&gt;&amp;nbsp;&lt;a href=&quot;/category/My%20Study/Programming%26Theory&quot;&gt;Programming&amp;amp;Theory&lt;/a&gt;' 카테고리의 다른 글&lt;/h4&gt;
&lt;table&gt;
&lt;tr&gt;
&lt;th&gt;
&lt;a href=&quot;/357&quot; &gt;BlockInput Function&lt;/a&gt;&amp;nbsp;&amp;nbsp;&lt;span&gt;(3)&lt;/span&gt;
&lt;/th&gt;
&lt;td&gt;
2012/01/20&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;th&gt;
&lt;a href=&quot;/354&quot; &gt;My BSOD&lt;/a&gt;&amp;nbsp;&amp;nbsp;&lt;span&gt;(2)&lt;/span&gt;
&lt;/th&gt;
&lt;td&gt;
2012/01/08&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;th&gt;
&lt;a href=&quot;/353&quot; &gt;SwapContext를 이용한 프로세스 찾기&lt;/a&gt;&amp;nbsp;&amp;nbsp;&lt;span&gt;(7)&lt;/span&gt;
&lt;/th&gt;
&lt;td&gt;
2012/01/04&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;th&gt;
&lt;a href=&quot;/352&quot; &gt;Remote Library Injection&lt;/a&gt;&amp;nbsp;&amp;nbsp;&lt;span&gt;(4)&lt;/span&gt;
&lt;/th&gt;
&lt;td&gt;
2011/12/29&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;th&gt;
&lt;a href=&quot;/350&quot; &gt;OpenProcess를 막는 방법은??&lt;/a&gt;&amp;nbsp;&amp;nbsp;&lt;span&gt;(11)&lt;/span&gt;
&lt;/th&gt;
&lt;td&gt;
2011/12/20&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;th&gt;
&lt;a href=&quot;/348&quot; &gt;Immunity Debugger Hard Hooking&lt;/a&gt;&amp;nbsp;&amp;nbsp;&lt;span&gt;(2)&lt;/span&gt;
&lt;/th&gt;
&lt;td&gt;
2011/12/08&lt;/td&gt;
&lt;/tr&gt;
&lt;/table&gt;&lt;/div&gt;</description>
			<category>Programming&amp;Theory</category>
			<category>DISPATCH_LEVEL</category>
			<category>EPROCESS</category>
			<category>ETHREAD</category>
			<category>Hooking</category>
			<category>ImageFileName</category>
			<category>naked</category>
			<category>ntkrnlpa</category>
			<category>ntoskrnl</category>
			<category>PASSIVE_LEVEL</category>
			<category>SwapContext</category>
			<category>ThreadsProcess</category>
			<category>trampoline</category>
			<category>ZwQuerySystemInformation</category>
			<author>Ezbeat</author>
			<guid>http://ezbeat.tistory.com/353</guid>
			<comments>http://ezbeat.tistory.com/353#entry353comment</comments>
			<pubDate>Wed, 04 Jan 2012 16:01:11 +0900</pubDate>
		</item>
		<item>
			<title>Remote Library Injection</title>
			<link>http://ezbeat.tistory.com/352</link>
			<description>&lt;font color=&quot;#000000&quot;&gt;예전에부터 해왔던건데 ㅠㅠ Native 함수 후킹 시 함수호출 규약 Calling Convention 을 무시한결과.. 엄청난 삽질을 동반한 시간적 낭비가 있어서 이제 올려보네요.. 아 ㅠㅠ API 후킹 시 함수호출 규약 잘 지킵시다..헝헝..&lt;/font&gt;&lt;br /&gt;
&lt;br /&gt;&lt;font color=&quot;#000000&quot;&gt;한가지 궁금한 점은.. NtOpenFile일 경우 커널이나 유저나 함수호출 규약은 __stdcall로 같은데&lt;/font&gt;&lt;br /&gt;
&lt;font color=&quot;#000000&quot;&gt;왜 후킹할 때 user에선 __stdcall을 붙혀줘야되고 kernel에선 안붙혀줘도 되는건지..;&amp;nbsp;&lt;/font&gt;&lt;br /&gt;
&lt;br /&gt;&lt;font color=&quot;#000000&quot;&gt;다시 본론으로 돌아와서 &lt;/font&gt;&lt;b&gt;&lt;font color=&quot;#e31600&quot;&gt;Remote Library Injection&lt;/font&gt;&lt;/b&gt;&lt;font color=&quot;#000000&quot;&gt;은 나름 괜찮은 기술입니다.&amp;nbsp;&lt;/font&gt;&lt;br /&gt;
&lt;font color=&quot;#000000&quot;&gt;디스크에 읽고 쓰여짐을 탐지하는 모니터링 툴들을 우회할 수 있기 때문이죠.&lt;/font&gt;&lt;br /&gt;
&lt;br /&gt;&lt;font color=&quot;#000000&quot;&gt;간략한 그림을 보시겠습니다.&amp;nbsp;&lt;/font&gt;&lt;br /&gt;
&lt;font color=&quot;#000000&quot;&gt;&lt;div class=&quot;imageblock&quot; style=&quot;display:inline;&quot;&gt;&lt;a href=&quot;http://cfile2.uf.tistory.com/original/150563404EFBE7791BF9EC&quot; rel=&quot;lightbox&quot; target=&quot;_blank&quot;&gt;&lt;img src=&quot;http://cfile2.uf.tistory.com/image/150563404EFBE7791BF9EC&quot; alt=&quot;&quot; filemime=&quot;image/jpeg&quot; filename=&quot;사용자 지정 3.jpg&quot; height=&quot;530&quot; width=&quot;408&quot;/&gt;&lt;/a&gt;&lt;/div&gt;&lt;/font&gt;&lt;br /&gt;
&lt;br /&gt;&lt;font color=&quot;#000000&quot;&gt;보통 몇몇 악성코드가 작동하는 방식입니다. 먼저 Dropper는 백신에 걸리지 않기 때문에 안전하게 메모리에 올라올 수 있고 그 다음에 악성 dll을 소켓 통신을 통해 받던 Dropper내부적으로 인코딩되어 있던 것을 디코딩하던 한 다음 Disk상에 드랍 시킵니다. 그 다음에 LoadLibrary를 통해 악성 dll을 로드시키는 것이지요.&lt;/font&gt;&lt;br /&gt;
&lt;br /&gt;&lt;font color=&quot;#000000&quot;&gt;하지만 이 방법은 백신에 걸리기 쉽습니다. 만약 &lt;/font&gt;&lt;font color=&quot;#e31600&quot;&gt;백신이 Disk에 생성되는 모든 파일들에 대해서 모니터링을 하고 있다면?&lt;/font&gt;&lt;br /&gt;
&lt;font color=&quot;#000000&quot;&gt;아마 Virus.dll이 잡힐 확율은 상당히 높을 것입니다. 그러면 다른 방법으로 Virus.dll을 로드 시킬 방법을 생각해봐야겠군요.&lt;/font&gt;&lt;br /&gt;
&lt;br /&gt;&lt;font color=&quot;#000000&quot;&gt;아래 그림을 봐보아요~&lt;/font&gt;&lt;br /&gt;
&lt;font color=&quot;#000000&quot;&gt;&lt;div class=&quot;imageblock&quot; style=&quot;display:inline;&quot;&gt;&lt;a href=&quot;http://cfile8.uf.tistory.com/original/1431E5414EFBE83102042D&quot; rel=&quot;lightbox&quot; target=&quot;_blank&quot;&gt;&lt;img src=&quot;http://cfile8.uf.tistory.com/image/1431E5414EFBE83102042D&quot; alt=&quot;&quot; filemime=&quot;image/jpeg&quot; filename=&quot;사용자 지정 4.jpg&quot; height=&quot;530&quot; width=&quot;298&quot;/&gt;&lt;/a&gt;&lt;/div&gt;&lt;/font&gt;&lt;br /&gt;
&lt;br /&gt;&lt;font color=&quot;#000000&quot;&gt;상당히 그림을 발로 그렸지만.. 보면 Dropper.exe 내부적으로 소켓통신으로 받았던 원래 가지고 있던 아무튼 &lt;/font&gt;&lt;font color=&quot;#e31600&quot;&gt;해당 Virus.dll을 Disk에 드랍하지 않고 자체적으로 메모리상에서 바로 로드해 버리는 것&lt;/font&gt;&lt;font color=&quot;#000000&quot;&gt;입니다.&lt;/font&gt;&lt;br /&gt;
&lt;font color=&quot;#000000&quot;&gt;이렇게 구현될 경우 당연히 Disk에 생성되는 모든 파일에 대해서 감시하고 있는 백신은 당연히 농락시킬 수 있는 것입니다.&lt;/font&gt;&lt;br /&gt;
&lt;br /&gt;&lt;font color=&quot;#000000&quot;&gt;제가 ezbeat.dll로 로드가 되면 단순히 메시지 박스만 띄우는 dll을 하나 만들어 보았습니다. &amp;nbsp;이제 이 dll을 로드해보겠습니다.&lt;/font&gt;&lt;br /&gt;
&lt;font color=&quot;#000000&quot;&gt;&lt;div class=&quot;imageblock&quot; style=&quot;display:inline;&quot;&gt;&lt;a href=&quot;http://cfile25.uf.tistory.com/original/117E71384EFBE9711E2492&quot; rel=&quot;lightbox&quot; target=&quot;_blank&quot;&gt;&lt;img src=&quot;http://cfile25.uf.tistory.com/image/117E71384EFBE9711E2492&quot; alt=&quot;&quot; filemime=&quot;image/jpeg&quot; filename=&quot;사용자 지정 5.jpg&quot; height=&quot;260&quot; width=&quot;483&quot;/&gt;&lt;/a&gt;&lt;/div&gt;&amp;nbsp;&lt;/font&gt;&lt;br /&gt;
&lt;font color=&quot;#000000&quot;&gt;간단히&lt;/font&gt;&lt;font color=&quot;#e31600&quot;&gt; LoadLibrary&lt;/font&gt;&lt;font color=&quot;#000000&quot;&gt;를 사용해 &quot;c:\ezbeat.dll&quot; 을 로드하는 방법입니다. 누구나 dll을 로드할 때 이러한 방법을 많이 사용하죠.&lt;/font&gt;&lt;br /&gt;
&lt;font color=&quot;#000000&quot;&gt;당연히 &amp;nbsp;&quot;c:\ezbeat.dll&quot; 는 Disk상 해당 경로에 존재합니다.&lt;/font&gt;&lt;br /&gt;
&lt;br /&gt;&lt;font color=&quot;#000000&quot;&gt;로드가 된 후 올디로 상태를 확인해보았습니다.&lt;/font&gt;&lt;br /&gt;
&lt;font color=&quot;#000000&quot;&gt;&lt;div class=&quot;imageblock&quot; style=&quot;display:inline;&quot;&gt;&lt;a href=&quot;http://cfile9.uf.tistory.com/original/1625C03B4EFBEA4E02E240&quot; rel=&quot;lightbox&quot; target=&quot;_blank&quot;&gt;&lt;img src=&quot;http://cfile9.uf.tistory.com/image/1625C03B4EFBEA4E02E240&quot; alt=&quot;&quot; filemime=&quot;image/jpeg&quot; filename=&quot;사용자 지정 6.jpg&quot; height=&quot;112&quot; width=&quot;601&quot;/&gt;&lt;/a&gt;&lt;/div&gt;&lt;/font&gt;&lt;br /&gt;
&lt;br /&gt;&lt;font color=&quot;#000000&quot;&gt;파란색으로 네모친 부분을 보면 잘 로드가 되었고 Entry 또한 잘 나와 있군요.&lt;/font&gt;&lt;br /&gt;
&lt;br /&gt;&lt;font color=&quot;#000000&quot;&gt;이번엔 &lt;/font&gt;&lt;font color=&quot;#e31600&quot;&gt;Remote Library Injection을 사용해서 로드하는 방법&lt;/font&gt;&lt;font color=&quot;#000000&quot;&gt;입니다.&amp;nbsp;&lt;/font&gt;&lt;br /&gt;
&lt;font color=&quot;#000000&quot;&gt;&lt;div class=&quot;imageblock&quot; style=&quot;display:inline;&quot;&gt;&lt;a href=&quot;http://cfile27.uf.tistory.com/original/167BB2434EFBEAB42B4BF9&quot; rel=&quot;lightbox&quot; target=&quot;_blank&quot;&gt;&lt;img src=&quot;http://cfile27.uf.tistory.com/image/167BB2434EFBEAB42B4BF9&quot; alt=&quot;&quot; filemime=&quot;image/jpeg&quot; filename=&quot;사용자 지정 7.jpg&quot; height=&quot;340&quot; width=&quot;617&quot;/&gt;&lt;/a&gt;&lt;/div&gt;&lt;/font&gt;&lt;br /&gt;
&lt;br /&gt;&lt;font color=&quot;#000000&quot;&gt;EmulateFileToMemory() 함수와 InitHook() 가 추가가 되었군요.&lt;/font&gt;&lt;br /&gt;
&lt;font color=&quot;#000000&quot;&gt;그리고 LoadLibrary 할 때 넘어가는 인자가 &quot;K:\ezbeat.dll&quot; 입니다. 하지만 제 컴퓨터에는 K 드라이버는 없습니다.&lt;/font&gt;&lt;br /&gt;
&lt;font color=&quot;#000000&quot;&gt;즉.. &quot;K:\ezbeat.dll&quot; 은 하드에 존재하지 않는 그냥 가짜 이름입니다. 해당 파일의 내용은 LoadLibrary 호출자 프로세스가 가지고 있습니다. 그러면 실패할까요? 실행해보죠.&amp;nbsp;&lt;/font&gt;&lt;br /&gt;
&lt;br /&gt;&lt;font color=&quot;#000000&quot;&gt;&lt;div class=&quot;imageblock&quot; style=&quot;display:inline;&quot;&gt;&lt;a href=&quot;http://cfile23.uf.tistory.com/original/204D0E334EFBEB8224EA58&quot; rel=&quot;lightbox&quot; target=&quot;_blank&quot;&gt;&lt;img src=&quot;http://cfile23.uf.tistory.com/image/204D0E334EFBEB8224EA58&quot; alt=&quot;&quot; filemime=&quot;image/jpeg&quot; filename=&quot;사용자 지정 8.jpg&quot; height=&quot;291&quot; width=&quot;411&quot;/&gt;&lt;/a&gt;&lt;/div&gt;&amp;nbsp;&lt;/font&gt;&lt;br /&gt;
&lt;br /&gt;&lt;font color=&quot;#000000&quot;&gt;잘 되는군요. 이것도 올디로 봐보겠습니다.&amp;nbsp;&lt;/font&gt;&lt;br /&gt;
&lt;font color=&quot;#000000&quot;&gt;&lt;div class=&quot;imageblock&quot; style=&quot;display:inline;&quot;&gt;&lt;a href=&quot;http://cfile1.uf.tistory.com/original/1330DA394EFBEBB72EEFD5&quot; rel=&quot;lightbox&quot; target=&quot;_blank&quot;&gt;&lt;img src=&quot;http://cfile1.uf.tistory.com/image/1330DA394EFBEBB72EEFD5&quot; alt=&quot;&quot; filemime=&quot;image/jpeg&quot; filename=&quot;사용자 지정 9.jpg&quot; height=&quot;142&quot; width=&quot;524&quot;/&gt;&lt;/a&gt;&lt;/div&gt;&amp;nbsp;&lt;/font&gt;&lt;br /&gt;
&lt;font color=&quot;#000000&quot;&gt;로드도 잘 되었고 dll 내부적으로 있는 메시지박스도 잘 실행되었지만.. Entry가 없습니다...&lt;/font&gt;&lt;br /&gt;
&lt;font color=&quot;#000000&quot;&gt;바로 이게 Remote Library Injection 입니다.&lt;/font&gt;&lt;br /&gt;
&lt;br /&gt;&lt;font color=&quot;#000000&quot;&gt;방법은?&lt;/font&gt;&lt;br /&gt;
&lt;div class=&quot;txc-textbox&quot; style=&quot;border-top-style: solid; border-right-style: solid; border-bottom-style: solid; border-left-style: solid; border-top-width: 1px; border-right-width: 1px; border-bottom-width: 1px; border-left-width: 1px; border-top-color: rgb(231, 253, 181); border-right-color: rgb(231, 253, 181); border-bottom-color: rgb(231, 253, 181); border-left-color: rgb(231, 253, 181); background-color: rgb(231, 253, 181); padding-top: 10px; padding-right: 10px; padding-bottom: 10px; padding-left: 10px; &quot;&gt;&lt;p style=&quot;margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; &quot;&gt;&lt;font color=&quot;#000000&quot;&gt;&lt;b&gt;1. &lt;/b&gt;로드시키려는 dll 파일 내용을 메모리 상에 지니게 있도록 한다. ( 소켓으로 받던.. 애당초 인코딩해서 가지고 있던.. )&lt;/font&gt;&lt;br /&gt;
&lt;font color=&quot;#000000&quot;&gt;&lt;b&gt;2.&lt;/b&gt; dll 내용을 메모리 상에 올라왔을 때와 똑같이 에뮬레이팅 해준다.&lt;/font&gt;&lt;br /&gt;
&lt;font color=&quot;#000000&quot;&gt;&lt;b&gt;3.&lt;/b&gt; LoadLibrary 내부적으로 호출되는&amp;nbsp;&lt;br /&gt;
&amp;nbsp; &amp;nbsp; NtQueryAttributesFile,&amp;nbsp;NtOpenFile,&amp;nbsp;NtCreateSection,&amp;nbsp;NtMapViewOfSection 을 후킹&lt;/font&gt;&lt;br /&gt;
&lt;font color=&quot;#000000&quot;&gt;&lt;b&gt;4.&lt;/b&gt; LoadLibrary가 호출되 각 후킹된 Nt 함수들 내부적으로 들어오면 &lt;br /&gt;
&amp;nbsp; &amp;nbsp; 파라미터와 리턴 값을 적절히 조작해 성공하게 만든다.&lt;/font&gt;
&lt;/p&gt;
&lt;/div&gt;&lt;font color=&quot;#000000&quot;&gt;&lt;/font&gt;&lt;br /&gt;
&lt;font color=&quot;#000000&quot;&gt;끝입니다.&lt;/font&gt;&lt;br /&gt;
&lt;font color=&quot;#000000&quot;&gt;아래는 영상..&lt;/font&gt;&lt;br /&gt;
&lt;font color=&quot;#000000&quot;&gt;&lt;embed width=&quot;402&quot; height=&quot;324&quot; src=&quot;/attachment/cfile3.uf@146134444EFBF22E01129E.swf&quot; quality=&quot;high&quot; allowScriptAccess=&quot;always&quot; type=&quot;application/x-shockwave-flash&quot; pluginspage=&quot;http://www.macromedia.com/go/getflashplayer&quot;/&gt;&lt;/font&gt;&lt;br /&gt;
&lt;br /&gt;&lt;font color=&quot;#000000&quot;&gt;&amp;nbsp;일부러 백신에 잡히게 dll을 만들어보고 해당 dll을 가지고 테스트 해봐야겠네요.&lt;/font&gt;&lt;br /&gt;
&lt;font color=&quot;#000000&quot;&gt;아무튼 다른 실시간 모니터링 부분은 몰라도 디스크 모니터링 하는 부분은 우회가 가능한 방법입니다.&lt;/font&gt;&lt;br /&gt;
&lt;br /&gt;&lt;div style=&quot;margin-left: 4em; &quot;&gt;
&lt;/div&gt;&lt;div&gt;
&lt;font color=&quot;#000000&quot;&gt;&amp;nbsp;&lt;/font&gt;&lt;/div&gt;&lt;div class=&quot;entry-ccl&quot; style=&quot;clear: both; text-align: right; margin-bottom: 10px&quot;&gt;
	&lt;img id=&quot;ccl-icon-352-0&quot; class=&quot;entry-ccl-by&quot; src=&quot;http://i1.daumcdn.net/cfs.tistory/v/0/static/admin/editor/ccl_black01.png&quot; alt=&quot;저작자 표시&quot;/&gt;
	&lt;!--
	&lt;rdf:RDF xmlns=&quot;http://web.resource.org/cc/&quot; xmlns:dc=&quot;http://purl.org/dc/elements/1.1/&quot; xmlns:rdf=&quot;http://www.w3.org/1999/02/22-rdf-syntax-ns#&quot;&gt;
		&lt;Work rdf:about=&quot;&quot;&gt;
			&lt;license rdf:resource=&quot;http://creativecommons.org/licenses/by-fr/2.0/kr/&quot; /&gt;
		&lt;/Work&gt;
		&lt;License rdf:about=&quot;http://creativecommons.org/licenses/by-fr/&quot;&gt;
			&lt;permits rdf:resource=&quot;http://web.resource.org/cc/Reproduction&quot;/&gt;
			&lt;permits rdf:resource=&quot;http://web.resource.org/cc/Distribution&quot;/&gt;
			&lt;requires rdf:resource=&quot;http://web.resource.org/cc/Notice&quot;/&gt;
			&lt;requires rdf:resource=&quot;http://web.resource.org/cc/Attribution&quot;/&gt;
			&lt;permits rdf:resource=&quot;http://web.resource.org/cc/DerivativeWorks&quot;/&gt;
		&lt;/License&gt;
	&lt;/rdf:RDF&gt;
	--&gt;
&lt;/div&gt;
&lt;div class=&quot;another_category another_category_color_gray&quot;&gt;
&lt;h4&gt;'&lt;a href=&quot;/category/My%20Study&quot;&gt;My Study&lt;/a&gt;&amp;nbsp;&gt;&amp;nbsp;&lt;a href=&quot;/category/My%20Study/Programming%26Theory&quot;&gt;Programming&amp;amp;Theory&lt;/a&gt;' 카테고리의 다른 글&lt;/h4&gt;
&lt;table&gt;
&lt;tr&gt;
&lt;th&gt;
&lt;a href=&quot;/354&quot; &gt;My BSOD&lt;/a&gt;&amp;nbsp;&amp;nbsp;&lt;span&gt;(2)&lt;/span&gt;
&lt;/th&gt;
&lt;td&gt;
2012/01/08&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;th&gt;
&lt;a href=&quot;/353&quot; &gt;SwapContext를 이용한 프로세스 찾기&lt;/a&gt;&amp;nbsp;&amp;nbsp;&lt;span&gt;(7)&lt;/span&gt;
&lt;/th&gt;
&lt;td&gt;
2012/01/04&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;th&gt;
&lt;a href=&quot;/352&quot; &gt;Remote Library Injection&lt;/a&gt;&amp;nbsp;&amp;nbsp;&lt;span&gt;(4)&lt;/span&gt;
&lt;/th&gt;
&lt;td&gt;
2011/12/29&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;th&gt;
&lt;a href=&quot;/350&quot; &gt;OpenProcess를 막는 방법은??&lt;/a&gt;&amp;nbsp;&amp;nbsp;&lt;span&gt;(11)&lt;/span&gt;
&lt;/th&gt;
&lt;td&gt;
2011/12/20&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;th&gt;
&lt;a href=&quot;/348&quot; &gt;Immunity Debugger Hard Hooking&lt;/a&gt;&amp;nbsp;&amp;nbsp;&lt;span&gt;(2)&lt;/span&gt;
&lt;/th&gt;
&lt;td&gt;
2011/12/08&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;th&gt;
&lt;a href=&quot;/347&quot; &gt;ScreenSaver 만들어보기&lt;/a&gt;&amp;nbsp;&amp;nbsp;&lt;span&gt;(3)&lt;/span&gt;
&lt;/th&gt;
&lt;td&gt;
2011/11/30&lt;/td&gt;
&lt;/tr&gt;
&lt;/table&gt;&lt;/div&gt;</description>
			<category>Programming&amp;Theory</category>
			<category>Calling Convention</category>
			<category>disk</category>
			<category>drop</category>
			<category>LoadLibrary</category>
			<category>NT</category>
			<category>NtCreateSection</category>
			<category>NtMapViewOfSection</category>
			<category>NtOpenFile</category>
			<category>NtQueryAttributesFile</category>
			<category>Remote Library Injection</category>
			<author>Ezbeat</author>
			<guid>http://ezbeat.tistory.com/352</guid>
			<comments>http://ezbeat.tistory.com/352#entry352comment</comments>
			<pubDate>Thu, 29 Dec 2011 13:57:44 +0900</pubDate>
		</item>
		<item>
			<title>OpenProcess를 막는 방법은??</title>
			<link>http://ezbeat.tistory.com/350</link>
			<description>&lt;font color=&quot;#000000&quot;&gt;모든 기말고사 시험이 끝나고.. 데이터베이스 발표만을 앞둔 상황에서.. 새벽에 심심하던 찰나 문뜩 생각이 나서 장난같지 않은 장난을 한번 쳐봤습니다. 될까 싶었는데 그냥 되더군요.&lt;/font&gt;&lt;br /&gt;
&lt;br /&gt;&lt;font color=&quot;#e31600&quot;&gt;OpenProcess&lt;/font&gt;&lt;font color=&quot;#000000&quot;&gt;는 PID를 가지고 대상 프로세스의 커널오브젝트를 가리키는 핸들을 얻어오는 함수입니다.&lt;br /&gt;
dll injection을 하건 해당 프로세스의 메모리 패치를 하던간에.. 무조건 호출되어야하는 함수입니다.&lt;br /&gt;
뭐.. FindWindow를 사용할수도 있지만 윈도우 이름보단 프로세스 이름으로 pid를 얻는게 더 효율적이죠...&amp;nbsp;&lt;br /&gt;
&lt;br /&gt;저놈의 함수를 막을려면 어떻게 할까요.. 유저단에서 생각을 해보면 전역 후킹을 통해 모든 프로세스에 dll을 inection 시키고 모든 프로세스의 kernel32.dll에 있는 OpenProcess를 후킹해서 막아야할까요?.. 물론 되겠죠.&lt;br /&gt;
&lt;br /&gt;이번엔 커널단에서 생각해보겠습니다. 그냥 간단히&amp;nbsp;
KiServiceTable&amp;nbsp;있는 ZwOpenProcess 함수를 후킹할까요?(SSDT..)&lt;br /&gt;
이 방법은 커널 프로그래밍을 해야되는 것 이지만 후킹 탐지가 쉽게 되므로 효율성이 얼마나 있을지 모르겠군요.&lt;br /&gt;
&lt;br /&gt;그 외에도 SYSENTER를 후킹해서 하는 방법..( ZwOpenProcess 시스템 번호로 식별해.. )&lt;br /&gt;
&lt;br /&gt;많은 방법이 있지만 이번에 해볼 방법은 쫌.. &amp;nbsp;살짝 장난스럽긴 하지만&lt;/font&gt;&lt;font color=&quot;#e31600&quot;&gt;&lt;b&gt; PID를 계속적으로 바꿔버리는 것&lt;/b&gt;&lt;/font&gt;&lt;font color=&quot;#000000&quot;&gt;입니다.&lt;/font&gt;&lt;br /&gt;
&lt;font color=&quot;#000000&quot;&gt;프로세스를 계속 살렸다 죽였다 살렸다 죽였다.. 하는 방법은 아니구요;;&lt;/font&gt;&lt;br /&gt;
&lt;font color=&quot;#e31600&quot;&gt;살아있는 프로세스의 PID를 계속 바꾸는 것&lt;/font&gt;&lt;font color=&quot;#000000&quot;&gt; 입니다.&amp;nbsp;&lt;/font&gt;&lt;br /&gt;
&lt;br /&gt;&lt;font color=&quot;#000000&quot;&gt;&lt;div class=&quot;imageblock&quot; style=&quot;display:inline;&quot;&gt;&lt;a href=&quot;http://cfile10.uf.tistory.com/original/1222673C4EEF73B422D316&quot; rel=&quot;lightbox&quot; target=&quot;_blank&quot;&gt;&lt;img src=&quot;http://cfile10.uf.tistory.com/image/1222673C4EEF73B422D316&quot; alt=&quot;&quot; filemime=&quot;image/jpeg&quot; filename=&quot;사용자 지정 1.jpg&quot; height=&quot;396&quot; width=&quot;324&quot;/&gt;&lt;/a&gt;&lt;/div&gt;&lt;/font&gt;&lt;br /&gt;
&lt;br /&gt;&lt;font color=&quot;#000000&quot;&gt;바로 저 PID 말이죠.&lt;/font&gt;&lt;br /&gt;
&lt;font color=&quot;#000000&quot;&gt;프로세스의 PID가 저장되어 있는 장소는 두 군데로 알고 있습니다. 첫번째는&lt;/font&gt;&lt;br /&gt;
&lt;font color=&quot;#000000&quot;&gt;&lt;div class=&quot;imageblock&quot; style=&quot;display:inline;&quot;&gt;&lt;a href=&quot;http://cfile9.uf.tistory.com/original/19429A4E4EEF741E0F76DC&quot; rel=&quot;lightbox&quot; target=&quot;_blank&quot;&gt;&lt;img src=&quot;http://cfile9.uf.tistory.com/image/19429A4E4EEF741E0F76DC&quot; alt=&quot;&quot; filemime=&quot;image/jpeg&quot; filename=&quot;사용자 지정 2.jpg&quot; height=&quot;206&quot; width=&quot;411&quot;/&gt;&lt;/a&gt;&lt;/div&gt;&lt;/font&gt;&lt;br /&gt;
&lt;br /&gt;&lt;font color=&quot;#e31600&quot;&gt;&lt;b&gt;TEB 구조체의 ClientId 멤버변수&lt;/b&gt;&lt;/font&gt;&lt;font color=&quot;#000000&quot;&gt;에 있습니다. 이건 유저에 저장되어 있는 값이구요.&lt;/font&gt;&lt;br /&gt;
&lt;font color=&quot;#000000&quot;&gt;GetCurrentProcessId()함수를 사용해서 얻오는 PID가 바로 저기서 얻어오는 것 입니다.&lt;/font&gt;&lt;br /&gt;
&lt;br /&gt;&lt;font color=&quot;#000000&quot;&gt;두번째는&lt;/font&gt;&lt;br /&gt;
&lt;font color=&quot;#000000&quot;&gt;&lt;div class=&quot;imageblock&quot; style=&quot;display:inline;&quot;&gt;&lt;a href=&quot;http://cfile29.uf.tistory.com/original/111ABC474EEF747A03C627&quot; rel=&quot;lightbox&quot; target=&quot;_blank&quot;&gt;&lt;img src=&quot;http://cfile29.uf.tistory.com/image/111ABC474EEF747A03C627&quot; alt=&quot;&quot; filemime=&quot;image/jpeg&quot; filename=&quot;사용자 지정 3.jpg&quot; height=&quot;244&quot; width=&quot;458&quot;/&gt;&lt;/a&gt;&lt;/div&gt;&lt;/font&gt;&lt;br /&gt;
&lt;br /&gt;&lt;font color=&quot;#000000&quot;&gt;커널에 있는 &lt;/font&gt;&lt;b&gt;&lt;font color=&quot;#e31600&quot;&gt;EPROCESS 구조체 내부에 있는 UniqueProcessId 멤버변수&lt;/font&gt;&lt;/b&gt;&lt;font color=&quot;#000000&quot;&gt;에 있습니다.&lt;/font&gt;&lt;br /&gt;
&lt;br /&gt;&lt;font color=&quot;#000000&quot;&gt;그러면 프로세스 이름으로 검색해 PID를 얻어오는 방법인&lt;/font&gt;&lt;br /&gt;
&lt;font color=&quot;#3058d2&quot;&gt;CreateToolhelp32Snapshot&lt;/font&gt;&lt;font color=&quot;#000000&quot;&gt;()&lt;/font&gt;&lt;br /&gt;
&lt;font color=&quot;#3058d2&quot;&gt;Process32First&lt;/font&gt;&lt;font color=&quot;#000000&quot;&gt;()&lt;/font&gt;&lt;br /&gt;
&lt;font color=&quot;#3058d2&quot;&gt;Process32Next&lt;/font&gt;&lt;font color=&quot;#000000&quot;&gt;()&lt;/font&gt;&lt;br /&gt;
&lt;font color=&quot;#000000&quot;&gt;세 함수를 사용한다면 어떠한 PID를 가져올까요??&lt;/font&gt;&lt;br /&gt;
&lt;br /&gt;&lt;font color=&quot;#000000&quot;&gt;바로 EPROCESS 구조체 내부에 있는 UniqueProcessId 값을 가져오게 됩니다.&lt;/font&gt;&lt;br /&gt;
&lt;br /&gt;&lt;font color=&quot;#000000&quot;&gt;하지만 저 값이 계속적으로 바뀌어버리면??&lt;/font&gt;&lt;br /&gt;
&lt;font color=&quot;#e31600&quot;&gt;제대로 된 PID 값을 알지못해 OpenProcess가 실패하게 될 것&lt;/font&gt;&lt;font color=&quot;#000000&quot;&gt;입니다. &lt;/font&gt;&lt;br /&gt;
&lt;font color=&quot;#000000&quot;&gt;사실 한번만 바꿔도 되는데... 계속 바뀌어지면 뭔가 있어보이잔아요?...흠..&lt;/font&gt;&lt;br /&gt;
&lt;br /&gt;&lt;font color=&quot;#000000&quot;&gt;아무튼 그런 방법을 사용해 PID를 변경시키는 프로그램을 만들어보았습니다.&lt;/font&gt;&lt;br /&gt;
&lt;font color=&quot;#000000&quot;&gt;그리고 다른 프로세스에서는 해당 프로세스의 핸들을 얻기위해 OpenProcess를 계속 시도하였습니다.&amp;nbsp;&lt;/font&gt;&lt;br /&gt;
&lt;br /&gt;&lt;font color=&quot;#000000&quot;&gt;아래는 동영상.. ( 마우스 휠로 브라우져를 확대에 보세요.. )&lt;/font&gt;&lt;br /&gt;
&lt;font color=&quot;#000000&quot;&gt;&lt;embed width=&quot;402&quot; height=&quot;324&quot; src=&quot;/attachment/cfile10.uf@16753F504EEF8327079745.swf&quot; quality=&quot;high&quot; allowScriptAccess=&quot;always&quot; type=&quot;application/x-shockwave-flash&quot; pluginspage=&quot;http://www.macromedia.com/go/getflashplayer&quot;/&gt;&lt;/font&gt;&lt;br /&gt;
&lt;br /&gt;&lt;font color=&quot;#000000&quot;&gt;이것도 조금만 생각해보시면 파훼법이 있겠죠??&lt;/font&gt;&lt;br /&gt;
&lt;b&gt;&lt;font color=&quot;#801fbf&quot;&gt;혹시 좋은 방법들이 있다면 댓글로 조언을 해주세요 ^^&amp;nbsp;&lt;/font&gt;&lt;/b&gt;&lt;div class=&quot;entry-ccl&quot; style=&quot;clear: both; text-align: right; margin-bottom: 10px&quot;&gt;
	&lt;img id=&quot;ccl-icon-350-0&quot; class=&quot;entry-ccl-by&quot; src=&quot;http://i1.daumcdn.net/cfs.tistory/v/0/static/admin/editor/ccl_black01.png&quot; alt=&quot;저작자 표시&quot;/&gt;
	&lt;!--
	&lt;rdf:RDF xmlns=&quot;http://web.resource.org/cc/&quot; xmlns:dc=&quot;http://purl.org/dc/elements/1.1/&quot; xmlns:rdf=&quot;http://www.w3.org/1999/02/22-rdf-syntax-ns#&quot;&gt;
		&lt;Work rdf:about=&quot;&quot;&gt;
			&lt;license rdf:resource=&quot;http://creativecommons.org/licenses/by-fr/2.0/kr/&quot; /&gt;
		&lt;/Work&gt;
		&lt;License rdf:about=&quot;http://creativecommons.org/licenses/by-fr/&quot;&gt;
			&lt;permits rdf:resource=&quot;http://web.resource.org/cc/Reproduction&quot;/&gt;
			&lt;permits rdf:resource=&quot;http://web.resource.org/cc/Distribution&quot;/&gt;
			&lt;requires rdf:resource=&quot;http://web.resource.org/cc/Notice&quot;/&gt;
			&lt;requires rdf:resource=&quot;http://web.resource.org/cc/Attribution&quot;/&gt;
			&lt;permits rdf:resource=&quot;http://web.resource.org/cc/DerivativeWorks&quot;/&gt;
		&lt;/License&gt;
	&lt;/rdf:RDF&gt;
	--&gt;
&lt;/div&gt;
&lt;div class=&quot;another_category another_category_color_gray&quot;&gt;
&lt;h4&gt;'&lt;a href=&quot;/category/My%20Study&quot;&gt;My Study&lt;/a&gt;&amp;nbsp;&gt;&amp;nbsp;&lt;a href=&quot;/category/My%20Study/Programming%26Theory&quot;&gt;Programming&amp;amp;Theory&lt;/a&gt;' 카테고리의 다른 글&lt;/h4&gt;
&lt;table&gt;
&lt;tr&gt;
&lt;th&gt;
&lt;a href=&quot;/353&quot; &gt;SwapContext를 이용한 프로세스 찾기&lt;/a&gt;&amp;nbsp;&amp;nbsp;&lt;span&gt;(7)&lt;/span&gt;
&lt;/th&gt;
&lt;td&gt;
2012/01/04&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;th&gt;
&lt;a href=&quot;/352&quot; &gt;Remote Library Injection&lt;/a&gt;&amp;nbsp;&amp;nbsp;&lt;span&gt;(4)&lt;/span&gt;
&lt;/th&gt;
&lt;td&gt;
2011/12/29&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;th&gt;
&lt;a href=&quot;/350&quot; &gt;OpenProcess를 막는 방법은??&lt;/a&gt;&amp;nbsp;&amp;nbsp;&lt;span&gt;(11)&lt;/span&gt;
&lt;/th&gt;
&lt;td&gt;
2011/12/20&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;th&gt;
&lt;a href=&quot;/348&quot; &gt;Immunity Debugger Hard Hooking&lt;/a&gt;&amp;nbsp;&amp;nbsp;&lt;span&gt;(2)&lt;/span&gt;
&lt;/th&gt;
&lt;td&gt;
2011/12/08&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;th&gt;
&lt;a href=&quot;/347&quot; &gt;ScreenSaver 만들어보기&lt;/a&gt;&amp;nbsp;&amp;nbsp;&lt;span&gt;(3)&lt;/span&gt;
&lt;/th&gt;
&lt;td&gt;
2011/11/30&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;th&gt;
&lt;a href=&quot;/346&quot; &gt;API vs MFC&lt;/a&gt;&amp;nbsp;&amp;nbsp;&lt;span&gt;(1)&lt;/span&gt;
&lt;/th&gt;
&lt;td&gt;
2011/11/30&lt;/td&gt;
&lt;/tr&gt;
&lt;/table&gt;&lt;/div&gt;</description>
			<category>Programming&amp;Theory</category>
			<category>ClientId</category>
			<category>CreateToolhelp32Snapshot</category>
			<category>EPROCESS</category>
			<category>FindWindow</category>
			<category>getcurrentprocessid</category>
			<category>Kernel</category>
			<category>OpenProcess</category>
			<category>PID</category>
			<category>Process32First</category>
			<category>Process32Next</category>
			<category>processid</category>
			<category>TEB</category>
			<category>UniqueProcessId</category>
			<category>ZwOpenProcess</category>
			<author>Ezbeat</author>
			<guid>http://ezbeat.tistory.com/350</guid>
			<comments>http://ezbeat.tistory.com/350#entry350comment</comments>
			<pubDate>Tue, 20 Dec 2011 03:34:45 +0900</pubDate>
		</item>
		<item>
			<title>해피캠퍼스는 멍청해!!</title>
			<link>http://ezbeat.tistory.com/349</link>
			<description>&lt;font class=&quot;Apple-style-span&quot; color=&quot;#000000&quot;&gt;제가 인터넷 서핑 중 해피캠퍼스에 자료를 올려서 용돈벌이를 하고 있다는 학생의 글을 보고&amp;nbsp;&lt;/font&gt;&lt;br /&gt;
&lt;font class=&quot;Apple-style-span&quot; color=&quot;#000000&quot;&gt;&quot;오 ~ 나도 한번??&quot;&lt;/font&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;font class=&quot;Apple-style-span&quot; color=&quot;#000000&quot;&gt;이라는 생각을 가지고 뭘 한번 올려볼까.. 하고 하드를 뒤져보았다.&lt;/font&gt;&lt;br /&gt;
&lt;font class=&quot;Apple-style-span&quot; color=&quot;#000000&quot;&gt;일단 테스트로 올려볼 것이기 때문에 예전에 간단히 짜본 음악 플레이어 소스코드를 올려보았다.&lt;/font&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;font class=&quot;Apple-style-span&quot; color=&quot;#000000&quot;&gt;해당 코드는 당연히 유니코드 기반 코드였고 내부적으로 한글을 써야했기 때문에&lt;/font&gt;&lt;br /&gt;
&lt;b&gt;&lt;font class=&quot;Apple-style-span&quot; color=&quot;#3058d2&quot;&gt;_wsetlocale&lt;/font&gt;&lt;font class=&quot;Apple-style-span&quot; color=&quot;#000000&quot;&gt;(LC_ALL,_T(&quot;korean&quot;));&lt;/font&gt;&lt;/b&gt;&lt;br /&gt;
&lt;font class=&quot;Apple-style-span&quot; color=&quot;#000000&quot;&gt;이 함수 또한 사용해 주었다..&lt;/font&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;font class=&quot;Apple-style-span&quot; color=&quot;#000000&quot;&gt;해당 함수는 &lt;/font&gt;&lt;font class=&quot;Apple-style-span&quot; color=&quot;#3058d2&quot;&gt;wprintf&lt;/font&gt;&lt;font class=&quot;Apple-style-span&quot; color=&quot;#000000&quot;&gt;, &lt;/font&gt;&lt;font class=&quot;Apple-style-span&quot; color=&quot;#3058d2&quot;&gt;fputws&lt;/font&gt;&lt;font class=&quot;Apple-style-span&quot; color=&quot;#000000&quot;&gt;와 같은 함수들을 통해서 유니코드 기반으로 한글을 출력하고 싶을 때 사용하는 함수;;&lt;/font&gt;&lt;br /&gt;
&lt;font class=&quot;Apple-style-span&quot; color=&quot;#000000&quot;&gt;무튼..&lt;/font&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;font class=&quot;Apple-style-span&quot; color=&quot;#000000&quot;&gt;고로 당연히 컴파일도&amp;nbsp;&lt;/font&gt;&lt;br /&gt;
&lt;font class=&quot;Apple-style-span&quot; color=&quot;#000000&quot;&gt;&amp;nbsp;&lt;div class=&quot;imageblock&quot; style=&quot;display:inline;&quot;&gt;&lt;a href=&quot;http://cfile10.uf.tistory.com/original/175C734A4EE09D8E09D2BD&quot; rel=&quot;lightbox&quot; target=&quot;_blank&quot;&gt;&lt;img src=&quot;http://cfile10.uf.tistory.com/image/175C734A4EE09D8E09D2BD&quot; alt=&quot;&quot; filemime=&quot;image/jpeg&quot; filename=&quot;사용자 지정 7.jpg&quot; height=&quot;90&quot; width=&quot;609&quot;/&gt;&lt;/a&gt;&lt;/div&gt;&lt;/font&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;font class=&quot;Apple-style-span&quot; color=&quot;#000000&quot;&gt;이렇게 유니코드 문자 집합 사용으로 해주어야한다. 이건 뭐 VS 디폴트 옵션이다.&lt;/font&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;font class=&quot;Apple-style-span&quot; color=&quot;#000000&quot;&gt;컴파일 결과.. 당연히&lt;/font&gt;&lt;b&gt;&lt;font class=&quot;Apple-style-span&quot; color=&quot;#e31600&quot;&gt; error - 0, warning - 0&lt;/font&gt;&lt;/b&gt;&lt;font class=&quot;Apple-style-span&quot; color=&quot;#000000&quot;&gt;.. &amp;nbsp;&lt;/font&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;font class=&quot;Apple-style-span&quot; color=&quot;#000000&quot;&gt;&amp;nbsp;다음날.. 해피캠퍼스에서 메일이 왔다... 두근! 등록이 됬구나!..?!&lt;/font&gt;&lt;br /&gt;
&lt;font class=&quot;Apple-style-span&quot; color=&quot;#000000&quot;&gt;&amp;nbsp;&lt;div class=&quot;imageblock&quot; style=&quot;display:inline;&quot;&gt;&lt;a href=&quot;http://cfile24.uf.tistory.com/original/205BE64E4EE09E6D313C6D&quot; rel=&quot;lightbox&quot; target=&quot;_blank&quot;&gt;&lt;img src=&quot;http://cfile24.uf.tistory.com/image/205BE64E4EE09E6D313C6D&quot; alt=&quot;&quot; filemime=&quot;image/jpeg&quot; filename=&quot;사용자 지정 8.jpg&quot; height=&quot;202&quot; width=&quot;683&quot;/&gt;&lt;/a&gt;&lt;/div&gt;&lt;/font&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;font class=&quot;Apple-style-span&quot; color=&quot;#000000&quot;&gt;??????????????? 허얼?&lt;/font&gt;&lt;br /&gt;
&lt;font class=&quot;Apple-style-span&quot; color=&quot;#000000&quot;&gt;저 오류는... 문자 집합을 멀티바이트 문자 집합 사용을 했을 때.. 나는 오류.. 당연히 자료형이 맞지 않아 날수밖에 없는 오류!&lt;/font&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;font class=&quot;Apple-style-span&quot; color=&quot;#000000&quot;&gt;해피캠퍼스에서는 코드를 돌릴 때 그냥 기계가 돌리는 것일까요? 사람이 Ctrl + C, V를 사용해 컴파일러에서 돌리는 것일까요?? ... 이런건 알바생 쓰겠죠??..&lt;/font&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;font class=&quot;Apple-style-span&quot; color=&quot;#000000&quot;&gt;너무 한거 아닌가요?ㅠㅠ &amp;nbsp;&lt;/font&gt;&lt;div class=&quot;entry-ccl&quot; style=&quot;clear: both; text-align: right; margin-bottom: 10px&quot;&gt;
	&lt;img id=&quot;ccl-icon-349-0&quot; class=&quot;entry-ccl-by&quot; src=&quot;http://i1.daumcdn.net/cfs.tistory/v/0/static/admin/editor/ccl_black01.png&quot; alt=&quot;저작자 표시&quot;/&gt;
	&lt;!--
	&lt;rdf:RDF xmlns=&quot;http://web.resource.org/cc/&quot; xmlns:dc=&quot;http://purl.org/dc/elements/1.1/&quot; xmlns:rdf=&quot;http://www.w3.org/1999/02/22-rdf-syntax-ns#&quot;&gt;
		&lt;Work rdf:about=&quot;&quot;&gt;
			&lt;license rdf:resource=&quot;http://creativecommons.org/licenses/by-fr/2.0/kr/&quot; /&gt;
		&lt;/Work&gt;
		&lt;License rdf:about=&quot;http://creativecommons.org/licenses/by-fr/&quot;&gt;
			&lt;permits rdf:resource=&quot;http://web.resource.org/cc/Reproduction&quot;/&gt;
			&lt;permits rdf:resource=&quot;http://web.resource.org/cc/Distribution&quot;/&gt;
			&lt;requires rdf:resource=&quot;http://web.resource.org/cc/Notice&quot;/&gt;
			&lt;requires rdf:resource=&quot;http://web.resource.org/cc/Attribution&quot;/&gt;
			&lt;permits rdf:resource=&quot;http://web.resource.org/cc/DerivativeWorks&quot;/&gt;
		&lt;/License&gt;
	&lt;/rdf:RDF&gt;
	--&gt;
&lt;/div&gt;
&lt;div class=&quot;another_category another_category_color_gray&quot;&gt;
&lt;h4&gt;'&lt;a href=&quot;/category/RestRoom&quot;&gt;RestRoom&lt;/a&gt;&amp;nbsp;&gt;&amp;nbsp;&lt;a href=&quot;/category/RestRoom/Routine&quot;&gt;Routine&lt;/a&gt;' 카테고리의 다른 글&lt;/h4&gt;
&lt;table&gt;
&lt;tr&gt;
&lt;th&gt;
&lt;a href=&quot;/356&quot; &gt;몸도 마음도 정화하리..?&lt;/a&gt;&amp;nbsp;&amp;nbsp;&lt;span&gt;(2)&lt;/span&gt;
&lt;/th&gt;
&lt;td&gt;
2012/01/19&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;th&gt;
&lt;a href=&quot;/351&quot; &gt;2011 KUCIS 최우수동아리 &amp;amp; 기술문서 부분 최우수상&lt;/a&gt;&amp;nbsp;&amp;nbsp;&lt;span&gt;(0)&lt;/span&gt;
&lt;/th&gt;
&lt;td&gt;
2011/12/21&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;th&gt;
&lt;a href=&quot;/349&quot; &gt;해피캠퍼스는 멍청해!!&lt;/a&gt;&amp;nbsp;&amp;nbsp;&lt;span&gt;(2)&lt;/span&gt;
&lt;/th&gt;
&lt;td&gt;
2011/12/08&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;th&gt;
&lt;a href=&quot;/345&quot; &gt;ATmega128 LCD password 실험&lt;/a&gt;&amp;nbsp;&amp;nbsp;&lt;span&gt;(0)&lt;/span&gt;
&lt;/th&gt;
&lt;td&gt;
2011/11/17&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;th&gt;
&lt;a href=&quot;/325&quot; &gt;2011년 5월 21일(토) KUCIS 호남권역 정보보호 세미나&lt;/a&gt;&amp;nbsp;&amp;nbsp;&lt;span&gt;(4)&lt;/span&gt;
&lt;/th&gt;
&lt;td&gt;
2011/05/19&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;th&gt;
&lt;a href=&quot;/324&quot; &gt;2011년 5월 14일(토) 서울여자대학교 제 12회 U3 정기 워크샵&lt;/a&gt;&amp;nbsp;&amp;nbsp;&lt;span&gt;(2)&lt;/span&gt;
&lt;/th&gt;
&lt;td&gt;
2011/05/19&lt;/td&gt;
&lt;/tr&gt;
&lt;/table&gt;&lt;/div&gt;</description>
			<category>Routine</category>
			<category>char</category>
			<category>wchar</category>
			<category>너무해</category>
			<category>멀티바이트</category>
			<category>멍청해</category>
			<category>유니코드</category>
			<category>해피캠퍼스</category>
			<author>Ezbeat</author>
			<guid>http://ezbeat.tistory.com/349</guid>
			<comments>http://ezbeat.tistory.com/349#entry349comment</comments>
			<pubDate>Thu, 08 Dec 2011 20:27:43 +0900</pubDate>
		</item>
		<item>
			<title>Immunity Debugger Hard Hooking</title>
			<link>http://ezbeat.tistory.com/348</link>
			<description>&lt;font class=&quot;Apple-style-span&quot; color=&quot;#000000&quot;&gt;일반적으로 hard 후킹하면 다들 생각하고 있는 것이 있죠. 맞습니다.&lt;br /&gt;
&lt;br /&gt;
만약 kernel32.dll의 WinExec 함수를 하드후킹한다면 해당 함수 내부의 코드 5Byte를 jmp코드로 바꾸죠.&lt;br /&gt;
그리고 응용 프로그램에서 해당 함수가 호출되면 제가 만든 루틴으로 jmp문을 타고 들어오게 됩니다.&lt;br /&gt;
이 때부터 전 파라미터를 조작해버릴수도 있고 리턴 값을 조작해버릴 수도 있습니다.&lt;br /&gt;
&lt;br /&gt;
예전엔 이 과정을 C로 테스팅해보고 실제로 사용도 해봤습니다.&lt;br /&gt;
만약&lt;/font&gt;&lt;font class=&quot;Apple-style-span&quot; color=&quot;#e31600&quot;&gt; explorer.exe의 LoadLibrary 함수의 파라미터를 모니터링 할 때 순서&lt;/font&gt;&lt;font class=&quot;Apple-style-span&quot; color=&quot;#000000&quot;&gt;입니다.&lt;br /&gt;
&lt;br /&gt;
&lt;b&gt;
1. LoadLibrary를 하드후킹하는 코드를 작성하고 dll로 만든다.&lt;br /&gt;
2. dll injection을 사용해 해당 dll을 explorer.exe 프로세스에 injection한다.&lt;br /&gt;
3. 후킹이 성공되고 explorer에서 LoadLibrary가 호출 됬을 때 &lt;br /&gt;
&amp;nbsp; &amp;nbsp; dll 내부 Hook루틴에서는 파라미터들 값을 낚아챈다.&lt;br /&gt;
4. 낚아챈 값을 파일로 저장하거나 파이프 통신을 사용해 내 프로세스에서 그 결과를 출력한다.&lt;/b&gt;&lt;br /&gt;
&lt;br /&gt;
이런식으로 작동하게 되죠.&lt;br /&gt;
&lt;br /&gt;
하지만 이번엔&lt;/font&gt;&lt;font class=&quot;Apple-style-span&quot; color=&quot;#e31600&quot;&gt; Immunity Debugger에서 python 스크립트를 사용해 디버깅 중 하드후킹을 수행해 특정 함수의 인자를 모니터링 해보는 것&lt;/font&gt;&lt;font class=&quot;Apple-style-span&quot; color=&quot;#000000&quot;&gt;입니다. &lt;br /&gt;
&lt;br /&gt;
&lt;/font&gt;&lt;p id=&quot;more348_0&quot; class=&quot;moreless_fold&quot;&gt;&lt;span style=&quot;cursor: pointer;&quot; onclick=&quot;toggleMoreLess(this, '348_0','독백','접기'); return false;&quot;&gt;독백&lt;/span&gt;&lt;/p&gt;&lt;div id=&quot;content348_0&quot; class=&quot;moreless_content&quot; style=&quot;display: none;&quot;&gt;&lt;p style=&quot;margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; &quot;&gt;&lt;font class=&quot;Apple-style-span&quot; color=&quot;#000000&quot;&gt;&amp;nbsp;사실 요새 python을 공부해보고 있는 중입니다. 제가 정말 제대로 할줄 아는 언어가 C언어 말고는 없는것 같더군요. 그래서 무언가 하나라도 더 완벽하게 언어를 익히자라는 마음으로 시작해본 것이 python입니다. 제가 처음으로 python을 접해본 것이 wikidocs에서 &quot;점프 투 파이썬&quot; 을 읽어보며 공부했던것 뿐이고 실제로 적용해본 곳은 해킹대회에서 였습니다. 몇몇 해킹대회는 CTF(Capture The Flag) 방식으로 대회가 진행되는데 이때 특정 프로그램(데몬..)을 분석해 취약점을 찾아내고 해당 취약점을 공격하기 위한 payload를 작성해 상대 서버의 쉘을 따내야하는 것입니다. 이 때 payload를 작성 시 C로 하려니까 뭔가 코드 양도 많지고 복잡해지는 것 같더군요. 하지만 python으로 해보니 정말 쉽게 됬다는 것입니다.. 이때는 쫌 해킹대회만을 위한 python을 했지만 이제는 모든 개발을 python으로 해볼 생각입니다. ( C를 버리겠다는건 아니구요.. ㅎ ) 지금도 늦었지만 늦었다고 생각할 때 무언가를 또 시작해봐야겠더군요. 열혈강의 책도 샀구요 ㅠ_ㅠ.. 초보초보.. 앞으로 블로깅을 계속해 프로그래밍 글을 올릴 때면 되도록 python으로 올려야겠습니다.&lt;br /&gt;
&amp;nbsp;C로는 음악 플레이어, ODBC 연동한 관리 시스템, 커널 필터 드라이버를 사용한 키로거, 파일 시스템 필터 드라이버, 각종 해킹대회 문제출제, 간단한 디버거, File Carving Tool, 키젠, 스크린세이버, 바이러스 등등 다 만들어봤지만.. 이제 이런것들을 python으로..하려면..?! ㅠㅠ 언어에 익숙해지면 빨리 해볼수 있겠죠?? ^^? 그날을 꿈꾸며.. 열공하겠습니다.&lt;/font&gt;&lt;/p&gt;
&lt;/div&gt;
&lt;br /&gt;
&lt;font class=&quot;Apple-style-span&quot; color=&quot;#e31600&quot;&gt;&lt;b&gt;
Immunity Debugger에서는 immlib라는 아주 좋은 라이브러리를 제공&lt;/b&gt;&lt;/font&gt;&lt;font class=&quot;Apple-style-span&quot; color=&quot;#000000&quot;&gt;해주는데 해당 라이브러리를 사용하면 짧은 코드로 후킹 작업을 할 수 있습니다. 일단 구현은 &quot;파이썬 해킹 프로그래밍&quot; 책을 보면서 구현해 보았고 후킹되는 함수는 달리해보았습니다.&lt;/font&gt;&lt;br /&gt;
&lt;font class=&quot;Apple-style-span&quot; color=&quot;#000000&quot;&gt;
&amp;nbsp;&lt;/font&gt;&lt;br /&gt;
&lt;font class=&quot;Apple-style-span&quot; color=&quot;#000000&quot;&gt;
&amp;nbsp;&lt;div class=&quot;imageblock&quot; style=&quot;display:inline;&quot;&gt;&lt;a href=&quot;http://cfile24.uf.tistory.com/original/19499A3A4EE05737215089&quot; rel=&quot;lightbox&quot; target=&quot;_blank&quot;&gt;&lt;img src=&quot;http://cfile24.uf.tistory.com/image/19499A3A4EE05737215089&quot; alt=&quot;&quot; filemime=&quot;image/jpeg&quot; filename=&quot;사용자 지정 1.jpg&quot; height=&quot;465&quot; width=&quot;548&quot;/&gt;&lt;/a&gt;&lt;/div&gt;&lt;/font&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;font class=&quot;Apple-style-span&quot; color=&quot;#000000&quot;&gt;
Immunity Debugger를 보면 아래 command 창이 있습니다. 해당 창에서 windbg 명령어도 사용이 가능하며&lt;/font&gt;&lt;br /&gt;
&lt;font class=&quot;Apple-style-span&quot; color=&quot;#000000&quot;&gt;
위 그림과 같이 ! 를 붙히면 \PyCommands 폴더에 있는 python 스크립트를 실행할 수 있습니다. ( py 빼고 입력 )&lt;/font&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;font class=&quot;Apple-style-span&quot; color=&quot;#000000&quot;&gt;
이제 ezbeat.py 코드를 보기전에&amp;nbsp;&lt;/font&gt;&lt;br /&gt;
&lt;font class=&quot;Apple-style-span&quot; color=&quot;#000000&quot;&gt;
후킹 당할 프로그램 코드와 ( C언어 ..-_-; 방금 위에서 말해놓고!! ) 후킹 결과화면을 보겠습니다.&lt;/font&gt;&lt;br /&gt;
&lt;font class=&quot;Apple-style-span&quot; color=&quot;#000000&quot;&gt;
후킹은 WinExec 함수를 후킹하였고 모니터링 할 값은 파라미터 2개와 리턴 값입니다.&lt;/font&gt;&lt;br /&gt;
&lt;font class=&quot;Apple-style-span&quot; color=&quot;#000000&quot;&gt;
&amp;nbsp;&lt;/font&gt;&lt;br /&gt;
&lt;font class=&quot;Apple-style-span&quot; color=&quot;#000000&quot;&gt;&lt;div class=&quot;imageblock&quot; style=&quot;display:inline;&quot;&gt;&lt;a href=&quot;http://cfile21.uf.tistory.com/original/1208454A4EE05FFB3CB882&quot; rel=&quot;lightbox&quot; target=&quot;_blank&quot;&gt;&lt;img src=&quot;http://cfile21.uf.tistory.com/image/1208454A4EE05FFB3CB882&quot; alt=&quot;&quot; filemime=&quot;image/jpeg&quot; filename=&quot;사용자 지정 3.jpg&quot; height=&quot;277&quot; width=&quot;367&quot;/&gt;&lt;/a&gt;&lt;/div&gt;&amp;nbsp;&lt;/font&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;font class=&quot;Apple-style-span&quot; color=&quot;#000000&quot;&gt;
단순히 계산기와 메모장 하나씩 각각 다른 속성으로 띄워주는 프로그램입니다.&amp;nbsp;&lt;/font&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;font class=&quot;Apple-style-span&quot; color=&quot;#e31600&quot;&gt;
실행 순서&lt;/font&gt;&lt;br /&gt;
&lt;b style=&quot;color: rgb(0, 0, 0); &quot;&gt;
1. 위 프로그램 Immunity Debugger에 붙힘&lt;br /&gt;
2. ezbeat.py 실행&lt;br /&gt;
3. 프로그램 실행&lt;br /&gt;
4. ezbeat.py 실행&lt;br /&gt;
5. log창 확인&lt;/b&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;font class=&quot;Apple-style-span&quot; color=&quot;#000000&quot;&gt;
해당 프로그램을 Immunity Debugger에 붙히고 ezbeat.py를 돌린 후 실행시켜보겠습니다.&lt;/font&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;font class=&quot;Apple-style-span&quot; color=&quot;#000000&quot;&gt;&lt;div class=&quot;imageblock&quot; style=&quot;display:inline;&quot;&gt;&lt;a href=&quot;http://cfile8.uf.tistory.com/original/147DAF3B4EE061652F7236&quot; rel=&quot;lightbox&quot; target=&quot;_blank&quot;&gt;&lt;img src=&quot;http://cfile8.uf.tistory.com/image/147DAF3B4EE061652F7236&quot; alt=&quot;&quot; filemime=&quot;image/jpeg&quot; filename=&quot;사용자 지정 4.jpg&quot; height=&quot;47&quot; width=&quot;162&quot;/&gt;&lt;/a&gt;&lt;/div&gt;&lt;/font&gt;&lt;br /&gt;
&lt;font class=&quot;Apple-style-span&quot; color=&quot;#000000&quot;&gt;
성공적으로 후킹이 되었습니다.&lt;/font&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;font class=&quot;Apple-style-span&quot; color=&quot;#000000&quot;&gt;&lt;div class=&quot;imageblock&quot; style=&quot;display:inline;&quot;&gt;&lt;a href=&quot;http://cfile22.uf.tistory.com/original/146142394EE08A2322A354&quot; rel=&quot;lightbox&quot; target=&quot;_blank&quot;&gt;&lt;img src=&quot;http://cfile22.uf.tistory.com/image/146142394EE08A2322A354&quot; alt=&quot;&quot; filemime=&quot;image/jpeg&quot; filename=&quot;사용자 지정 5.jpg&quot; height=&quot;45&quot; width=&quot;348&quot;/&gt;&lt;/a&gt;&lt;/div&gt;&lt;/font&gt;&lt;br /&gt;
&lt;font class=&quot;Apple-style-span&quot; color=&quot;#000000&quot;&gt;
log창을 확인 결과입니다.&lt;/font&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;font class=&quot;Apple-style-span&quot; color=&quot;#000000&quot;&gt;
훅이 2번 걸렸고 각각의 인자들은 저렇습니다.&lt;/font&gt;&lt;br /&gt;
&lt;font class=&quot;Apple-style-span&quot; color=&quot;#000000&quot;&gt;
그런데 첫번째 호출됬을 때 두번째 인자로 SW_NORMAL(0x01) 을 주었는데 왜 0x00으로 나왔냐..라고 궁금해하실 분들도 계실탠데.. 저도 왜 저런가 궁금해서 WinExec 함수 내부를 봐봤더니&amp;nbsp;&lt;/font&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;font class=&quot;Apple-style-span&quot; color=&quot;#000000&quot;&gt;&lt;div class=&quot;imageblock&quot; style=&quot;display:inline;&quot;&gt;&lt;a href=&quot;http://cfile26.uf.tistory.com/original/136F03404EE08AEA374228&quot; rel=&quot;lightbox&quot; target=&quot;_blank&quot;&gt;&lt;img src=&quot;http://cfile26.uf.tistory.com/image/136F03404EE08AEA374228&quot; alt=&quot;&quot; filemime=&quot;image/jpeg&quot; filename=&quot;사용자 지정 6.jpg&quot; height=&quot;591&quot; width=&quot;548&quot;/&gt;&lt;/a&gt;&lt;/div&gt;&amp;nbsp;&lt;/font&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;font class=&quot;Apple-style-span&quot; color=&quot;#000000&quot;&gt;
저 부분에서 두번째 인자가 1일경우 점프를 하게 되고 &quot;EBP+0xC&quot; 자리에 ESI(0x00) 값으로 채워지는 것을 확인했습니다.&lt;/font&gt;&lt;br /&gt;
&lt;font class=&quot;Apple-style-span&quot; color=&quot;#000000&quot;&gt;
그냥 그런가보다 하고 넘어가주세요...;;&amp;nbsp;&lt;/font&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;font class=&quot;Apple-style-span&quot; color=&quot;#000000&quot;&gt;
이제&lt;/font&gt;&lt;b&gt;&lt;font class=&quot;Apple-style-span&quot; color=&quot;#e31600&quot;&gt; ezbeat.py 코드&lt;/font&gt;&lt;/b&gt;&lt;font class=&quot;Apple-style-span&quot; color=&quot;#000000&quot;&gt;를 보겠습니다.&lt;/font&gt;&lt;br /&gt;
&lt;textarea name=&quot;code&quot; class=&quot;cpp&quot; cols=&quot;60&quot; rows=&quot;10&quot; style=&quot;color: rgb(0, 0, 0); &quot;&gt;# -*- coding: utf-8 -*-

from immlib import *
from libhook import *

# 후킹하기 위해 해당 함수의 ret 명령의 주소를 찾아준다.
def getRet(imm, allocaddr, max_opcodes = 500):
    addr = allocaddr

    for a in range(0, max_opcodes):        
        # addr에 있는 값을 디스 어셈, 그 다음에  opCode 클래스에서 get 함수를 사용해 얻는 값은 다음 명령어 값
        op = imm.disasmForward( addr , 1 )  
        
        # 그 다음 명령어가 &quot;RETN&quot; 인지 체크
        if op.getDisasm().find(&quot;RETN&quot;) != -1:
            op = imm.disasmBackward( addr, 3)
            return op.getAddress()  # 맞으면 그 주소 리턴
            
        addr = op.getAddress()
        
    return 0x00

def main(args):
    imm = Debugger()
    Name = &quot;ezbeat&quot;
    
    # knowledge DB에서 Name 객체를 얻는다.
    fast = imm.getKnowledge(Name)
    
    # 얻기를 성공하면.. = 이미 후킹이 되어 있다면
    if fast:
        # 후킹 함수가 호출돼 로깅 함수들이 호출되면 로깅 함수는 FastLogHook 객체가 만든 메모리 영역에 로깅한 정보를 저장한다.
        # 저장된 로깅 정보를 보려면 getAlloLog() 래퍼 함수를 이용.
        # getAlloLog() 함수는 메모리의 내용을 파싱해 다음과 같은 형태의 파이썬 리스트를 반환
        # [(hook_address, (arg1,arg2,argN)), ... ]
        # list[0][0] =&amp;gt; 후킹 된 주소
        # list[0][1][0] =&amp;gt; arg1
        hook_list = fast.getAllLog()
        
        # 후킹된 함수의 주소를 얻어옴
        FuncRetAddr = imm.getKnowledge(&quot;HookFuncNames&quot;)     
        count = 0
        
        for a in hook_list:
            imm.log(&quot;WinExec(0x%08x,0x%08x) - ret : 0x%08x&quot; % 
                    (hook_list[count][1][0],
                     hook_list[count][1][1],
                     hook_list[count][1][2]),
                    hook_list[count][0])
            
            count += 1

        return &quot;[*] Hook hit Num : %d&quot; % len(hook_list)
        
        
    # 실질적인 후킹 설정 작업을 진행하기 전에 디버거를 일시 정지 시킨다.
    imm.pause()
    FuncAddr = imm.getAddress(&quot;kernel32.WinExec&quot;)
    
    # 모듈 정보를 얻음
    module = imm.getModule(&quot;kernel32.dll&quot;)
    
    # 모듈이 분석되지 않았으면 분석함
    if not module.isAnalysed():
        imm.analyseCode(module.getCodebase())
    
    FuncRetAddr = getRet(imm,FuncAddr)
    #imm.log(&quot;RET address : 0x%08x&quot; % FuncRetAddr)
    
    # knowledge DB에 후킹할 주소를 넣는다.
    imm.addKnowledge(&quot;HookFuncNames&quot;, FuncRetAddr)
    
    # 이제 실질적인 후킹 설정 작업을 수행한다. stdcall 함수 cdecl은 STDCALL 뺌
    fast = STDCALLFastLogHook(imm)
    
    imm.log(&quot;Logging on WinExec 0x%08x&quot; % FuncRetAddr)
    fast.logFunction(FuncRetAddr)   # 원래의 명령을 점프 코드로 덮음
    
    &quot;&quot;&quot;
    fast.logRegister(register)      # 후킹 함수가 호출됐을 때 특정 레지스터의 값을 살펴볼 수 있음
    fast.logDirectMemory(address)   # 후킹 함수가 호출됐을 때 특정 메모리 주소의 데이터를 살펴볼 때 사용
    fast.logBaseDisplacement(register,offset)   # 스택의 파라미터 값을 참조하거나 레지스터로부터 특정 오프셋만큼 떨어진 곳의 데이터를 살펴볼 때 사용
    &quot;&quot;&quot;
    
    # ret직전의 부근에서 후킹하기 때문에 EAX에는 리턴 값이 들어가 있고
    # 함수 프롤로그는 했지만 JMP문에 의해 LEAVE가 사라져서 에필로그는 실행 안된 상태
    fast.logBaseDisplacement(&quot;EBP&quot;,8)       # 첫번째 인자
    fast.logBaseDisplacement(&quot;EBP&quot;,0xC)     # 두번째 인자
    fast.logRegister(&quot;EAX&quot;)                 # 리턴 값
    
    # 후킹 설정
    fast.Hook()
    
    # 이후에 후킹 결과를 얻기 위해 후킹 객체를 저장한다.
    imm.addKnowledge(Name, fast, force_add = 1)   
    
    return &quot;[*] Success Hooked&quot;
&lt;/textarea&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;font class=&quot;Apple-style-span&quot; color=&quot;#000000&quot;&gt;주석은 최대한 자세히 달아보았습니다.&amp;nbsp;&lt;/font&gt;&lt;br /&gt;
&lt;font class=&quot;Apple-style-span&quot; color=&quot;#000000&quot;&gt;
immlib 나 각 라이브러리에 있는 자세한 함수 설명은&lt;/font&gt;&lt;br /&gt;
&lt;font class=&quot;Apple-style-span&quot; color=&quot;#193da9&quot;&gt;&lt;a href=&quot;http://debugger.immunityinc.com/Documentation/&quot; target=&quot;_blank&quot; title=&quot;[http://debugger.immunityinc.com/Documentation/]로 이동합니다.&quot;&gt;http://debugger.immunityinc.com/Documentation/&lt;/a&gt;&amp;nbsp;&lt;/font&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;font class=&quot;Apple-style-span&quot; color=&quot;#000000&quot;&gt;이쪽으로 가시면 더욱 자세히 볼 수 있습니다.&lt;br /&gt;
&lt;br /&gt;이제 후킹 된 실제 어셈 코드를 봐보도록 하겠습니다.&amp;nbsp;&lt;br /&gt;
WinExec 후킹 전 코드 일부분입니다.&lt;br /&gt;
&lt;div class=&quot;imageblock&quot; style=&quot;display:inline;&quot;&gt;&lt;a href=&quot;http://cfile6.uf.tistory.com/original/12172C3B4EE0D92D333A82&quot; rel=&quot;lightbox&quot; target=&quot;_blank&quot;&gt;&lt;img src=&quot;http://cfile6.uf.tistory.com/image/12172C3B4EE0D92D333A82&quot; alt=&quot;&quot; filemime=&quot;image/jpeg&quot; filename=&quot;사용자 지정 1.jpg&quot; height=&quot;181&quot; width=&quot;529&quot;/&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;
&lt;br /&gt;후킹 후 코드 일부분입니다.&lt;br /&gt;
&lt;div class=&quot;imageblock&quot; style=&quot;display:inline;&quot;&gt;&lt;a href=&quot;http://cfile22.uf.tistory.com/original/1928B83B4EE0D92D244160&quot; rel=&quot;lightbox&quot; target=&quot;_blank&quot;&gt;&lt;img src=&quot;http://cfile22.uf.tistory.com/image/1928B83B4EE0D92D244160&quot; alt=&quot;&quot; filemime=&quot;image/jpeg&quot; filename=&quot;사용자 지정 2.jpg&quot; height=&quot;136&quot; width=&quot;528&quot;/&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;
잘 비교해 보시면 어떤 부분이 달라졌는지 알 수 있습니다.&lt;br /&gt;
원본 코드는 어디로..?;; 일단 JMP문을 따라 들어가보겠습니다.&lt;br /&gt;
&lt;br /&gt;&lt;div class=&quot;imageblock&quot; style=&quot;display:inline;&quot;&gt;&lt;a href=&quot;http://cfile29.uf.tistory.com/original/113A843F4EE0DC121674D3&quot; rel=&quot;lightbox&quot; target=&quot;_blank&quot;&gt;&lt;img src=&quot;http://cfile29.uf.tistory.com/image/113A843F4EE0DC121674D3&quot; alt=&quot;&quot; filemime=&quot;image/jpeg&quot; filename=&quot;사용자 지정 4.jpg&quot; height=&quot;423&quot; width=&quot;683&quot;/&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;
&lt;br /&gt;열심히 분석해서 주석을 달아놨습니다.&lt;br /&gt;
즉, 위 코드를 전체적인 그림으로 봐보면&lt;br /&gt;
&lt;div class=&quot;imageblock&quot; style=&quot;display:inline;&quot;&gt;&lt;a href=&quot;http://cfile7.uf.tistory.com/original/1663B8404EE0DD202BC4EE&quot; rel=&quot;lightbox&quot; target=&quot;_blank&quot;&gt;&lt;img src=&quot;http://cfile7.uf.tistory.com/image/1663B8404EE0DD202BC4EE&quot; alt=&quot;&quot; filemime=&quot;image/jpeg&quot; filename=&quot;사용자 지정 5.jpg&quot; height=&quot;574&quot; width=&quot;341&quot;/&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;
여기서 얻을 인자 같은 것은 python코드를 짜는 사람 마음이기 때문에 후킹 코드와 원하는 값 저장할 크기는 유동적입니다.&lt;br /&gt;
그리고 python 코드를 보시면&amp;nbsp;getAllLog() 함수를 사용해 메모리로부터 값을 가져온다고 했는데 바로&lt;br /&gt;
0x00000080위치에서 가져오는 것 입니다. 실제로 저 위치에 있는 리턴 값을 0x64로 바꿔보고 실행해보겠습니다.&lt;br /&gt;
&lt;div class=&quot;imageblock&quot; style=&quot;display:inline;&quot;&gt;&lt;a href=&quot;http://cfile24.uf.tistory.com/original/1850433D4EE0DDB109A4EF&quot; rel=&quot;lightbox&quot; target=&quot;_blank&quot;&gt;&lt;img src=&quot;http://cfile24.uf.tistory.com/image/1850433D4EE0DDB109A4EF&quot; alt=&quot;&quot; filemime=&quot;image/jpeg&quot; filename=&quot;사용자 지정 6.jpg&quot; height=&quot;18&quot; width=&quot;350&quot;/&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;
&lt;br /&gt;그리고 제가 알던 후킹방법하고 다른 점은 JMP로 덮힌 코드를 후킹 코드 내부에서 실행한다는 것입니다.&lt;br /&gt;
음... 나머지는.. 다들 알아서 해보시면 알 수 있을 것입니다. 글을 쓰다 잠시.. 정신놓고 어딜 갔다와서 갑자기 이상하네요.ㅠㅠ&lt;/font&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;font class=&quot;Apple-style-span&quot; color=&quot;#000000&quot;&gt;Immunity 디버거에서 파이썬을 실행시킬 땐 PyCommand를 사용하는데 &lt;/font&gt;&lt;br /&gt;
&lt;font class=&quot;Apple-style-span&quot; color=&quot;#e31600&quot;&gt;
PyCommand를 만들 때 기본적인 템플릿이 존재&lt;/font&gt;&lt;font class=&quot;Apple-style-span&quot; color=&quot;#000000&quot;&gt;합니다.&lt;/font&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;font class=&quot;Apple-style-span&quot; color=&quot;#e31600&quot;&gt;&lt;b&gt;첫번째&lt;/b&gt;는 파라미터를 받아들이는 main()함수를 정의&lt;br /&gt;
&lt;b&gt;
두번째&lt;/b&gt;는 문자열을 리턴해야 한다는 것&lt;/font&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;font class=&quot;Apple-style-span&quot; color=&quot;#000000&quot;&gt;위 코드를 잘보면 main함수의 인자로 받을 수 있게끔 args를 써주었고 리턴도 하고 있는 것을 볼 수 있다.&lt;/font&gt;&lt;br /&gt;
&lt;font class=&quot;Apple-style-span&quot; color=&quot;#000000&quot;&gt;
이것을 잘 응용하면 더욱 편하게 디버깅을 할수 있을 것 같네요..&lt;/font&gt;&lt;br /&gt;&lt;div class=&quot;entry-ccl&quot; style=&quot;clear: both; text-align: right; margin-bottom: 10px&quot;&gt;
	&lt;img id=&quot;ccl-icon-348-0&quot; class=&quot;entry-ccl-by&quot; src=&quot;http://i1.daumcdn.net/cfs.tistory/v/0/static/admin/editor/ccl_black01.png&quot; alt=&quot;저작자 표시&quot;/&gt;
	&lt;!--
	&lt;rdf:RDF xmlns=&quot;http://web.resource.org/cc/&quot; xmlns:dc=&quot;http://purl.org/dc/elements/1.1/&quot; xmlns:rdf=&quot;http://www.w3.org/1999/02/22-rdf-syntax-ns#&quot;&gt;
		&lt;Work rdf:about=&quot;&quot;&gt;
			&lt;license rdf:resource=&quot;http://creativecommons.org/licenses/by-fr/2.0/kr/&quot; /&gt;
		&lt;/Work&gt;
		&lt;License rdf:about=&quot;http://creativecommons.org/licenses/by-fr/&quot;&gt;
			&lt;permits rdf:resource=&quot;http://web.resource.org/cc/Reproduction&quot;/&gt;
			&lt;permits rdf:resource=&quot;http://web.resource.org/cc/Distribution&quot;/&gt;
			&lt;requires rdf:resource=&quot;http://web.resource.org/cc/Notice&quot;/&gt;
			&lt;requires rdf:resource=&quot;http://web.resource.org/cc/Attribution&quot;/&gt;
			&lt;permits rdf:resource=&quot;http://web.resource.org/cc/DerivativeWorks&quot;/&gt;
		&lt;/License&gt;
	&lt;/rdf:RDF&gt;
	--&gt;
&lt;/div&gt;
&lt;div class=&quot;another_category another_category_color_gray&quot;&gt;
&lt;h4&gt;'&lt;a href=&quot;/category/My%20Study&quot;&gt;My Study&lt;/a&gt;&amp;nbsp;&gt;&amp;nbsp;&lt;a href=&quot;/category/My%20Study/Programming%26Theory&quot;&gt;Programming&amp;amp;Theory&lt;/a&gt;' 카테고리의 다른 글&lt;/h4&gt;
&lt;table&gt;
&lt;tr&gt;
&lt;th&gt;
&lt;a href=&quot;/352&quot; &gt;Remote Library Injection&lt;/a&gt;&amp;nbsp;&amp;nbsp;&lt;span&gt;(4)&lt;/span&gt;
&lt;/th&gt;
&lt;td&gt;
2011/12/29&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;th&gt;
&lt;a href=&quot;/350&quot; &gt;OpenProcess를 막는 방법은??&lt;/a&gt;&amp;nbsp;&amp;nbsp;&lt;span&gt;(11)&lt;/span&gt;
&lt;/th&gt;
&lt;td&gt;
2011/12/20&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;th&gt;
&lt;a href=&quot;/348&quot; &gt;Immunity Debugger Hard Hooking&lt;/a&gt;&amp;nbsp;&amp;nbsp;&lt;span&gt;(2)&lt;/span&gt;
&lt;/th&gt;
&lt;td&gt;
2011/12/08&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;th&gt;
&lt;a href=&quot;/347&quot; &gt;ScreenSaver 만들어보기&lt;/a&gt;&amp;nbsp;&amp;nbsp;&lt;span&gt;(3)&lt;/span&gt;
&lt;/th&gt;
&lt;td&gt;
2011/11/30&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;th&gt;
&lt;a href=&quot;/346&quot; &gt;API vs MFC&lt;/a&gt;&amp;nbsp;&amp;nbsp;&lt;span&gt;(1)&lt;/span&gt;
&lt;/th&gt;
&lt;td&gt;
2011/11/30&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;th&gt;
&lt;a href=&quot;/344&quot; &gt;Prefix list in executive component&lt;/a&gt;&amp;nbsp;&amp;nbsp;&lt;span&gt;(0)&lt;/span&gt;
&lt;/th&gt;
&lt;td&gt;
2011/09/02&lt;/td&gt;
&lt;/tr&gt;
&lt;/table&gt;&lt;/div&gt;</description>
			<category>Programming&amp;Theory</category>
			<category>addKnowledge</category>
			<category>analyseCode</category>
			<category>FastLogHook</category>
			<category>getAddress</category>
			<category>getAllLog</category>
			<category>getKnowledge</category>
			<category>hard hooking</category>
			<category>immlib</category>
			<category>immunity</category>
			<category>immunity Debugger</category>
			<category>isAnalysed</category>
			<category>libhook</category>
			<category>logBaseDisplacement</category>
			<category>logDirectMemory</category>
			<category>logRegister</category>
			<category>python</category>
			<category>STDCALLFastLogHook</category>
			<author>Ezbeat</author>
			<guid>http://ezbeat.tistory.com/348</guid>
			<comments>http://ezbeat.tistory.com/348#entry348comment</comments>
			<pubDate>Thu, 08 Dec 2011 19:31:40 +0900</pubDate>
		</item>
		<item>
			<title>ScreenSaver 만들어보기</title>
			<link>http://ezbeat.tistory.com/347</link>
			<description>&lt;font class=&quot;Apple-style-span&quot; color=&quot;#000000&quot;&gt;플젝에 치여 이리저리 정신못차리고 있는 와중에 예전부터 한번쯤 만들어보고 싶었던 스크린 세이버 만드는 것을 잠자는 시간을 쪼개 익혀봤습니다. 공부했다고 하는것보단 이건 그냥 방법을 익혔다고 표현하는게 올바를 것 같습니다. ^^;;&lt;br /&gt;
&lt;br /&gt;
API책을 보며 공부했습니다.&lt;br /&gt;
&lt;br /&gt;
스크린 세이버는 컴퓨터를 해보신 분들이라면 누구나 한번쯤은 보신 화면일 것입니다.&lt;br /&gt;
&amp;nbsp;&lt;div class=&quot;imageblock&quot; style=&quot;display:inline;&quot;&gt;&lt;a href=&quot;http://cfile24.uf.tistory.com/original/202406494ED5EA4626B2C7&quot; rel=&quot;lightbox&quot; target=&quot;_blank&quot;&gt;&lt;img src=&quot;http://cfile24.uf.tistory.com/image/202406494ED5EA4626B2C7&quot; alt=&quot;&quot; filemime=&quot;image/jpeg&quot; filename=&quot;sc.jpg&quot; height=&quot;194&quot; width=&quot;259&quot;/&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;
&lt;br /&gt;
익숙하신 화면이죠?? ;;ㅋ&lt;br /&gt;
&lt;br /&gt;
이러한 &lt;/font&gt;&lt;font class=&quot;Apple-style-span&quot; color=&quot;#e31600&quot;&gt;스크린 세이버는 원래 두가지 용도&lt;/font&gt;&lt;font class=&quot;Apple-style-span&quot; color=&quot;#000000&quot;&gt;로 사용이 되었습니다.&lt;br /&gt;
&lt;/font&gt;&lt;div class=&quot;txc-textbox&quot; style=&quot;border-top-style: solid; border-right-style: solid; border-bottom-style: solid; border-left-style: solid; border-top-width: 1px; border-right-width: 1px; border-bottom-width: 1px; border-left-width: 1px; border-top-color: rgb(219, 232, 251); border-right-color: rgb(219, 232, 251); border-bottom-color: rgb(219, 232, 251); border-left-color: rgb(219, 232, 251); background-color: rgb(219, 232, 251); padding-top: 10px; padding-right: 10px; padding-bottom: 10px; padding-left: 10px; &quot;&gt;
&lt;p style=&quot;margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; &quot;&gt;&lt;font class=&quot;Apple-style-span&quot; color=&quot;#000000&quot;&gt;1. 오랫동안 화면이 정지되어 있을 경우 같은 위치에 정적인 그림이 계속 표시되므로써 모니터의 특정 부분만 빨리 손상되는 것을 방지하는 것. 이 기능은 스크린 세이버의 원래적인 용도에 부합되는 기능입니다.&lt;br /&gt;
&lt;br /&gt;
2. 보안상 중요한 정보가 누출되는 것을 방지한다. 작업중 잠시 자리를 비울 경우 작업하던 내용을 누군가가 보거나 또는 파일 등의 정보를 훔쳐갈 수도 있는데 스크린 세이버는 화면을 잠금으로써 정보 누출을 방지하는 것..&lt;/font&gt;&lt;/p&gt;
&lt;/div&gt;
&lt;font class=&quot;Apple-style-span&quot; color=&quot;#000000&quot;&gt;&lt;br /&gt;
하지만 요새는 모니터 성능도 좋아져서 1번 같은 경우의 용도로는 거의 사용이 안됩니다. &lt;br /&gt;
그리고 &lt;/font&gt;&lt;font class=&quot;Apple-style-span&quot; color=&quot;#e31600&quot;&gt;새로운 3번의 기능이 추가&lt;/font&gt;&lt;font class=&quot;Apple-style-span&quot; color=&quot;#000000&quot;&gt;되었죠.&lt;br /&gt;
&lt;/font&gt;&lt;div class=&quot;txc-textbox&quot; style=&quot;border-top-style: solid; border-right-style: solid; border-bottom-style: solid; border-left-style: solid; border-top-width: 1px; border-right-width: 1px; border-bottom-width: 1px; border-left-width: 1px; border-top-color: rgb(219, 232, 251); border-right-color: rgb(219, 232, 251); border-bottom-color: rgb(219, 232, 251); border-left-color: rgb(219, 232, 251); background-color: rgb(219, 232, 251); padding-top: 10px; padding-right: 10px; padding-bottom: 10px; padding-left: 10px; &quot;&gt;
&lt;p style=&quot;margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; &quot;&gt;&lt;font class=&quot;Apple-style-span&quot; color=&quot;#000000&quot;&gt;3. 일부러 모니터를 끄지 않고 자리를 비움으로써 사람들이 자기의 스크린 세이버를 보고 감탄해 하는 기능&lt;/font&gt;&lt;/p&gt;
&lt;/div&gt;
&lt;font class=&quot;Apple-style-span&quot; color=&quot;#000000&quot;&gt;&lt;br /&gt;
제 주위만 해도 이러하신 분들이 수두룩 하시죠. 소녀시대 스크린 세이버부터...ㅎㅎ&lt;br /&gt;
하지만 저는 직접 코딩을 해 나만의 스크린 세이버를 만들어 보고 싶었습니다. 일단 이 글에선 간략한 샘플 코드만 만들어보죠.&lt;br /&gt;
&lt;br /&gt;
스크린 세이버는 OS가 부팅될 때 함께 실행이 된다. 그리고 항상 사용자의 키보드와 마우스를 감시하며 제어판에서 지정한 시간동안 입력이 없을 경우 미리 지정되어 있는 스크린 세이버 애플릿을 실행합니다.&lt;br /&gt;
&lt;/font&gt;&lt;div class=&quot;txc-textbox&quot; style=&quot;text-align: left;border-top-style: solid; border-right-style: solid; border-bottom-style: solid; border-left-style: solid; border-top-width: 1px; border-right-width: 1px; border-bottom-width: 1px; border-left-width: 1px; border-top-color: rgb(254, 222, 199); border-right-color: rgb(254, 222, 199); border-bottom-color: rgb(254, 222, 199); border-left-color: rgb(254, 222, 199); background-color: rgb(254, 222, 199); padding-top: 10px; padding-right: 10px; padding-bottom: 10px; padding-left: 10px; &quot;&gt;
&lt;span class=&quot;Apple-style-span&quot; style=&quot;line-height: 15px; &quot;&gt;&lt;b&gt;&lt;font class=&quot;Apple-style-span&quot; color=&quot;#801fbf&quot;&gt;용어 정리&lt;/font&gt;&lt;/b&gt;&lt;br /&gt;
&lt;font class=&quot;Apple-style-span&quot; color=&quot;#000000&quot;&gt;&lt;b&gt;
스크린 세이버 :&lt;/b&gt; 운영체제의 일부이며 항상 실행상태에서 사용자의 입력을 감시하는 프로그램&lt;/font&gt;&lt;br /&gt;
&lt;font class=&quot;Apple-style-span&quot; color=&quot;#000000&quot;&gt;&lt;b&gt;
스크린 세이버 애플릿 : &lt;/b&gt;스크린 세이버에 의해 호출되는 실행 파일(.scr)&amp;nbsp;&lt;/font&gt;&lt;/span&gt;&lt;/div&gt;
&lt;table width=&quot;100%&quot; border=&quot;0&quot; cellspacing=&quot;0&quot; style=&quot;font-family: Gulim; background-color: rgb(255, 255, 255); &quot;&gt;
&lt;tbody&gt;&lt;tr&gt;
&lt;td valign=&quot;top&quot;&gt;&lt;p align=&quot;left&quot;&gt;&lt;span class=&quot;std&quot; style=&quot;font-family: 굴림; font-size: 9pt; line-height: 1.25; &quot;&gt;&lt;font class=&quot;Apple-style-span&quot; color=&quot;#000000&quot;&gt;&lt;br /&gt;
이러한 &lt;/font&gt;&lt;font class=&quot;Apple-style-span&quot; color=&quot;#e31600&quot;&gt;스크린 세이버 애플릿이 실행이 안되는 경우&lt;/font&gt;&lt;font class=&quot;Apple-style-span&quot; color=&quot;#000000&quot;&gt;가 있습니다.&lt;br /&gt;
&lt;b&gt;
1. 스크린 세이버 애플릿이 지정이 안되었을 경우&lt;br /&gt;
2. 윈도우 기반이 아닌 응용 프로그램이 실행 중일 때&lt;br /&gt;
3. 컴퓨터 교육 프로그램(CBT)이 실행중일 때&lt;br /&gt;
4. 한 프로그램이라도 스크린 세이버의 실행을 거부할 때&lt;/b&gt;&lt;br /&gt;
&lt;br /&gt;
스크린 세이버 애플릿은 스크린 세이버에 의해 실행되며 사용자의 입력이 있으면 즉시 종료된다.&amp;nbsp;&lt;/font&gt;&lt;/span&gt;&lt;/p&gt;
&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;&lt;/table&gt;
&lt;font class=&quot;Apple-style-span&quot; color=&quot;#000000&quot;&gt;
&amp;nbsp;이제 간단한 샘플 코드를 작성해 볼 것인데 다행이도 Windows에서는 참 좋은 라이브러리를 지원해주고 있다.&lt;/font&gt;&lt;br /&gt;
&lt;font class=&quot;Apple-style-span&quot; color=&quot;#000000&quot;&gt;
바로 &quot;&lt;/font&gt;&lt;b&gt;&lt;font class=&quot;Apple-style-span&quot; color=&quot;#3058d2&quot;&gt;ScrnSave.lib&lt;/font&gt;&lt;/b&gt;&lt;font class=&quot;Apple-style-span&quot; color=&quot;#000000&quot;&gt;&quot; 이다. &lt;/font&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;font class=&quot;Apple-style-span&quot; color=&quot;#000000&quot;&gt;
&amp;nbsp;애플릿 개발자들이 애플릿이 언제 호출될지 설정 대화상자는 언제 어떻게 보여줄지, 제목 문자열은 어디에 넣어둘지 등을 다 생각해서 개발을 한다면 어려움에 호소할 것이다. 그래서 이러한 문제는 없애기 위해 스크린 세이버 라이브러리를 제공하며 대부분의 약속이 이미 프로그래밍되어 있으므로 애플릿은 스크린 세이버 라이브러리와 연결하고 자신의 고유한 화면 처리만 하면 된다.&lt;/font&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;font class=&quot;Apple-style-span&quot; color=&quot;#000000&quot;&gt;
샘플 코드를 봐보자.&amp;nbsp;&lt;/font&gt;&lt;br /&gt;
&lt;font class=&quot;Apple-style-span&quot; color=&quot;#000000&quot;&gt;
&amp;nbsp;
&lt;/font&gt;&lt;textarea name=&quot;code&quot; class=&quot;cpp&quot; cols=&quot;60&quot; rows=&quot;10&quot; style=&quot;color: rgb(0, 0, 0); &quot;&gt;#include &amp;lt;Windows.h&amp;gt;
#include &amp;lt;tchar.h&amp;gt;
#include &amp;lt;ScrnSave.h&amp;gt;

#ifdef UNICODE
#pragma comment(lib, &quot;ScrnSavW.lib&quot;)
#else
#pragma comment(lib, &quot;ScrnSave.lib&quot;)
#endif

#pragma comment(lib,&quot;ComCtl32.lib&quot;)

/* 
	스크린 세이버의 메시지를 처리하는 메시지 프로시저
	원형도 WndProc과 동일하며 프로그래밍 방법도 동일
	스크린 세이버 라이브러리는 애플릿에 적절한 전체화면의 검정색 배경에 항상 위 옵션으로 메인 윈도우를 만들며
	메인 윈도우의 메시지 프로시저로 이 함수를 지정한다. 
	이 함수에서 처리하지 않는 메시지는 DefScreenSaverProc함수로 전달하여 스크린 세이버 라이브러리가 처리
*/
LRESULT WINAPI ScreenSaverProc(HWND hWnd, UINT iMessage, WPARAM wParam, LPARAM lParam)
{
	HDC hdc;
	PAINTSTRUCT ps;
	TCHAR *Mes = _T(&quot;http://ezbeat.tistory.com&quot;);

	switch(iMessage){
	case WM_CREATE:
		return 0;

	case WM_PAINT:
		hdc = BeginPaint(hWnd,&amp;amp;ps);
		SetBkMode(hdc,TRANSPARENT);
		SetTextColor(hdc,RGB(255,255,255));
		TextOut(hdc,500,500,Mes,_tcslen(Mes));

		MoveToEx(hdc,500,500,NULL);
		Ellipse(hdc,200,200,300,300);
		EndPaint(hWnd,&amp;amp;ps);
		return 0;
	}
	return DefScreenSaverProc(hWnd,iMessage,wParam,lParam);
}

/*
	설정 대화상자의 메시지 처리 함수. 일반적인 대화상자 메시지 프로시저와 동일
	사용자로부터 설정 상태를 입력받아 약속된 장소(보통 레지스트리)에 저장하는 역할
*/
BOOL WINAPI ScreenSaverConfigureDialog(HWND hDlg, UINT iMessage, WPARAM wParam, LPARAM lParam)
{
	return TRUE;
}

/*
	커스텀 컨트롤을 등록할 때 사용. 보통 TRUE를 리턴하면 된다.*
*/
BOOL WINAPI RegisterDialogClasses(HANDLE hInst)
{
	return TRUE;
}
&lt;/textarea&gt;&lt;br /&gt;
&lt;font class=&quot;Apple-style-span&quot; color=&quot;#000000&quot;&gt;
위 사용된 3개의 함수는 필수적으로 있어야 한다. 각 함수에 대한 설명은 주석으로 간략히 달아놨다.&lt;/font&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;font class=&quot;Apple-style-span&quot; color=&quot;#000000&quot;&gt;
그리고 위에 참조할 라이브러리를 지정해주어야하는데&lt;/font&gt;&lt;br /&gt;
&lt;font class=&quot;Apple-style-span&quot; color=&quot;#e31600&quot;&gt;
유니코드 기반으로 프로그래밍 하려면 &quot;&lt;/font&gt;&lt;b&gt;&lt;font class=&quot;Apple-style-span&quot; color=&quot;#3058d2&quot;&gt;ScrnSavW.lib&lt;/font&gt;&lt;/b&gt;&lt;font class=&quot;Apple-style-span&quot; color=&quot;#e31600&quot;&gt;&quot; 라이브러리를 사용&lt;/font&gt;&lt;font class=&quot;Apple-style-span&quot; color=&quot;#000000&quot;&gt;해주면 된다.&lt;/font&gt;&lt;br /&gt;
&lt;font class=&quot;Apple-style-span&quot; color=&quot;#000000&quot;&gt;
이 부분에서 잘 안되서 애먹었다.;;&amp;nbsp;&lt;/font&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;a href=&quot;http://blog.naver.com/PostView.nhn?blogId=sainthkh&amp;amp;logNo=140062316898&amp;amp;categoryNo=59&amp;amp;viewDate=&amp;amp;currentPage=1&amp;amp;listtype=0&quot; target=&quot;_blank&quot; title=&quot;[http://blog.naver.com/PostView.nhn?blogId=sainthkh&amp;amp;logNo=140062316898&amp;amp;categoryNo=59&amp;amp;viewDate=&amp;amp;currentPage=1&amp;amp;listtype=0]로 이동합니다.&quot;&gt;&lt;font class=&quot;Apple-style-span&quot; color=&quot;#3058d2&quot;&gt;&lt;b&gt;http://blog.naver.com/PostView.nhn?blogId=sainthkh&amp;amp;logNo=140062316898&amp;amp;categoryNo=59&amp;amp;viewDate=¤tPage=1&amp;amp;listtype=0&lt;/b&gt;&lt;/font&gt;&lt;/a&gt;&lt;br /&gt;
&lt;font class=&quot;Apple-style-span&quot; color=&quot;#000000&quot;&gt;
위 블로그에 잘 설명이 되어 있었다 ^^; 감사합니다~&lt;/font&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;font class=&quot;Apple-style-span&quot; color=&quot;#000000&quot;&gt;또한 &lt;/font&gt;&lt;font class=&quot;Apple-style-span&quot; color=&quot;#e31600&quot;&gt;스크린 세이버 애플릿 파일은 확장자가 .exe가 아닌 .scr&lt;/font&gt;&lt;font class=&quot;Apple-style-span&quot; color=&quot;#000000&quot;&gt; 입니다.&lt;/font&gt;&lt;br /&gt;
&lt;font class=&quot;Apple-style-span&quot; color=&quot;#000000&quot;&gt;그렇기 때문에 아래와 같이 셋팅을 해주고 컴파일을 해주어야합니다.&lt;/font&gt;&lt;br /&gt;
&lt;font class=&quot;Apple-style-span&quot; color=&quot;#000000&quot;&gt;하지 않으면 실행할때마다 확장자를 바꾸고 실행하는 번거로움을 겪에 될 것 입니다.&lt;/font&gt;&lt;br /&gt;
&lt;font class=&quot;Apple-style-span&quot; color=&quot;#000000&quot;&gt;&lt;div class=&quot;imageblock&quot; style=&quot;display:inline;&quot;&gt;&lt;a href=&quot;http://cfile7.uf.tistory.com/original/1408DB354ED5F5202D26E5&quot; rel=&quot;lightbox&quot; target=&quot;_blank&quot;&gt;&lt;img src=&quot;http://cfile7.uf.tistory.com/image/1408DB354ED5F5202D26E5&quot; alt=&quot;&quot; filemime=&quot;image/jpeg&quot; filename=&quot;사용자 지정 1.jpg&quot; height=&quot;302&quot; width=&quot;556&quot;/&gt;&lt;/a&gt;&lt;/div&gt;&lt;/font&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;font class=&quot;Apple-style-span&quot; color=&quot;#000000&quot;&gt;이제 실행된 결과 화면을 봐보자.&lt;/font&gt;&lt;br /&gt;
&lt;font class=&quot;Apple-style-span&quot; color=&quot;#000000&quot;&gt;&lt;div class=&quot;imageblock&quot; style=&quot;display:inline;&quot;&gt;&lt;a href=&quot;http://cfile29.uf.tistory.com/original/164E8A3D4ED5F43708ADB0&quot; rel=&quot;lightbox&quot; target=&quot;_blank&quot;&gt;&lt;img src=&quot;http://cfile29.uf.tistory.com/image/164E8A3D4ED5F43708ADB0&quot; alt=&quot;&quot; filemime=&quot;image/jpeg&quot; filename=&quot;제목 없음.jpg&quot; height=&quot;553&quot; width=&quot;683&quot;/&gt;&lt;/a&gt;&lt;/div&gt;&lt;/font&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;font class=&quot;Apple-style-span&quot; color=&quot;#000000&quot;&gt;잘 만들어져 졌군요. 저 상태에서 키가 눌린다거나 마우스 입력이 들어오면 바로 스크린 세이버창은 꺼지게 됩니다.&lt;/font&gt;&lt;br /&gt;
&lt;font class=&quot;Apple-style-span&quot; color=&quot;#000000&quot;&gt;이제 이것을 응용해 저만의 스크린 세이버 애플릿을 만들어보겠습니다.&lt;/font&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;font class=&quot;Apple-style-span&quot; color=&quot;#000000&quot;&gt;
멋지게 만들고 싶었지만 그럴 시간은 없어서 초간단으로 만들었습니다.&lt;/font&gt;&lt;br /&gt;
&lt;font class=&quot;Apple-style-span&quot; color=&quot;#000000&quot;&gt;&lt;div class=&quot;imageblock&quot; style=&quot;display:inline;&quot;&gt;&lt;a href=&quot;http://ezbeat.tistory.com/attachment/cfile2.uf@117C604B4ED61D582EDFA9.scr&quot;&gt;&lt;img src=&quot;http://i1.daumcdn.net/cfs.tistory/v/110706133414/blog/image/extension/unknown.gif&quot; alt=&quot;&quot; style=&quot;vertical-align: middle;&quot; /&gt; Ezbeat.scr&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;
끝... -_-.. 심심하신분은 실행해보세요오.. scr 이라고해서 바이러스 절대 아닙니다! ㅋㄷㅋㄷ&lt;/font&gt;&lt;div class=&quot;entry-ccl&quot; style=&quot;clear: both; text-align: right; margin-bottom: 10px&quot;&gt;
	&lt;img id=&quot;ccl-icon-347-0&quot; class=&quot;entry-ccl-by&quot; src=&quot;http://i1.daumcdn.net/cfs.tistory/v/0/static/admin/editor/ccl_black01.png&quot; alt=&quot;저작자 표시&quot;/&gt;
	&lt;!--
	&lt;rdf:RDF xmlns=&quot;http://web.resource.org/cc/&quot; xmlns:dc=&quot;http://purl.org/dc/elements/1.1/&quot; xmlns:rdf=&quot;http://www.w3.org/1999/02/22-rdf-syntax-ns#&quot;&gt;
		&lt;Work rdf:about=&quot;&quot;&gt;
			&lt;license rdf:resource=&quot;http://creativecommons.org/licenses/by-fr/2.0/kr/&quot; /&gt;
		&lt;/Work&gt;
		&lt;License rdf:about=&quot;http://creativecommons.org/licenses/by-fr/&quot;&gt;
			&lt;permits rdf:resource=&quot;http://web.resource.org/cc/Reproduction&quot;/&gt;
			&lt;permits rdf:resource=&quot;http://web.resource.org/cc/Distribution&quot;/&gt;
			&lt;requires rdf:resource=&quot;http://web.resource.org/cc/Notice&quot;/&gt;
			&lt;requires rdf:resource=&quot;http://web.resource.org/cc/Attribution&quot;/&gt;
			&lt;permits rdf:resource=&quot;http://web.resource.org/cc/DerivativeWorks&quot;/&gt;
		&lt;/License&gt;
	&lt;/rdf:RDF&gt;
	--&gt;
&lt;/div&gt;
&lt;div class=&quot;another_category another_category_color_gray&quot;&gt;
&lt;h4&gt;'&lt;a href=&quot;/category/My%20Study&quot;&gt;My Study&lt;/a&gt;&amp;nbsp;&gt;&amp;nbsp;&lt;a href=&quot;/category/My%20Study/Programming%26Theory&quot;&gt;Programming&amp;amp;Theory&lt;/a&gt;' 카테고리의 다른 글&lt;/h4&gt;
&lt;table&gt;
&lt;tr&gt;
&lt;th&gt;
&lt;a href=&quot;/350&quot; &gt;OpenProcess를 막는 방법은??&lt;/a&gt;&amp;nbsp;&amp;nbsp;&lt;span&gt;(11)&lt;/span&gt;
&lt;/th&gt;
&lt;td&gt;
2011/12/20&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;th&gt;
&lt;a href=&quot;/348&quot; &gt;Immunity Debugger Hard Hooking&lt;/a&gt;&amp;nbsp;&amp;nbsp;&lt;span&gt;(2)&lt;/span&gt;
&lt;/th&gt;
&lt;td&gt;
2011/12/08&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;th&gt;
&lt;a href=&quot;/347&quot; &gt;ScreenSaver 만들어보기&lt;/a&gt;&amp;nbsp;&amp;nbsp;&lt;span&gt;(3)&lt;/span&gt;
&lt;/th&gt;
&lt;td&gt;
2011/11/30&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;th&gt;
&lt;a href=&quot;/346&quot; &gt;API vs MFC&lt;/a&gt;&amp;nbsp;&amp;nbsp;&lt;span&gt;(1)&lt;/span&gt;
&lt;/th&gt;
&lt;td&gt;
2011/11/30&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;th&gt;
&lt;a href=&quot;/344&quot; &gt;Prefix list in executive component&lt;/a&gt;&amp;nbsp;&amp;nbsp;&lt;span&gt;(0)&lt;/span&gt;
&lt;/th&gt;
&lt;td&gt;
2011/09/02&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;th&gt;
&lt;a href=&quot;/343&quot; &gt;API Listbox에서 가로 스크롤 넣기&lt;/a&gt;&amp;nbsp;&amp;nbsp;&lt;span&gt;(1)&lt;/span&gt;
&lt;/th&gt;
&lt;td&gt;
2011/08/10&lt;/td&gt;
&lt;/tr&gt;
&lt;/table&gt;&lt;/div&gt;</description>
			<category>Programming&amp;Theory</category>
			<category>ComCtl32.lib</category>
			<category>DefScreenSaverProc</category>
			<category>RegisterDialogClasses</category>
			<category>SCR</category>
			<category>ScreenSaverConfigureDialog</category>
			<category>ScreenSaverProc</category>
			<category>scrnsave.lib</category>
			<category>ScrnSavW.lib</category>
			<category>스크린 세이버</category>
			<category>애플릿</category>
			<author>Ezbeat</author>
			<guid>http://ezbeat.tistory.com/347</guid>
			<comments>http://ezbeat.tistory.com/347#entry347comment</comments>
			<pubDate>Wed, 30 Nov 2011 18:21:57 +0900</pubDate>
		</item>
		<item>
			<title>API vs MFC</title>
			<link>http://ezbeat.tistory.com/346</link>
			<description>&lt;div&gt;
&lt;font class=&quot;Apple-style-span&quot; color=&quot;#000000&quot;&gt;많은 사람들은 항상 이야기를 한다. &quot;MFC가 좋아요? API가 좋아요? 라고..&lt;/font&gt;&lt;/div&gt;
&lt;div&gt;&lt;font class=&quot;Apple-style-span&quot; color=&quot;#000000&quot;&gt;그리고 많은 사람들은 MFC도 짜증나고 API도 짜증난다고 말한다.&lt;/font&gt;&lt;/div&gt;
&lt;div&gt;&lt;font class=&quot;Apple-style-span&quot; color=&quot;#000000&quot;&gt;모든 사람들은 다음과 같이 말한다.&lt;/font&gt;&lt;/div&gt;
&lt;div&gt;&lt;font class=&quot;Apple-style-span&quot; color=&quot;#000000&quot;&gt;&lt;br /&gt;
&lt;/font&gt;&lt;/div&gt;
&lt;div&gt;&lt;font class=&quot;Apple-style-span&quot; color=&quot;#000000&quot;&gt;&lt;b&gt;API는 너무 어렵다.&lt;/b&gt;&lt;/font&gt;&lt;/div&gt;
&lt;div&gt;&lt;font class=&quot;Apple-style-span&quot; color=&quot;#000000&quot;&gt;&lt;b&gt;MFC는 너무 복잡하다.&lt;/b&gt;&lt;/font&gt;&lt;/div&gt;
&lt;div&gt;&lt;font class=&quot;Apple-style-span&quot; color=&quot;#000000&quot;&gt;&lt;b&gt;API는 너무 코드 양이 많다.&lt;/b&gt;&lt;/font&gt;&lt;/div&gt;
&lt;div&gt;&lt;font class=&quot;Apple-style-span&quot; color=&quot;#000000&quot;&gt;&lt;b&gt;MFC는 부풀어 있다.&lt;/b&gt;&lt;/font&gt;&lt;/div&gt;
&lt;div&gt;&lt;font class=&quot;Apple-style-span&quot; color=&quot;#000000&quot;&gt;&lt;b&gt;API는 마법사가 없다.&lt;/b&gt;&lt;/font&gt;&lt;/div&gt;
&lt;div&gt;&lt;font class=&quot;Apple-style-span&quot; color=&quot;#000000&quot;&gt;&lt;b&gt;MFC는 나쁘게 설계되어 있다.&lt;/b&gt;&lt;/font&gt;&lt;/div&gt;
&lt;div&gt;&lt;font class=&quot;Apple-style-span&quot; color=&quot;#000000&quot;&gt;&lt;b&gt;API는 객체지향하지 않다.&lt;/b&gt;&lt;/font&gt;&lt;/div&gt;
&lt;div&gt;&lt;font class=&quot;Apple-style-span&quot; color=&quot;#000000&quot;&gt;&lt;b&gt;MFC는 내 개를 걷어찼다.?!&lt;/b&gt;&lt;/font&gt;&lt;/div&gt;
&lt;div&gt;&lt;font class=&quot;Apple-style-span&quot; color=&quot;#000000&quot;&gt;&lt;b&gt;API는 나의 여자친구를 빼앗아갔다.?!&lt;/b&gt;&lt;br /&gt;
&lt;br /&gt;어디서 본 글이고 공감되서 써봤습니다.&lt;br /&gt;
마지막 두 문장은 애매모하네요.&lt;br /&gt;
API가 나의 여자친구를 빼앗아 갔다는 것은 &lt;br /&gt;
그만큼 코드짜는데 시간이 걸리기 때문에 여자친구를 만나지 못해 헤어졌다는 말 같은데...&lt;br /&gt;
MFC가 내 개를 걷어찼다는 것이 무슨 말인지..ㅠ&lt;br /&gt;
원본 문장은 이렇습니다. - &lt;b&gt;&quot;&lt;/b&gt;&lt;span class=&quot;Apple-style-span&quot; style=&quot;font-family: Verdana, Tahoma, Arial, sans-serif; font-size: 13px; line-height: normal; &quot;&gt;&lt;b&gt;MFC kicked my dog&quot;&lt;/b&gt;&lt;br /&gt;
&lt;br /&gt;혹시 무슨 뜻인지 아시는 분은 댓글로좀 알려주세요 ㅠ_ㅠ..&amp;nbsp;&lt;/span&gt;&lt;/font&gt;&lt;/div&gt;&lt;div class=&quot;entry-ccl&quot; style=&quot;clear: both; text-align: right; margin-bottom: 10px&quot;&gt;
	&lt;img id=&quot;ccl-icon-346-0&quot; class=&quot;entry-ccl-by&quot; src=&quot;http://i1.daumcdn.net/cfs.tistory/v/0/static/admin/editor/ccl_black01.png&quot; alt=&quot;저작자 표시&quot;/&gt;
	&lt;!--
	&lt;rdf:RDF xmlns=&quot;http://web.resource.org/cc/&quot; xmlns:dc=&quot;http://purl.org/dc/elements/1.1/&quot; xmlns:rdf=&quot;http://www.w3.org/1999/02/22-rdf-syntax-ns#&quot;&gt;
		&lt;Work rdf:about=&quot;&quot;&gt;
			&lt;license rdf:resource=&quot;http://creativecommons.org/licenses/by-fr/2.0/kr/&quot; /&gt;
		&lt;/Work&gt;
		&lt;License rdf:about=&quot;http://creativecommons.org/licenses/by-fr/&quot;&gt;
			&lt;permits rdf:resource=&quot;http://web.resource.org/cc/Reproduction&quot;/&gt;
			&lt;permits rdf:resource=&quot;http://web.resource.org/cc/Distribution&quot;/&gt;
			&lt;requires rdf:resource=&quot;http://web.resource.org/cc/Notice&quot;/&gt;
			&lt;requires rdf:resource=&quot;http://web.resource.org/cc/Attribution&quot;/&gt;
			&lt;permits rdf:resource=&quot;http://web.resource.org/cc/DerivativeWorks&quot;/&gt;
		&lt;/License&gt;
	&lt;/rdf:RDF&gt;
	--&gt;
&lt;/div&gt;
&lt;div class=&quot;another_category another_category_color_gray&quot;&gt;
&lt;h4&gt;'&lt;a href=&quot;/category/My%20Study&quot;&gt;My Study&lt;/a&gt;&amp;nbsp;&gt;&amp;nbsp;&lt;a href=&quot;/category/My%20Study/Programming%26Theory&quot;&gt;Programming&amp;amp;Theory&lt;/a&gt;' 카테고리의 다른 글&lt;/h4&gt;
&lt;table&gt;
&lt;tr&gt;
&lt;th&gt;
&lt;a href=&quot;/348&quot; &gt;Immunity Debugger Hard Hooking&lt;/a&gt;&amp;nbsp;&amp;nbsp;&lt;span&gt;(2)&lt;/span&gt;
&lt;/th&gt;
&lt;td&gt;
2011/12/08&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;th&gt;
&lt;a href=&quot;/347&quot; &gt;ScreenSaver 만들어보기&lt;/a&gt;&amp;nbsp;&amp;nbsp;&lt;span&gt;(3)&lt;/span&gt;
&lt;/th&gt;
&lt;td&gt;
2011/11/30&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;th&gt;
&lt;a href=&quot;/346&quot; &gt;API vs MFC&lt;/a&gt;&amp;nbsp;&amp;nbsp;&lt;span&gt;(1)&lt;/span&gt;
&lt;/th&gt;
&lt;td&gt;
2011/11/30&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;th&gt;
&lt;a href=&quot;/344&quot; &gt;Prefix list in executive component&lt;/a&gt;&amp;nbsp;&amp;nbsp;&lt;span&gt;(0)&lt;/span&gt;
&lt;/th&gt;
&lt;td&gt;
2011/09/02&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;th&gt;
&lt;a href=&quot;/343&quot; &gt;API Listbox에서 가로 스크롤 넣기&lt;/a&gt;&amp;nbsp;&amp;nbsp;&lt;span&gt;(1)&lt;/span&gt;
&lt;/th&gt;
&lt;td&gt;
2011/08/10&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;th&gt;
&lt;a href=&quot;/341&quot; &gt;커널 데이터 버퍼&lt;/a&gt;&amp;nbsp;&amp;nbsp;&lt;span&gt;(0)&lt;/span&gt;
&lt;/th&gt;
&lt;td&gt;
2011/07/26&lt;/td&gt;
&lt;/tr&gt;
&lt;/table&gt;&lt;/div&gt;</description>
			<category>Programming&amp;Theory</category>
			<category>API</category>
			<category>Application Program Interface</category>
			<category>MFC</category>
			<category>The Microsoft Foundation Class Library</category>
			<author>Ezbeat</author>
			<guid>http://ezbeat.tistory.com/346</guid>
			<comments>http://ezbeat.tistory.com/346#entry346comment</comments>
			<pubDate>Wed, 30 Nov 2011 01:07:15 +0900</pubDate>
		</item>
		<item>
			<title>ATmega128 LCD password 실험</title>
			<link>http://ezbeat.tistory.com/345</link>
			<description>&lt;font class=&quot;Apple-style-span&quot; color=&quot;#000000&quot;&gt;요샌.. 학과공부에 너무 치여 이도저도 못하고 있는 저 입니다..ㅠㅠ&lt;br /&gt;
하드웨어도 배우는데 지금까지 ATmega128을 가지고 간단한 실습들을 하였고&lt;br /&gt;
다음시간부터 micro mouse를 가지고 길 찾기 프로젝트를 해야합니다..ㅠㅠ&amp;nbsp;&lt;br /&gt;
&lt;br /&gt;별의별걸 다 실험했지만 ATmega128로 실험한 마지막 실습은 영상으로 남겼습니다..ㅠㅠ &lt;br /&gt;
그냥 올립니다..ㅠㅠ&amp;nbsp;&lt;br /&gt;
&lt;br /&gt;&lt;/font&gt;&lt;p style=&quot;margin:0&quot;&gt;&lt;font class=&quot;Apple-style-span&quot; color=&quot;#000000&quot;&gt;&lt;object type=&quot;application/x-shockwave-flash&quot; classid=&quot;clsid:d27cdb6e-ae6d-11cf-96b8-444553540000&quot; codebase=&quot;http://fpdownload.macromedia.com/pub/shockwave/cabs/flash/swflash.cab#version=8,0,0,0&quot; width=&quot;502&quot; height=&quot;399&quot;&gt;
	&lt;param name=&quot;movie&quot; value=&quot;http://flvs.daum.net/flvPlayer.swf?vid=K6gMr-W0UB8%24&amp;amp;pwidth=502&amp;amp;pheight=399&quot;/&gt;
	&lt;param name=&quot;allowScriptAccess&quot; value=&quot;always&quot;/&gt;
	&lt;param name=&quot;allowFullScreen&quot; value=&quot;true&quot;/&gt;
	&lt;param name=&quot;bgcolor&quot; value=&quot;#000000&quot;/&gt;
	&lt;embed src=&quot;http://flvs.daum.net/flvPlayer.swf?vid=K6gMr-W0UB8%24&amp;amp;pwidth=502&amp;amp;pheight=399&quot; width=&quot;502&quot; height=&quot;399&quot; allowscriptaccess=&quot;always&quot; allowfullscreen=&quot;true&quot; type=&quot;application/x-shockwave-flash&quot; bgcolor=&quot;#000000&quot;/&gt;
&lt;/object&gt;
&lt;/font&gt;&lt;/p&gt;
&lt;font class=&quot;Apple-style-span&quot; color=&quot;#000000&quot;&gt;&amp;nbsp;&lt;br /&gt;
&amp;nbsp;USART0을 사용했고.. 시그널 처리를 해 만든 것입니다.&lt;br /&gt;
&lt;br /&gt;ATmega128.. 이로서 실습이 끝났지만..ㅠㅠ 학교에 반납해야한다는거..;;&lt;br /&gt;
나중에 micro mouse도 제대로 작동하게 만들면 영상 올리겠습니다~&lt;br /&gt;
&lt;br /&gt;하드웨어도 은근히 잼는거 같아요.. 아직 이론적 지식이 부족한거 같지만요 ;;ㅋ&amp;nbsp;&lt;/font&gt;&lt;div class=&quot;entry-ccl&quot; style=&quot;clear: both; text-align: right; margin-bottom: 10px&quot;&gt;
	&lt;img id=&quot;ccl-icon-345-0&quot; class=&quot;entry-ccl-by&quot; src=&quot;http://i1.daumcdn.net/cfs.tistory/v/0/static/admin/editor/ccl_black01.png&quot; alt=&quot;저작자 표시&quot;/&gt;
	&lt;!--
	&lt;rdf:RDF xmlns=&quot;http://web.resource.org/cc/&quot; xmlns:dc=&quot;http://purl.org/dc/elements/1.1/&quot; xmlns:rdf=&quot;http://www.w3.org/1999/02/22-rdf-syntax-ns#&quot;&gt;
		&lt;Work rdf:about=&quot;&quot;&gt;
			&lt;license rdf:resource=&quot;http://creativecommons.org/licenses/by-fr/2.0/kr/&quot; /&gt;
		&lt;/Work&gt;
		&lt;License rdf:about=&quot;http://creativecommons.org/licenses/by-fr/&quot;&gt;
			&lt;permits rdf:resource=&quot;http://web.resource.org/cc/Reproduction&quot;/&gt;
			&lt;permits rdf:resource=&quot;http://web.resource.org/cc/Distribution&quot;/&gt;
			&lt;requires rdf:resource=&quot;http://web.resource.org/cc/Notice&quot;/&gt;
			&lt;requires rdf:resource=&quot;http://web.resource.org/cc/Attribution&quot;/&gt;
			&lt;permits rdf:resource=&quot;http://web.resource.org/cc/DerivativeWorks&quot;/&gt;
		&lt;/License&gt;
	&lt;/rdf:RDF&gt;
	--&gt;
&lt;/div&gt;
&lt;div class=&quot;another_category another_category_color_gray&quot;&gt;
&lt;h4&gt;'&lt;a href=&quot;/category/RestRoom&quot;&gt;RestRoom&lt;/a&gt;&amp;nbsp;&gt;&amp;nbsp;&lt;a href=&quot;/category/RestRoom/Routine&quot;&gt;Routine&lt;/a&gt;' 카테고리의 다른 글&lt;/h4&gt;
&lt;table&gt;
&lt;tr&gt;
&lt;th&gt;
&lt;a href=&quot;/351&quot; &gt;2011 KUCIS 최우수동아리 &amp;amp; 기술문서 부분 최우수상&lt;/a&gt;&amp;nbsp;&amp;nbsp;&lt;span&gt;(0)&lt;/span&gt;
&lt;/th&gt;
&lt;td&gt;
2011/12/21&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;th&gt;
&lt;a href=&quot;/349&quot; &gt;해피캠퍼스는 멍청해!!&lt;/a&gt;&amp;nbsp;&amp;nbsp;&lt;span&gt;(2)&lt;/span&gt;
&lt;/th&gt;
&lt;td&gt;
2011/12/08&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;th&gt;
&lt;a href=&quot;/345&quot; &gt;ATmega128 LCD password 실험&lt;/a&gt;&amp;nbsp;&amp;nbsp;&lt;span&gt;(0)&lt;/span&gt;
&lt;/th&gt;
&lt;td&gt;
2011/11/17&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;th&gt;
&lt;a href=&quot;/325&quot; &gt;2011년 5월 21일(토) KUCIS 호남권역 정보보호 세미나&lt;/a&gt;&amp;nbsp;&amp;nbsp;&lt;span&gt;(4)&lt;/span&gt;
&lt;/th&gt;
&lt;td&gt;
2011/05/19&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;th&gt;
&lt;a href=&quot;/324&quot; &gt;2011년 5월 14일(토) 서울여자대학교 제 12회 U3 정기 워크샵&lt;/a&gt;&amp;nbsp;&amp;nbsp;&lt;span&gt;(2)&lt;/span&gt;
&lt;/th&gt;
&lt;td&gt;
2011/05/19&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;th&gt;
&lt;a href=&quot;/313&quot; &gt;SBS 고릴라 라디오&lt;/a&gt;&amp;nbsp;&amp;nbsp;&lt;span&gt;(0)&lt;/span&gt;
&lt;/th&gt;
&lt;td&gt;
2011/01/25&lt;/td&gt;
&lt;/tr&gt;
&lt;/table&gt;&lt;/div&gt;</description>
			<category>Routine</category>
			<category>ATMEGA128</category>
			<category>LCD</category>
			<category>Signal</category>
			<category>usart0</category>
			<author>Ezbeat</author>
			<guid>http://ezbeat.tistory.com/345</guid>
			<comments>http://ezbeat.tistory.com/345#entry345comment</comments>
			<pubDate>Thu, 17 Nov 2011 22:57:49 +0900</pubDate>
		</item>
		<item>
			<title>Prefix list in executive component</title>
			<link>http://ezbeat.tistory.com/344</link>
			<description>&lt;font class=&quot;Apple-style-span&quot; color=&quot;#000000&quot;&gt;&lt;div class=&quot;imageblock&quot; style=&quot;display:inline;&quot;&gt;&lt;a href=&quot;http://cfile7.uf.tistory.com/original/1171553D4E609980315CD5&quot; rel=&quot;lightbox&quot; target=&quot;_blank&quot;&gt;&lt;img src=&quot;http://cfile7.uf.tistory.com/image/1171553D4E609980315CD5&quot; alt=&quot;&quot; filemime=&quot;image/jpeg&quot; filename=&quot;사용자 지정 1.jpg&quot; height=&quot;693&quot; width=&quot;507&quot;/&gt;&lt;/a&gt;&lt;/div&gt;&lt;/font&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;font class=&quot;Apple-style-span&quot; color=&quot;#000000&quot;&gt;윈도우 시스템 루틴의 명명 규칙을 이해한다면 이들 익스포트된 함수의 이름을 좀 더 쉽게 해독할 수 있다.&lt;/font&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;font class=&quot;Apple-style-span&quot; color=&quot;#000000&quot;&gt;일반적인 형태&lt;/font&gt;&lt;br /&gt;
&lt;b&gt;&lt;font class=&quot;Apple-style-span&quot; color=&quot;#e31600&quot;&gt;
&amp;lt;Prefix&amp;gt;&amp;lt;Operation&amp;gt;&amp;lt;Object&amp;gt;&lt;/font&gt;&lt;/b&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;font class=&quot;Apple-style-span&quot; color=&quot;#000000&quot;&gt;&lt;b&gt;Prefix&lt;/b&gt; : 루틴을 &amp;nbsp;익스포트하는 내부 컴포넌트&lt;/font&gt;&lt;br /&gt;
&lt;font class=&quot;Apple-style-span&quot; color=&quot;#000000&quot;&gt;&lt;b&gt;
Operation&lt;/b&gt; : 객체나 리소스에 행해지는 동작&lt;/font&gt;&lt;br /&gt;
&lt;font class=&quot;Apple-style-span&quot; color=&quot;#000000&quot;&gt;&lt;b&gt;
Object&lt;/b&gt; : 동작 대상&amp;nbsp;&lt;/font&gt;&lt;div class=&quot;entry-ccl&quot; style=&quot;clear: both; text-align: right; margin-bottom: 10px&quot;&gt;
	&lt;img id=&quot;ccl-icon-344-0&quot; class=&quot;entry-ccl-by&quot; src=&quot;http://i1.daumcdn.net/cfs.tistory/v/0/static/admin/editor/ccl_black01.png&quot; alt=&quot;저작자 표시&quot;/&gt;
	&lt;!--
	&lt;rdf:RDF xmlns=&quot;http://web.resource.org/cc/&quot; xmlns:dc=&quot;http://purl.org/dc/elements/1.1/&quot; xmlns:rdf=&quot;http://www.w3.org/1999/02/22-rdf-syntax-ns#&quot;&gt;
		&lt;Work rdf:about=&quot;&quot;&gt;
			&lt;license rdf:resource=&quot;http://creativecommons.org/licenses/by-fr/2.0/kr/&quot; /&gt;
		&lt;/Work&gt;
		&lt;License rdf:about=&quot;http://creativecommons.org/licenses/by-fr/&quot;&gt;
			&lt;permits rdf:resource=&quot;http://web.resource.org/cc/Reproduction&quot;/&gt;
			&lt;permits rdf:resource=&quot;http://web.resource.org/cc/Distribution&quot;/&gt;
			&lt;requires rdf:resource=&quot;http://web.resource.org/cc/Notice&quot;/&gt;
			&lt;requires rdf:resource=&quot;http://web.resource.org/cc/Attribution&quot;/&gt;
			&lt;permits rdf:resource=&quot;http://web.resource.org/cc/DerivativeWorks&quot;/&gt;
		&lt;/License&gt;
	&lt;/rdf:RDF&gt;
	--&gt;
&lt;/div&gt;
&lt;div class=&quot;another_category another_category_color_gray&quot;&gt;
&lt;h4&gt;'&lt;a href=&quot;/category/My%20Study&quot;&gt;My Study&lt;/a&gt;&amp;nbsp;&gt;&amp;nbsp;&lt;a href=&quot;/category/My%20Study/Programming%26Theory&quot;&gt;Programming&amp;amp;Theory&lt;/a&gt;' 카테고리의 다른 글&lt;/h4&gt;
&lt;table&gt;
&lt;tr&gt;
&lt;th&gt;
&lt;a href=&quot;/347&quot; &gt;ScreenSaver 만들어보기&lt;/a&gt;&amp;nbsp;&amp;nbsp;&lt;span&gt;(3)&lt;/span&gt;
&lt;/th&gt;
&lt;td&gt;
2011/11/30&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;th&gt;
&lt;a href=&quot;/346&quot; &gt;API vs MFC&lt;/a&gt;&amp;nbsp;&amp;nbsp;&lt;span&gt;(1)&lt;/span&gt;
&lt;/th&gt;
&lt;td&gt;
2011/11/30&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;th&gt;
&lt;a href=&quot;/344&quot; &gt;Prefix list in executive component&lt;/a&gt;&amp;nbsp;&amp;nbsp;&lt;span&gt;(0)&lt;/span&gt;
&lt;/th&gt;
&lt;td&gt;
2011/09/02&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;th&gt;
&lt;a href=&quot;/343&quot; &gt;API Listbox에서 가로 스크롤 넣기&lt;/a&gt;&amp;nbsp;&amp;nbsp;&lt;span&gt;(1)&lt;/span&gt;
&lt;/th&gt;
&lt;td&gt;
2011/08/10&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;th&gt;
&lt;a href=&quot;/341&quot; &gt;커널 데이터 버퍼&lt;/a&gt;&amp;nbsp;&amp;nbsp;&lt;span&gt;(0)&lt;/span&gt;
&lt;/th&gt;
&lt;td&gt;
2011/07/26&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;th&gt;
&lt;a href=&quot;/339&quot; &gt;Data Read/Write in Cache&lt;/a&gt;&amp;nbsp;&amp;nbsp;&lt;span&gt;(0)&lt;/span&gt;
&lt;/th&gt;
&lt;td&gt;
2011/07/12&lt;/td&gt;
&lt;/tr&gt;
&lt;/table&gt;&lt;/div&gt;</description>
			<category>Programming&amp;Theory</category>
			<category>Alpc</category>
			<category>CC</category>
			<category>CM</category>
			<category>Dbgk</category>
			<category>Em</category>
			<category>Etw</category>
			<category>EX</category>
			<category>executive component</category>
			<category>FsRtl</category>
			<category>hal</category>
			<category>Hvl</category>
			<category>IO</category>
			<category>kd</category>
			<category>Ke</category>
			<category>Lsa</category>
			<category>MM</category>
			<category>NT</category>
			<category>OB</category>
			<category>PF</category>
			<category>PO</category>
			<category>PP</category>
			<category>prefix</category>
			<category>PS</category>
			<category>RTL</category>
			<category>SE</category>
			<category>tm</category>
			<category>vf</category>
			<category>Wdi</category>
			<category>Whea</category>
			<category>WMI</category>
			<category>Zw</category>
			<author>Ezbeat</author>
			<guid>http://ezbeat.tistory.com/344</guid>
			<comments>http://ezbeat.tistory.com/344#entry344comment</comments>
			<pubDate>Fri, 02 Sep 2011 17:58:12 +0900</pubDate>
		</item>
		<item>
			<title>API Listbox에서 가로 스크롤 넣기</title>
			<link>http://ezbeat.tistory.com/343</link>
			<description>&lt;font class=&quot;Apple-style-span&quot; color=&quot;#000000&quot;&gt;현재 프로젝트를 하고 있던 도중 리스트박스를 만들어서 파일 경로를 얻어오는 부분을 구현하고 있었습니다.&lt;br /&gt;
뭐 다른 부분은 문제가 되질 않지만 &amp;nbsp;파일 경로가 길어질 경우 리스트박스 가로 길이를 넘어서게 되서 뒷 부분이 짤려서 안보이게 되더군요.&lt;br /&gt;
&lt;br /&gt;
&lt;div class=&quot;imageblock&quot; style=&quot;display:inline;&quot;&gt;&lt;a href=&quot;http://cfile24.uf.tistory.com/original/115532574E41F1F4338C60&quot; rel=&quot;lightbox&quot; target=&quot;_blank&quot;&gt;&lt;img src=&quot;http://cfile24.uf.tistory.com/image/115532574E41F1F4338C60&quot; alt=&quot;&quot; filemime=&quot;image/jpeg&quot; filename=&quot;사용자 지정 1.jpg&quot; height=&quot;133&quot; width=&quot;252&quot;/&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;
보시면 저렇게 짤려있습니다;;&lt;br /&gt;
&lt;br /&gt;
전 평소대로 생각했습니다. 그냥 &lt;/font&gt;&lt;font class=&quot;Apple-style-span&quot; color=&quot;#e31600&quot;&gt;리스트박스 속성창&lt;/font&gt;&lt;font class=&quot;Apple-style-span&quot; color=&quot;#000000&quot;&gt; 뒤져보면 있겠지.. 찾아보았더니 있더군요?!&amp;nbsp;&lt;/font&gt;&lt;br /&gt;
&lt;font class=&quot;Apple-style-span&quot; color=&quot;#000000&quot;&gt;&lt;div class=&quot;imageblock&quot; style=&quot;display:inline;&quot;&gt;&lt;a href=&quot;http://cfile5.uf.tistory.com/original/1636864B4E41F25706BC80&quot; rel=&quot;lightbox&quot; target=&quot;_blank&quot;&gt;&lt;img src=&quot;http://cfile5.uf.tistory.com/image/1636864B4E41F25706BC80&quot; alt=&quot;&quot; filemime=&quot;image/jpeg&quot; filename=&quot;사용자 지정 2.jpg&quot; height=&quot;299&quot; width=&quot;451&quot;/&gt;&lt;/a&gt;&lt;/div&gt;&lt;/font&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;font class=&quot;Apple-style-span&quot; color=&quot;#e31600&quot;&gt;디폴트 False&lt;/font&gt;&lt;font class=&quot;Apple-style-span&quot; color=&quot;#000000&quot;&gt;로 되어 있어서 저 값을 True로 바꾸고 다시 실행시켜보았더니!&lt;/font&gt;&lt;br /&gt;
&lt;font class=&quot;Apple-style-span&quot; color=&quot;#000000&quot;&gt;
가로 스크롤은 안생기더군요.......... 그래서 인터넷에 찾아보니 친절히 코드가 있어서 그걸 가져다 사용해 보았습니다.&lt;/font&gt;&lt;br /&gt;
&lt;font class=&quot;Apple-style-span&quot; color=&quot;#000000&quot;&gt;( 뭔가 오류가 쫌 있어서 살짝 바꾸기만 했습니다. )&lt;/font&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;font class=&quot;Apple-style-span&quot; color=&quot;#000000&quot;&gt;출처 :&amp;nbsp;&lt;/font&gt;&lt;a href=&quot;http://stpetrus27.wordpress.com/2009/03/15/win32-control-listbox-%E3%80%90horizontal-scroll%E3%80%91/&quot; target=&quot;_blank&quot; title=&quot;[http://stpetrus27.wordpress.com/2009/03/15/win32-control-listbox-%E3%80%90horizontal-scroll%E3%80%91/]로 이동합니다.&quot;&gt;&lt;font class=&quot;Apple-style-span&quot; color=&quot;#3058d2&quot;&gt;http://stpetrus27.wordpress.com/2009/03/15/win32-control-listbox-%E3%80%90horizontal-scroll%E3%80%91/&lt;/font&gt;&lt;/a&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;textarea name=&quot;code&quot; class=&quot;cpp&quot; cols=&quot;60&quot; rows=&quot;10&quot; style=&quot;color: rgb(0, 0, 0); &quot;&gt;//리스트 박스에 가로 스크롤을 넣어준다.
void OnAdjustListBoxHScroll(HWND hWndLB)
{
	int nTextLen = 0, nWidth = 0;
	int nCount = 0, idx = 0;
	HDC hDC = NULL;
	HFONT hFont = NULL;
	SIZE sz = {0};
	char pszText[MAX_PATH] = {0,};

	nCount = SendMessage(hWndLB, LB_GETCOUNT, 0, 0);
	hFont = (HFONT)SendMessage(hWndLB, WM_GETFONT, 0, 0);
	hDC = GetDC(hWndLB);
	SelectObject(hDC, (HGDIOBJ)hFont);

	for (idx = 0; idx &amp;lt; nCount; ++idx) {
		nTextLen = SendMessage(hWndLB, LB_GETTEXTLEN, idx, 0);
		memset(pszText,0,MAX_PATH);
		SendMessageA(hWndLB, LB_GETTEXT, idx, (LPARAM)pszText);
		GetTextExtentPoint32A(hDC, pszText, nTextLen, &amp;amp;sz);
		nWidth = max(sz.cx, nWidth);
	}
	ReleaseDC(hWndLB, hDC);
	SendMessage(hWndLB, LB_SETHORIZONTALEXTENT, nWidth+20, 0);
}
&lt;/textarea&gt;&lt;br /&gt;
&lt;font class=&quot;Apple-style-span&quot; color=&quot;#000000&quot;&gt;코드는 그렇게 복잡하진 않습니다.&lt;/font&gt;&lt;br /&gt;
&lt;font class=&quot;Apple-style-span&quot; color=&quot;#000000&quot;&gt;현재 리스트박스에 있는 문자열들의 가로 길이를 얻어와서 &lt;/font&gt;&lt;br /&gt;
&lt;font class=&quot;Apple-style-span&quot; color=&quot;#000000&quot;&gt;가장 긴 값을 가지고&amp;nbsp;&lt;/font&gt;&lt;font class=&quot;Apple-style-span&quot; color=&quot;#801fbf&quot;&gt;LB_SETHORIZONTALEXTENT &lt;/font&gt;&lt;font class=&quot;Apple-style-span&quot; color=&quot;#000000&quot;&gt;메시지를 넘기는 것입니다.&lt;/font&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;font class=&quot;Apple-style-span&quot; color=&quot;#000000&quot;&gt;그러면 리스트 박스에&lt;/font&gt;&lt;span style=&quot;color: rgb(0, 0, 0); font-size: 9pt; &quot;&gt;&amp;nbsp;&lt;/span&gt;&lt;span class=&quot;Apple-style-span&quot; style=&quot;font-family: Verdana, Tahoma, Arial, sans-serif; font-size: 13px; line-height: 21px; &quot;&gt;&lt;span style=&quot;color: rgb(0, 0, 0); font-size: 9pt; &quot;&gt;가로 스크롤이 가능한 너비를&lt;/span&gt;&lt;span style=&quot;color: rgb(0, 0, 0); font-size: 9pt; &quot;&gt;&amp;nbsp;&lt;/span&gt;&lt;span lang=&quot;EN-US&quot; style=&quot;color: rgb(0, 0, 0); &quot;&gt;&lt;span style=&quot;font-size: 9pt; &quot;&gt;Pixel&lt;/span&gt;&lt;span style=&quot;font-size: 9pt; &quot;&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;font-size: 9pt; &quot;&gt;&lt;font class=&quot;Apple-style-span&quot; color=&quot;#000000&quot;&gt;단위로 지정 되게 되면서 가로 스크롤이 생기게 됩니다.&lt;br /&gt;
( 마지막에 뒷부분이 조금 잘리길래 +20 정도를 더 해주었습니다. )&amp;nbsp;&lt;/font&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;font class=&quot;Apple-style-span&quot; color=&quot;#000000&quot;&gt;리스트 박스에&amp;nbsp;&lt;/font&gt;&lt;font class=&quot;Apple-style-span&quot; color=&quot;#801fbf&quot;&gt;LB_ADDSTRING &lt;/font&gt;&lt;font class=&quot;Apple-style-span&quot; color=&quot;#000000&quot;&gt;메시지로 값을 추가했을 때 바로 그 아래 문장에 해당 함수를 호출시켜주면 됩니다.&lt;/font&gt;&lt;br /&gt;
&lt;font class=&quot;Apple-style-span&quot; color=&quot;#e31600&quot;&gt;당연히 리스트박스 속성창에서 Horizontal Scroll 값&lt;/font&gt;&lt;font class=&quot;Apple-style-span&quot; color=&quot;#000000&quot;&gt;은 &lt;/font&gt;&lt;font class=&quot;Apple-style-span&quot; color=&quot;#801fbf&quot;&gt;True&lt;/font&gt;&lt;font class=&quot;Apple-style-span&quot; color=&quot;#000000&quot;&gt;로 해주어야 합니다.&lt;br /&gt;
 False로 했을 경우 위 함수를 적용시켜도 스크롤 바는 생기지 않습니다.&amp;nbsp;&lt;/font&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;font class=&quot;Apple-style-span&quot; color=&quot;#000000&quot;&gt;&lt;div class=&quot;imageblock&quot; style=&quot;display:inline;&quot;&gt;&lt;a href=&quot;http://cfile27.uf.tistory.com/original/206FB8514E41F4AF15BABD&quot; rel=&quot;lightbox&quot; target=&quot;_blank&quot;&gt;&lt;img src=&quot;http://cfile27.uf.tistory.com/image/206FB8514E41F4AF15BABD&quot; alt=&quot;&quot; filemime=&quot;image/jpeg&quot; filename=&quot;사용자 지정 3.jpg&quot; height=&quot;196&quot; width=&quot;260&quot;/&gt;&lt;/a&gt;&lt;/div&gt;&lt;/font&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;font class=&quot;Apple-style-span&quot; color=&quot;#000000&quot;&gt;만족스럽습니다. 이런거에서 시간을 낭비하고 있다니..ㅠ_ㅠ .. 짜증나는군요.&lt;/font&gt;&lt;/span&gt;&lt;/span&gt;&lt;div class=&quot;entry-ccl&quot; style=&quot;clear: both; text-align: right; margin-bottom: 10px&quot;&gt;
	&lt;img id=&quot;ccl-icon-343-0&quot; class=&quot;entry-ccl-by&quot; src=&quot;http://i1.daumcdn.net/cfs.tistory/v/0/static/admin/editor/ccl_black01.png&quot; alt=&quot;저작자 표시&quot;/&gt;
	&lt;!--
	&lt;rdf:RDF xmlns=&quot;http://web.resource.org/cc/&quot; xmlns:dc=&quot;http://purl.org/dc/elements/1.1/&quot; xmlns:rdf=&quot;http://www.w3.org/1999/02/22-rdf-syntax-ns#&quot;&gt;
		&lt;Work rdf:about=&quot;&quot;&gt;
			&lt;license rdf:resource=&quot;http://creativecommons.org/licenses/by-fr/2.0/kr/&quot; /&gt;
		&lt;/Work&gt;
		&lt;License rdf:about=&quot;http://creativecommons.org/licenses/by-fr/&quot;&gt;
			&lt;permits rdf:resource=&quot;http://web.resource.org/cc/Reproduction&quot;/&gt;
			&lt;permits rdf:resource=&quot;http://web.resource.org/cc/Distribution&quot;/&gt;
			&lt;requires rdf:resource=&quot;http://web.resource.org/cc/Notice&quot;/&gt;
			&lt;requires rdf:resource=&quot;http://web.resource.org/cc/Attribution&quot;/&gt;
			&lt;permits rdf:resource=&quot;http://web.resource.org/cc/DerivativeWorks&quot;/&gt;
		&lt;/License&gt;
	&lt;/rdf:RDF&gt;
	--&gt;
&lt;/div&gt;
&lt;div class=&quot;another_category another_category_color_gray&quot;&gt;
&lt;h4&gt;'&lt;a href=&quot;/category/My%20Study&quot;&gt;My Study&lt;/a&gt;&amp;nbsp;&gt;&amp;nbsp;&lt;a href=&quot;/category/My%20Study/Programming%26Theory&quot;&gt;Programming&amp;amp;Theory&lt;/a&gt;' 카테고리의 다른 글&lt;/h4&gt;
&lt;table&gt;
&lt;tr&gt;
&lt;th&gt;
&lt;a href=&quot;/346&quot; &gt;API vs MFC&lt;/a&gt;&amp;nbsp;&amp;nbsp;&lt;span&gt;(1)&lt;/span&gt;
&lt;/th&gt;
&lt;td&gt;
2011/11/30&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;th&gt;
&lt;a href=&quot;/344&quot; &gt;Prefix list in executive component&lt;/a&gt;&amp;nbsp;&amp;nbsp;&lt;span&gt;(0)&lt;/span&gt;
&lt;/th&gt;
&lt;td&gt;
2011/09/02&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;th&gt;
&lt;a href=&quot;/343&quot; &gt;API Listbox에서 가로 스크롤 넣기&lt;/a&gt;&amp;nbsp;&amp;nbsp;&lt;span&gt;(1)&lt;/span&gt;
&lt;/th&gt;
&lt;td&gt;
2011/08/10&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;th&gt;
&lt;a href=&quot;/341&quot; &gt;커널 데이터 버퍼&lt;/a&gt;&amp;nbsp;&amp;nbsp;&lt;span&gt;(0)&lt;/span&gt;
&lt;/th&gt;
&lt;td&gt;
2011/07/26&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;th&gt;
&lt;a href=&quot;/339&quot; &gt;Data Read/Write in Cache&lt;/a&gt;&amp;nbsp;&amp;nbsp;&lt;span&gt;(0)&lt;/span&gt;
&lt;/th&gt;
&lt;td&gt;
2011/07/12&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;th&gt;
&lt;a href=&quot;/330&quot; &gt;Windows Cache&lt;/a&gt;&amp;nbsp;&amp;nbsp;&lt;span&gt;(2)&lt;/span&gt;
&lt;/th&gt;
&lt;td&gt;
2011/05/31&lt;/td&gt;
&lt;/tr&gt;
&lt;/table&gt;&lt;/div&gt;</description>
			<category>Programming&amp;Theory</category>
			<category>GetTextExtentPoint32</category>
			<category>Horizontal</category>
			<category>LB_GETCOUNT</category>
			<category>LB_GETTEXT</category>
			<category>LB_GETTEXTLEN</category>
			<category>LB_SETHORIZONTALEXTENT</category>
			<category>ListBox</category>
			<category>scroll</category>
			<category>SendMessage</category>
			<category>WM_GETFONT</category>
			<category>가로</category>
			<category>스크롤바</category>
			<author>Ezbeat</author>
			<guid>http://ezbeat.tistory.com/343</guid>
			<comments>http://ezbeat.tistory.com/343#entry343comment</comments>
			<pubDate>Wed, 10 Aug 2011 12:04:47 +0900</pubDate>
		</item>
	</channel>
</rss>
