نکته امنیتی: به فرستنده ایمیل اعتماد نکنید

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

یک ایمیل است ظاهرا از طرف من برای یکسری از دوستان که می گه یک فایل اجرایی رو از سرور یک دانشگاه توی کانادا (که احتمالا ادمین از دسترسی هاش برای این آماتور بازی ها سوء استفاده می کنه) دانلود کنند و اجرا.

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

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

آپدیت ۳ زانویه: اگر دوست دارین یک کرکر ببینین، کامنت ها رو هم بخونین (:

بازی وبلاگی: عکس بازی شب یلدا

مثل همیشه بلاگنوشت رو داریم و بازی‌های وبلاگی. شب یلدا است و پیشنهاد داده وبلاگ رو عکس بارون کنیم برای یک شب شاد. عکس از هر چیزی… اینم عکس بازی من.

[nggallery id=3]

بتل فیلد ۳، رید اور مسکو، عصبانی‌کردن آمریکا و همه چیزهای دیگه

سال ۱۹۸۵ بود. حمله می کردیم به مسکو. حالا سال ۲۰۱۲ است و حمله می کنیم به ایران اما قبلا با نیروهای روسیه و چین به آمریکا و اروپا هم حمله کردیم. رفیق نادیا حواس رفیق استالین رو پرت کرده و نمی شنوه که رفیق کین داره می گه جنگ سر اینکه به کجا حمله می کنیم نیست.. سر اینه که پولمون رو می دیم به کی.

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

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

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

دوم اینکه ما الان کلی بازی بازمتن داریم (از Nexuiz گرفته تا Doom و بازی‌های استراتژی‌ای مثل جنگ وسنوت). من شخصا حاضرم با گرفتن ده میلیون گرافیک هر کدوم از اینها رو عوض کنم و در عرض یک ماه جای «حمله به تل آویو» یا هر چیز دیگه ای که می خواین جا بزنم. لطفا اگر قراره پول ما بیشتر از این حروم بشه، حداقل بدینش به خودم که کیفیت کار هم بالاتر باشه و تحت هر سه سیستم عامل هم اجرا بشه.

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

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

اوه! حالا که حرف بازی بچگی‌هام شد، اینم بگم که روزگاری عشق بازی‌های جنگی من Raid Over Moscow توی اسپکتروم و بعد کمودور ۶۴ بود که جا داره ازش یادی بکنیم.

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

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

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

متحول نشدین؟ فدای سرمون (: منم دارم به زندگی ام ادامه می دم. انگری بردز آنلاین تقلبی بازی کنین.

پول آب و گاز و برق و غیره و انحصار دولتی و پول زور

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

در مقابل در سیستم راست، رقابت و غیره قراره سیستم رو به سمت جلو ببره. در این سیستم قبول می‌شه که یکسری آدم باید فقیر باشن و بیکار تا بقیه غذا بخورن. در این سیستم گفته می‌شه که رقابت باعث بهبود قیمت‌ها می‌شه و اگر چیزی بیخودی گرونه یا سیستمی ناکارا است، بقیه رقبا وارد بازار می‌شن تا سود کنن و اون چیز ناکارا باید از سیستم خارج بشه یا خودش رو اصلاح کنه.

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

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

کارت درست مثل اینه که دو تا کارخونه ماشین سازی بیشتر اجازه نداشته باشن ماشین بفروشن و بعد به هر قیمتی که خواستن هر چیز مزخرفی رو بفروشن و هیچ کس هم حق نداشته باشه باهاشون رقابت کنه…

خودت بگو ببینم این چیزی که درست کردی چپه یا راسته یا «پول زور وَده» است؟

چطوری اسکریپت نویسی بش یا هر چیز دیگه یاد بگیریم؟

دراگو توی مطلب مربوط به نوشتن یک اسکریپت بش پرسیده:

چطور میتونم توی اسکریپت نوشتن واسه bash مسلط بشم؟

اول باید بگم که آدم‌ها از شیوه‌های مختلف چیز یاد می‌گیرین. بعضی‌ها تئوری، بعضی‌ها با نگاه کردن و تکرار و بعضی‌ها با عمل. من جزو گروه آخری هستم. شما ممکنه توی گروه دیگه یا جایی بین گروه‌ها باشین.

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

قدم اول پیشنهادی من برای خودم، خوندن Tutorial است. خوندن راهنماهای سریع و مقدماتی. مثلا اگر بخوام بش رو یاد بگیرم، یک گوگل برای Bash Tutorial می کنم و بعد هفت هشت تا از صفحه‌هایی که به نظرم خوب بیان رو با میدل۰کلیک کردن باز می‌کنم. اونوقت توی همه اونها یک چرخ می‌زنم و یکی دو تا شون رو برای خوندن انتخاب می‌کنم. منطقا دنبال چیزهایی هستم که خیلی کوتاه نباشن ولی خیلی خیلی هم بلند نباشن و بشه یک بعد از ظهر یا چند ساعته خوندشون. اونوقت تند و تند می‌خونم.

نمی‌دونم چرا به هرکی اینو می‌گم می‌خنده:

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

(((: درسته. من معمولا چیزی که نیاز به کلاس و اینها داشته باشه نمی‌نویسم. استفاده می‌کنم ولی خودم نمی‌نویسم چون کلا اسکریپت‌های کوچیک بیشترین چیزی است که دنبالشم.

من اینها رو توی این راهنماهایی که پیدا کردم یاد می گیرم و بعد سرچ می‌کنم. مثلا اگر بخوام کل فایل‌های توی یک دایرکتوری که ممکنه توشون فاصله هم داشته باشن رو یکی یکی پروسس کنم، گوگل می کنم دنبال bash script loop files in directory space in filename (: دقیقا. اون مطلبی که قبلا نوشته بودم با نتیجه اولین جستجویی است که اینجا اومده.

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

در آخرش سه تا نکته رو اضافه می کنم:

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

مالیات پول زوره

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

دو نکته اینجا مهمه.

اول اینکه چرا فقط وقتی زورتون می رسه مالیات سی درصدی می گیرین؟

من یک مهندسم توی یک شرکت کاملا وفادار به قانون. حقوقم حوالی دو میلیون است که این روزها عدد عظیمی نیست ولی شرکتم چون اهل زیرآبی رفتن نیست عین همون دو میلیون رو به عنوان حقوقم ثبت می کنه و ازش (چون زیاده)‌ ۳۰٪ مالیات کسر می شه. من کمترین مالیاتی که ممکنه در یک ماه بدم ۴۴۰هزار تومن است و بیشترین مالیاتی که تا حالا دادم تقریبا ۱۱۰۰۰۰۰ تومن در ماه است. سوالم اینه که اگر مالیات پول زور نیست، رییس جمهور، نماینده‌های مجلس و غیره نگاه کنن ببینن چقدر ماهانه دریافتی دارن و چقدر مالیات می دن. اگر نسبتش همین بود تازه می‌رسیم به بخش دوم.

آیا کسانی که میلیاردی پول در میارن هم همینقدر مالیات می‌دن؟ کسانی که ده میلیونی در می یارن چطور؟ با یک پزشک که سه تا مطب کار می کنه و یک بیمارستان سهام داره صحبت می کردم و غر می زد که امسال براش هفتصد تومن مالیات «بریدن». تقریبا یک دوازدهم من. همینطور دوست بازار آهن که تو کار بساز بفروشی هم هست شاکی بود که پارسال پونصد تومن مالیات داده.

اگر مالیات پول زور نبود، دادنش بستگی به زور و اخلاق نداشت.

دوم اینکه بدون نظر من هر کس زور داره خرجش می کنه

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

خلاصه اینکه

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

اگر می خواین پول زور نباشه

نمی دونم چرا ممکنه ولی اگر واقعا دوست دارین مالیاتی که می گیرین پول زور نباشه دو تا قدم اصلی داره:
۱- از همه بر اساس یک معیار برابر و بدون زیرآبی رفتن بگیرین و خودتون هم جزو همه باشین
۲- در یک سیستم دموکراتیک و شفاف خرجش کنین

چرا به گنو/لینوکس عشق می ورزم: خاطرات یک هکر

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

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

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

9370333**** ea9bf866d98db73eb0909fa9c1cc1b11
9370050**** fcbfab2f4cda26061ed9e3ee96a4fd61
9370750**** 6a130f1dc6f0c829f874e92e5458dced
9370001**** 9ad97add7f3d9f29cd262159d4540c96

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

خب حالا راه حل ما چیه؟ یک راه که بهش «بروت فورث» می‌گن اینه که یکی یکی هر چیز ممکن رو هش کنیم. یعنی اول ۱ رو هش کنیم ببنیم به اون چیزی که اونجا هست می‌رسیم یا نه. بعد ۲ رو هش کنیم. بعد ۱۲ رو بعد ۱۱ رو و خلاصه هر چیز ممکن رو. اینکار یک نیروی کور است و بسیار وقت گیر. اما یک راه هوشمندانه تر هم داریم که بهش می‌گن رنگین کمان / rainbow. تکنیک رنگین کمان اینه که تمام کارهای بالا رو بکنیم (یعنی مثلا اگر اکثر افراد در موبایل از پسوردهای عددی استفاده می کنن از ۰ تا ۹۹۹۹۹ رو هش کنیم و رمز و هش اون رو بریزیم توی یک دیتابیس) و بعد یکی یکی هش ها رو توی دیتابیس سرچ کنیم و پسورد رو نشون بدیم… خب آماده‌اید؟

برای ایجاد همه پسوردهای ۰۰۰۰۰ تا ۹۹۹۹۹ و هش کردن اونها این برنامه پایتون رو نوشتم. مطمئنا می‌تونه بهتر هم نوشته بشه ولی این کار من رو راه انداخت:

#!/usr/bin/python

import MySQLdb

db = MySQLdb.connect("localhost","jadi","password","break" )

# prepare a cursor object using cursor() method
cursor = db.cursor()


for i in range(0, 10000):
    pre = '';
    if i < 10:
        pre += '0';
    if i < 100:
        pre += '0';
    if i < 1000:
        pre += '0';
    num = "%s%s" % (pre, i);
    print num;
    # execute SQL query using execute() method.
    cursor.execute("insert into rainbox values ('%s', md5('%s'));"%(num,num));

# Fetch a single row using fetchone() method.
#data = cursor.fetchone()

# disconnect from server
db.close()

همین برنامه رو برای پسوردهای ۰۰۰۰۰ تا ۹۹۹۹۹ و ۰۰۰ تا ۹۹۹ و ۰۰ تا ۹۹ و ۰ تا ۹ هم کم و زیاد کردم و رنگین کمانی شامل ۱۱۱۱۱۰ پسورد و هش اون ساختم:

mysql> select count(*) from rainbox;
+----------+
| count(*) |
+----------+
|   111110 |
+----------+
1 row in set (0.07 sec)

بعد کلیدی روی هش تعریف کردم که سرچ سریعتر بشه:

mysql> ALTER TABLE rainbox ADD primary index (hash);

حالا وقت شکستن رمزها است. فایلی دارم به اسم users.csv که این شکلی است (چهار رقم آخر تلفن ها رو ستاره کردم که پرایوسی آدم‌ها حفظ بشه):

9370333**** ea9bf866d98db73eb0909fa9c1cc1b11
9370050**** fcbfab2f4cda26061ed9e3ee96a4fd61
9370750**** 6a130f1dc6f0c829f874e92e5458dced
9370001**** 9ad97add7f3d9f29cd262159d4540c96

کافیه این رو با لایبری csv پایتون بخونم، و بعد هش هر خط رو از دیتابیسم کوئری بزنم و اگر جواب داشت توی خروجی تلفن و هش و پسورد شکسته شده رو بنویسم و اگر هم جواب این هش توی دیتابیس من نبود، جلوش بنویسم later تا بعدا از یک جای دیگه پیداش کنم.

#!/usr/bin/python

import MySQLdb
import csv

db = MySQLdb.connect("localhost","jadi","password","break" )

# prepare a cursor object using cursor() method
cursor = db.cursor()

spamReader = csv.reader(open('users.csv', 'rb'), delimiter=' ', quotechar='|')
for row in spamReader:
    tofind = row[1];
    try:
        cursor.execute("select pass from rainbox where hash = '%s'"%tofind);
        data = cursor.fetchone()[0];
        print row[0], tofind, data;
    except: #this hash was not in db
        print row[0], tofind, "later" 

# disconnect from server
db.close()

برنامه بالا رو اجرا می‌کنم و زمان می‌گیرم:

jadi@jubun:~/w$ wc -l users.csv && time python break.py > out.txt
316590 users.csv

real    0m57.226s
user    0m25.362s
sys 0m4.856s

واو! سیصد و شونزده هزار پسورد رو توی کمتر از یک دقیقه شکستیم (: یک نگاه به فایل آوت.تکست می‌گه:

jadi@jubun:~/w$ head out.txt 
93703334*** ea9bf866d98db73eb0909fa9c1cc1b11 7523
93700508*** fcbfab2f4cda26061ed9e3ee96a4fd61 8510
93707500*** 6a130f1dc6f0c829f874e92e5458dced 7496
93700013*** 9ad97add7f3d9f29cd262159d4540c96 9538
93700177*** c902514ac30b6e23dbb0c3dc80ec7d4a later
93700858*** ee676ed9ce5bd51b4452ddfbdf962ef7 later
93707848*** 8c249675aea6c3cbd91661bbae767ff1 1986

ظاهرا پسوردهای چهار رقمی مد هستن (: ظاهرا تعداد later ها هم کم نیست. بذارین یک نگاه هم به اونها بندازیم:

jadi@jubun:~/w$ grep later out.txt | wc -l 
1558

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

jadi@jubun:~/w$ grep later out.txt  > later.txt && \
                                cut later.txt -f2 -d' ' | uniq -u | wc -l 
5536

نتیجه طبیعی نیست... یعنی از شش هزار نفر فقط پونصد ششصد نفر پسورد تکراری داشتن؟ هر کسی که یک مقاله در مورد رفتار پسوردی آدم‌ها خونده باشه می دونه که این عدد غیر واقعی است.. مشکل! قبل از استفاده از دستور یونیک، باید داده‌ها رو مرتب کرد. پس یک سورت بین دستور اضافه می کنم:

jadi@jubun:~/w$ cut later.txt -f2 -d' ' | sort | uniq -u | wc -l 
767

هها! نگفته بودم؟ کل این شش هزار نفر باقیمونده، فقط از ۷۶۷ پسورد استفاده کردن. این ۷۶۷ پسورد رو می‌ریزیم توی یک فایل مجزا برای کشف کردنشون در پست بعدی.

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

و در نیتجه کافیه من یک برنامه بنویسم که همه هش‌های هنوز کشف نشده رو از فایل ورودی بخونه و اونها رو به این سایت پست کنه و منتظر خروجی بمونه. بعد توی خروجی اچ تی ام ال دنبال چنین خطی بگرده:

Found: md5("zaka") = 00a3b206c4ad2cae515e28745423093a

و zaka رو یک جایی ذخیره کنه. کافیه این کار رو برای همه هش‌هایی که هنوز کشف نشدن ادامه بدیم. مشخصه که هنوز یکسری کشف نشده خواهند موند ولی بذارین ببینیم به چی می رسیم. این مرحله به خاطر فرستادن درخواست به اینترنت کندتر است و یک راه حل خوبه اینه که فایل hard.txt و برنامه رو روی یک سرور وی پی اس آپلود کنیم و اونجا اجراش کنیم. همین کار رو می کنم و برنامه پایتون رو هم اینجوری می‌نویسم که یکی یکی هش ها رو برداره، به اون سایت بفرسته و توی خروجی اچ تی ام ال که بر می گرده، خطی که پسورد رو نشون می ده رو جدا کنه. اگر این هش اونجا هم نبود می نویسیم too difficult و از خیرش می گذریم (: بریم ببینیم چی می شه:

#!/usr/bin/python

import urllib
import csv
import re

spamReader = csv.reader(open('hard.txt', 'rb'), delimiter=' ', quotechar='|')
for row in spamReader:
    try:
        # This is here for copy/pasters....
        # Originally by Jadi at jadi.net
        params = urllib.urlencode({'term':row[0], 'crackbtn': 'Crack that hash baby!'})
        f = urllib.urlopen("http://md5crack.com/crackmd5.php", params)
        page = f.read()
        password = re.search('Found: md5\("(.*)"\) = %s' % row[0], page)
        print row[0], password.group(1)
    except: 
        print "too difficult"

و برای اجرا می‌زنیم:

user@remotehost:/tmp$nohup python onlinebreak.py > easy.txt & 

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

jadi@jubun:~/w$ time python break.py > out.txt &&  grep later out.txt | wc -l 

real    0m58.863s
user    0m27.706s
sys 0m5.756s
1558

عالی (: حالا دیگه فقط ۱۵۵۸ نفر داریم که پسوردشون کشف نشده. از سیصد هزار نفری که اول داشتیم، پیشرفت عالیی است (: این هزار و پونصد نفر که پسوردهای غیرمعمول گذاشتن هم می‌تونن زنگ بزنن به پشتیبانی و بگن از امروز پسوردشون کار نمی کنه و اونها براشون ریست می کنن (:

نتیجه: از سیصد و خورده‌ای هزار نفر، فقط ۱۵۵۸ نفر پسوردهایی دارن که جزو پسوردهای استانداردی که هر هکری چک می کنه نیست. در پسوردهاتون عدد و حروف کوچیک و بزرگ بذارین و پسوردتون از هشت حرف هم بیشتر باشه. اصلا بذارن این یک دستور دیگه هم بدیم: فایل خروجی رو نشون بده، ستون سومش (پسورد) رو جدا کن (ستون‌ها رو اسپیس از هم جدا می کنه) بعد خروجی رو مرتب کن (پسوردها مرتب می شن) بعد بشمر هر پسوردی چند بار تکرار شده و خروجی و مرتب کن به شکل عددی معکوس و اسپیس های اول خط رو هم بیخیال شو و بعد ده خط اول رو نشون بده.

jadi@jubun:~/w$ cut out.txt -f3 -d' ' | sort | uniq -c | sort -b -n -r | head
 192019 1234
  11780 2222
  10532 123
   9734 1111
   7547 5555
   5293 12345
   4512 4444
   4473 0000
   2568 3333
   2192 444

و این شما و این پر استفاده‌ترین پسوردهای این سیصد هزار نفر. جالبه که ۶۰٪ از کاربران پسوردشون رو گذاشتن ۱۲۳۴۵. فوق العاده نیست؟

«جادی! چرا اینقدر ضد زن هستی؟»

خب بذارین تمرکز کنم… با دختری حرف می زدم. دختر هنرمند است (به قول خودش آرتیست) و از پسری می‌گفت که یک دوربین خوب داره و استودیوی عکاسی نود (۹۰ نه! نــــــود یعنی لخت). مشتری‌هاش میان به استودیوش که توی خونه‌اش هم هست، لخت می‌شن و عکس می‌گیرن.

من با خنده و فکر به رشته سخت عکاسی که توش آدم سخت شاخص می‌شه و خیلی از آماتورها با پول می‌تونن توش جلو بیافتن، می‌گم:

    – پول هم می‌گیره از مشتری‌ها؟

دختر جواب می‌ده:

    – فکر نکنم. نمی‌دونم.

و من با خنده می‌گم:

    – ظاهرا که باید یک پولی هم بده.

دختر اضافه می‌کنه:

    – احتمالا گاهی با بعضی مشترها هم می‌خوابه دیگه.

این یک متلک پسرونه نیست. جدی است و بر اساس منطق. من اضافه‌تر می‌کنم:

    – پس احتمالا باید پول بیشتری هم بده.

و دختر خیلی جدی بهم جواب می‌ده «جادی تو چرا اینقدر ضد زن هستی؟»

شوکه می‌شم. من ضد زن هستم؟ شنیدنش از طرف کسی که مدت‌ها است منو می‌شناسه سخته. من مبارز نیستم و برای نظراتم خیلی وقت ها ترجیح می دهم هزینه ای هم ندم ولی به هرحال می دونم که معتقدم به حقوق زنان (مثل هر موجود دیگه ای) و دفاع ازش. شوک خوبیه… فکر من معمولا خوب خط ها رو می‌گیره می‌ره جلو و دو سه تا خط مختلف رو به نتیجه می‌رسونه اما اینبار هر چند ثانیه که بهش وقت می‌دم به ته خط تحلیلی نمی‌رسه. هی سعی می‌کنم مسیرهای احتمالی مختلف رو به چپ و راست بچینم و ببینم این مکالمه کجاش به ضد زن بودن می‌رسه.

یادم نیست خودم به نتیجه می‌رسم یا خودش بهم می‌گه. اوه! الان یادم اومد. خودش بهم گفت و جوری که الان با یادآوری‌اش شوکه بشم. بهم می‌گه «چرا همه‌اش تو چارچوبٍ شدن و کردن فکر می‌کنی؟». اوه!

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

چند روز قبل ۲۵ نوامبر روز جهانی مبارزه با خشونت علیه زنان بود (پادکست رادیو فنگ رو از اینجا و پادکست پر استرس صدای تغییر رو از اینجا گوش بدین). این شاید اولین ۲۵ نوامبری است که من حرف تکراری نزدم. امسال ریشه‌های عمیق‌تری از این خشونت رو توی خودم هم دیدم و مطمئن‌تر شدم که جامعه نیاز به آموزش داره. نیاز به حرف زدن و نیاز به ارتباط. اگر داشتیم… می‌خوردیم به سلامتی همه خانم‌هایی که بدنشون مال خودشونه… به سلامتی همه خانم‌ها.