نوشتن یک سیستم عامل ساده – قسمت اول

همونطور که در جریانید، مدتهای زیادی بود که من دنبال ساخت یک سیستم عامل بودم. خب ساخت سیستم عامل دانش بالایی میخواد. حداقلش اینه که باید بدونیم چی میخوایم! ولی اگر صرفا برای فان بخوایم چنین کاری کنیم، میتونیم یک سیستم عامل خیلی ساده بنویسیم و اگر احتمالا یه کامپیوتر قدیمی و داغون داریم، روی اون نصبش کنیم.

خب، بیاید اول ببینیم چی نیاز داریم؟ اول از همه نیاز داریم که اسمبلی بلد باشیم. احتمالا با گشتن توی اینترنت کلی جزوه و کتاب و آموزش اسمبلی پیدا میکنید، همچنین اگر درس زبان ماشین پاس کرده باشید خیلی راحتتره کارتون، چون ایده کلی رو دارید. و البته مهم تر از اون، اینه که لینوکس و برنامه نویسی هم بدونید. اگر هم لینوکس بلد نیستید سعی کنید یاد بگیرید چون یکی از بهترین محیط های این کار به حساب میاد و اگر توی فروم هایی مثل OSDev بچرخید خواهید دید که اکثر توسعه دهندگان از لینوکس استفاده کردند، حتی اونایی که با سی شارپ یا MASM کار رو انجام داده بودن 😀 . دلیل عمده استفادشون از لینوکس (یا هر چیز شبه یونیکسی) وجود ابزارهای خوب توسعه روی این دسته از سیستم عامل هاست. همچنین خیلی از ایده هایی که شما بهش فکر میکنید رو قبلا روی این سیستم عاملها آزمایش کردند و ساختند که یا آزادند و یا نمونه های آزاد دارند.

خیلی خوب، بذارید اول ببینیم چه چیزهایی باید نصب کنیم؟

  1. یک ادیتور متنی، که معمولا همراه سیستم عاملتون نصب میشه. من خودم از nano و gedit و atom استفاده میکنم، و توصیه میکنم شما هم یکی از این ادیتورهای ساده رو انتخاب کنید تا درگیر پیچیدگی های vim و … نشید.
  2. یک اسمبلر که من اینجا از nasm استفاده میکنم، و nasm توی مخازن اوبونتو و دبیان و … موجوده. اگر هم نبود هم باینری و هم سورسش موجوده.
  3. یک مجازی فوق العاده ساده هم نیاز داریم. در واقع مجازی سازی که برای راه انداختن و بوت کردن یه باینری ساده، اذیتمون نکنه. من از qemu استفاده میکنم. حالا شما میتونید از bochs یا VirtualBox یا هرچیز دیگری استفاده کنید  و انتخاب خودتونه.

خب طبیعتا ترمینال هم نیاز داریم که این وسط بتونیم کارامونو باهاش انجام بدیم :)

الان کافیه که با اراده قوی، یک فایل به اسم my16bitos.asm باز کنید و شروع کنید کد زدن. خب باید چی بنویسیم؟ یکی از نکات مهمی که اینجا هست اینه که ما نمیتونیم از روتین ها یا وقفه های سیستم عامل استفاده کنیم و نیاز داریم از بایوس استفاده کنیم! دقیقا چون بایوس MBR رو میخونه و از این داستانا که موقع بوت شدن داریم. پس کد ما چنین چیزی میشه :

کد   
MOV AH, 0x0e
MOV AL, 'A'
INT 0x10
JMP $
times 510-($-$$) db 0
DW 0xaa55

خب این شد کد ما. در واقع ما یک سیستم عامل (یا بهتر بگم بوت سکتور) ۱۶ بیتی نوشتیم. که البته این خیلی سادست و در قسمت بعدی پیچیده ترش خواهیم کرد. این سیستم عامل ۶ خطی (شاید به خاطر پیشرفت علوم کامپیوتر و اسمبلر ها و پردازنده ها، الان این کد شش خطه، و ممکن بوده زمانی یه مهندس کامپیوتر یا صرفا یک علاقمند به علوم رایانه رویاش نوشتن چنین چیزی بوده!)، وقتی بوت شه حرف A رو به ما نمایش میده. حالا با چه اتفاقاتی؟

خط اول که میگه عدد شانزده شانزدهی 0x0e رو در هشت بیت بالایی رجیستر AX قرار بده، یکی از روتین های بایوسه. در واقع بایوس میفهمه که بوت سکتور، این برنامه ست. خط دوم میگه کرکتر A رو در هشت بیت پایینی همون رجیستر قرار بده. در خط سوم ما یک وقفه (توجه کنید INT توی اسمبلی مخفف Interrupt یا «وقفه» است نه Integer .) ایجاد کردیم. وقفه 0x10 در بایوس برای نمایش کرکتر ها به کار میره (البته توی روتین 0x0e). در خط چهارم با استفاده از دستور پرش، برنامه رو تا ابد باز نگه داشتیم، که وقتی سیستم عامل بوت میشه همچنان روشن بمونه. یکی از سخت ترین خط ها از نظر درک، خط پنجمه. خط پنجم چی کار میکنه؟ ۵۱۰ بایت اول دیسک (این سیستم عامل میتونه از روی یک فلاپی یا هارد دیسک یا هر دیوایس دیگری بوت شه) رو با صفر پر میکنه و حالا چرا؟ چون ما میخوایم در دوبایت نهایی، عدد جادویی 0xaa55 رو قرار بدیم که بوت سیستم عامل بهش وابسته است.

بسیار خوب، تا اینجای کار فهمیدیم که این کد چی کار میکنه. حالا با nasm کد رو اسمبل میکنیم تا به یه فایل قابل بوت شدن برسیم :

کد   
nasm -f bin -o my16bitos.bin my16bitos.asm

اکنون در دایرکتوری جاریتون، باید فایل my16bitos.bin رو ببینید. کافیه تا با qemu اجراش کنید به این شکل :

کد   
qemu-system-i386 my16bitos.bin

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

پس تا مطلب بعدی خداحافظ!

FacebookTwitterGoogle+Share

ببخشید رمزتون؟ – مقاله ای در باب نقض حریم خصوصی

این روزها کمتر کسی رو میشه دید که حداقل یک کارت بانکی نداشته باشه، و از اون برای خرید در مغازه ها، فروشگاه ها و … استفاده نکنه. تقریبا همه ما هم با پدیده ای به نام «رمزتون؟» آشنا هستیم. سوالی که موقع پرداخت با کارت پرسیده میشه! در این مطلب، که پس از مدتی نسبتا طولانی نوشتم، به بررسی این موضوع و نقض حریم خصوصی مردم در خرید، پرداختم.

161018_515

خرید از کارتخوان

فکر کنید در یک روز گرم تابستانی، رفتید یک آبمیوه خنک بخرید. پول خرد همراهتون نیست که حساب کنید و دست به جیب میشید و کارت بانکیتون رو به فروشنده میدید. شخص دیگری هم در مغازه هست و منتظره تا کار شما تموم شه، و خرید کنه. فروشنده بعد از طی چند مرحله، از شما میپرسه «رمزتون؟» و شما هم با صدای رسا و بلند میگید«….» ! حالا سه فرضیه مطرح میشه :

  1. شخصی که در مغازه هست، کاری نداشته باشه.
  2. اون شخص، سارق باشه و کارت شما رو در موقعیت مناسب بزنه!
  3. اگر کارتتون در اون مغازه جا موند، فروشنده ازش سوء استفاده کنه.

خب، این فعلا بخشی از غلط بودن گفتن رمز هست. بخش دیگرش، روش غلط به کار گیری کارتخوان توسط فروشنده ها/سرویس دهنده هاست. فروشنده باید کارتخوان رو به سمت مشتری بذاره، و چنانچه مشتری بلد نبود با کارتخوان کار کنه، راهنمایی جزئی بهش بده (یا حتی یک تابلو یا کاغذ راهنما کنار دستگاه نصب کنه). از اونجایی که این دستگاهها عمدتا منوی فارسی دارند، پس شدیدا کار بیهوده ایه که همه چیز رو به فروشنده بسپاریم. گرچه فروشنده هایی هم هستند که این امکان رو به شما میدن که خودتون پرداخت کنید. برای مثال، مدتی پیش (هفته دوم خرداد) برای خرید وسیله ای به فروشگاهی رفتم، و فروشنده بعد از فاکتور کردن جنس، گفت برید کارت بکشید. خودم کارت رو کشیدم و پرداخت رو انجام دادم، بدون این که رمز رو به کسی بگم. یک بار دیگه هم در یک مغازه فست فودی چنین موردی برام پیش اومد. اما در عوض در فروشگاه های بزرگی مثل شهروند، که یکی از بزرگترین فروشگاههای زنجیره ای تهران هم به شمار میاد، می بینیم که فروشنده ها خیلی سریع کارت رو از دستتون میگیرن و رمز رو از شما میخوان. حالا چه کنیم که مشکلی برامون پیش نیاد؟

نکات ایمنی

  1. تا حد امکان سعی کنید خودتون کارت بکشید، یا حداقل رمز رو خودتون بزنید.
  2. رسید های دریافتی از این دستگاه رو همیشه پیش خودتون داشته باشید، تا در صورتی که مشکلی پیش اومد، بتونید بهش استناد کنید.
  3. بعد از چندین بار خرید به سبک اشتباه ایرانی، رمزتون رو عوض کنید.
  4. از نوشتن رمز روی کارت، خودداری کنید (بهترین جا برای یادداشت کردن رمز، ذهن شماست. اگر هم ممکنه فراموش کنید، در گوشی اون هم نوت اکانت گوگل یا اکانت های مشابه که نیاز به رمز دارند یادداشت کنید).
  5. همیشه بعد از خرید، موجودی حسابتون رو از یک خود پرداز (یا کارتخوان بدون اپراتور) چک کنید.

سخن آخر

در این مطلب سعی کردم هرچی لازم بود رو بگم، ممکنه موارد دیگری هم باشه که باید رعایت بشه، و چنانچه مواردی به ذهنتون میرسه از طریق کامنت اطلاع بدید :)

FacebookTwitterGoogle+Share

رمزگشایی آنلاین MD5

در پست قبلی، تا تونستم راجع به پسوردهای ناامن (مثل ۱۱۱ و ۸۸۸۸ و ۱۲۳۴ و …) گفتم. اما این بار میخوام یه چیز بهتر معرفی کنم :)
شده تا حالا، از روی شیطنت (یا شایدم خباثت) ، قصد کرده باشید که دیتابیستون رو باز کنید و پسورد کاربرانتون رو بخونید؟ اما شکست خوردید. خب مشخصه. معمولا سیستم های مدیریت محتوا که برنامه نویس درست و حسابی پشتشون باشه، پسورد رو هش میکنن، حالا با MD5 یا چیزای دیگه. خب، کدی که برای شما معنی نداره، برای اون سیستم معنا داره. در واقع، اون سیستم رشته هش شده رو در دیتابیس شما ذخیره میکنه، وقتی کاربر پسورد خودش رو وارد میکنه (مثلا فرض کنیم پسورد @AB12342 هست) ، دوباره هش میشه و با اون چیزی که در دیتابیس قرار داره، تطبیقش میده. گاهی اوقات هم ممکنه دوستتون یه نامه بخواد بهتون بزنه و بخواد اذیتتون کنه ، اون رو هش میکنه و میفرسته!
برای شکستن این رمزها، میتونید از دکرپشن های آنلاین هم استفاده کنید. سایت MD5Online دقیقا این کارو براتون انجام میده :)
خوش باشید و بخندید و از رمزگشایی برای یادگیری استفاده کنید، نه اذیت کردن مردم! یا در جهت رفاه مردم (مثلا اگر پسورد دوستتون بعد از رمزگشایی ۱۱۱۱۱ در اومد، بهش بگید ناامنه :) ).

بعدا نوشت : وبسایت قاتل هش هم چنین کاری رو میکنه :)
و نکته ای که یادم رفت بگم، اینه که این سایتها از توی یه دیکشنری چک میکنن و در لحظه پسوردی رو براتون نمیشکنن.
موفق باشید :)

FacebookTwitterGoogle+Share

چه کار کنیم تا در صورت هک شدن، امنیتمان تامین باشد؟

پس از این که شبکه فیس‌نما (یا شبکه «وزین» خودخوانده) هک شد، و فایل هشت مگابایتی که حاوی پسورد های این شبکه، یوزرنیم و ایمیل ها بود، منتشر شد؛ تعداد زیادی از وبلاگ ها در موردش نوشتند. من هم تصمیم گرفتم تا در موردش کمی بنویسم! البته من بیشتر سمت کاربر رو در نظر میگیرم و نکاتی راجع به پسورد میگم.

نکاتی برای ادمین و طراح سایت

اول از همه، اگر قراره از اسکرپیت آماده استفاده کنید، نسخه های Null شده یا کرک شده به درد کار جدی نمیخورن! دلیلش هم پر واضحه، این اسکریپتها یه بلایی سرشون اومده و همین بلایی که کرکر سرشون آورده، میتونه کاملا باعث نابودی سایت شما، در صورت یک حمله حتی ساده بشه. نکته دوم، بعضی از اسکریپت ها به صورت پیشفرض امکان تنظیم پسورد رو دارن، مثلا تنظیم کنید پسورد حداقل ۸ کاراکتر باشه و … . اونهایی هم که ندارن، پلاگین ویژه این کار رو در اختیار کاربران میزارن، که میتونید یکی از همون پلاگین ها رو دریافت و نصب کنید (البته باز هم دقت کنید، یا پلاگینی رو استفاده کنید که خود توسعه دهنده ها ارائه کردند، یا اونی که توسعه دهنده های سرشناس و معتبر!). بهترین نمونه برای تامین امنیت پسورد، نصاب ویندوز سرور هست، که کاربر رو مجبور میکنه تا به شکل خاص پسورد گذاری کنه.
در آخر، اگر توانش رو ندارید که خودتون سیستم درست و حسابی طراحی کنید، یا اصلا سایت نزنید، یا از کسی کمک بگیرید که کارش تامین امنیته (یا این که خودتون یاد بگیرید و تست های لازم رو انجام بدید!).

کاربر ها چه کنند؟

خب اصولا کاربر ها مهمترین کاری که باید بکنند اینه که در وبگاه های ناشناس و نامعتبر عضو نشن ، اگر هم میخوان عضو شن، پسوردی متفاوت با اون چه که در ایمیل یا سایر اکانت ها استفاده میکنن، تعیین کنند. اگر هم دیدید که وبسایت مورد استفاده، حساسیتی روی این که شما چه پسوردی استفاده میکنید، نداره، بهتره بازم درش عضو نشید. قدم بعدی، پسورد و یوزرنیم رو دو عدد یا کلمه متفاوت انتخاب کنید. من در فایلی که هکر منتشر کرده، یوزرنیم هایی که با mehdi (یا Mehdi) شروع میشدند یا این یوزری که mehdi بود رو دیدم، و با خودم گفتم که بهتره که ببینم این یوزر، از چه پسوردی استفاده میکرده، کنجکاو شدم و با خودم گفتم که کلمه mehdi رو با استفاده از وبسایت OnlineMD5 هش کنم و توی این فایل دنبالش بگردم، بله! فوقع ما وقع! تعدادی از یوزرهایی که یوزرشون Mehdi بود یا با Mehdi شروع میشد، از پسورد mehdi استفاده میکردند! پسوردهای ناامنی مثل ۱۲۳۴۵۶ ، ۷۷۷۷ و ۱۱۱۱۱۱ هم به وفور در اون فایل مشاهده میشه. نکته دیگری که کاربر ها باید دقت کنن، این هست که سایتی که میخواید توش عضو شید، حتما یک ایمیل فعالسازی براتون بفرسته، وگرنه باز هم نمیشه به اون سایت اعتماد کرد، چون هکر میتونه با یک ایمیل fake یوزر بسازه و به راحتی شرارت کنه!
خب، من نکته دیگه ای به ذهنم نمیرسه، فعلا هم شاد باشید و بخندید تا هک بعدی!

FacebookTwitterGoogle+Share