خاطرات سفر – توییتاپ های قطر

توییتر یک ابزار اینترنتی است که آدم ها می تونن در ۱۴۰ کاراکتر توش بگن الان دارن چیکار می کنن یا چی فکر می کنن.

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

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

می ریم و با دادن ۲۰ ریال قطری (۱۰۰۰۰۰ ریال ما) یک بج به گردن آویزون می کنیم که اسم و اکانت توییترمون روش نوشته و وارد رستورانی می شیم که توش یکسری آدم اتفاقی دیگه هستن. توی توییتاپ می تونیم با هم حرف بزنیم. من با یکسری آرشیتکت و معمار ایتالیایی حرف می زنم. همینطور با یک دانشجوی خبرنگاری قطر و یک دختر طراح فرنیچر. همزمان هم یکسری خوراکی خوشمزه می خورم.. از قهوه تا دونات و اینجور چیزها. در یکساعت از این برنامه دو ساعته هم دو نفر سخنران یکی در مورد سلامت حرف می زنه و یکی در مورد ایمنی جاده و رانندگی در قطر و این چیزها.

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

راستی نمای رستوران بر خلاف همه نماهای دیگه که دریا و غیره هستن این است:


چون دو تا دوست عشق بی ام دبلیو دارم، تصیویر رو کوچیک نکردم خیلی. قابل کلیک است (:

کم فروشی بنزین در ایران

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

بهانه گفتن این حرف که خیلی وقت بود تو دلم بود، این عکس بود که امروز تو قطر گرفتم:

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

زبان اشاره اعراب و کلی چیز برای فکر

شمااگر مشکلی داشته باشین در حالت ایده آل به یک شماره که براش مالیات می دین زنگ می زنین (مثلا توی ایران صد و ده) و انتظار دارین اونها یک مجموعه از مشکلات شما رو حل کنن. اما فرض کنین معلول باشین. مثلا ناشنوا یا ناتوان از صحبت. در این حالت چی؟ متاسفانه یک ناشنوا یا ناگویا(؟) نمی تونه به ۱۱۰ زنگ بزنه و کمک بخواد.

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

این عکس و ماجرا ذهن شما رو به کدوم طرف می بره؟ توی کامنت ها بگین که به متن اصلی اضافه کنم.

دو تا اولی رو من می گم:

اهمیت یک جامعه خیلی کوچیک (معلولین گفتاری) برای یک دولت
توافق کل کشورهای عرب زبان برای انتشار چنین کتابی

گزارش تصویری بازی ایران قطر از دوحه – قسمت اول : خود بازی

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

از تابلویی که اخطار می ده اگر با سرعت ۲۵۰ تا رانندگی کنیم زندگی مون در خطره می گذرم و با عرض شرمندگی از دوستم که منتظره دیر به ورزشگاه می رسم.

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

جای بد ورزشگاه رو به ما دادن (یک گوشه هستیم) و جای خوب خوب رو به یک وضع تشریفاتی به یکسری و روبروی اون رو به قطری ها که ظاهرا یک مجموعه خارجی هم باهاشون هستن – نمی تونم به این فکر نکنم که این مجموعه خارجی رو از یک کارخونه یا کارگاه با اتوبوس آوردن (: یکنواخت هستن همه با هم.

بازی شروع می شه و …

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

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

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

یک گل دیگه هم زدیم و بازی تمم شد (:

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

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

دم مرامشون گرم (: در مواقعی هم بازیکن شماره ده تیم حریف رو تشویق می کردیم که ایرانی بود (: حتی می گفتیم مرامی یک گل هم بزنه (: (مجیدی؟ برهانی؟)

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

بیرون که اومدیم.. اوه! ماجرا تازه شروع شد… می رم قسمت دوم…منتظر باشین (:

دوستان افغانستانی، من معذرت می خوام

خبر برام غیرقابل باور بود. کسی که مثلا نقش حفظ امنیت بخشی از این کشور رو داره ظاهرا گفته که امروز مردم افغانستان که توی ایران هستن اجازه ندارن برن به فلان بخش شهر تا… گفتن بقیه اش برای من غیر ممکنه.

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

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

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

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

خاطرات سفر قطر – چشم انداز قطر ۲۰۳۰ و روز ملی ورزش

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

کشور قطر چیزی داره به اسم Qatar 2030 Vision که ترسیم می‌کنه کشور قطر قراره ۱۸ سال دیگه چی باشه. مشخصه که همه کشورها دوست دارن در سال ۲۰۳۰ بهترین باشن اما مهم اینه که کی دیدگاهش رو برای اینکار واقع بینانه ترسیم می کنه، درست براش برنامه ریزی می کنه و به برنامه‌اش وفادار می مونه.

چشم انداز قطر ۲۰۳۰ مبتنی بر ۵ چالش اصلی است:

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

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

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

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

برای دیدن نمای سه ۳۶۰ درجه کورنیش دوحه روی تصویر زیر کلیک کنین و بعد با ماوس حرکتش بدین.


The Doha Cornish (Sea Shore) in Middle East

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

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

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

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

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

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

خاطرات سفر بالی ؛ بارونگ

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

که به کار من نمی‌یان. چند تی‌شرت بامزه دیگه هم دیدم البته. چیزهایی در این رده:

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

و مدخلش رو هم در ویکیپدیای فارسی اضافه کردم: بارونگ