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

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

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

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

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

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

اولین قدم های من روی یک اندروید تازه

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

  • اول اکانت گوگل، توییتر و فیسبوقش رو به گوشی می ده
  • و در قدم دوم اپلیکیشن هایی که دوست داره رو نصب می کنه

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

دادن اکانت گوگل به اندروید

با اینکه در حکومت دزدهای سرتیفیکیت زندگی می کنیم ولی خب چاره چیه (: لبخند می زنیم و اکانت و غیره رو می دیم به گوشی که روشن بشه و فعال

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

روت کردن یک اصطلاح یونیکسی / لینوکسی است. یعنی فعال کردن دسترسی کاربر روت (که بالاترین سطح دسترسی رو داره) روی سیستم عامل. روت کردن تقریبا پایه تمام انگولک‌هایی حساب می شه که بعدا قراره بکنیم.

من یک گوشی سامسونگ گالاکسی اس دارم که آپدیت شده به اندروید 2.3.3 و یک تبلیت ۳۷۵ تومن گالاکسی تب P1010 (که سیم کارت نمی خوره) و اندرویدش 2.2 است. برای اندرویدهای ۲.۲ از z4root استفاده می‌کنم که خیلی ساده است. کافیه روی دستگاه نصبش کنید (مثلا از طریق رفتن با دستگاه به وب سایتش و کلیک و دانلود روش) و بعد از اجرا بگین گوشی رو Permanent (همیشگی)‌ روت کنه.

برای اندروید ۲.۳.۳ روی تلفن همراه گالاکسی اس من، جریان یک هوا پیچیده تره ولی هنوز کاملا عملی. من از راهنماهایی مثل این استفاده کردم که مبتنی بر دانلود یک کرنل روت شده و نصب اون روی گوشی با نرم افزار Odin هستن. راحته و احساس هکر بودن بهم دست داد.

نصب پروکسی

حالا باید از یک پروکسی برای وصل شدن به مارکت استفاده کنیم. من از برنامه ترنسپرنت پروکسی استفاده کردم. این برنامه باعث می شه گوگل خیلی دقیق متوجه نشه که ما از کشوری هستیم که بازرس های اتمی رو توی کشورمون راه نمی دیم و می خوایم یک کشور دیگه رو از روی زمین محو کنیم و غیره و غیره. چون راستش رو بخواین ظاهرا اگر شک داشته باشه که ما از ایران عزیز هستیم، سعی می کنه جلوی دسترسی مون به برنامه‌هایی مثل Plants vs Zombies یا Read it later رو بگیره تا نتونیم بمب اتم بسازیم.

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

برنامه هایی که دوست دارین رو نصب کنین

واو! تا حدی شدیم جزو جهان. حالا دیگه فقط کافیه به Flight Mode برین تا از شماره سیم کارت کسی نفهمه در ایران هستین و وارد مارکت بشین. در مورد من در این لحظه که بعد از ورود به مارکت دیگه نیازی به Flight Mode هم نیست و می تونم بیام بیرون و مارکت کماکان کار می کنه. یکی از مهمترین برنامه‌هایی که در این مرحله باید نصب کنیم، SSH Tunnel است. برنامه ای برای رد شدن از سانسور. البته در این مورد لازمه یک اکانت تونل داشته باشین که خب بعضی ها دارن بعضی ها نه. اونهایی که ندارن احتمالا راه حل های معقول تری مثل وی.پی.ان. رو ترجیح میدن ولی خب گیک بازی است و هزار دردسر (:

شما یک جورهای نصفه و نیمه عضو جهان هستین

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

درسنامه: آموزش در ایمیل شما

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

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

درسنامه رو دریابید (:

انقلاب در مدرسه

همچنین در روزنامه اعتماد


اسکرین شات مبحث مربوط به بیکاری از بخش اقتصاد آکادمی خان

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

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

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

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

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

چرا گنو/لینوکس رو دوست دارم: ساخت انیمیشن با لینوکس

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

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

استودیو رو تنظیم می کنیم:

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

هر بار هم با نرم افزار Cheese یک عکس رو سیو می کنیم. بعد از شونزده فریم نمایش تموم شده (که متاسفانه از اول درمورد مفهومش فکر نکرده بودم) و وقت چسبوندن تصاویر به همدیگه است.

من از برنامه convert استفاده می‌کنم که بخشی از زندگی روزمره‌ام توی لینوکسه. این برنامه می‌تونه عکسها رو تغییر سایز بده، تنظیم نور کنه، ببره و غیره و غیره. حالا من باهاش تصاویر رو به هم می چسبونم. با این دستور:

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

نتیجه؟ این:

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

آموزش آفیس مایکروسافت توسط جادی

هاها (: خب چیه؟ این نکته مهمی است که کلی وقت صرفه جویی میکنه و خوبه بدونیمش:

ورد این قابلیت رو داره که متن ها رو خلاصه کنه

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

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

بعد باید بدونین که مایکروسافت این منوی مهم رو کجا قایم کرده. تا این لحظه موفق شده بذارتش اینجا تا خیلی سخت بشه پیداش کرد:

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

و این هم متن نهایی…

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

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

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

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

گنو/لینوکس یک ابزار عالی است با کلی خرت و پرت که می شه بهم جوششون داد. ما اول چی می‌خوایم ؟ پیدا کردن تمام فایل‌هایی که در ده دقیقه گذشته عوض شده‌اند. می‌دونم که دستور find مال این تیپ کارها است و راهنمای هر دستوری هم توی man پیدا می‌شه. پس می‌زنم man find و توش می‌بینم که:

-mmin n
              File's data was last modified n minutes ago

خلاص! پس فایند یک سوییچ داره که کل فایل‌هایی که در n دقیقه قبل عوض شدن رو نشون می‌ده. کافیه بزنم:

bash-4.1$ find /home -nmin -10
.
./gedit.jadi.2767816239
./plugtmp
./orbit-jadi
./orbit-jadi/linc-5b12-0-2c85f1f5cb706
./orbit-jadi/linc-60d9-0-436786093cc42
./orbit-jadi/linc-5ff8-0-6af67eaaaf2db
./orbit-jadi/linc-58be-0-373ce140b83c4
./1.txt

من که کیف می‌کنم (: حالا فهرستی دارم از تمام فایل‌هایی که در ده دقیقه قبل تغییر کردن. حالا کافیه روشون جستجو کنیم. می دونم که توی find یک سوییچ هم داریم به اسم exec که جلوش هر دستوری بزنیم روی خروجی ها اجرا می شه. برای گفتن به exec که دستورات تموم شده باید یک ;\ بذاریم و جلوی exec هم اگر {} بذاریم یعنی اسم فایلی که پیدا کرده رو اینجا بنویسه. راستی!‌ اینها رو من بار بار اول و دوم و سوم و چهارم و پنجم و ششم توی man find نگاه کردم ولی الان دیگه حفظ شدم. بذارین تست کنیم:

bash-4.1$ sudo find /home -mmin -10 -exec echo \{\} \;
.
./gedit.jadi.2767816239
./plugtmp
./orbit-jadi
./orbit-jadi/linc-5b12-0-2c85f1f5cb706
./orbit-jadi/linc-60d9-0-436786093cc42
./orbit-jadi/linc-5ff8-0-6af67eaaaf2db
./orbit-jadi/linc-58be-0-373ce140b83c4
./1.txt

درسته پس. الان قسمت اول فایند، فایل های تغییر کرده در ده دقیقه رو پیدا می کنه و قسمت exec اسم اون فایل رو جلوی یک echo می ذاره که دستور را چاپ می کنه. پس می رم قدم بعدی که grep کردن است. grep توی یک فایل دنبال یک عبارت می گرده و اگر بود، اون قسمت رو می نویسه. من یک سوییچ H هم اضافه می کنم تا اسم فایل رو هم بنویسه. پس در کل دارم:

bash-4.1$ sudo find /home -mmin -10 -exec grep hacked {} \;
grep: ./gedit.jadi.2767816239: No such device or address
grep: ./orbit-jadi/linc-5b12-0-2c85f1f5cb706: No such device or address
grep: ./orbit-jadi/linc-60d9-0-436786093cc42: No such device or address
grep: ./orbit-jadi/linc-5ff8-0-6af67eaaaf2db: No such device or address
grep: ./orbit-jadi/linc-58be-0-373ce140b83c4: No such device or address
this hacked my

اوه! اولا H رو یادم رفت بذارم و در نتیجه اسم فایلها چاپ نشدن و دوم اینکه یکسری error هم دارم. در لینوکس بعضی خروجی ها ارور هستن که با اینکه ما هر دو رو یکجا می بینیم اما ماهیتشون با خروجی برنامه فرق داره. این ارورها مال این هستن که در این حالت خاص من در اینجا روی فایل‌هایی گرپ کردم که فایل‌های معمولی نیستن و محتویات قابل خوندن ندارن.

چیکار کنیم؟ اضافه کردن H که آسونه! برای ارور هم ما یک «دستگاه» جذاب توی لینوکس داریم به عنوان null که مثل بقیه ابزارها توی دایرکتوری dev است و هر چیزی روش نوشته بشه می ره به ناکجا آباد و غیب می شه پس کافیه من خروجی ارور رو به جای خروجی معمولی که روی صفحه است، بریزم روی این دستگاه تا از شرش راحت بشم! خروجی ارور رو با این عبارت می شه کنترل کرد <2 پس در نهایت خواهم داشت:

bash-4.1$ sudo find /home -mmin -10 -exec grep -H hacked {} 2> /dev/null \;
./1.txt:this hacked my

عالی! (: نتیجه دلخواه دوستم کاملا آزاد و شاد همین دستوره:

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

چطور هکر بشوم – اسلایدشو

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

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

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