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

یکی از دوستان بهم ایمیل زده و خواسته کمکش کنم در یک اسکریپ که ثانیه شماری رو توی صفحه وب نشون بده. من برنامه نویس جاوا اسکریپت نیستم ولی راه حل چیزی است که باید بهش بگیم Lego Programming.

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

دقت کنین! این قطعات رو باید بفهمیم! یک آفت بزرگ که من دارم همه می بینم (بخصوص توی فروم های لینوکسی) کپی پیست است. چیزی که نمی فهمین رو کپی پیست نکنین. چیزها رو پیدا کنین، بفهمین، یاد بگیرین و کپی پیست کنین و تغییر بدین. مثلا من برای کد بالا یک سرچ ساده کردم به دنبال java script to count secconds و روی اولین گزینه کردم و رسیدم به این کد قشنگ:

<table border="0">
<tr>
<td align="center"><font face="Arial"><strong>You
have
visited my page for:</strong></font></td>
<td align="center"><form name="d">
<p><input type="text" size="8"
name="d2"></p>
</form>
</td>
<td align="center"><font
face="Arial"><strong>seconds!</strong></font></td>
</tr>
</table>

<script>
<!–
/*By George Chiang. (JK’s ultimate JavaScript tutorial and free JavaScripts site!)
http://www.javascriptkit.com
Credit MUST stay intact for use*/
var milisec=0
var seconds=0
document.d.d2.value=’0′
function display(){
if (milisec>=9){
milisec=0
seconds+=1
}
else
milisec+=1
document.d.d2.value=seconds+"."+milisec
setTimeout("display()",100)
}
display()
//–>
</script>

دقیقا چیزی که من می خوام نیست.. پس کد رو می خونم. دو تا متغیر داره milisec و seconds. کافیه ثانیه رو تنظیم کنم رو چیزی که می خوام مثلا کد رو عوض کنم به seconds=1000 و توی خروجی هم کلا هزارم ثانیه رو نمایش ندم یعنی: document.d.d2.value=seconds و خلاص (: به همین سادگی. لگو بازی تموم شد می ریم خونه هامون (:

You have visited my page for (starting from 1000 for fun):

seconds!

نکته ۱. این کد کپی رایت داره! نگاهش کنین و ازش یاد بگیرین و خودتون بدون قسمت های اضافی (مثلا دهم ثانیه شمار) دوباره بنویسینش تا بشه مال خودتون و ترجیحا آزاد (با لیسانس جی پی ال ۲ یا ۳) منتشرش کنین (:
نکته ۲. از لگو پروگرمینگ که حرف زدیم جا داره یاد بکنیم از لغت مشابهش زبون برنامه نویسی لوگو (َLogo) که ماروین مینسکی بزرگ از بنیانگذارانش بود و برای آموزش برنامه نویسی به بچه ها طراحی شده بود و همسن های من برنامه نویسی رو باهاش یاد گرفتن (:

بررسی کامپیوتر مبتنی بر جاوا اسکریپت

چند وقت پیش توی رادیو ۲۴ وبلاگینا، از یک چیزی گفتم که خودم هم ازش سر در نمی آوردم: سیستم عامل وبی مبتنی بر جاوا اسکریپت. برداشت من این بود که یک نفر اومده با جاوااسکریپت یک ماشین مجازی نوشته که می تونه سیستم عامل ها رو بوت کنه و باهاش به شکل موفقی یک گنو/لینوکس مینیمال بوت کرده و شما هم می تونین با رفتن به سایت http://bellard.org/jslinux همین کار رو بکنین.

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

چرا گنو/لینوکس را دوست دارم: بررسی سال های تولد در اطلاعات افشا شده ۳۰۰۰۰۰۰ کارت بانکی

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

درود. کارهای آماری جالبی میشه با داده‌ها انجام داد. به عنوان مثال احتمال این که آدمها تاریخ تولدشون رو به عنوان رمز انتخاب کنن بالاست. به دنبال ۱۳۶ بگردبن در فهرست رمزها و مقایسه‌اش کنین با هر عدد ۳ رقمی دیگه‌ای. (۱۳۷ و ۱۳۵ و ۱۳۴ هم تعدادشون بالاست). من اگه دنبال دزدی بودم از اینجا شروع میکردم.

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

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

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

در قدم اول همه صفحات بانک تجارت رو باز می کنم، با ctrl+A متنشون رو کپی می کنم و توی یک ادیتور متنی paste می کنم. من توی لینوکس برای اینکار از gedit استفاده کردم که ادیتور ساده و دم دستی گنوم است… مشخصه که اگر توی ویندوز بودم خود این یک ماجرا بود که کدوم ادیتور ممکنه بتونه این پیست رو قبول کنه و آخ نگه.

به خاطر کپی پیست من فقط متن های توی صفحه ها رو دارم… چیزهایی مثل این:

با یک دستور تمام خط هایی که توشون + هست رو جدا می کنیم. اینها خط های حاوی پسورد هستن:

grep "+" all_tejarat.txt > only_hesab_and_pass

اوه اوه! شد این:

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

رمز مخفي , شماره کارت + رمز مخفي , شماره کارت + رمز مخفي , شماره

پس من برای راحت کردن کارم، همه + ها رو تبدیل می کنم به سر خط:

jadi@jubung:~/Desktop$ sed -e "s/\s+[+]*\s*/\n/g" only_hesab_and_pass > har_password_yek_khat
jadi@jubung:~/Desktop$ head har_password_yek_khat 
رمز مخفي , شماره کارت
رمز مخفي , شماره کارت
رمز مخفي , شماره کارت 6273531000000002,73251531609013
6273531000000087,42984601252954
6273531000000105,90683196772477 6273531000000145,14810051866743
6273531000000146,61558146155078
6273531000000150,14869351127492 6273531000000151,87078051710776
6273531000000201,17221491685028
6273531000000222,32833487680537 6273531000000232,06865382135692
6273531000000232,69595659033276

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

jadi@jubung:~/Desktop$ sed -e "s/ /\n/g"  har_password_yek_khat > har_password_yek_khat_2
jadi@jubung:~/Desktop$ head -20 har_password_yek_khat_2 
رمز
مخفي
,
شماره
کارت
رمز
مخفي
,
شماره
کارت
رمز
مخفي
,
شماره
کارت
6273531000000002,73251531609013
6273531000000087,42984601252954
6273531000000105,90683196772477
6273531000000145,14810051866743
6273531000000146,61558146155078

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

jadi@jubung:~/Desktop$ grep  ".," har_password_yek_khat_2 | sed "s/^.*,//" > all_passwords
jadi@jubung:~/Desktop$ head all_passwords 
73251531609013
42984601252954
90683196772477
14810051866743
61558146155078
14869351127492
87078051710776
17221491685028
32833487680537
06865382135692

حله (: ببینیم چند تا پسورد داریم:

jadi@jubung:~/Desktop$ wc -l all_passwords 
118499 all_passwords

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

مردم احتمالا سال تولدشون رو به عنوان پسورد می ذارن.

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

#!/usr/bin/perl

while ($userinput =  ) {
	chomp ($userinput);
	for($i = 0; $i <= 10 ; $i++) {
		print  substr $userinput, $i, 4;
		print "\n";
	}
}

این برنامه ورودی رو می خونه و قسمت های چهار رقمی رو ازش جدا می کنه:

jadi@jubung:~/Desktop$ echo "73251531609013" | ./find_numbers.pl 
7325
3251
2515
5153
1531
5316
3160
1609
6090
0901
9013

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

#!/usr/bin/perl

@passes = ();
for($i = 0; $i <= 9999 ; $i++) {
	$passes[$i] = 0;
}


while ($userinput =  ) {
	chomp ($userinput);
	for($i = 0; $i <= 10 ; $i++) {
		$thispass = substr $userinput, $i, 4;
		$passes[$thispass] += 1;
	}
}

for($i = 0; $i <= 9999 ; $i++) {
	print $i, ",",$passes[$i],"\n";
}

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

jadi@jubung:~/Desktop$ cat all_passwords | ./find_numbers.pl  > all_passwords_charts
jadi@jubung:~/Desktop$ head all_passwords_charts 
0,163
1,150
2,135
3,122
4,137
5,141
6,123
7,138
8,122
9,133

حالا که اینها رو داریم کافیه بریم سراغ برنامه LibreOffice برای کشیدن نمودارها. مثلا این نمودار اول است:

دیده می شه که یک جاهایی پیک داریم. بذارین یک سورت هم بکنم به ترتیب فراوانی و یک نمودار دیگه از صد تا از پرکاربردترین ها بکشیم ببینیم چی در می یاد.

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

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

#!/usr/bin/perl

@passes = ();
for($i = 0; $i <= 9 ; $i++) {
	$passes[$i] = 0;
}


while ($userinput =  ) {
	chomp ($userinput);
	for($i = 0; $i <= 13 ; $i++) {
		$thispass = substr $userinput, $i, 1;
		$passes[$thispass] += 1;
	}
}

for($i = 0; $i <= 9 ; $i++) {
	print $i, ",",$passes[$i],"\n";
}

و نتیجه:

jadi@jubung:~/Desktop$ cat all_passwords | ./find_numbers.pl  > all_digits
jadi@jubung:~/Desktop$ cat all_digits 
0,157054
1,180318
2,169604
3,175258
4,166898
5,169252
6,162562
7,158727
8,160099
9,159214

هاه.. می بینین که احتمال استفاده از ۷ و ۹ پایینه (این رو قبلا هم شنیده بودم) و احتمالا استفاده از یک و سه بالا (: توجه داریم که در صورت درست بودن الگوریتم اعداد رندم استفاده شده برای «مخفی کردن» پسوردها، یک نویز سفید اون پایین داریم که احتمالا مساوی پخش شده.

رادیو گیک شماره ۲ – از فضا و فراسوی فضا

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

شماره دو رادیو گیک (بیست و سه مگ و سی و سه دقیقه) را از اینجا بشنوید:

[audio:http://jadi.net/audio/jadi-net_radio-geek_002_space-and-beyond.mp3]

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


آرس اس اس رادیو گیک

اخبار

توروالدز می گه «همینجا صبر کنین… همینجا صبر کنین!»

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

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

داستا تمام! کامپتیبیلتی باینری از هر کاری که پچ تو می کنه مهمتره. اگر حرف زدن رو ادامه بدی از آدم ها خواهم خواست که کلا پچ های بعدی ات رو هم ندیده بگیرن.

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

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

کره جنوبی به دنبال کلون کردن ماموت

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

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

دوران پی سی ها به انتها رسیده

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

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

امنیت

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

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

البته نترسین.. هنوز کسی توی خیابون اطلاعات شما رو نمی خونه…

اخبار رو تموم می کنیم و می ریم سراغ بخش در اعماق که نگاهی داره به چیزهایی کمی عمیق تر

در اعماق

این هفته سه تا خبر داریم. دو تا بد و یکی اونقدر زیبا که باید به افتخارشون ایستاد.

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

و خبر عمیق تر دوم، درمورد CCTV است. جامعه پلیسی و همه که زیر نظر هستن. اصل خبر اینه: توی انگلستان توی پمپ بنزین ها دوربین مدار بسته نصب می شه. خب تا اینجا عجیب نیست.. حداقل برای مایی که وقتی می ریم پمپ بنزین تا حلقمون تابلو می بینیم که «اینجا شلوغ نکنید چون دوربین های پیشرفته داریم و همه رو می کشیم» اما جایی جریان دیگه برای ما هم عجیب می شه که خبر اضافه می کنه این دوربین ها به شکل خودکار پلاک ماشین ها رو می خونن و در دیتابیس چک می کنن و اگر کسی خودرو اش رو بیمه نکرده بود، پمپ بنزین براش قفل می شه و نمی تونه بنزین بزنه!!! وات د فلان! واقعا داریم می ریم سمت ۱۹۸۴؟

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

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

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

[موزیک ورود!]

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

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

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

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

هکرها

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

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

و حرف آخر.. موسیقی…

من بالاخره یکروز این «خراج ملک ری پرداخت می کردم به زلفانت» رو می ذارم به عنوان موزیک برنامه ولی فعلا می ایستیم به افتخار هر کسی که در سال نود زندگی رو لاجرعه سر کشید و به احترام تک تک ستارگانی که برای بیدارباش گفتن در گوشه های دور، به بستر خون خفتن. سر خم می کنیم می شینیم با سرود پویندگان.


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


آرس اس اس رادیو گیک

داون شدن کلاود ویندوز آزور به خاطر باگ سال کبیسه

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

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

باگ توی برنامه نویسی طبیعی است ولی چیزی که به خودش می گه سرور کلاود واقعا ضایع است باگ تقویمی داشته باشه در حدی که داون بشه (: البته کماکان به نظر باگ تقویم آیفون که باعث می شه اول و دوم ژانویه زنگ نزنه ساعتش ضایع تره چون دو سال تکرار شده (:

طرفداران دو آتیشه هم لبخند بزنن و از کنارش بگذرن (: دعوا نداریم که. باگ طبیعی است. ضایع و غیرضایع داره ولی باگ باگه دیگه و در سیستم های بسته بیشتر پیش می یاد و سخت تر حل می شه.

انتشار آزاد ترجمه فارسی کتاب اصول برنامه‌نویسی

آپدیت : کتاب به طور رسمی منتشر شد و از اینجا قابل دریافته

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

کتاب «اصول برنامه‌نویسی» که یک کتاب الکترونیکی ۷۹ صفحه‌ای است، توسط یکی از فعالان CodeBetter منتشر شده. کلیت مطالب کتاب راجع به مفاهیم نسبتاً جدید تولید نرم‌افزار مثل Persistence، DI، DDD، Unit Test و غیره است. نویسنده در ابتدای کتاب اظهار داشته که این کتاب برای پشتیبانی از حرکت ALT.NET نوشته شده است. این کتاب همچون خود ALT.NET بیشتر روی مفاهیم و تکنیک‌ها مانور می‌دهد چون معتقد است برنامه‌نویسان به اندازه کافی به API دات‌نت مسلط شده‌اند پس حالا وقت آن است که اصولی‌تر برنامه بنویسند.

با دیدن بخش‌های اول کتاب ممکن است فکر کنید یک کتاب کلاسیک «مهندسی نرم‌افزار» را باز کرده‌اید. اما کتاب کار زیادی به تئوری ندارد و بلافاصله به مثال‌ها، نمونه‌ها و ابزارهای عملی می‌پردازد. البته واقعیت این است که می‌شود این کتاب را یک کتاب «مهندسی نرم‌افزار» عملی نامید. چون با معرفی تکنیک‌ها، روش‌ها و ابزارهایی به شما کمک می‌کند تا همان اصول فراموش شده «مهندسی نرم‌افزار» را عملاً به کار گیرید.

عناوین فصول کتاب:
۱- ALT.NET: معرفی جبهه ALT.NET و تفاوت آن با MSDN Way
‫‫۲-‫ Domain Driven Design: معرفی الگوی DDD‎
‫۳- ‫Persistence: ارتباط با دیتابیس و ذخیره داده‌ها‎
‫‫۴-‫ Dependency Injection: معرفی و ابزارها‏

۵- Unit Testing: تست واحد
۶- Object Relational Mappers: معرفی و استفاده از NHibernate
۷- کار با Memory به طور اصولی
۸- مدیریت Exceptionها
۹- Proxy و استفاده از آن
۱۰- جمع‌بندی

تاریخ این کتاب ۲۰۰۸ بوده و کمی قدیمی می‌باشد. اما با این وجود خواندن و به کارگیری آن به همه برنامه‌نویسان توصیه می‌شود.

چرا گنو/لینوکس رو دوست دارم: نقشه استان‌هایی از ایران که رفته‌ایم

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

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

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

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

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

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

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

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

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