تشریح و نمایش فنی باگ و حمله‌های استک اورفلو و بافر اورفلو

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

این دو وئدیو کمی سطح بالاتر هستن و اگر دیدین و همه اش رو متوجه نشدین، می تونن راهنمایی باشن برای اینکه چه چیزهایی رو دنبال کنین و بخونین.

ویدئوی اول حمله استک اورفلو در یوتوب و آپارات و ویدئوی دوم هم در یوتوب و آپارات.

پروژه یکساعته برای یاد گرفتن کلی لینوکس و شبکه: راه اندازی وب سرور از خانه

این کاری بود که وقتی من کردم کلی ذوق داشتم. با اولین ADSLی که گرفتیم: روی یه لینوکس وب سرور راه انداختم و بعد با تنظیمات روتر و دینامیک دی ان اس کاری کردم که وب سرور من از همه دنیا قابل دیدن باشه. تقریبا ۳ سال قبل یکی ازم خواست این رو توضیح بدم و … الان بالاخره به قدیمی ترین ایمیل اینباکسم پاسخ میدم و اگر براتون جالبه و نکردین، پیشنهاد می کنم شما هم سراغش برین که کلی هیجان داره (:

انتشار دوره کامل بلاکچین و بیت کوین فارسی بر اساس سرفصل‌های پرینستون

پارسال اعلام کردم که به مناسب سیل، یه دوره کامل بلاکچین و بیت کوین بر اساس دوره ای که توی پرینستون تدریس می شه برگزار می کنم و از دوستان خواستم ۱۰ میلیون تومن به مناسبتش کمک مالی کنن که صد در صدش برسه به سیل زده‌ها. کمک دوستان و شرکت های مختلف به ۱۴ میلیون رسید و صد در صدش رو دادیم به سیل زده ها و دوره لایو استریم و همزمان ضبط شد که در نهایت به حدود ۵۵۰ دقیقه ویدئوی خالص رسیدیم.

نکته مهم اینه که این دوره فنی است و با جزییات دقیق برای کسانی که دوست دارن دقیقا ماجرا رو درک کنن. درسته که این دوره درباره خرید و فروش و ماین و هم کمی حرف می زنه ولی کارش پول در آوردن نیست بلکه یاد گرفتن تکنولوژی است. اینجا به الگوریتم ها نگاه می کنیم، سورس رو می خونیم و به تکنولوژی پشت این ماجرا می‌پردازیم و در نهایت هم یک با بازنویسی یک بلاکچین ساده، مفاهیم رو مرور می کنیم.

الان می تونین کل دوره بلاکچین و رمزارزها و بیت کوین رو روی آپارات و همچینن یوتوب ببینین و کامنت بذارین یا هر کار دیگه (:

ویدئوها آزاد هستن و هر جور بازنشرشون با ذکر منبع کاملا آزاده و تشویق شده (: همچنین یک نسخه آزاد از کتاب Bitcoin and Cryptocurrency Technologies از اینجا قابل دانلود است و اسلایدهای استفاده شده در درس هم اینجاست و معلومه که استفاده از اینها هم آزاد است، با ذکر منبع.

امیدوارم به درد بخوره و خوش باشین و خندون و همیشه در حال یاد گرفتن.

مرتبط

دوره ویدئویی جدید: انجام یه پروژه فریلنسری به همراه شما، بیاین قدم به قدم از چیزی که بلدیم پول در بیاریم

نظریه فلسفی من اینه که یه شغل بیشتر نداشته باشم و ازش پول کافی زندگی‌ام رو در بیارم. در نتیجه نه اینفلوئنسر می شم نه مشاور (: ولی یه چیزی باعث شد حدود ۱ ماه قبل یه پروژه مستقل از کارم قبول کنم: ایده اینکه پروژه رو قبول کنم و قدم به قدمش رو ضبط کنم و باهاتون به اشتراک بذارم. ایده ام اینه که نشون بدم یه پروژه واقعی چطوری پیش می‌ره و چطوری می‌شه کار در دنیای واقعی تحویل داد.

پروژه چیه؟ یک شرکت می خواد یکسری کد روی کالاهاش بزنه و مشتری‌ها بتونن با اسمس کردن اون کد به یه شماره، بفهمن که این کالا و کد معتبر است یا نه. این کدها از طریق یه فایل اکسل باید روی سرور به روز بشن و بد نیست یه چیزهای باحالی مثل تعداد کالای چک شده و اینها رو هم در پنل نشون داد. می ریم جلو ببینیم چی می شه.

تکنولوژی‌های مورد استفاده چیه؟ زبان که پایتون است و با توجه به اندازه و شکل پروژه، از میکرو فریم ورک فلسک استفاده می کنم و احتمالا بوت استرپ و دیتابیس ساده و سر راست و محبوبم، اسکیولایت. به عنوان سرویس دهنده اسمس از کاوه نگار و برای پاس از فندق.

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

و اما ویدئوها و منابع. شما می تونین پلی لیست آپارات و پلی لیست یوتوب رو دنبال (و ترجیحا منو فالو کنین) و از اون باحالتر، می تونین اگر ایده ای داشتین بعد از مطرح کردنش به عنوان ایشو در گیت هاب اصلاحش کنین؛ در بعضی ویدئوها اسم دوستانی که کارهای مثبت کردن هست. حتی کامنت خوب (:

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

چطوری سورس بخونیم؟ دوره بلاکچین و رمزارزها و بیت کوین – جلسه ۰۰۷ – خوندن سورس بیت کوین

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

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

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

معلومه که این بالا و پایین کردن سریع کد به معنی «فهم» کند تیست بلکه بحث ریختن ترس است (: و پیدا کردن یک نقطه شروع. اکثر چیزهای سخت، سختن چون شروعشون رو عقب می ندازیم چون هی به کلش نگاه می کنیم و حاضر نیستیم از یه جای ریزش وارد بشیم. دقیقا به یک کوه فکر کنین که از دور نگاهش میکنین و می گین «واقعا چطوری باید از این رد شد؟» ولی وقتی قدم تو راه می ذارین و ادامه می دین، یکهو می بینین که رد شدین. به نظرم بهترین مثاله برای خوندن یه سورس بزرگ.

معلومه که برام خوشحال کننده است اگر بحث رو دوست دارین، عضو کانال های یوتوب و آپارات و توییچ بشین (:

تی ماکس، ابزار دست حرفه‌ای‌های کامند لاین

مهارت اصلی تیماکس در نصف کردن صفحه و درست کردن پنجره جدید و اینها نیست. نکته ای که تی ماکس رو تی ماکس می کنه، اینه که ای ننصف کردن ها و برنامه اجرا کردن ها و اینها، بین قطع و وصل شما به یک سرور حفظ می شه. در واقع سرور همیشه اونجوری می مونه که بار آخر ترکش کردین. تو این ویدئو با هم نگاهی به ماجرا داریم

محیط کار جادی برای ضبط ویدئوهای آموزشی + دو درس از زندگی (:

من چندین ساله که فیلم آموزش درست می کنم و اینکار تقریبا همیشه توی خونه خودم و اتاق کارم بوده. توی این چند سال من تمرکز زیادی برای ایده آل کردن شرایط ضبطم نکرده‌ام ولی به هرحال تکنیک‌م کمی پیش رفته – هرچند که با چیزی قابل قبول هنوز خیلی فاصله داره.

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

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

نور و پرده سبز

برای رسیدن به یک افکت پرده سبز عالی (حذف بک گراوند)، انتظار می ره شما یک پرده سبز صاف و یکدست داشته باشین، نورهایی که اونو یکدست و خوب روشن کنن و یک نور که صورت شما رو به خوبی روشن کنه. انتظار می ره انعکاس نور سبز پرده روی بدن و موهای شما نیافته. برای اینکار ستاپ های مختلفی هست که می تونین با سرچ به دنبال chroma key setup بهشون برسین و حتی اگر در کشوری آزاد زندگی می کنین یا بهش دسترسی دارین، مستقیما یک کیت کامل نو رو پرده سبز مناسبش رو از جاهایی مثل آمازون بخرین.

اما محیط کار من نتیجه تجربه با نورها و پایه ها و .. توسط یک آدمی است که تخصصی نداشته و اهل پرسش در مغازه ها هم نیست (: در حال حاضر محیط کار من چیزی شبیه به اینه.. یا درواقع در این لحظه دقیقا اینه:

می بینین که اون پشت یه پرده سبز آویزون شده و چهار تا نور اصلی هست. دو تاشون از چپ و راست پرده رو روشن می کنن که سایه چندانی روش نباشه. یه نور سفید (که سمت تصویرش کمی از اون رو می بینین) سعی می کنه صورت من رو روشن می کنه و یک نور از پایین باعث می شه سایه ای که نور روبرو از من روی پرده می ندازه، از بین بره. وقتی من جلوی این پرده بشینم و ضبط کنم، افکتی مثل chroma key که خیلی از نرم افزارهای ادیت تصور اونو دارن می تونه اون سبز رو تشخیص بده و از تصویر حذفش کنه. اما می بینین که کلی اشکال هست. پرده صاف نصب نشده، نورها یکنواخت و قوی روشنش نکردن. چراغ روبروی من نسبتا ضعیفه و صورت من معمولا خیلی هم روشن نیست و انعکاس نور سبز پرده روی موهام می افته و نور عقب هم خیلی قویه! نتیجه این ستاپ در بهترین حالت چیزی شبیه اینه:

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

دوربین

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

یک فلسفه دیگه زندگی من «حداقل دست انداز» است. در مسیر کارهای روزانه باید دست اندازها رو کم کرد. اگر ضبط وابسته به بودن فلان دوربین باشه، احتمالش میاد پایین. اگر پادکست نیازمند گرفتن نتیجه از ادیتور باشه احتمال استمرارش میاد پایین و … البته می شه در یک کار حرفه ای مثلا به ادیتور حقوق داد تا دیگه «دست انداز» به حساب نیاد.. ولی در نهایت توی مسیر صافی که توش چیزهای کمتری هست، راحتتر پیش می ریم تا مسیری که توش چند تا دست انداز هست.

صدا

برای ضبط صدا، من از کارت صوتی خود لپ تاپ و یه میکروفون کوچولوی سیمی یقه ای استفاده می کنم. از این:

قبلا از میکروفون خود لپ تاپ هم استفاده می کردم و به نظرم مشکل خاصی نداشت. اینو بیشتر برای ضبط با موبایل خریدم ولی اینجا هم استفاده می کنم. قبل از این میکروفون یه میکروفون Rode یو اس بی خرید که خیلی از پادکسترها دارن ولی به نظرم دردسرش زیاده و من هم نیازی به کمی کیفیت بهترش ندارم (:‌ باید یه بار بذارمش و بگم اگر کسی اونو میخواد، ازم بخره (: اگر فلسفه «حداقل دست انداز» رو یادتون باشه، می دونین که من باید چیز سیم دار رو به بی سیم ترجیح بدم (: نیازی نداره قبلش حواسم باشه که حالا باتری داره یا نه. و سیم این ۳ متر است که در سطح اتاق کار من مثل میکروفون بی سیم عمل می کنه. هرچند که بارها پیش میاد که یادم می ره میکروفون رو بزنم به بقیه ام و ضبط رو شروع می کنم.

تبلت / قلم

همونطور که توی عکس بالا هم می بینین، من خیلی وقت ها با قلم روی صفحه می نویسم. برای اینکار اولا از برنامه gromit-mpx استفاده می کنم که اجازه می ده در محیط ایکس، با یک شورتکات (به شکل دیفالت F9) بتونم روی صفحه بنویسم. البته مشکل اینه که برنامه برای محیط ایکس نوشته شده و اگر محیط گرافیکی شما ویلند باشه که داره مطرح تر می شه مشکلاتی خواهید داشت. اما مساله جدی نیست و اونجا هم سریعا چیزی کشف / پیدا خواهد شد. برای خود عمل نوشتن، من به جای ماوس از یک تبلت wacom سری bamboo استفاده می کنم؛ مدل CTH-670. ساده و سر راست است و نتیجه اش برای من به اندازه کافی خوب. اگر برنامه دیگه ای بود که مثلا با گرفتن شیفت رنگش عوض می شد خیلی باحالتر بود ولی دنبالش نگشتم. منطقا وظیفه خودمه که سعی کنم به گرومیت اضافه اش کنم (:

نرم افزار ضبط و ادیت

برای ضبط من از نرم افزار OBS استفاده می کنم (Open Broadcast Studio). بی دردسر است و راحت. می شه براش شورتکات شروع ضبط تعریف کنین و صحنه های مختلف که می شه به هر صحنه ورودی هایی رو وصل کرد. مثلا صحنه مرسوم من سه تا منبع داره: صفحه مانیتور + تصویر وبکم + صدای میکروفون. اینها رو اضافه می کنم و جاهاشون و اندازه هاشون رو مشخص می کنم و یک فیلتر chroma key هم به تصویر وبکم اضافه می کنم که پرده رو از پشتم حذف می کنه و در نتیجه صفحه مانیتور در پشتم دیده می شه.

البته در سیستم عامل های دیگه برنامه های مناسبتری هم هست – متاسفانه با کرک و اینها. مثلا خوب می بود اگر این منابع جدا جدا ضبط می شدن و بعد من حین ادیت می تونستم بگم چه لحظه ای کدوم تصویر در چه سایزی کجا باشه. در اون صورت افکت هایی مثل کروماکی و نوشتن متن روی صفحه و اینجور چیزها با کیفیت بهتری انجام می شدن اما obs اونها رو لایو انجام می ده و نتیجه کم کیفیت تر است – ولی مهم نیست. یادتونه دیگه؟ محتوا مهم است و دردسر کمتر بهتر، من عملا هیچ وقتی برای ادیت نمی ذارم (:

البته در مواقعی هم که لازمه بخشی از فیلم ادیت بشه یا بریده بشه یا هر چیز مشابهی، با استفاده از برنامه kdenlive اینکار رو انجام می دم. در نهایت هم اگر لازم باشه با دستوری مثل این، حجم رو کمتر می کنم:

ffmpeg -i inputfile.mp4 -acodec aac  -s 1366x768   inputfile_smaller.mp4

همونطور که می بینین همه برنامه ها آزاد هستن و سخت افزارها واقعا گرون نیستن. مساله اصلی هم واقعا این ابزارها نیست بلکه کیفیت نهایی کار است. اگر پرده سبز ندارین اصلا نگران نباشین، من یک مدت یه ملحفه سبز داشتم و مدتی هم دیوار رو رنگ سبز زده بودم (: بد هم کار نمی کرد. مهم کیفیت و استمرار است و مطمئنا مطالعه و پیدا کردن حالت های بهینه و سعی و خطا و استفاده از فیدبکها. اگر نکته ای هست که گفته نشده یا سواله بپرسین و اگر بهبودی ساده توش می بینین، بگین. منتظر دیدن ویدئوهای شما هم هستم.

کامپیوترها چطوری عدد تصادفی تولید می‌کنن

می دونیم که کامپیوترها قهرمان انجام کارهای تکراری هستن، اما چطوری می تونیم از این قهرمانان‌های کارهای منطبق بر نظم، بخوایم عددی تصادفی درست کنن؟ توی این #چنددقیقهبا_جادی به این نگاه می کنیم که کامپیوترها چطوری می تونن ادای تاس ریختن در بیارن و عدد «تصادفی» تحویل ما بدن. البته قرار بود این ویدئو بین ۵ تا ۱۰ دقیقه باشه و معلومه که حسابی خلاصه شده. مساله بسیار جالبه و پر از جزییات باحال و جا داره یه پادکست مستقل ازش درست کنم.

لینک آپارات و یوتوب