تفکرات صفر و یکی

نوشته های من در مورد سیستم عامل، درایور نویسی، مهندسی معکوس، امنیت و هر چیز سطح پایین دیگر

تفکرات صفر و یکی

نوشته های من در مورد سیستم عامل، درایور نویسی، مهندسی معکوس، امنیت و هر چیز سطح پایین دیگر

آخرین نظرات

این آموزش در ادامه سری آموزش های "راهنمای معماری های x86 و x86_64 برای برنامه نویسان سیستمی" می باشد. در این قسمت در مورد مباحثی صحبت می کنیم که پیش نیاز برای آموزش های بعدی می باشد. این مباحث عبارت اند از رجیسترهای سیستمی، مدهای عملکرد، و سطوح دسترسی. 

  • آرش

مدتی بود می خواستم یکسری مطلب آموزشی در مورد معماری پردازنده x86 و x86_64 اینجا قرار بدهم. با این هدف که این مطالب مورد استفاده برای برنامه نویس های سیستمی، برنامه نویس های ماژول های امنیتی، افرادی که بهینه سازی کد انجام می دهند، تحلیل گران نقاط ضعف سیستم عامل ها و بدافزارها، و البته افراد علاقه مند به این موضوعات قرار بگیرد. این آموزش ها را احتمالا در چند سری ارائه خواهم کرد. در این قسمت هدف فقط دادن یک پیش زمینه است و وارد هیچ جزئیاتی نمی شویم. ولی در آموزش هایی که در آینده قرار می دهم به بررسی مباحث اولیه مثل رجیستر های سیستمی، مدهال عملکرد، سطوح دسترسی ، و در ادامه مدیریت حافظه، مدیریت وقفه ها و احتمالا موضوعات دیگر خواهیم پرداخت.

  • آرش

در ادامه سری آموزش هایی که در مورد درایور نویسی در ویندوز نوشته ام، این بار آموزشی در مورد نوشتن یک Filesystem Filter Driver آماده کرده ام. از عنوان آموزش مشخص است که این درایور از نوع Filter Driver است که قبلا توضیح مختصری در مورد این نوع درایورها در آموزش مربوط به Device Stack داده ام، این درایور قرار است Filesystem هایی که روی سیستم رجیستر شده یا بعدا رجیستر می شوند را مانیتور کند. در انتهای این آموزش بخشی اختصاص داده ام در مورد کار با WinDbg. تمام فرمان هایی که در این بخش آمده را قبلا در آموزش مربوط به Device Stack در موردشان توضیح داده ام. دلیل آوردن چنین بخشی این بود که قسمت هایی از این آموزش هست که به موضوعات دیگری و مفصلی مرتبط هستند. برای اینکه وارد این توضیحات مفصل نشوم ترجیح دادم با نشان دادن آن مساله در WinDbg مساله را برایتان روشن کنم. 

قبل ادامه مروری هم روی آموزش های زیر داشته باشید.

  • آرش

موضوع اصلی آموزش امروز ما در مورد IRQL است که می توان گفت یکی مهمترین مباحث موجود در دنیای درایور نویسی در ویندوز به حساب می آید. این مبحث کمی با مساله وقفه ها گره خورده است. در واقع این گره و ابهام به خاطر این است که ماکروسافت مستندات روشنی در این زمینه ارائه نکرده و از طرفی تشابه اسمی بین IRQL و IRQ ممکن است سوالاتی از قبیل: آیا این دو یکی هستند؟ آیا مربوط به سخت افزار می شوند؟ آیا مربوط به ویندوز می شوند؟ را به وجود می آورد. حداقل این ها سوالاتی بود که تا مدتی من درگیرشان بودم تا متوجه شدم موضوع از چه قرار است. و از أنجایی که در پست های آینده با اصطلاحاتی مانند PASSIVE/APC/DPC LEVEL روبرو خواهید شد لازم است در این مورد پیش زمینه ای داشته باشید.

 

  • آرش

در آموزش های قبلی به صورت خیلی خلاصه در مورد روش هایی که یک درایور می تواند با برنامه سطح کاربر ارتباط برقرار کند صحبت کردیم و برای یکی از این روش ها که  IOCTL بود مثالی آوردیم. در این آموزش سعی می کنم این روش ها را با جزئیات بیشتری به همراه مثال شرح بدهم. در طول آموزش موضوعات دیگری هم مطرح می شود و برای این که ساختار آموزش بهم نریزد توضیحات مربوطه را بصورت جداگانه در انتهای این آموزش آورده ام. 

  • آرش

مدت زیادی شده که اینجا پستی قرار نداده ام. یکسری دوستان با کامنت ها و ایمیل هاشون ما را حسابی شرمنده میکنند که لازم از همه این عزیزان تشکر کنم بابت محبتشون. به هر حال گفتیم بعد این همه مدت یه پست کوتاهی قرار بدیم و یکسری کتاب معرفی کنیم با این امید که بدرد افرادی که به این موضوعات علاقه دارند بخوره و از این کتاب ها در نبود ما استفاده کنند.

  • آرش

اخیرا برای پروژه ای می خواستم یک دستگاه مجازی USB بسازم. این دستگاه باید مثل دستگاه واقعی عمل می کرد. در واقع یکسری خصوصیاتی که در هنگام متصل کردن دستگاه USB به کامپیوتر (اصطلاحا host) بین این دو رد و بدل میشود  را بتوان به طریقی شبیه سازی کرد. می دونستم داخل بسته WDK فرم ورکی وجود داره که این قبیل کارها را می توان با آن انجام داد ولی هیچ موقع فرصتی پیدا نمی  کردم که باهاش کار کنم. به هر حال این پست معرفی است برای این فرم ورک.

  • آرش

Device Stack چیست؟

۱۴
ارديبهشت

امروز می خواهم در مورد Device Stack مطلبی بنویسم. من خودم زمانی که با این مفهوم آشنا شدم برایم این مفهوم کمی گنگ بود. تا اینکه بعد ها روی این موضوع بیشتر کار کردم و جزئیات بیشتری از چگونه نگهداری این ساختار در ویندوز و اینکه یک IRP چه مسیری را طی میکند تا به مقصد بررسد را متوجه شدم. در این پست سعی کرده ام این مسائل را شرح دهم. از آنجایی که در نوشتن مطالب طولانی تنبل هستم تصمیم گرفتم پست های کوتاه تری بگذارم. این آموزش به دو بخش تقسیم شده یک بخش نگاه سطح بالا که بدون وارد شدن به جزئیات به موضوع پرداخته ام و بخش دوم نگاه سطح پایین که نشان داده ام چگونه با استفاده از Windbg ساختار مربوط به Deivce Stack را بیرون بکشیم.

  • آرش

در این پست می خواهم در مورد چگونگی کار با دیباگر windbg توضیحاتی بدهم. این آموزش با آموزش هایی که در آینده در مورد درایور نویسی خواهم داد مرتبط است.

  • آرش

در قسمت قبل طریقه ساخت یک درایور و لود کردن آن را یاد گرفتیم، و همچنین با ابزارهایی مانند OSRLoader و DbgView آشنا شدیم. در این آموزش هم قصد داریم ببینیم چگونه میتوان درایوری نوشت که بتواند با یک برنامه سطح کاربر ارتباط برقرار کند در واقع اطلاعاتی به درایور بفرسیم و دریافت کنیم.

  • آرش