<?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>وبلاگی برای تمام فصول &#187; امنیت</title>
	<atom:link href="http://hesam-h.ir/blog/category/it/security/feed/" rel="self" type="application/rss+xml" />
	<link>http://hesam-h.ir/blog</link>
	<description>حسام حاتمی</description>
	<lastBuildDate>Sun, 22 Jan 2012 18:53:22 +0000</lastBuildDate>
	<language>fa</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.3.1</generator>
		<item>
		<title>چگونه تمامی آنتی ویروسها را بایپس کنیم!!</title>
		<link>http://hesam-h.ir/blog/1390/06/%da%86%da%af%d9%88%d9%86%d9%87-%d8%aa%d9%85%d8%a7%d9%85%db%8c-%d8%a2%d9%86%d8%aa%db%8c-%d9%88%db%8c%d8%b1%d9%88%d8%b3%d9%87%d8%a7-%d8%b1%d8%a7-%d8%a8%d8%a7%db%8c%d9%be%d8%b3-%da%a9%d9%86%db%8c%d9%85/</link>
		<comments>http://hesam-h.ir/blog/1390/06/%da%86%da%af%d9%88%d9%86%d9%87-%d8%aa%d9%85%d8%a7%d9%85%db%8c-%d8%a2%d9%86%d8%aa%db%8c-%d9%88%db%8c%d8%b1%d9%88%d8%b3%d9%87%d8%a7-%d8%b1%d8%a7-%d8%a8%d8%a7%db%8c%d9%be%d8%b3-%da%a9%d9%86%db%8c%d9%85/#comments</comments>
		<pubDate>Sat, 27 Aug 2011 07:23:22 +0000</pubDate>
		<dc:creator>تبعیدی دست باد</dc:creator>
				<category><![CDATA[آی تی]]></category>
		<category><![CDATA[امنیت]]></category>
		<category><![CDATA[Al3ksCrypter]]></category>
		<category><![CDATA[avira]]></category>
		<category><![CDATA[bypass antivirus]]></category>
		<category><![CDATA[Cold$eal IceAge 2011 Crypter]]></category>
		<category><![CDATA[crypter]]></category>
		<category><![CDATA[kaspersky]]></category>
		<category><![CDATA[nod32]]></category>
		<category><![CDATA[panda]]></category>
		<category><![CDATA[source code]]></category>
		<category><![CDATA[StringsEncoder]]></category>
		<category><![CDATA[دور زدن آنتی ویروس]]></category>
		<category><![CDATA[چگونه تمامی آنتی ویروسها را بایپس کنیم!!]]></category>

		<guid isPermaLink="false">http://hesam-h.ir/blog/?p=1184</guid>
		<description><![CDATA[بعد از مدتها با مقاله ای که مطمئنا هواداران زیادی خواهد داشت ولاگ رو بروزرسانی میکنم. نکته۱ : این یک بررسی موشکافانه از آنچه که باعث میشود یک آنتی ویروس فریب بخورد را به شما ارائه میدهد.پس تا آخر این مقاله را دنبال کنید نکته ۲ : هر گونه استفاده نا بجا از  مقاله و [...]]]></description>
			<content:encoded><![CDATA[<p><a href="http://hesam-h.ir/blog/wp-content/uploads/2011/08/crypter_FUD_teaser.png"><img class="aligncenter size-full wp-image-1193" title="crypter_FUD_teaser" src="http://hesam-h.ir/blog/wp-content/uploads/2011/08/crypter_FUD_teaser.png" alt="" width="338" height="164" /></a></p>
<p>بعد از مدتها با مقاله ای که مطمئنا هواداران زیادی خواهد داشت ولاگ رو بروزرسانی میکنم.</p>
<p>نکته۱ : این یک بررسی موشکافانه از آنچه که باعث میشود یک آنتی ویروس فریب بخورد را به شما ارائه میدهد.پس تا آخر این مقاله را دنبال کنید</p>
<p>نکته ۲ : هر گونه استفاده نا بجا از  مقاله و فایلهای ضمیمه و &#8230; بر عهده خواننده میباشد .و باعث سلب مسئولیت از نویسنده است .</p>
<p><strong>بعد از اینکه از سایتهای Warez  فایلی را دانلود میکنید . با خیال راحت از اینکه آنتی ویروس شما به آن گیر نمیدهد آن را اجرا میکنید . اما اصل جریان چیست !!</strong></p>
<p>&nbsp;</p>
<p>به ادامه مطلب مراجعه نمایید..</p>
<p><span id="more-1184"></span></p>
<h4>فاز اول : قبل از اینکه برنامه های مخرب (یا مشکوک) اجرا شده است</h4>
<p>اولین چیزی که آنتی ویروس شما چک میکند اینست که آیا اوون فایل اجرایی Pack شده یا خیر ؟ (pack چیه ؟ برنامه نویس بد نیت ! بعد از کلی سرو کله زدن و نوشتن برنامه مخرب میبینه ! ای داد بیداد برنامشو آنتی ویروس میشناسه ! برای اینکار  میاد یه رنگ و لعابی بهش میده ! و اوون رو با یه لایه خامه و عسل میپوشونه ! و شما هم ویروس رو میندازی توی حلقوم کامپیوترتون !! این عملیات رنگ و لعاب رو در اصطلاح میگیم Pack  کردن :دی) .</p>
<p>خوب بریم سراغ باقی ماجرا : بعد از اینکه آنتی ویروس زرنگ ! شما فهمید اون برنامه پک شده ! اون رو Unpack  میکنه توی حافظه بازش میکنه و محتویات توش رو یه بررسی اجمالی میکنه ! که خدای ناکرده زیر اون رنگ و لعاب چیزی نباشه !میاد چک میکنه API چه چیزهایی رو درون خودش داره چه توابعی توش صدا زده شده و .. ما اینجا زیاد نمیخوایم در مورد  اجرا برنامه های پرتابل که اصطلاحاً PE  نامیده میشن و نحوه وروود اوونها به حافظه صحبت کنیم . اما کدهای کامپایل شده خط به خط به صورت باینری وارد حافظه میشن و آنتی ویروس اوونها رو به عنوان opcode)  بررسی میکنه مخصوصا datastring  ها رو توجه خاصی داره البته انتی ویروسها علاقه خاصی دارن که یک نمونه (یا ترکیبی از نمونه های م ختلف)مانند میلیونها نمونه ای که از قبل در بانک اطلاعاتیشون هست پیدا کنند و سریعا اعلام آلودگی کنند . اصلاحا اونها توی Signature  ها ی برنامه با یک ویروس مطابقت داشت آنتی ویروس با افتخار صفحه قرمز رنگی رو به شما نمایش داده و &#8230;&#8230;.. ویروس از صفحه روزگار محو خواهد شد.</p>
<h4>فاز دو : در حالی که برنامه در حال اجرا است</h4>
<p>واضح است که برخی از کد (مخرب) ممکن است پنهان ، رمزگذاری ، تاحدودی گیج کننده و یا حتی&#8221; لحظه ای &#8220;باشند. آنتی ویروس برای اینکه قادر به مقابله با کلاهبرداری و خرابکاری باشد .<strong>به نظارت و رهگیری </strong>API ها مشغوله و یک نوع <strong>ا&#8221;تجزیه و تحلیل رفتاری&#8221;</strong>  انجام میده. بنابراین اگر notepad.exe شما سعی داره شیطونی کنه به فضای پروسه های دیگه انگولی بده ! و کارهایی خلاف شرع بجز نوشتن متن !  نجام بده آنتی ویروس سریعا این برنامه مرتد رو از نفس کشیدن ساقط خواهد کرد !!</p>
<h3>موضوع این مقاله و این پروژه</h3>
<p>خوب اما ما برای اینکه یه موش آزمایشگاهی داشته باشیم که همه دوستان اون رو بشناسن ! از نت کت <a href="http://netcat.sourceforge.net/">Netcat </a> تحت ویندوز برای مدل آزمایشگاهیمون استفاده میکنیم .این بدبخت مادر مرده رو تمام اکثریت آنتی ویروسها دتکت کرده و زود از صفحه هستی ساقط میکنند ! حالا کاره ای هم نیست بدبخت <img title="Wink" src="http://hesam-h.ir/blog/wp-content/plugins/editor-extender/plugins/emotions/img/smiley-wink.gif" alt="Wink" border="0" /></p>
<p>ما اینجا نمیخوایم دست به اختراع و اکتشاف به صورت Visible بزنیم !! ما اکتشافاتمون Priv8  هست !! <img src='http://hesam-h.ir/blog/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' /> ) اما حالا توی این مقاله میخوایم یه ایده بدیم و بگیم داستان از چه قراره و طرز کار به چه شکله !</p>
<p>ما توی این مقاله از ۱۰۰۰ پروزه مرتبطی که توی این زمینه هست در مورد <strong><em>Simple crypter for beginner by </em><em>Xash </em></strong>صحبت خواهیم کرد که با دلفی نوشته شده و بلافاصله توسط تمام آنتی ویروس های مدرن تشخیص داده است. ایده اولیه با این حال زیبا و ظریف است. چگونه کار می کند :</p>
<p>خوب شروع میکنیم :</p>
<p>بوسیله برنامه فایل netcat  رو crypt  میکنیم و یه خروجی میگیریم ازش به نام <strong>nc_crypted.exe</strong>. این عکس ساختار فایل رو نشون میده :</p>
<p><a href="http://hesam-h.ir/blog/wp-content/uploads/2011/08/crypter_example_012.png"><img class="aligncenter size-full wp-image-1191" title="crypter_example_012" src="http://hesam-h.ir/blog/wp-content/uploads/2011/08/crypter_example_012.png" alt="" width="487" height="133" /></a></p>
<p>خوب همونطور که مشاهده میکنید Netcat   ، در بین دو مارکر (همون فلشهای زرد)قرار داده شده است. مارکرهای مورد نیاز هستند ، زیرا طول معمول رمزگشایی ممکن است متفاوت باشد و طول <strong>فایل مخرب</strong> (در مورد ما : <strong>netcat.exe)</strong> می تواند متغیر باشد . <strong></strong></p>
<p>خوب حالا وقتشه اتفاقات خووب خووب بیوفته !!  وقتی که شما با کلیک بر روی <strong>netcat_crypted.exe</strong> ، آن را به حافظه کامپیوتر بارگذاری و اجرا کنید. . فرآیند جدید در حالت&#8221;معلق&#8221; (یکی از فرآیندهای سیستم عاملها) ایجاد شده است. در حال حاضر برنامه ما شروع به رمزگشایی کد netcat  میکند.<strong></strong></p>
<p>همه چیز شیرین است ، اما یک مشکل بزرگ وجود دارد : لودر (برنامه اصلی) تولید شده توسط Crypter اصلی در حال حاضر قابل تشخیص هست برای آنتی ویروس پس ما باید توی فایل باینری یکسری تغییراتی انجام بدیم که  آنتی ویروس گول بخوره !!</p>
<p>اما خوب طور ؟</p>
<ul>
<li>اضافه کردن کد های بیخود و ه بعنوان پوششی بر روی کد اصلی</li>
<li>تغییر یا رمزنگاری رشته.</li>
<li>تغییر نام متغیر</li>
<li>تغییر نحوه و ترتیب اجرای خطوط کدنویسی</li>
<li>با افزودن و یا تغییر آیکون.</li>
</ul>
<p>اما بچه ها کار سخت تر از این حرفاست <img title="Smile" src="http://hesam-h.ir/blog/wp-content/plugins/editor-extender/plugins/emotions/img/smiley-smile.gif" alt="Smile" border="0" /> ، بنابراین ما سعی میکنیم یکسری کارهای پیشرفته تر انجام بدیم :</p>
<ul>
<li><strong>ما میبایست تمام متغیر رشته ای و همچنین فایلهای مخرب رو  با استاندارد الگوریتم رمزنگاری اطلاعات ، رمزبندی کنید.</strong></li>
<li><strong>ما همه  API فراخوانی تابع  ها رو بصورت غیرمعمول و به نحوه دیگری مینویسیم</strong></li>
<li><strong>ما طول همه عناصر &#8220;Tail&#8221; به طور کامل متغیر  میکنیم  ،که از این رو غیر قابل پیش بینی باشند.</strong></li>
<li><strong>ماباینری نهایی از تمام رشته های غیر ضروری و منابع پنهان که به طور بالقوه ممکن است توسط آنتی ویروس به عنوان Signature  آلوده تلقی بشه رو پاک میکنیم.</strong><strong><br />
</strong></li>
</ul>
<p>نگاهی به ساختار <strong>netcat_crypted.exe</strong> حال حاضر :</p>
<p><a href="http://hesam-h.ir/blog/wp-content/uploads/2011/08/crypter_structere_02.png"><img class="aligncenter size-large wp-image-1194" title="crypter_structere_02" src="http://hesam-h.ir/blog/wp-content/uploads/2011/08/crypter_structere_02-1024x481.png" alt="" width="629" height="295" /></a></p>
<p>فایل <strong>netcat_crypted.exe</strong> بسیار پیچیده شد ! نه ؟ البته ما میبایست از <a href="http://en.wikipedia.org/wiki/Serpent_%28cipher%29">الگوریتم رمزنگاری سرپنت</a> استفاده کنیم.در اینصورت جدا کننده ها بصورت رندوم خواهند بود و با طولهای متفاوت .</p>
<p>خوب حالا ما میباست API ها رو هم پنهان کنیم . چون معمولا این Api  ها بصورت  واضح در کد نمایش داده میشوند و آنتی ویروس تا Api  های مشکوک دید بلافاصله فایل ما رو بلاک میکنه برای تغییر این Api  ها و پنهان کردن از دید آنتی ویروس میبایست از <strong>StringsEncoder</strong> استفاده کنیم.</p>
<p>مثال :</p>
<p><a href="http://hesam-h.ir/blog/wp-content/uploads/2011/08/stringsEncrypter.png"><img class="aligncenter size-full wp-image-1186" title="stringsEncrypter" src="http://hesam-h.ir/blog/wp-content/uploads/2011/08/stringsEncrypter.png" alt="" width="492" height="465" /></a></p>
<p>&nbsp;</p>
<p>بدین ترتیب آنتی ویروس ما هیچ شانسی برای پیدا کردن WriteProcessMemory&#8221; یا&#8221;CreateProcessA&#8221; نخواهد داشت .</p>
<p>خوب ، ما در حال حاضر می دانیم که آنتی ویروس <strong>بسیار حساس</strong> هستند <strong>وقتی که توابع API خاص صدا زده می شوند</strong> (نگاه کنید به لیست بالا ). و ما <strong>باید</strong> قادر باشیم آنها را برای کارهای کثیفمان صدا کنیم !</p>
<p>پس چه کار میتونیم بکنیم ؟  شما مجبور به استفاده از <strong>توابع API مستند نشده هستید !</strong>. آن دسته از توابع اغلب  جایگزین خوبی هستند .</p>
<p><a href="http://hesam-h.ir/blog/wp-content/uploads/2011/08/2011-08-27_11-14_Al3ksCrypter-%C2%AB-IT-Security.jpg"><img class="aligncenter size-full wp-image-1187" title="2011-08-27_11-14_Al3ksCrypter « IT Security" src="http://hesam-h.ir/blog/wp-content/uploads/2011/08/2011-08-27_11-14_Al3ksCrypter-%C2%AB-IT-Security.jpg" alt="" width="526" height="672" /></a></p>
<p>مثال از دلفی  <strong>untStealthAPI</strong> :</p>
<p><a href="http://hesam-h.ir/blog/wp-content/uploads/2011/08/2011-08-27_11-21_Al3ksCrypter-%C2%AB-IT-Security.jpg"><img class="aligncenter size-full wp-image-1188" title="2011-08-27_11-21_Al3ksCrypter « IT Security" src="http://hesam-h.ir/blog/wp-content/uploads/2011/08/2011-08-27_11-21_Al3ksCrypter-%C2%AB-IT-Security.jpg" alt="" width="530" height="414" /></a></p>
<p>یا یک مثال دیگر :</p>
<p><a href="http://hesam-h.ir/blog/wp-content/uploads/2011/08/2011-08-27_11-22_Al3ksCrypter-%C2%AB-IT-Security.jpg"><img class="aligncenter size-full wp-image-1189" title="2011-08-27_11-22_Al3ksCrypter « IT Security" src="http://hesam-h.ir/blog/wp-content/uploads/2011/08/2011-08-27_11-22_Al3ksCrypter-%C2%AB-IT-Security.jpg" alt="" width="531" height="636" /></a></p>
<p>خوب  ! دیگه فایل تر و تمیز ما ساخته شده !</p>
<p>میتونیم از <a href="http://www.angusj.com/resourcehacker/">resource Hacker</a>  برای پاک کردن چیزهای غیرلازم استفاده کنیم !</p>
<p style="text-align: left;">@echo on</p>
<p style="text-align: left;">&#8220;D:\Resource Hacker\ResHacker.exe&#8221; -delete &#8220;%1&#8243;, &#8220;%1&#8243;, StringTable,, &#8220;</p>
<p style="text-align: left;">D:\Resource Hacker\ResHacker.exe&#8221; -delete &#8220;%1&#8243;, &#8220;%1&#8243;, RCData,DVCLAL, &#8220;</p>
<p style="text-align: left;">D:\Resource Hacker\ResHacker.exe&#8221; -delete &#8220;%1&#8243;, &#8220;%1&#8243;, RCData,PACKAGEINFO, &#8220;</p>
<p style="text-align: left;">D:\Resource Hacker\ResHacker.exe&#8221; -delete &#8220;%1&#8243;, &#8220;%1&#8243;, RCData,PACKAGEINFO, &#8220;</p>
<p style="text-align: left;">D:\Resource Hacker\ResHacker.exe&#8221; -delete &#8220;%1&#8243;, &#8220;%1&#8243;, Cursor,, &#8220;</p>
<p style="text-align: left;">D:\Resource Hacker\ResHacker.exe&#8221; -delete &#8220;%1&#8243;, &#8220;%1&#8243;, Bitmap,, &#8220;</p>
<p style="text-align: left;">D:\Resource Hacker\ResHacker.exe&#8221; -delete &#8220;%1&#8243;, &#8220;%1&#8243;, Dialog,, &#8220;</p>
<p style="text-align: left;">D:\Resource Hacker\ResHacker.exe&#8221; -delete &#8220;%1&#8243;, &#8220;%1&#8243;, CursorGroup</p>
<p>اینجاست که <strong>Al3ksCrypter </strong>بدنیا میاد !!!</p>
<p><a href="http://hesam-h.ir/blog/wp-content/uploads/2011/08/crypter01.png"><img class="aligncenter size-full wp-image-1190" title="crypter01" src="http://hesam-h.ir/blog/wp-content/uploads/2011/08/crypter01.png" alt="" width="331" height="427" /></a></p>
<p style="text-align: right;">نرم افزار بسیار ساده است اما دارای برخی ویژگی های اضافی :</p>
<ul>
<li>فایل اصلی ممکن است به صورت اختیاری توسط UPX فشرده شده است.</li>
<li>فایل آلوده برای اجرا ممکن است بصورت Minimize  اجرا شوند.</li>
<li>پارامترهای خط فرمان اضافی ممکن است فراهم شود. (: شماره پورت و پارامترهای اختیاری برای شنونده netcat )</li>
</ul>
<h3>نتیجه</h3>
<p><strong>۲ باره فکر کنید !!</strong> زمانی که میخواهید بر روی هر فایل (از منابع غیر قابل اطمینان) کلیک کنید <strong></strong> : به  آنتی ویروس خود <strong>تکیه نکنید !!!</strong></p>
<p>PS : من منتظر نظرات شما  هستم ! پس دریغ نکنید ، پس منتظر نظرات و پیشنهاداتتون هستم .همچنین اگر شما مطلب خاصی برای اضافه کردن به این مقاله دارید آن را با من در میان بگذارید !</p>
Note: There is a file embedded within this post, please visit this post to download the file.
Note: There is a file embedded within this post, please visit this post to download the file.
<p>اینهم بد نیست</p>
Note: There is a file embedded within this post, please visit this post to download the file.
<p><a href="http://itsecuritylab.eu/index.php/tag/al3kscrypter/">منبع </a></p>
]]></content:encoded>
			<wfw:commentRss>http://hesam-h.ir/blog/1390/06/%da%86%da%af%d9%88%d9%86%d9%87-%d8%aa%d9%85%d8%a7%d9%85%db%8c-%d8%a2%d9%86%d8%aa%db%8c-%d9%88%db%8c%d8%b1%d9%88%d8%b3%d9%87%d8%a7-%d8%b1%d8%a7-%d8%a8%d8%a7%db%8c%d9%be%d8%b3-%da%a9%d9%86%db%8c%d9%85/feed/</wfw:commentRss>
		<slash:comments>3</slash:comments>
		</item>
		<item>
		<title>دوره های آموزش امنیت</title>
		<link>http://hesam-h.ir/blog/1389/11/%d8%af%d9%88%d8%b1%d9%87-%d9%87%d8%a7%db%8c-%d8%a2%d9%85%d9%88%d8%b2%d8%b4-%d8%a7%d9%85%d9%86%db%8c%d8%aa/</link>
		<comments>http://hesam-h.ir/blog/1389/11/%d8%af%d9%88%d8%b1%d9%87-%d9%87%d8%a7%db%8c-%d8%a2%d9%85%d9%88%d8%b2%d8%b4-%d8%a7%d9%85%d9%86%db%8c%d8%aa/#comments</comments>
		<pubDate>Wed, 26 Jan 2011 19:42:13 +0000</pubDate>
		<dc:creator>تبعیدی دست باد</dc:creator>
				<category><![CDATA[آی تی]]></category>
		<category><![CDATA[امنیت]]></category>
		<category><![CDATA[learnsecurity.ir]]></category>
		<category><![CDATA[امنيت]]></category>
		<category><![CDATA[دوره های آموزش امنیت]]></category>

		<guid isPermaLink="false">http://hesam-h.ir/blog/?p=1052</guid>
		<description><![CDATA[همه روزه افرادی هستند که به من مراجعه میکنند برای آموزش امنیت و هک . این روزها متوجه شدم یکی از دوستانم در این زمینه فعالیت دارند و بر خلاف شرکتها و مراجعی که اطلاعات زیادی در این زمینه نداشته و صرفا جهت خالی کردن جیب شما دوستان فعالیت میکنند ، این شرکت میتواند علاوه [...]]]></description>
			<content:encoded><![CDATA[<p><a href="http://hesam-h.ir/blog/wp-content/uploads/2011/01/security.png"></a><a href="http://hesam-h.ir/blog/wp-content/uploads/2011/01/security.jpg"><img class="aligncenter size-full wp-image-1059" title="security" src="http://hesam-h.ir/blog/wp-content/uploads/2011/01/security.jpg" alt="" width="345" height="231" /></a></p>
<p>همه روزه افرادی هستند که به من مراجعه میکنند برای آموزش امنیت و هک . این روزها متوجه شدم یکی از دوستانم در این زمینه فعالیت دارند و بر خلاف شرکتها و مراجعی که اطلاعات زیادی در این زمینه نداشته و صرفا جهت خالی کردن جیب شما دوستان فعالیت میکنند ، این شرکت میتواند علاوه بر انتقال اطلاعات مفید به شما ، شما را در مسیر صحیح قرار داده و باعث پیشرفت شما گردد .</p>
<p>برای اطلاعات و دریافت جزییات بیشتر  با آدرسهای ذیل ارتباط برقرار کنید .</p>
<p>تماس سریع : ۰۹۳۹۴۶۶۲۳۳۱</p>
<p>ایمیل » training[at]learnsecurity.ir</p>
<p>آدرس : میدان انقلاب ، خیابان قدس ، روبه روی درب شرقی دانشگاه تهران &#8211; کوی فردانش ، پلاک ۲۲ ، شماره ۳۰۲ &#8211; تلفن : ۸۸۹۹۱۱۵۰</p>
<blockquote><p><span style="color: #ff0000;">در ضمن قبل از ثبت نام حتما این مورد رو ذکر کنید که از طرف بنده هستید تا کمی از خجالت شما در بیان !</span></p></blockquote>
<p>-   انجام انواع تخصصی آزمون نفوذپذیری [۱]</p>
<p>توضیح :  تست نفوذ پذیری فرآیند ارزیابی امنیتی شبکه یا نرم افزارهای رایانه ای ، بوسیله شبیه سازی حمله ای است که توسط هکر انجام می شود.</p>
<p>تست های نفوذ پذیری معمولا با یکی از سه روش  :</p>
<p>-        جعبه سفید[۲]</p>
<p>-         جعبه سیاه[۳]</p>
<p>-         جعبه کرسیتالی [۴]</p>
<p>اجرا می شود.</p>
<p>بعنوان مثال اگر تمرکز تست کننده  روی منابع یک رایانه در شبکه باشد، مثال هایی که می تواند به تست نفوذ پذیری موفق منجر شود شامل دسترسی به اسناد محرمانه و لیست های قیمت ، پایگاهای داده و اطلاعات حفاظت شده دیگر است.</p>
<p>شرکت رایان پژوهان تکنیک ،  قادر به ارائه خدمات آزمون نفوذپزیری به صورت کاملا ریز و تخصصی به شرح  زیر است :</p>
<p><span id="more-1052"></span></p>
<p>* · تحلیل آسیب پذیری های برنامه ها [۵] :</p>
<p>شرکت انواع مخلتفی از پروژهای تحلیل آسیب پذیریهای  مبتنی بر برنامه های کاربردی و تحت وب را با هدف نفوذ به نرم افزار ها می پذیرد. با توجه به تعهدات تعریف شده در پروژه, متد های ما معمولا شامل موارد زیر می شوند :</p>
<p>۱-    فازینگ[۶]</p>
<p>۲-    معندسی معکوس[۷]</p>
<p>۳-    تزریق  اطلاعات[۸]</p>
<p>۴- تحلیل فایل اجرایی هدف و دیباگ کردن آن</p>
<p>۵- دستکاری نشست ها</p>
<p>۶- تحلیل منطق و رویه کار برنامه</p>
<p>امروزه  تعداد بیشماری آسیب پذیری های خصوصی[۹] وجود دارند که در واقع دارای هیچ راه حل تخریبی به صورت عمومی نیستند . هر تست نفوذپذیری حرفه ای باید شامل تست به صورت آسیب پذیری های شناخته شده و نا شناخته باشد .</p>
<p>آسیب پذیری های شناخته شده آسیب پذیری هایی هستند که دارای وصله های امنیتی هستند و به صورت عمومی افشا شده اند.  در داخل  این آسیب پذیری ها عمومی در برخی موارد دارای اکسپلویت ها عمومی و خصوصی هستیم[۱۰] .</p>
<p>آسیب پذیری های ناشناخته [۱۱] آسیب پذیری هایی هستند که  تا زمان ارائه وصله های امنیتی از طرف فروشنده و پیدا کننده آسیب پذیری  افشا نمی شوند و یا به صورت آزادانه کشف می شوند و تا زمانی که فرد دیگری آن را پیدا نکند افشای آنها منتفی است . حمله های هدفمند معمولا از این آسیب پذیری ها استفاده می کنند.</p>
<p>فازینگ و تشخیص آسیب پذیری  [۱۲] ها به عقیده بسیاری از کارشناسان امنیت ، هماند خونی است که در رگهای Security  در گردش است . این عقیده در نگاه اول اغراق آمیز می نماید ، اما در واقعیت زمانی که دسته بندی های مربوط به تست های نفوذ پذیری[۱۳] را که حاصل تجربیات بسیار محققان امنیت است را در کنار هم قرار می دهیم ، با سه دسته بندی عمده در این تست ها مواجه می شویم ، که هر سه دسته بندی جزئی از روشهای کشف و تشخیص  آسیب  پذیری ها را تشکیل می دهند .</p>
<p>به طور کلی ما در این جا با سه روش برای پویش آسیب پذیری ها مواجه هستیم   :</p>
<p>* White box ، خواندن و آنالیز سورس کدهای برنامه [۱۴] و کشف آسیب پذیری ها با مطالعه تمام و کمال منابعی است که در دسترس کارشناس امنیت می باشد و او با آشنایی با زبان برنامه نویسی آن سیستم سعی خود را در کشف نقاط تاریک کد می نماید.</p>
<p>* Black Box ،  تست کور [۱۵] ، تستی که هیچ اطلاعاتی از نحوه ساختار برنامه در آن موجود نیست ، و نفوذ گر فقط با دانشی که از مواجهه با این برنامه ها به دستی آورده ، می تواند ساختاری مبهمی از برنامه مورد تست داشته باشد. (مباحث فازینگ در این مرحله مطرح میگردند  )</p>
<p>* Gary Box   : تست نفوذ پذیری ای است که نفوذ گر منابع اولیه (همانند برنامه اصلی ) و نیز برخی از  معرفی نامه ها و نوشتار های کمکی [۱۶] برنامه را در دست دارد .</p>
<p>تیم ما برای  مشتریانش تلاش میکند تا آسیب پذیری های ناشناخته محصولات آنها را با استفاده از مراحل ۶ گانه بالا  کشف کرده و امنیت بیشتری را برای آنها به ارمغان آورد.  تیم ما معتقد بر این امر است  که تنها نمایش  موفقیت آمیز کد مخرب  میتواند به خوبی ضعف سیستم را نشان دهد. کشف آسیب پذیری و نوشتن اکسپلویت دو متد کاملا مجزا هستند که نیاز به مهارت های خاص خود را دارند. نمایش این اکسپلویت میتواند از اجرای یک دستور SQL در یک صفحه تا اجرای یک حمله چند مرحله ای پیشرفته  بر روی حافظه سیستم هدف باشد.</p>
<p>* · ارزیابی امنیت شبکه</p>
<p>رایان پژوهان تکنیک از ابزار های تجاری مانند CANVAS و Core Impact [17]و به همراه ابزارها  و متد های مختلف عمومی جمع آوری اطلاعات  برای ارزیابی شبکه و مشتریان شبکه استفاده میکند.</p>
<p>ارزیابی های ما  معمولا موارد زیر را شامل می گردند :</p>
<p>- ارزیابی داخلی شبکه (به صورت جعبه سفید )</p>
<p>- ارزیابی خارجی شبکه (به صورت جعبه سیاه و یا کریستالی )</p>
<p>ارزیابی خارجی یکی از عمومی ترین ره آوردهای تست نفوذپذیری می باشد. این تست بر روی سرور ها، زیر ساخت های شبکه و زیر ساخت های نرم افزارهای سازمان انجام می گیرد. این تست ممکن است بدون دریافت هیچگونه اطلاعاتی از سازمان مورد نظر صورت گیرد ( جعبه سیاه – Black Box )یا با دریافت کلیه اطلاعات توپولوژیکی و محیطی صورت گیرد ( جعبه شفاف – Crystal Box ). این تست ابتدا با استفاده از اطلاعات عمومی و در دسترس از سازمان مورد نظر شروع می شود و سپس با شناسایی میزبان ها و سرور های شبکه هدف و تجزیه و تحلیل آن ادامه پیدا می کند. در ادامه رفتارهای ابزارهای امنیتی مانند مسیریابها و دیواره های آتش تجزیه و تحلیل می گردند. آسیب پذیری های موجود برای هر میزبان شبکه مشخص و بازبینی می گردند و دلایل آن نیز مشخص می شود.</p>
<p>تست امنیتی داخلی روالی مانند تست بیرونی دارد اما یک دید کامل تری نسبت به مسایل امنیتی سازمان ارائه می دهد. این تست عموما از شبکه های دارای  Access Point و بازدید و مرور دوباره قسمتهای فیزیکی و منطقی شبکه انجام می گیرد. برای نمونه ممکن است لایه های شبکه، DMZ درون شبکه و شبکه های شرکاء[۱۸] که با شبکه شما مرتبط می باشند نیز مورد بررسی و تست قرار گیرد.</p>
<p>* · تست برنامه های تحت وب</p>
<p>رایان پژوهان تکنیک از متدولوژی های OWASP برای کشف آسیب پذیری های تحت وب بر روی انواع زبان های برنامه نویسی تحت وب مانند PHP و ASP و ASP.net و JSP و Python و … استفاده میکنند. آسیب پذیری های مختلفی در این بخش ممکن است کشف شوند که مهم ترین آنها عبارتند از : [۱۹]</p>
<p>o       تزریق کد به برنامه</p>
<p>o       تزریق کد SQL به برنامه</p>
<p>o       تزریق فایل به برنام</p>
<p>o       تزریق اسکرپیت به برنامه</p>
<p>o       دورزدن اعتبار سنجی</p>
<p>o       دستکاری نشت ها</p>
<p>تیم رایان پژوهان تکنیک در این مرحله بر روی آسیب پذیری های سرور وب و سرویس های اصلی مرتبط با آنها نیز توانایی فعالیت را دارا می باشد .  تیم ما مشکلات امنیتی مختلفی را در سیستم های امنیتی دنیا ثبت و  به دید عموم گذارده است.</p>
<p>* · تحلیل کد برنامه</p>
<p>تحلیل کد برنامه ، جزئی از روش های جعبه سفید است که شرکت برای مشتریانش ارائه میکند ، در این تحلیل ها ، متخصصان امنیتی که آشنایی کامل با زبان مقصد را دارند ، به تحلیل آسیب پذیری های موجود در کد ها می پردازند</p>
<p>زبانهایی همچون :</p>
<p>o       اسمبلی (تحلیل کد فایل اجرایی)</p>
<p>o       زبانهای C/C++</p>
<p>o       جاوا</p>
<p>o       زبان های مایکروسافت (asp , asp.net , vb.net , c#)</p>
<p>o       زبان های اسکرپیت نویسی (Perl, Python , PHP)جزو تست های ما قرار میگیرند .</p>
<p>به عنوان نمونه در تحلیل یک کد Java classic و یا ASP.NET ما حملاتی همچون :</p>
<p>Abuse of Functionality</p>
<p>Brute Force</p>
<p>Buffer Overflow</p>
<p>Content Spoofing</p>
<p>Credential/Session Prediction</p>
<p>Cross-Site Scripting</p>
<p>Cross-Site Request Forgery</p>
<p>Denial of Service</p>
<p>Fingerprinting</p>
<p>Format String</p>
<p>HTTP Request Splitting</p>
<p>HTTP Response Splitting</p>
<p>HTTP Request Smuggling</p>
<p>HTTP Response Smuggling</p>
<p>Integer Overflows</p>
<p>LDAP Injection</p>
<p>Mail Command Injection</p>
<p>Null Byte Injection</p>
<p>OS Commanding</p>
<p>Path Traversal</p>
<p>Predictable Resource Location</p>
<p>Remote File Inclusion (RFI)</p>
<p>Routing Detour</p>
<p>SOAP Array Abuse</p>
<p>SSI Injection</p>
<p>Session Fixation</p>
<p>SQL Injection</p>
<p>URL Redirector Abuse</p>
<p>XPath Injection</p>
<p>XML Attribute Blowup</p>
<p>XML External Entities</p>
<p>XML Entity Expansion</p>
<p>XML Injection</p>
<p>XQuery Injection</p>
<p>مورد بررسی قرار داده و در کدهای شما به دنبال تمام این حملات خواهیم گشت و در صورت یافتن آسیب پذیری ، آنها را اصلاح می نماییم .</p>
<p>اصلاح کد های شما به دو صورت خواهد بود :</p>
<p>الف : تغییر ساختار اصلی برنامه و برنامه نویسی مجدد</p>
<p>ب: سوار نمودن لایه های امنیتی بر روی نرم افزار شما  که کارشناسان شرکت آنها را نوشته و در اختیار شما قرار می دهند .</p>
<p>برنامه نویسان شرکت توانایی نوشتن ابزار های خودکار سازی خواندن کد ها به صورت هوشمند را دارا می باشند ، این ابزار ها میتوانند در بسیار ی از موارد برای شما به صورت یک اسکنر  نیمه خودکار ، سورس برنامه نوشته شده به زبان های اشاره شده در متن را تحلیل کرده و مشکلات امنیتی شناخته شده را در آنها پیگیری نمایند  و گزارشی مبنی بر عملکرد برنامه نویسان در سطح امنیتی ارائه نمایند .</p>
<p>* · معندسی معکوس [۲۱]</p>
<p>مهندسی معکوس مجموعه ای حساس از تکنیکها و ابزارها برای فهمیدن اینکه محتوای یک نرم افزار شامل چه چیزهایی میباشد. به عبارت دیگر عمل تجزیه و تحلیل یک سیستم برای مشخص کردن مولفه های سیستم و رابطه متقابل آنها به منظور نمایش سیستم به شکلی دیگر یا در سطحی بالاتر می باشد. این نوع تکنیکها باعث میشود تا ساختار یک نرم افزار را نمایان نموده و راههای عملکرد آن و همچنین ویژگیهایی که طبق آن حرکت میکند را مشخص کنیم.</p>
<p>آیا شما مهندسی معکوس را نادیده میگیرید؟</p>
<p>فرض کنید شما نرم افزاری را توسعه داده و به فروش رسانده اید! آیا نمیخواهید دیگران به حقوق کپی [۲۲] شما احترام بگذارند؟ این بحث معمولا” از معانی منفی عبارت مهندسی معکوس به خصوص در صنعت نرم افزار سازی شروع میشود.</p>
<p>به هر حال تکنیکهای مهندسی معکوس راه هایی هستند برای تولید کننده ها و مصرف کننده های نرم افزار که با مقوله عرضه اقتصادی در یک زنجیره قرار میگیرند. در نظر داشته باشید که این ابزار (راهکار) به طور ذاتی خوب یا بد نیست، موضوع قابل توجه این است که این ابزار در چه راه هایی مورد استفاده قرار میگیرد. مهندسی معکوس به ویژه در نرم افزارهای پیشرفته برای اهداف خاص مورد استفاده قرار میگیرد :</p>
<p>- یافتن کدهای مخرب: تعدادی از تکنیکهای ویروس یابی از مهندسی معکوس برای دستیابی به ساختار و عملکرد این کدهای مخرب استفاده میکنند. به وسیله این تکنیکها نرم افزارهایی تولید میشود که برای مبارزه با ویروس های کامپیوتری مورد استفاده قرار میگیرد.</p>
<p>- کشف خطاهای ذاتی[۲۳] و نقص های غیر منتظره: حتی بهترین سیستمهای نرم افزاری میتواند دارای خطا باشد که با استفاده از مهندسی معکوس میتوان آنها را پیدا کرده و رفع نمود [۲۴].</p>
<p>تیم رایان پژوهان تکنیک کادری مجرب در زمینه ی معندسی معکوس ، نرم افزار های مخرب[۲۵] و  سیستمهای محافظتی[۲۶] دارد و میتواند پاسخ گوی سریعی در زمینه های زیر را برای شما باشد :</p>
<p>* · تحلیل رفتار نرم افزار مخرب</p>
<p>* · عملیات انجام شده توسط نرم افزار مخرب</p>
<p>* · تحلیل نقاط آسیب پذیری که سبب اجرا نرم افزار مخرب در زیرساختار می گردد</p>
<p>* · تحلیل حملات</p>
<p>* · خروجی گرافیکی و کامل  از کلیات کار نرم افزار مخرب</p>
<p>* · ارائه راهکار در قالب برنامه های خودکار سازی شده (اتوماتیک )</p>
<p>ما در بخش تحلیل سیستم های محافظتی با اجرای مهندسی معکوس بر روی قفل های  نرم افزاری و یا سخت افزاری شما ، برای کشف آسیب پذیری در سیستم محافظتی آنها عملیاتی انجام می دهیم  و در صورت موفق بودن عملیات  با ارائه ی یک  برنامه و یا یک کد معتبر،ضعف  اعتبار سنجی سیستم محافظتی را برایتان به نمایش  می گذاریم  و سپس در یک بسته ی دیگر راهکار را به شما ارائه می کنیم /</p>
<p>این بخش شامل موارد زیر میشود:</p>
<p>* · تحلیل انواع سیستم های رمزنگاری و محافظت از فایل های اجرایی</p>
<p>* · تحلیل ساختار حافظه برنامه اجرایی</p>
<p>* · تحلیل الگوریتم محافظتی و ساختن یک الگوریتم مشابه</p>
<p>* · نوشتن اکسپلویت (کد های مخرب حمله )</p>
<p>تیم مجرب رایان پژوهان تکنیک رزومه درخشانی در کشف آسیب پذیری و نوشتن اکسپلویت (کد های مخرب)  برای آنها دارد و میتواند در شرایط بسیار پیچیده اقدام به تهیه ی اکسپلویتهای پیچیده برای آسیب پذیری های مختلف به شرح زیر داشته باشد :</p>
<p>* · اکسپلوییت های بازنویسی حافظه  تنها با یک بایت رایت شده در آن  [۲۷]</p>
<p>* · اکسپلویت های سطح هسته ی سیستم عامل [۲۸]</p>
<p>* · اکسپلویت هایی در بافرهای بسیار محدود[۲۹]</p>
<p>* · اکسپلویت هایی مبتنی بر توده[۳۰]</p>
<p>* · اکسپلویت هایی برای دورزدن سیستم های محافظتی حافظه[۳۱]</p>
<p>* · نوشتن اکسپلویت برای وصله های امنیتی موجود[۳۲]</p>
<p>* · اکسپلوییت های تحت وب</p>
<p>* · اکسپلوییت های سرویس های شبکه ای</p>
<p>من ا… التوفیق</p>
<p>شرکت : رایان پژوهان تکنیک</p>
<p>www.LearnSecurity.ir</p>
<p>[1] برای اطلاع از نحوه تست های نفوذ پذیری و ارائه مطالب تخصصی تر در این زمینه با شرکت تماس حاصل فرمایید</p>
<p>[۲] White Box</p>
<p>[3] Black Box</p>
<p>[4] Crystal Box</p>
<p>[5] Application Vulnerability Analysis</p>
<p>[6] Fuzzing</p>
<p>[7] Reverse Engineering</p>
<p>[8] Data Injection</p>
<p>[9] Private Vulnerability</p>
<p>[10] Exploit = کد های مخرب برای استفاده از آسیب پذیری به دست آمده</p>
<p>[۱۱] ۰day</p>
<p>[12] Vulnerability Assessment</p>
<p>[13] Penetration Testing</p>
<p>[14] Source code Auditing</p>
<p>[15] Blind testing</p>
<p>[16] Document</p>
<p>[17] ابزار های پیشرفته تست نفوذ پذیری. شما برای اطلاعات بیشتر در مورد این سری ابزار ها و تهیه آنها با شرکت تماس حاصل فرمایید</p>
<p>[۱۸] Third-Party</p>
<p>[19] برای اطلاعات بیشتر و تخصصی تر  در مورد این گونه آسیب پذیری ها با شرکت تماس حاصل نمایید</p>
<p>[۲۱] Reverse Engineering</p>
<p>[22] Copyright</p>
<p>[23] Bug</p>
<p>[24] Debug</p>
<p>[25] Malware</p>
<p>[26] Software Protection</p>
<p>[27] One-Byte Overwrite</p>
<p>[28] Kernel Exploit</p>
<p>[29] Limited-Buffer</p>
<p>[30] Heap Overflow</p>
<p>[31] Memory Protections</p>
<p>[32] Patch Analysis</p>
]]></content:encoded>
			<wfw:commentRss>http://hesam-h.ir/blog/1389/11/%d8%af%d9%88%d8%b1%d9%87-%d9%87%d8%a7%db%8c-%d8%a2%d9%85%d9%88%d8%b2%d8%b4-%d8%a7%d9%85%d9%86%db%8c%d8%aa/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>بررسی باگ موجود در بازی آنلاین آسمان دژ</title>
		<link>http://hesam-h.ir/blog/1389/09/%d8%a8%d8%b1%d8%b1%d8%b3%db%8c-%d8%a8%d8%a7%da%af-%d9%85%d9%88%d8%ac%d9%88%d8%af-%d8%af%d8%b1-%d8%a8%d8%a7%d8%b2%db%8c-%d8%a2%d9%86%d9%84%d8%a7%db%8c%d9%86-%d8%a2%d8%b3%d9%85%d8%a7%d9%86-%d8%af%da%98/</link>
		<comments>http://hesam-h.ir/blog/1389/09/%d8%a8%d8%b1%d8%b1%d8%b3%db%8c-%d8%a8%d8%a7%da%af-%d9%85%d9%88%d8%ac%d9%88%d8%af-%d8%af%d8%b1-%d8%a8%d8%a7%d8%b2%db%8c-%d8%a2%d9%86%d9%84%d8%a7%db%8c%d9%86-%d8%a2%d8%b3%d9%85%d8%a7%d9%86-%d8%af%da%98/#comments</comments>
		<pubDate>Thu, 25 Nov 2010 16:19:36 +0000</pubDate>
		<dc:creator>تبعیدی دست باد</dc:creator>
				<category><![CDATA[امنیت]]></category>
		<category><![CDATA[asmandez.ir]]></category>
		<category><![CDATA[simulator.ir]]></category>
		<category><![CDATA[آسمان دژ]]></category>
		<category><![CDATA[باگ در سیستم آسمان دژ]]></category>
		<category><![CDATA[برخورد نامناسب توسعه دهدگان بازی]]></category>

		<guid isPermaLink="false">http://hesam-h.ir/blog/?p=957</guid>
		<description><![CDATA[برای موضوع جدید وبلاکم بد ندیدم کمی در مورد این موضوع صحبت کنم . چندی پیش در مورد این بازی آنلاین در مجلات و روزنامه ها اخبارهایی شنیدم و بد ندیدم این بازی تماما ایرانی رو مورد بررسی قرار بدم ! و برای زمانهای بیکاری چند کلیک از موس خود رو به این بازی اختصاص [...]]]></description>
			<content:encoded><![CDATA[<p><a href="http://hesam-h.ir/blog/wp-content/uploads/2010/11/logo-e1290700880413.png"><img class="alignright size-full wp-image-958" title="logo" src="http://hesam-h.ir/blog/wp-content/uploads/2010/11/logo-e1290700880413.png" alt="" width="217" height="97" /></a></p>
<p>برای موضوع جدید وبلاکم بد ندیدم کمی در مورد این موضوع صحبت کنم .</p>
<p>چندی پیش در مورد این بازی آنلاین در مجلات و روزنامه ها اخبارهایی شنیدم و بد ندیدم این<a href="http://asemandez.ir"> بازی تماما ایرانی </a>رو مورد بررسی قرار بدم ! و برای زمانهای بیکاری چند کلیک از موس خود رو به این بازی اختصاص بدم و با نحوه کار این بازی و رویه و ساز و کار اوون آشنا بشم . به هر حال بعد از چند روز بازی متوجه ساختار بسیار خوب و قابل تحسین توسعه دهندگان اون شدم .و متوجه شدم این بازی مربوط به شرکتی به نام <a href="http://simulator.ir/">توسعه گستر شبیه ساز</a> هست ،  هست که از سال ۱۳۸۰ کار خود را شروع کرده و فعالیتهای زیادی در زمینه های نرم افزاری انجام داده .</p>
<p>این بازی جدید من رو به یاد پروژه گوگل در مورد جنگ سیارات در زمینه هوش مصنوعی انداخت.</p>
<p>*اخیرا دوره دوم مسابقه برنامه نویسی هوش مصنوعی گوگل توسط دانشگلاه  واترلو کانادا از ۲۷ سپتامبر گذشته شروع به کار کرده.</p>
<p><a href="http://hesam-h.ir/blog/wp-content/uploads/2010/11/planetwars.png"><img class="alignright size-full wp-image-959" title="planetwars" src="http://hesam-h.ir/blog/wp-content/uploads/2010/11/planetwars.png" alt="" width="226" height="234" /></a>زبانهای برنامه نویسی بسیاری در این دوره پشتیبانی شده اند مانند C#,  C++, Java, Python, PHP حتی Lisp هم شامل اونها هست. برای مشاهده لیست  زیانهای پشتیبانی شده <a href="http://www.ai-contest.com/starter_packages.php" target="_blank">اینجا</a> مراجعه کنید.</p>
<p>موضوع این دوره جنگ سیارات هست که الهام گرفته از بازی فلش <a href="http://www.galcon.com/flash/" target="_blank">Galcon</a> هست. در این بازی باید تمامی سیارات دشمن رو تسخیر کنید. استراتژی و  الگوریتم هوش مصنوعی که برای این منظور به کار می گیرید تعیین کننده پیروزی  یا شکست شما خواهد بود. در این میان میتونید از سیاراتی که هنوز تسخیر  نشده اند هم کمک بگیرید. به همین سادگی!</p>
<p>البته در این بازی هوش خود شما به کمک شما خواهد امد .</p>
<p>و البته این بازی و پیاده سازی اون میتونه نمونه خوبی برای تیم توسعه دهنده این بازی باشه .</p>
<p>به هرحال از هرچه بگذریم سخن دوست خوشتر است . طبق عادتهای گذشته همیشه کمی با ساختار امنیتی وبسایتهایی که به اوونها علاقه پیدا میکنم !! کمی آزمون و خطا انجام میدم ! که متاسفانه در این آزمون این بازی نمره مردود آورد ! این خبر را در قسمت انجمنهای بازی مطرح کردم (بار اول به طور ضمنی !) که مورد استحضا و دست کم گرفتن و &#8230; پست بنده در این بازی گرفتند. و وقتی اطلاعات تفضیلی در آخرین پست بنده برای اثبات مشکل در سرور و برنامه نویسی بازی ارسال شد و عنوان گردید که برای رفع مشکل با من تماس گرفته بشه ! به ناگهان پست در انجمن مربوطه پاک گردید که حاکی از ترس توسعه دهندگان بازی از دلسردی بازی کنندگان و پاک کردن صورت مسئله بود ! که برای من جای بسی سوال داشت ! در راستای این حرکت این پست را در این رابطه در وبلاگم ایجاد کردم که موضوعی رو بیان کنم و اوون مسئله این هست که متاسفانه در ایران هیچگونه روحیه انتقادی وجود نداره و بلافاصله قدم مثبت شما در راستای بهبود یک امر با رفتاری بسیار نسنجیده تقابل میشود .</p>
<p>به هر حال امیدوارم سازندگان بازی به مشکل خود پی ببرند ! و روحیه انتقاد پذیری رو در خود تقویت کنند .</p>
<p>به امید موفقیت تمامی دوستان .</p>
<p style="text-align: left;">
<p>پ ن ۰۱: بنده مدتها در سایت امنیتی kapda.ir کانون پژوهشگران دانش امنیت ایران عضو بودم ! ما به عنوان یک گروه Whitehat  فعالیت میکردیم تا اینکه کلیه اعضای گروه از ادامه فعالیت در این زمینه بدون هیچ پشتوانه مالی مائوس شدند و گروه پس از ۲ سال از ادامه کار در این زمینه انصراف داد .شایان ذکر است که اگر هم اکنون نیز به آرشیو سایتهای امنیتی سری بزنید باگهای مربوط به این گروه را خواهید یافت .و بسیاری از سایتهای ایرانی و سرورها را در مورد مشکلات امنیتیشان با خبر مینمودیم و در مقابل ، آنها نیز چون در پی ساز و کار و فعالیت اقتصادی خود بودند هیچگونه همکاری با نمینمودند  در صورتی که پیدا کردن یک باگ در سرور که دسترسی Root در  سرور ایجاد کند میلیونها تومان ارزش مادی برای توسعه دهندگان سرورها دارد .شایان ذکر است با باگهایی که ما در سیستمها کشف میکردیم قادر بودیم در یک روز رکورد بزرگترین گروههای امنیتی و هک را در zone-h  (سایتی جهت ثبت سایتهایی که هک میشوند) بشکنیم .</p>
<p>که این با تعریف یک هکر کلاه سفید به هیچ عنوان سازگار نیست .چه بسا سایتهایی که شنیدن نام آنها باعث شگفتی شما خواهند شد در دست ما بود اما تنها موضوع را اطلاع رسانی نمودیم .</p>
<p>به هرحال بنده از این باگ در این سرور هیچگونه استفاده ای ننمودم و حقوق کلیه دوستانی که در این سیستم بازی میکنند را نیز محفوظ نگاه داشتیم.</p>
<p>پ ن ۱۱ &#8211; این پست تنها یک گلایه بود.</p>
<p><strong>عید غدیر بر تمام شما مبارک .</strong><a href="http://hesam-h.ir/blog/wp-content/uploads/2010/11/logo.png"><br />
</a></p>
<p>پانوشت :</p>
<p>با همکاری تیم یکسری از مشکلات حل شد . موفق باشی آسمان دژ .</p>
]]></content:encoded>
			<wfw:commentRss>http://hesam-h.ir/blog/1389/09/%d8%a8%d8%b1%d8%b1%d8%b3%db%8c-%d8%a8%d8%a7%da%af-%d9%85%d9%88%d8%ac%d9%88%d8%af-%d8%af%d8%b1-%d8%a8%d8%a7%d8%b2%db%8c-%d8%a2%d9%86%d9%84%d8%a7%db%8c%d9%86-%d8%a2%d8%b3%d9%85%d8%a7%d9%86-%d8%af%da%98/feed/</wfw:commentRss>
		<slash:comments>28</slash:comments>
		</item>
		<item>
		<title>Script Fragmentation چیست ؟</title>
		<link>http://hesam-h.ir/blog/1389/06/script-fragmentation-%da%86%db%8c%d8%b3%d8%aa-%d8%9f/</link>
		<comments>http://hesam-h.ir/blog/1389/06/script-fragmentation-%da%86%db%8c%d8%b3%d8%aa-%d8%9f/#comments</comments>
		<pubDate>Fri, 17 Sep 2010 19:45:33 +0000</pubDate>
		<dc:creator>تبعیدی دست باد</dc:creator>
				<category><![CDATA[امنیت]]></category>
		<category><![CDATA[Script Fragmentation]]></category>

		<guid isPermaLink="false">http://hesam-h.ir/blog/?p=832</guid>
		<description><![CDATA[هر روزه روشهای جدیدتری برای رسوخ به سیستمهای قربانیان کشف و استفاده میگردد . یکی از این روشها روش ، موسوم به قطعه قطعه شدن برنامه مخرب است ،که  شامل تجزیه نرم افزارهای مخرب به قطعات کوچکتر به منظوروروود از طریق مرورگر قربانی میباشد  .این بد افزار به صورت تکه تکه وارد مرورگر شما میشود [...]]]></description>
			<content:encoded><![CDATA[<p><a href="http://hesam-h.ir/blog/wp-content/uploads/2010/09/images.jpg"><img class="size-full wp-image-834 alignright" title="Script Fragmentation" src="http://hesam-h.ir/blog/wp-content/uploads/2010/09/images.jpg" alt="Script Fragmentation" width="171" height="253" /></a></p>
<p>هر روزه روشهای جدیدتری برای رسوخ به سیستمهای قربانیان کشف و استفاده میگردد .</p>
<p>یکی از این روشها روش ، موسوم به قطعه قطعه شدن برنامه مخرب است ،که  شامل تجزیه نرم افزارهای مخرب به قطعات کوچکتر به منظوروروود از طریق مرورگر قربانی میباشد  .این بد افزار به صورت تکه تکه وارد مرورگر شما میشود هر یک از این قسمتها به تنهایی هیچ سوء ظنی برای مرورگر و یا ضد ویروس شما ایجاد نمینماید و بعد از اینکه وارد شد میتواند به راحتی کلیه سیستمهای ایمنی شما غیرفعال نموده و به کار خود در سیستم شما ادامه دهد.</p>
<p>سناریو به چه شکل است :</p>
<p>نفوذگر در ایبتدا بدافزار خود را در یک صفحه WEb متصل میکند ، کد ابتدایی در ابتدا یک کد javascript  بسیار معمولی به نظر میرسد که در بارگذاری ابتدایی صفحه وارد سیستم شما میشود ، تا اینجا هیچ مشکلی وجود نخواهد داشت ، وقتی بازدید کننده منتظر بارگذاری ائامه صفحه میباشد کد جاوا اسکریپت مربوطه به تدریج تقااضاهای جدیدی برای دریافت قطعات کد آلوده درخواست میکند (در هرثانیه تنها چند بایت !!) اگر آنتی ویروس این قطعات را مورد بررسی قرار دهد به هیچ مورد مشکوکی نیز برنخواهد خورد ! در این هنگام کد جاوااسکریپت مربوطه  یک DOM(Document object method) میسازد و این باعث میشود مرورگر اطلاعاتی را به صورت متنی درون یک node بیافزاید .اینکار باعث میشود که کدی که درون SCRIPT ELEMT هست اجرا گردد .</p>
<p>شما میتوانید این مقاله را در<a href="http://www.eweek.com/c/a/Security/Script-Fragmentation-Attack-Could-Allow-Hackers-to-Dodge-AntiVirus-Detection/"> این </a>وبسایت مشاهده نمایید.</p>
<p><abbr title="::دمو::"></abbr></p>
]]></content:encoded>
			<wfw:commentRss>http://hesam-h.ir/blog/1389/06/script-fragmentation-%da%86%db%8c%d8%b3%d8%aa-%d8%9f/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>نفوذ از طریق دستورات Sql</title>
		<link>http://hesam-h.ir/blog/1388/11/%d9%86%d9%81%d9%88%d8%b0-%d8%a7%d8%b2-%d8%b7%d8%b1%db%8c%d9%82-%d8%af%d8%b3%d8%aa%d9%88%d8%b1%d8%a7%d8%aa-sql/</link>
		<comments>http://hesam-h.ir/blog/1388/11/%d9%86%d9%81%d9%88%d8%b0-%d8%a7%d8%b2-%d8%b7%d8%b1%db%8c%d9%82-%d8%af%d8%b3%d8%aa%d9%88%d8%b1%d8%a7%d8%aa-sql/#comments</comments>
		<pubDate>Mon, 15 Feb 2010 22:08:21 +0000</pubDate>
		<dc:creator>تبعیدی دست باد</dc:creator>
				<category><![CDATA[امنیت]]></category>
		<category><![CDATA[sql injection]]></category>
		<category><![CDATA[تزريق دستورات اس كيو ال]]></category>

		<guid isPermaLink="false">http://hesam-h.ir/blog/?p=520</guid>
		<description><![CDATA[همیشه مقالات خوبی در زمینه امنیت مشاهده میکنم که خودم دیگه وقت نگارش و ترجمه مقالاتی رو که میخونم ندارم. در ادامه مقاله ای بسیار خوب رو برای شما میگذارم که استفاده شایانی میتونید از این مقاله داشته باشید. SQLInjection(www.hesam-h.ir) حجم فایل در حدود ۸ مگابایت هست. منبع:www.network-toturial.com]]></description>
			<content:encoded><![CDATA[<p><a href="http://hesam-h.ir/blog/wp-content/uploads/2010/02/sql_img.jpg"></a><a href="http://hesam-h.ir/blog/wp-content/uploads/2010/02/sql-inject.jpg"><img class="aligncenter size-medium wp-image-527" title="sql-inject" src="http://hesam-h.ir/blog/wp-content/uploads/2010/02/sql-inject-300x225.jpg" alt="" width="300" height="225" /></a></p>
<p style="text-align: justify;">همیشه مقالات خوبی در زمینه امنیت مشاهده میکنم که خودم دیگه وقت نگارش و ترجمه مقالاتی رو که میخونم ندارم.</p>
<p style="text-align: justify;">در ادامه مقاله ای بسیار خوب رو برای شما میگذارم که استفاده شایانی میتونید از این مقاله داشته باشید.</p>
<p style="text-align: justify;"><span id="more-520"></span></p>
<p style="text-align: justify;"><span style="color: #0000ee;"><span style="text-decoration: underline;"><a href="http://hesam-h.ir/blog/wp-content/uploads/2010/02/SQLInjectionwww.hesam-h.ir_.zip">SQLInjection(www.hesam-h.ir)</a></span></span></p>
<p style="text-align: justify;">حجم فایل در حدود ۸ مگابایت هست.<br />
منبع:www.network-toturial.com</p>
]]></content:encoded>
			<wfw:commentRss>http://hesam-h.ir/blog/1388/11/%d9%86%d9%81%d9%88%d8%b0-%d8%a7%d8%b2-%d8%b7%d8%b1%db%8c%d9%82-%d8%af%d8%b3%d8%aa%d9%88%d8%b1%d8%a7%d8%aa-sql/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>جلوگیری از ورود اطلاعات نا معتبر در Database از طریق Sql Transaction (بخش دوم)</title>
		<link>http://hesam-h.ir/blog/1388/09/%d8%ac%d9%84%d9%88%da%af%db%8c%d8%b1%db%8c-%d8%a7%d8%b2-%d9%88%d8%b1%d9%88%d8%af-%d8%a7%d8%b7%d9%84%d8%a7%d8%b9%d8%a7%d8%aa-%d9%86%d8%a7-%d9%85%d8%b9%d8%aa%d8%a8%d8%b1-%d8%af%d8%b1-database-%d8%a7-2/</link>
		<comments>http://hesam-h.ir/blog/1388/09/%d8%ac%d9%84%d9%88%da%af%db%8c%d8%b1%db%8c-%d8%a7%d8%b2-%d9%88%d8%b1%d9%88%d8%af-%d8%a7%d8%b7%d9%84%d8%a7%d8%b9%d8%a7%d8%aa-%d9%86%d8%a7-%d9%85%d8%b9%d8%aa%d8%a8%d8%b1-%d8%af%d8%b1-database-%d8%a7-2/#comments</comments>
		<pubDate>Wed, 25 Nov 2009 05:57:41 +0000</pubDate>
		<dc:creator>تبعیدی دست باد</dc:creator>
				<category><![CDATA[آی تی]]></category>
		<category><![CDATA[امنیت]]></category>
		<category><![CDATA[c#.net]]></category>
		<category><![CDATA[CommittableTransaction]]></category>
		<category><![CDATA[sql injection]]></category>
		<category><![CDATA[SqlTransaction]]></category>
		<category><![CDATA[vb.net]]></category>
		<category><![CDATA[جلوگیری از sql injection]]></category>

		<guid isPermaLink="false">http://hesam-h.ir/blog/?p=100</guid>
		<description><![CDATA[مقدمه : این مقاله در ادامه ی بخش اول مطرح می شود، در صورتی که بخش اول را مطالعه نکرده اید، ابتدا در اینجا بخش اول مقاله را مطالعه کرده و سپس به این بخش بپردازید. همان طور که قبلا گفته شد، در صورت عدم نیاز و یا یافتن روش مناسب در دو روش قبل، [...]]]></description>
			<content:encoded><![CDATA[<p>مقدمه :</p>
<p>این مقاله در ادامه ی بخش اول مطرح می شود، در صورتی که بخش اول را مطالعه نکرده اید، ابتدا در<a href="http://hesam-h.ir/blog/?p=90#more-90://"> اینجا</a> بخش اول مقاله را مطالعه کرده و سپس به این بخش بپردازید.<br />
<span id="more-100"></span></p>
<p>همان طور که قبلا گفته شد، در صورت عدم نیاز و یا یافتن روش مناسب در دو روش قبل، از خواندن روش سوم، به دلیل وجود پیچیدگی، صرف نظر کرده و تنها قسمت آخر این بخش را مطالعه کنید. در صورتی که می خواهید روش سوم را هم مطالعه کنید، به تمرکز حواس زیادی نیاز دارید. همچنین توصیه می شود، پس از اتمام مقاله، این روش را در یک پروژه ی نمونه به کار گیرید، تا با کاربرد آن بیشتر آشنا شوید.</p>
<p> روش سوم – عمل مدیریت اطلاعات را با امکانات بیشتر و البته پیچیدگی بیشتری انجام دهید :</p>
<p>            کلاس: SqlTransaction</p>
<p>            مشخصه ی بارز: پر امکانات ترین روش</p>
<p> پیاده سازی کلی این روش (بدون امکانات ) تا حد زیادی مشابه پیاده سازی روش دوم است.</p>
<p> کلاس SqlTransaction در فضای نامی System.Data.SqlClient قرار دارد، و با توجه به اینکه در هر برنامه ی پایگاه داده، این کلاس قبلا  Imports ( یا در C# ،  Using) شده است، شما نیاز به افزودن هیچ فضای نامی به برنامه نخواهید داشت.</p>
<p>برای پیاده سازی این روش، ابتدا نیاز به یک شی از این کلاس دارید:</p>
<p>Dim sqlTransaction1 As SqlTransaction</p>
<p>نکته: دقت داشته باشید که کلاس SqlTransaction دارای سازنده نیست، پس نباید از کلمه ی کلیدی New در تعریف شی استفاده کنید.</p>
<p>همچنین باید بلافاصله بعد از باز کردن ارتباط، متد BeginTransaction از شی sqlConnection1 را به شی SqlTransaction انتساب دهید:</p>
<p>sqlTransaction1 = sqlConnection1.BeginTransaction()</p>
<p>سپس باید شی SqlTransaction را به خصیصه ی Transaction از شی sqlConnection1 انتساب دهید:</p>
<p>sqlCommand1.Transaction = sqlTransaction1</p>
<p>از اینجای کار، دقیقا مشابه روش دوم است: در این روش باید عملیات ادامه ی کار و بازگشت به قبل از خطا را به صورت دستی پیاده سازی کنید. در صورتی که خطایی رخ دهد، لازم است متد Rollback از شی را فراخوانی کنید:</p>
<p>sqlTransaction1.Rollback()</p>
<p>و در صورت اجرای موفقیت آمیز دستورات، لازم است متد Commit از شی را ( برای اعمال تغییرات در Database ) فراخوانی کنید:</p>
<p>sqlTransaction1.Commit()</p>
<p>همان طور که قبلا هم گفته شد، جایگذاری این دستورات توسط شما و طبق صلاحدید شما انجام می پذیرد، ولی به عنوان یک استاندارد، فراخوانی متد Commit بلافاصله قبل از بستن ارتباط، و فراخوانی متد Rollback در قسمت Catch شده ( در ساختار Try دوم ) قرار می گیرد.</p>
<p> نکته: توجه داشته باشید که نمی توانید قبل از ارسال شی به sqlCommand1 ، عمل Commit و یا Rollback را انجام دهید، ولی قرار دادن آنها پس از بستن ارتباط، مشکلی ایجاد نمی کند.</p>
<p> مثال: کد زیر سابروتینی را نشان می دهد، که یک رکورد به جدول اضافه می کند. در این سابروتین از کلاس SqlTransaction برای عمل Transaction استفاده شده است:<br />
<a href="http://hesam-h.ir/blog/wp-content/uploads/2009/11/sqlTransaction1.jpg"><img src="http://hesam-h.ir/blog/wp-content/uploads/2009/11/sqlTransaction1-300x210.jpg" alt="sqlTransaction1" title="sqlTransaction1" width="300" height="210" class="aligncenter size-medium wp-image-105" /></a><br />
نکته: در اینجا ناگزیرید از دو ساختار Try&#8230; Catch&#8230; End Try تو در تو استفاده کنید، به این دلیل که شی SqlTransaction به دو انتساب نیاز دارد، و در صورتی که در ساختار Try اول، این انتسابها را انجام دهید، نمی توانید در Catch همان ساختار، دستور sqlTransaction1.Rollback() را بنویسید، چون طول عمر انتساب ها قبل از  Catch به اتمام می رسد.</p>
<p>در این سابروتین، برنامه ابتدا یک ارجاع به شی SqlTransaction ایجاد می کند،  و بعد از باز کردن ارتباط، شروع Transaction در شی sqlConnection1 را به شی SqlTransaction انتساب داده و همین طور شی SqlTransaction را به متد Transaction از شی sqlCommand1 انتساب می دهد. سپس عملیات درج در جدول را انجام می دهد، در پایان در صورتی که خطایی رخ ندهد، متد Commit فراخوانی شده و تغییرات در Database ثبت می شوند و اجرای برنامه پس از درج، با موفقیت به پایان می رسد. در غیر این صورت، اگر در ساختار Try&#8230; Catch&#8230; End Try  دوم خطایی رخ دهد، اجرای برنامه، قبل از فراخوانی متد Commit از شی SqlTransaction ، به داخل Catch منتقل می شود و در نتیجه متد Commit فراخوانی نشده و در عوض متد Rollback فراخوانی می شود. این متد ( برخلاف روش اول )، صراحتا تمامی تغییرات Database ( از ارسال شی SqlTransaction به ارتباط، تا اینجا ) نادیده گرفته می شود و Database به حالتی که قبل از اجرای سابروتین AddToTable داشته، باز می گردد.</p>
<p> یک سوال: در اینجا یک سوال پیش می آید و آن اینکه چرا این کلاس ایجاد شده، در صورتی که همین اعمال با روش دوم قابل انجام هستند، آنهم با دستورات و پیچیدگی به مراتب کمتر ؟</p>
<p> پاسخ: درست است که مثال روش سوم بدون اشکال اجرا شده و کاری همانند روش دوم انجام می دهد، ولی در حقیقت این کلاس برای این منظور طراحی نشده است. بلکه این کلاس توانایی دارد، که دو روش قبل در آن احساس عجز می کنند، و آن هم ساختن یک یا چند نقطه ی بازگشت و حرکت بین آنهاست.</p>
<p>برای اینکه بهتر متوجه منظورم بشوید، به سرویس Restore Point در Windows XP ( و بالاتر ) نگاهی بیاندازید. رابط کاربری این سرویس را می توانید به صورت زیر مشاهده کنید: در پنجره ی Run ویندوز، عبارت restore را تایپ کرده و بر روی دکمه ی OK کلیک کنید. در صفحه ی باز شده، فایل restrui.exe را اجراکنید. در این لحظه، صفحه ی خوش آمدگویی System Restore ظاهر می شود. در سمت راست این صفحه دو گزینه وجود دارد. یکی Create Restore Point که توسط آن می توانید یک نقطه ی بازگشت به صورت دستی برای ویندوز ایجاد کنید، و دیگری Restore My Computer To An Earlier Time که تنظیمات و فایل های اصلی ویندوز را (تا حدی که برایش ظرفیت وجود دارد ) به یک زمان زوتر بر می گرداند.</p>
<p> علاوه بر اینکه شما می توانید یک نقطه ی بازگشت بسازید، خود ویندوز در موقعیت های خاصی (مانند نصب نرم افزار ) به صورت خودکار نقاط بازگشتی ایجاد می کند. در صورت بروز مشکل در قسمتی از ویندوز ( و حتی بعضی از نرم افزار های نصب شده )، می توانید از این نقاط بازگشت استفاده کرده و تنظیمات را به تاریخ قبل از بروز اشکال برگردانید.</p>
<p>در Database هم با روش سوم می توانید یک یا چند نقطه ی بازگشت ایجاد کنید، البته نه برای روز های آتی، بلکه فقط در حد زمان ارتباط با Database ، که هر چه دیتابیس بزرگتر شده و یا عمل تغییر در بانک طولانی تر شود، کاربرد بیشتری پیدا می کند.</p>
<p> برای اینکار به جای دستور</p>
<p>sqlTransaction1 = sqlConnection1.BeginTransaction()</p>
<p>از دستور زیر استفاده می کنیم:</p>
<p> sqlTransaction1 = sqlConnection1.BeginTransaction(&#8220;First&#8221;)</p>
<p>&#8220;First&#8221; در دستور بالا صرفا یک نام برای نقطه ی بازگشت است و هر نامی برای آن می توان انتخاب کرد. در این حالت، هم می توانید از دستور ()sqlTransaction1.Rollback استفاده کنید که به اولین نقطه ی پردازش نشده باز می گردد، و هم در صورتی که چند نقطه ی بازگشت داشته باشید، می توانید از دستور زیر استفاده کنید:</p>
<p> sqlTransaction1.Rollback(&#8220;Second&#8221;)</p>
<p>کلاس SqlTransaction همچنین دازای یک متد به نام Save است که به عنوان پارامتر، نام یک نقطه ی بازگشت را می گیرد، و تغییرات تا آن لحظه را در Database ذخیره می کند. کاربرد آن زمانی است که می خواهید قبل از پایان عملیات و فراخوانی متد Commit از شی، مقداری از اطلاعات را در Database تثبیت کنید:</p>
<p> sqlTransaction1.Save(&#8220;First&#8221;)</p>
<p>همان طور که قبل از شروع روش سوم گفتم، بحث در اینجا مقداری پیچیده می شود و نیاز به تمرکز بالا و تمرین و تکرار های فراوان دارد، هرچند دو روش اول در بیش از ۹۵ درصد اوقات جوابگوی نیاز شما هستند.</p>
<p> مثال: کد زیر سابروتینی را نشان می دهد، که یک رکورد به جدول اضافه می کند. در این سابروتین از کلاس SqlTransaction برای عمل Transaction و همین طور از نقاط بازگشت استفاده شده است: ( این مثال ابدا توانایی نشان دادن قابلیت های نقاط بازگشت را ندارد، و باید با آنها در یک برنامه ی خاص که روش های اول و دوم در آن پاسخگو نیستند، روبرو شوید. با این همه این مثال فقط جهت نشان دادن ترتیب و نحوه ی استفاده ی کد های بالا ارائه شده است، و توضیح کلی آن ( که قبلا به صورت جزء به جزء توضیح داده شده است) را به شما واگذار می کنم. )<br />
<a href="http://hesam-h.ir/blog/wp-content/uploads/2009/11/sqlTransaction2.jpg"><img src="http://hesam-h.ir/blog/wp-content/uploads/2009/11/sqlTransaction2-300x283.jpg" alt="sqlTransaction2" title="sqlTransaction2" width="300" height="283" class="aligncenter size-medium wp-image-106" /></a><br />
نکته: روشهای دیگری هم برای عمل Transaction در .NET وجود دارند، از جمله استفاده از کلاس DependentTransaction ، که در برنامه های Multi Thread کاربرد دارد.</p>
<p>نکته: روش اول در برخی از سیستمها به دلایل نامعلومی ناقص عمل کرده و تمامی اطلاعات را Rollback می کند. برای حل این مشکل، تعریف یک شی از TransactionScop را، به جای ابتدای سابروتین، بلافاصله قبل از باز کردن ارتباط انجام دهید.</p>
<p>یک سوال: حال این سوال پیش می آید که بالاخره کدام روش را انتخاب کنیم ؟</p>
<p> پاسخ: برای پاسخ به این سوال لازم است  روش ها با هم مقایسه شده، و معایب و مزایای هر کدام بررسی شود:</p>
<p>روش اول: این روش ساده ترین و سریعترین روش ممکن است. اگر در برنامه تان حالت خاصی وجود ندارد که بخواهید به صورت دستی آن را مدیریت کنید، این روش توصیه می شود، چون از آنجا که مدیریت آن به عهده ی خود NET. بوده، احتمال بروز خطا در آن بسیار کم است. ولی در این روش نمی توانید به صورت دستی آن را برنامه راکنترل کنید، البته راهی وجود دارد، و آن ایجاد عمدی یک استثناست. زیرا در این روش، موفقیت در احرا و یا بروز یک مشکل، تنها با استثنا ها بررسی می شود و این یعنی اینکه شما می توانید برای جایگزینی متد Rollback در این روش، با استفاده از دستور Throw یک استثناء به برنامه بفرستید، در این صورت متد Complete اجرا نخواهد شد و نتیجه مشابه فراخوانی متد Rollback در روش های دوم و سوم است. با این همه به دلیل حفظ نظم در ساختار برنامه، توصیه می شود برای کنترل دستی از روش های دوم و سوم استفاده کنید.</p>
<p>اگر این روش را به عنوان روش اصلی انتخاب کنید، هنوز در کمتر از ۵% مواقع (شاید اصلا برایتان پیش نیاید ) به روش سوم و در حدود ۲۰% مواقع به روش دوم نیاز خواهید داشت. </p>
<p>روش دوم: این روش در حالت کلی و با در نظر گرفتن جنبه های مختلف ایده آل ترین روش است، نه محدودیت روش اول را دارد و نه پیچیدگی روش سوم را. البته به خاطر میانه رو بودن، هنوز از روش اول مقداری حجیم تر و از روش سوم مقداری محدود تر است. با این همه در صورتی که می خواهید همیشه از یک روش ثابت استفاده کنید، این روش، بهترین گزینه برای این کار است.</p>
<p>( اگر این روش را به عنوان روش اصلی انتخاب کنید، هنوز در کمتر از ۵% مواقع (شاید اصلا برایتان پیش نیاید ) به روش سوم نیاز خواهید داشت. )</p>
<p> روش سوم: این روش کاملترین و پیچیده ترین روش است، البته در صورتی که این روش را انتخاب کنید، می توانید همیشه مانند روش دوم (بدون استفاده از قابلیت نقاط بازگشت آن) از آن استفاده کنید ( و تنها یک خط اضافه تر کد بنویسید)، که در این صورت خصیصه ی پیچیدگی آن موقتا حذف می شود. در این صورت اگر زمانی به یک برنامه برخورد کردید که نیاز به روش سوم به طور کامل داشت، می توانید با اضافه کردن چند خط کد و چند نقطه ی بازگشت، از آن استفاده کنید.</p>
<p> ( اگر این روش را به عنوان روش اصلی انتخاب کنید، در ۹۹% مواقع جوابگوی نیاز شما خواهد بود. )</p>
<p> <a href="http://hesam-h.ir/blog/wp-content/uploads/2009/11/sqlTransaction3.jpg"><img src="http://hesam-h.ir/blog/wp-content/uploads/2009/11/sqlTransaction3-300x281.jpg" alt="sqlTransaction3" title="sqlTransaction3" width="300" height="281" class="aligncenter size-medium wp-image-107" /></a><br />
در صورتی که می خواهید با طرز کار هر کدام از روش ها بیشتر آشنا شوید، لازم است که پروژه ای مانند این پروژه ایجاد کرده، و در هر سابروتین آن، دو بار عمل درج را انجام دهید. برای درج اول متد Commit و برای درج دوم متد Rollback را فراخوانی کنید.</p>
<p>  سخن پایانی :</p>
<p> ·          از اینکه تا اینجا با من همراه بودید، کمال تشکر را دارم.</p>
<p>·     بحث در مورد Sql Transaction به این سه روش ختم نمی شود، بلکه هم روش های دیگری وجود دارند و هم هر روش جزئیات وسیعی را شامل می شود. با این همه به ارائه ی این سه روش اکتفا می کنم،  بقیه ی مطالب را ( در صورتی که به آن احساس علاقه می کنید ) می توانید در MSDN دنبال کنید، هر چند در صورت ایجاد هر گونه ابهام و یا سوالی در مورد سایر روش ها، بنده در حد توان در خدمت دوستان هستم.</p>
<p>·          امیدوارم مرا از نظرات ، پیشنهادات و انتقادات خود مطلع کنید.</p>
<p>فایل Solution پروژه را از اینجا دریافت کنید.<a href='http://hesam-h.ir/blog/wp-content/uploads/2009/11/Transaction.zip'>Transaction</a><br />
<!--more--></p>
]]></content:encoded>
			<wfw:commentRss>http://hesam-h.ir/blog/1388/09/%d8%ac%d9%84%d9%88%da%af%db%8c%d8%b1%db%8c-%d8%a7%d8%b2-%d9%88%d8%b1%d9%88%d8%af-%d8%a7%d8%b7%d9%84%d8%a7%d8%b9%d8%a7%d8%aa-%d9%86%d8%a7-%d9%85%d8%b9%d8%aa%d8%a8%d8%b1-%d8%af%d8%b1-database-%d8%a7-2/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>جلوگیری از ورود اطلاعات نا معتبر در Database از طریق Sql Transaction (بخش اول)</title>
		<link>http://hesam-h.ir/blog/1388/09/%d8%ac%d9%84%d9%88%da%af%db%8c%d8%b1%db%8c-%d8%a7%d8%b2-%d9%88%d8%b1%d9%88%d8%af-%d8%a7%d8%b7%d9%84%d8%a7%d8%b9%d8%a7%d8%aa-%d9%86%d8%a7-%d9%85%d8%b9%d8%aa%d8%a8%d8%b1-%d8%af%d8%b1-database-%d8%a7/</link>
		<comments>http://hesam-h.ir/blog/1388/09/%d8%ac%d9%84%d9%88%da%af%db%8c%d8%b1%db%8c-%d8%a7%d8%b2-%d9%88%d8%b1%d9%88%d8%af-%d8%a7%d8%b7%d9%84%d8%a7%d8%b9%d8%a7%d8%aa-%d9%86%d8%a7-%d9%85%d8%b9%d8%aa%d8%a8%d8%b1-%d8%af%d8%b1-database-%d8%a7/#comments</comments>
		<pubDate>Mon, 23 Nov 2009 05:49:44 +0000</pubDate>
		<dc:creator>تبعیدی دست باد</dc:creator>
				<category><![CDATA[امنیت]]></category>
		<category><![CDATA[برنامه نویسی]]></category>
		<category><![CDATA[c#.net]]></category>
		<category><![CDATA[CommittableTransaction]]></category>
		<category><![CDATA[sql injection]]></category>
		<category><![CDATA[SqlTransaction]]></category>
		<category><![CDATA[TransactionScope]]></category>
		<category><![CDATA[vb.net]]></category>
		<category><![CDATA[جلوگیری از sql injection]]></category>
		<category><![CDATA[جلوگیری از ورود اطلاعات نا معتبر]]></category>

		<guid isPermaLink="false">http://hesam-h.ir/blog/?p=90</guid>
		<description><![CDATA[اگر در زمینه امنیت برنامه هاب کاربردی تحت وب کار کرده باشید حتما به وبسایتهایی بر خورده اید که با وروود داده نامعتبر بانک اطلاعاتی آنها از هم فرو مبپاشد . و کلیه اطلاعات را میتوان از انها ردیافت نمود ! و نام کاربری و رمز مدیر وبسایت یکی از ساده ترین اطلاعاتی است که [...]]]></description>
			<content:encoded><![CDATA[<p>اگر در زمینه امنیت برنامه هاب کاربردی تحت وب کار کرده باشید حتما به وبسایتهایی بر خورده اید که با وروود داده نامعتبر بانک اطلاعاتی آنها از هم فرو مبپاشد .<br />
و کلیه اطلاعات را میتوان از انها ردیافت نمود ! و نام کاربری و رمز مدیر وبسایت یکی از ساده ترین اطلاعاتی است که یک شخص نفوذگر به آنها دست پیدا خواهد نمود.<br />
در این ۲ مقاله به بررسی چگونگی جلوگیری از این فرآیند خواهیم پرداخت.<br />
<span id="more-90"></span><br />
مقدمه :</p>
<p>با توجه به اینکه امروزه ( به دلیل حجم گسترده ی اطلاعات )، Database یکی از ارکان اصلی هر نرم افزار است، رفته رفته نیاز به مدیریت اطلاعات درون آن، بیشتر از پیش احساس می شود. یکی از جنبه های این مدیریت، جلوگیری از ورود اطلاعات نامعتبر به Database است، که امروزه حتی در نرم افزار های کاربردی و خانگی مورد نیاز است.</p>
<p>فرض کنید در حال تولید نرم افزاری هستید ( Windows Application ، Web Application و یا Network Application ) که در آن هنگام ایجاد Profile برای کاربر جدید، علاوه بر ورود مشخصات او به یک جدول عمومی ( مثل tblUser ) ، یک جدول اطلاعات مجزا برای او تشکیل می دهید. اگر برنامه در هنگام ارتباط با Database دچار مشکل شود، و یا به هر دلیلی ارتباط قطع گردد، این عمل انجام نخواهد شد. با این همه در صورتی که در همان ابتدای امر مشکل ایجاد شود، می توانید با یک پیغام از کاربر بخواهید که دوباره عمل ثبت نام را انجام دهد. ولی مشکل اصلی زمانی است که در میان عمل ثبت نام، برنامه با مشکل روبرو شود، در این صورت مثلا مشخصات کاربر به جدول tblUser وارد می شود، ولی جدول مجزای کاربر ایجاد نمی شود. در این حالت برنامه ی شما (هر چقدر هم که منظم و بدون عیب ایجاد شده باشد ) دچار مشکل خواهد شد. مشکلی که از نظر کاربر از برنامه نویسی شما ناشی می شود. البته تا حدودی هم حق با اوست، چون کاربر نه می تواند دوباره اطلاعاتش را وارد کند، و نه می تواند با Profile که برای او به صورت ناقص ساخته شده است، با نرم افزار کار کند. در این صورت است که نرم افزار تولید شده توسط شما، دارای برچسب عدم اطمینان خواهد شد.</p>
<p> این تنها یک مثال بود، در صورتی که این اتفاق ممکن است برای هر نرم افزاری که با پایگاه داده سرو کار دارد، رخ دهد. برای جلوگیری از بروز این گونه اشکالات، در زبان T-SQL که زبان مورد استفاده در MS SQL هم هست، دستور Transaction گنجانده شده است. این دستور پیچیدگی هایی برای یک برنامه نویس به همراه دارد، و از آنجا که هدف NET Framework. ایجاد پلتفرمی ساده تر از پیش برای برنامه نویسان بود، در NET. سه راه حل کلی برای اینکار ارائه شده است. پیاده سازی هر کدام از این روش ها با ۳ تا ۵ خط کد انجام می شود. به همین خاطر توصیه شده است، برای تمامی دستوراتی که اطلاعات Database را تغییر می دهند ( از جمله Insert ، Update ، Delete و حتی Create Table و  Drop Table )، از Sql Transaction استفاده شود، اعم از اینکه احتمال بروز خطا بالا است یا کمتر از % ۰٫۱ است. فراموش نکنید که یکی از دلایل موفقیت یک نرم افزار، بدون عیب بودن ( در دنیای واقعیت: داشتن حداقل تعداد عیب ) آن است.</p>
<p>نکاتی که قبل از شروع مقاله باید به آنها دقت کنید :</p>
<p> برای بهره برداری کامل از این مقاله، نیاز به مهارت های زیر دارید:</p>
<p>·          داشتن علم مقدماتی SQL Server</p>
<p>      ·     آشنایی ابتدایی به یکی از زبان های NET. (البته برنامه های این مقاله به زبان VB.NET نوشته شده است، ولی با توجه به اینکه فهم توابع و متدهای به کار برده شده، برای درک کامل کد و ترجمه آن به هر زبان دیگری از جمله #C و J# کافی می باشد، برای درک کامل این مقاله، آشنایی مقدماتی به هرکدام از زبان های  NET. برای شما کافی است.)</p>
<p>نکته: هر کدام از روش های ارائه شده، (در بیش از ۹۵% مواقع) به تنهایی جوابگوی این مسئله خواهند بود. با این همه ابتدا هر سه روش را مطالعه کرده، و سپس با توجه به ویژگی های هر کدام، روش مورد استفاده ی خود را انتخاب کنید.</p>
<p>پیاده سازی و استفاده از Sql Transaction :</p>
<p> سه روش معمول برای پیاده سازی Sql Transaction وجود دارد:</p>
<p>      ۱ &#8211;      استفاده از کلاس TransactionScope ( ساده ترین روش )</p>
<p>      ۲-      استفاده از کلاس CommittableTransaction ( پر کاربرد ترین روش )</p>
<p>      ۳ &#8211;      استفاده از کلاس SqlTransaction ( پر امکانات ترین روش )</p>
<p>روش اول – مدیریت اطلاعات را به NET Framework. واگذار کنید :</p>
<p>      کلاس: TransactionScope</p>
<p>      مشخصه ی بارز: ساده ترین روش</p>
<p> در این روش همان طور که از نام کلاس آن مشخص است، شما یک محدوده ی Transaction مشخص می کنید و سایر کارها توسط خود NET. انجام می شود.</p>
<p>کلاس TransactionScope در فضای نامی System.Transactions قرار دارد، به طور پیش فرض ارجاعی به فایل system.transactions.dll وجود ندارد، پس شما باید ابتدا یک ارجاع به فایل system.transactions.dll ایجاد کنید، تا بتوانید فضای نامی System.Transactions را به برنامه Imports کنید. (نحوه ی افزودن ارجاع به فایل، در پایان مقاله توضح داده شده است.)</p>
<p> <em>Imports System.Transactions</em></p>
<p>اکنون باید یک شی از کلاس TransactionScope ایجاد کنید:</p>
<p> Dim sqlTransaction1 As New TransactionScope</p>
<p>از همان لحظه ای که یک شی ( توسط کلمه ی کلیدی New ) از کلاس TransactionScope ایجاد می گردد، محدوده ی Transaction شروع می شود. حال باید اتمام محدوده را هم مشخص کنید، برای اینکار از متد Complete از شی استفاده کنید:</p>
<p> sqlTransaction1.Complete()</p>
<p>اتمام محدوده معمولا به عنوان آخرین دستور ( قبل از آزاد سازی حافظه ) در تابع یا سابروتین نوشته می شود. البته می دانیم که در .NET خود  Garbage Collection، آزاد سازی حافظه را انجام می دهد، ولی توصیه می شود، برای نگهداری کد در محدوده ی مهندسی نرم افزار، آزاد سازی های اشیاء ایجاد شده به صورت دستی انجام شود. حتی به غیر از این مسئله، آزادسازی شی TransactionScope در کاربرد های تخصصی تر یک امر الزامی است، وگرنه کار مذکور به صورت ناقص انجام خواهد شد. با این تفاسیر، توصیه می شود همیشه آزاد سازی را به صورت دستی ( با فراخوانی متد Dispose ) انجام دهید.</p>
<p>مثال: کد زیر سابروتینی را نشان می دهد، که یک رکورد به جدول اضافه می کند. در این سابروتین از کلاس TransactionScope برای عمل Transaction استفاده شده است:<br />
برای مشاهده عکس در ابعاد واقعی بر روی آن کلیک کنید.<br />
<a href="http://hesam-h.ir/blog/wp-content/uploads/2009/11/New-Picture.jpg"><img src="http://hesam-h.ir/blog/wp-content/uploads/2009/11/New-Picture-300x157.jpg" alt="New Picture" title="New Picture" width="300" height="157" class="alignright size-medium wp-image-92" /></a></p>
<p>در این سابروتین، برنامه ابتدا یک شی TransactionScope ایجاد می کند، سپس عملیات درج در جدول را انجام می دهد، و در پایان متد Complete شی را فراخوانی می کند. در صورتی که خطایی رخ ندهد، اجرای سابروتین پس از درج، با موفقیت به پایان می رسد، در غیر این صورت اگر در ساختار Try&#8230; Catch&#8230; End Try ( تنها جایی که امکان بروز خطا وجود دارد ) خطایی رخ دهد، اجرای برنامه، قبل از فراخوانی متد Complete از شی TransactionScope ، به داخل Catch منتقل می شود و در نتیجه متد Complete فراخوانی نشده و تمامی تغییرات Database ( از آغاز محدوده ی TransactionScope تا اینجا ) ، به صورت خودکار نادیده گرفته می شود و Database به حالتی که قبل از اجرای سابروتین AddToTable داشته، باز می گردد.</p>
<p>روش دوم – بدون پیچیدگی، عمل مدیریت اطلاعات را شخصا&#8221; انجام دهید :</p>
<p>             کلاس: CommittableTransaction</p>
<p>            مشخصه ی بارز: پر کاربرد ترین روش</p>
<p> کلاس CommittableTransaction در فضای نامی System.Transactions قرار دارد، به طور پیش فرض ارجاعی به فایل system.transactions.dll وجود ندارد، پس شما باید ابتدا یک ارجاع به فایل system.transactions.dll ایجاد کنید، تا بتوانید فضای نامی System.Transactions را به برنامه Imports کنید. (نحوه ی افزودن ارجاع به فایل، در پایان مقاله توضح داده شده است.)</p>
<p>نکته: در صورتی که روش قبل را در پروژه ای پیاده سازی کرده اید، نیازی به افزودن دوباره ی ارجاع برای همان پروژه نیست.</p>
<p> Imports System.Transactions</p>
<p>اکنون باید یک شی از کلاس CommittableTransaction ایجاد کنید:</p>
<p> Dim sqlTransaction1 As New CommittableTransaction</p>
<p>همچنین باید بعد از باز کردن مسیر ارتباط با Database ( دستور ()sqlConnection1.Open ) ، شی CommittableTransaction را به عنوان پارامتر به متد EnlistTransaction از شی sqlConnection1 ارسال کنید، تا Transaction بر روی این ارتباط، از همین لحظه آغاز شود.</p>
<p> sqlConnection1.EnlistTransaction(sqlTransaction1)</p>
<p>در این روش باید عملیات ادامه ی کار و بازگشت به قبل از خطا را به صورت دستی پیاده سازی کنید. در صورتی که خطایی رخ دهد، لازم است متد Rollback از شی را فراخوانی کنید:</p>
<p> sqlTransaction1.Rollback()</p>
<p>و در صورت اجرای موفقیت آمیز دستورات، لازم است متد Commit از شی را ( برای اعمال تغییرات در Database ) فراخوانی کنید:</p>
<p> sqlTransaction1.Commit()</p>
<p>جایگذاری این دستورات توسط شما و طبق صلاحدید شما انجام می پذیرد، ولی به عنوان یک استاندارد تعریف نشده، فراخوانی متد Commit بلافاصله قبل از بستن ارتباط، و فراخوانی متد Rollback در قسمت Catch شده، قرار می گیرد.</p>
<p> نکته: توجه داشته باشید که نمی توانید قبل از ارسال شی به ارتباط باز شده، عمل Commit و یا Rollback را انجام دهید، ولی قرار دادن آنها پس از بستن ارتباط، مشکلی ایجاد نمی کند.</p>
<p>مثال: کد زیر سابروتینی را نشان می دهد، که یک رکورد به جدول اضافه می کند. در این سابروتین از کلاس CommittableTransaction برای عمل Transaction استفاده شده است:<br />
<a href="http://hesam-h.ir/blog/wp-content/uploads/2009/11/New-Picture-1.jpg"><img src="http://hesam-h.ir/blog/wp-content/uploads/2009/11/New-Picture-1-300x170.jpg" alt="New Picture (1)" title="New Picture (1)" width="300" height="170" class="aligncenter size-medium wp-image-93" /></a></p>
<p>در این سابروتین، برنامه ابتدا یک شی CommittableTransaction ایجاد می کند،  و بعد از باز کردن ارتباط، شی CommittableTransaction را به عنوان Transaction کمکی به شی sqlConnection1 ارسال می کند. سپس عملیات درج در جدول را انجام می دهد. در پایان در صورتی که خطایی رخ ندهد، متد Commit فراخوانی شده و تغییرات در Database ثبت می شوند و اجرای برنامه پس از درج، با موفقیت به پایان می رسد. در غیر این صورت، اگر در ساختار Try&#8230; Catch&#8230; End Try خطایی رخ دهد، اجرای برنامه، قبل از فراخوانی متد Commit از شی CommittableTransaction ، به داخل Catch منتقل می شود و در نتیجه متد Commit فراخوانی نشده و در عوض متد Rollback فراخوانی می شود. این متد ( برخلاف روش اول )، صراحتا تمامی تغییرات Database ( از ارسال شی CommittableTransaction به ارتباط، تا اینجا ) نادیده گرفته می شود و Database به حالتی که قبل از  اجرای سابروتین AddToTable داشته، باز می گردد.</p>
<p>نکته: در صورتی که تنها با Database های کوچک و متوسط سرو کار دارید، و یا تجربه ی زیادی در کار با پایگاه داده ندارید و یا حتی از کد های پیچیده خوشتان نمی آید، روش سوم را فاکتور بگیرید، و از خواندن آن صرف نظر کنید، چون به دلیل پیچیدگی بیشتر نسبت به دو روش قبل، باعث گیج شدن شما خواهد شد. توصیه می کنم در صورتی که این شرایط برای شما صدق می کند، به انتهای مقاله (در بخش دوم ) بروید و با توضیحی که در آنجا آمده است، یکی از دو روش اول را جهت استفاده، انتخاب کنید.</p>
<p>برای افزودن یک ارجاع به فایل system.transactions.dll مراحل زیر را انجام دهید:</p>
<p>از منوی Project آخرین گزینه را انتخاب کنید، تا صفحه ی Project Properties باز شود. در تب References بر روی دکمه ی &#8230;Add کلیک کنید، تا صفحه ی Add References باز شود. در این صفحه در تب اول ( NET. )، به دنبال System.Transactions بگردید، آن را انتخاب کنید و بر روی دکمه ی OK کلیک کنید.</p>
<p> در این لحظه یک ارجاع به فایل system.transactions.dll ایجاد می شود. پروژه را توسط گزینه ی SaveAll از منوی File ذخیره کرده و صفحه ی Project Properties را ببندید.</p>
<p>سخن پایانی :</p>
<p> ·          از اینکه تا اینجا با من همراه بودید، کمال تشکر را دارم.</p>
<p> ·     با توجه به حجم گستره، این مطلب در دو مقاله قرار گرفت که روش های اول و دوم در این بخش ارائه شدند، و روش سوم ( که پیچیده ترین و تخصصی ترین روش است ) در بخش بعدی ارائه می شود. در بخش بعدی همینطور مقایسه بین این سه روش انجام می گیرد و اینکه کدام را به عنوان روش شخصی انتخاب کنیم. البته برای استفاده ، اطلاعاتی که تا این لحظه کسب کرده اید، کافی است و می توانید برنامه تان را با قابلیت  Transaction بنویسید، با این همه در مقاله ی بعد، راه دیگری هم توضیح داده می شود.</p>
<p> ·     بحث در مورد Sql Transaction به این سه روش ختم نمی شود، بلکه هم روش های دیگری وجود دارند و هم هر روش جزئیات وسیعی را شامل می شود. با این همه به ارائه ی این سه روش اکتفا می کنم،  بقیه ی مطالب را ( در صورتی که به آن احساس علاقه می کنید ) می توانید در MSDN دنبال کنید، هر چند در صورت ایجاد هر گونه ابهام و یا سوالی در مورد سایر روش ها، بنده در حد توان در خدمت دوستان هستم.</p>
<p>       ·     دلیل تهیه ی این مقاله در اوج امتحانات، فقط و فقط استقبال گسترده ی شما از مقاله ی پیشین بود و نه چیز دیگر. به همین دلیل با نظرات و انتقادهایتان ادامه ی این مقاله و مقالات مشابه را تضمین می کنید. در صورتی که از مباحثی که من ارائه می دهم و یا نگارشم، به هر دلیلی خوشتان نمی آید و ترجیح می دهید دیگر از من مقاله ای نبینید، یک راه ساده وجود دارد، و آن هم عدم ارائه ی نظرات ، پیشنهادات و یا حتی سولاتتان است. امیدوارم مرا از نظرات ، پیشنهادات و انتقادات خود مطلع کنید.</p>
<p> فایل Solution این پروژه در بخش بعدی، در اختیارتان قرار خواهد گرفت.</p>
<p><!--more--></p>
]]></content:encoded>
			<wfw:commentRss>http://hesam-h.ir/blog/1388/09/%d8%ac%d9%84%d9%88%da%af%db%8c%d8%b1%db%8c-%d8%a7%d8%b2-%d9%88%d8%b1%d9%88%d8%af-%d8%a7%d8%b7%d9%84%d8%a7%d8%b9%d8%a7%d8%aa-%d9%86%d8%a7-%d9%85%d8%b9%d8%aa%d8%a8%d8%b1-%d8%af%d8%b1-database-%d8%a7/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
	</channel>
</rss>

