از عجایب کلاهبرداری

امروز با پرستار بچه راجع به هزینه‌های سرویس‌های اشتراکی که گاهی ندونسته روی قبض‌های موبایل می‌آد صحبت شد. اولا فهمیدم که تلفن ثابت منزل هم چنین امکانی داره. توی خونه اونا، بچه‌های مستأجر قبلی دوست داشتن با باب اسفنجی حرف بزنن! و عضو یه سری سرویس‌ها شده بودن که حتی بعد از ترک اون خونه روی قبض اضافه می‌شده. در حد ۸۵ هزار تومان و اینا که توی لیست مکالماتی که از مخابرات گرفتن معلوم شده.
در ادامه توضیح دادم که یه سری پیام‌ها می‌آد به گوشی مامانم یا خواهرم که می‌گه شما در فلان قرعه‌کشی برنده شدید و فلان مبلغ رو بریزید یا فلان عدد رو بزنید تا در قرعه‌کشی بزرگ‌تر شرکت کنید یا عضو سرویس بشید. این جا بود که زهره خانم داستانی برام تعریف کرد که با هر کلمه‌ش شاخ‌م درازتر شد. گفت یه زمانی توی یه شرکتی استخدام شده که البته بیست روز بیشتر دوام نیاورده و حقوق نگرفته ازش در اومده. می‌گفت اون شرکت پر از افرادی مثل من بوده که پای تلفن می‌نشستن و باید شماره‌هایی که به‌شون داده شده بوده رو می‌گرفتن و حرف‌هایی که کامل و با جزئیات روی کاغذ نوشته شده بوده رو با لحنی بازگو می‌کردن که طرف رو مجاب کنند. ۷۰۰ هزار تومان حقوق ثابت می‌گرفتن و به ازای جذب هر نفر پورسانت. بعضی‌ها تا یک میلیون و دویست هم در می‌آورند. نقشه این بوده که با آدم‌های ساکن شهرهای دور که دسترسی چندانی به تهران نداشتند، مثل بوشهر، مشهد، ایلام، یزد، و …، تماس بگیرند و بگند که شما در قرعه‌کشی برنده یک دستگاه تبلت و سرویس چندپارچه شدید. آدرس بدهید که این‌ها برای‌تان ارسال شود. ولی یک قرعه‌کشی بزرگ‌تر هم داریم که به نفر اول پراید، نفر دوم یادم نیست، و به نفر سوم یک عدد سکه تعلق می‌گیرد. برای این که در این قرعه‌کشی شرکت داده بشوید باید ۳۵۰ هزار تومان واریز کنید. می‌گفت یزدی‌ها بیشتر سؤال می‌کردند، کم‌تر پول رو می‌دادن، و بعدتر بیشتر زنگ می‌زدند برای پیگیری. اما شهرهای دیگه نه. می‌گفت کل کسایی که اون جا کار می‌کردند (متأسفانه همه دخترخانم‌های جوان مجرد که پول قر و فر و آرایشگاه‌شان از این طریق در می‌آمده) یک لیست کامل از سؤال‌های احتمالی و جوابی که باید می‌دادند در اختیار داشتند. مثلاً اگه فرد تماس می‌گرفته که چرا بسته‌ای برای من نیامد، به‌ش می‌گفتن باید با پشتیبانی صحبت کنید. پشتیبانی کی بوده؟ اپراتور بغلی. وصل می‌کردن اون می‌گفته با من هماهنگ نشده، بعدن تماس بگیرید. یا دیر تماس گرفتید ساعت کاری‌شون تمام شده. یا مثلاً به فرد گفته بودند در فلان تاریخ در میدان فلان در سالن اجتماعات شهرداری مراسم قرعه‌کشی برگزار می‌شود. بعد فرد زنگ می‌زده که پس چرا نیامدید؟ جواب می‌شنیده که شهردار منطقه اجازه برگزاری مراسم را نداد، ما در محلی دیگر به صورت خصوصی برگزار کردیم و شما برنده نشدید. و تمام این‌ها دروغ‌های از پیش‌تعریف‌شده‌ای بوده که تمام افرادی که اون جا کار می‌کردند در جریان بودند و برای‌شان مهم نبوده.
می‌گفت یک بار یک مادری زنگ زد که من که می‌دانم شما تبلت را قرار نیست بفرستید، اما خواستم به‌تان بگم که من یک بچه معلول دارم و خوشحال شدم که می‌توانم این تبلت را به او بدهم و بچه‌م کلی منتظر بود و بدونید که من اون ۳۵۰ را هم قرض گرفتم تا دل بچه‌م شاد شود. زهره خانم کلی متأثر شده بود که من خودم بچه دارم و چطور دلم راضی شود که بچه‌م چشم به در بماند! و این نانی نیست که من بخوام به بچه‌هام بدم. می‌گفت وقتی به افرادی که اونجا کار می‌کردن اینا رو می‌گفتم، می‌گفتن به ما چه! مدیر شرکت داره دروغ می‌گه، گناه‌ش گردن اونه!
تازه می‌گفت این قدر کارشون گرفته بوده که غیر از دفتر جمهوری، قرار بوده یک دفتر جدید هم در جنت‌آباد بگیرند.
حالا شما حساب کنید حال من را !!! که هر چه هم آدم از دزدی می‌شنود وقتی با چنین پدیده‌ای از فاصله کمی نزدیک‌تر روبرو می‌شوی باز هم از حجم وقاحت و پلیدی آن شگفت‌زده می‌شوی و حال‌ت بد می‌شود.
حالا شما قضاوت کنید که مقصر کیست! مدیر شرکت؟ کارکنان؟ مردمی که باور می‌کنند؟ سیستم آموزشی؟ سیستم نظارتی؟ یا سیستم اقتصادی؟

مملکت شترمرغ‌دزدپرور

مختصر بگم یا مفصل

بگم یا نگم اصلا

فایده داره بگم یا اصلا بهتره نگم

هی ذهنم به نوشتن میاد و هی دستم به نوشتن نمی‌ره

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

موندم برم کلانتری پیگیری کنم یا نرم.

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

استفاده از Perl برای تفسیر RegEx در اسکریپ‌نویسی

زیاد پیش میاد موقع نوشتن یه اسکریپت سر و کارمون میافته به عبارات منظم یا همون Regular Excoriationها. و البته گاهی پیش میاد که لازم باشه یه عبارت را از یه فایل استخراج کنید.

در قدم اول ممکنه استفاده از grep -E خیلی کاربردی به نظر بیاد اما وقتی که لازم می‌شه دو بخش از یک عبارت را جدا کرد یا عبارت یخورده از حالت عادی پیش‌رفته‌تر باشه دیگه grep راه‌گشا نیست.

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

zcat Backup.sql.gz|perl -ne ‘if (m/^INSERT INTO\s.(?<SS>.{1,40}).\s/){ print “$+{SS}\n”; }’|uniq -c

با اینکار به راحتی لیست همه جدول‌ها با تعداد سطرهایی که توی جدول درج شدند به دست اومد.

فیلتر ابلهانه

می‌دونستید نشانی:
http://ftp.debian.org/debian/pool/main/f/freexl/libfreexl1_1.0.2-2_amd64.deb
هم فیلتره؟
فقط به خاطر بسته freexl

در مورد FreeXL:
FreeXL is an open source library to extract valid data from within an Excel (.xls) spreadsheet.

فیلتر https ؟! چطور؟

نکته اول: همینطور که می‌دونید دامنه sadeq.ir از ۸۸ به اینطرف فیلتر شده.

نکته دوم: با توجه به اینکه تعدادی دیگه سایت هم روی همین آدرس فعاله امکان فیلتر بر اساس ip برای این سایت وجود نداره.

نکته سوم: اینکه با فعال شدن https روی این دامنه به لطف Let’s Encrypt دسترسی به سایت بدون فیلترشکن روی https وجود داشت. (به قاعده وقتی داری از https استفاده می‌کنی نام دامنه به صورت رمزنشده جایی مشاهده نمی‌شه)

و عجیب اینه که چند وقتیه سیستم‌های فیلترینگ به این توانایی دست یافتند که دامنه https را هم تشخیص بدهند و فیلتر کنند. تلاش برای باز کردن https://sadeq.ir بدون فیلتر شکن منجر به time out اتصال میشه!

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

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

راه‌اندازی کلاینت Perl به همراه mariadba 10.1 در Debian 9

به نظر می‌رسه نصب client mysql/mariadb برای perl (DBD::mysql) در نسخه ۹ یا stretch دبیان (شاید نسخه‌های دیگه و توزیع‌های دیگه هم) مشکل دارد. نصب بسته libdbd-mysql-perl با استفاده از apt کار نمی‌کنه و وقتی ماژول mysql می‌خواد لود بشه پیام می‌ده که نمی‌تونه mariadbclient.so.18 را نمی‌تونه پیدا کنه.

برای بررسی بیشتر:

perl -I./ DefinePatch.pl
Can't load '/usr/lib/x86_64-linux-gnu/perl5/5.24/auto/DBD/mysql/mysql.so' for module DBD::mysql: libmariadbclient.so.18: cannot open shared object file: No such file or directo
ry at /usr/lib/x86_64-linux-gnu/perl/5.24/DynaLoader.pm line 187. 
 at DefinePatch.pm line 3. 
Compilation failed in require at DefinePatch.pm line 3. 
BEGIN failed--compilation aborted at DefinePatch.pm line 3. 
Compilation failed in require at ./DefinePatch.pl line 4. 
BEGIN failed--compilation aborted at ./DefinePatch.pl line 4.

نصب هیچ پکیجی قرار نیست این مشکل را حل کنه. راهکار اینه که کلاینت mysql پرل را از سورس نصب کنید. برای نصبش اول فایلش را دانلود کنید: http://search.cpan.org/~michielb/DBD-mysql-4.042/lib/DBD/mysql.pm

در ضمن مطمئن بشید بسته libmariadbclient-dev (برای استفاده از mysql_config) و build-essential (برای استفاده از make) روی سیستم نصبه. فایل فشرده را باز کنید و برید داخلش.

بعد دستورات زیر را اجرا کنید:

perl Makefile.PL
make
make test

sudo make install

 

مشکل حل شده است! و می‌تونید از mariadb توی perl استفاده کنید.

کد تست:

#!/usr/bin/perl
use DBI;
use DBD::mysql;

 

نکته: در صورتی که کاربر فعلی دسترسی به دیتابیس test در mariadb نداره، می‌تونید با پارامترهای در دستور زیر perl Makefile.PL یه دیتابیس و یوزر پسورد برای تست کردن در زمان build یا تست مشخص کنید:

  • testdb نام دیتابیس تست
  • testuser نام کاربر برای اتصال به mariadb
  • testpassowrd رمز کاربر برای اتصال به mariadb
  • پارامترهای testhost و testport هم برای مشخص کردن سرور mariadba

نکته: در جدیدترین بروزرسانی perl در دبیان در فایل

/etc/perl/sitecustomize.pl

یه تنظیم اضافه شده است که امکان import کردن module از فولدر فعلی وجود نداشته باشد. برای رفع مشکل اسکریپ‌های مشکل‌دار می‌شه این تنظیم را غیرفعال کرد. توجه داشته باشید این تغییر به دلایل امنیتی انجام شده است پس تا مجبور نشدین تغییر ندین:

# This script is only provided as a transition mechanism for
# removing the current working directory from the library search path
# while leaving a temporary way to override this locally.
#
# If you really need "." to be on @INC globally, you can comment
# this away for now. However, please note that this facility
# is expected to be removed after the Debian stretch release,
# at which point any code in this file will not have any effect.
#
# Please see CVE-2016-1238 for background information on the risks
# of having "." on @INC.

#pop @INC if $INC[-1] eq '.' and !$ENV{PERL_USE_UNSAFE_INC};

استفاده از پارامتر I جلوی perl در خط فرمان هم می‌تونه این مشکل را موقت حل کنه.

 

راه‌اندازی extensionهای gnome در کروم!

اولین قدم اینه که اکستنشن مربوطه را از chrome store نصب کنید!
نشونیش اینه: GNOME Shell integration در Chrome Store
بعد که این را نصب کردید هنوز کار نمی‌کنه. اگه بتونید بسته chrome-gnome-extension را نصب کنید (برای دبیان در sid) مشکل حله و با یه reset محیط gnome می‌تونید از extensions.gnome.org لذت ببرید. مگرنه لازمه که سورسش را از مخزن گیتش به نشانی git://git.gnome.org/chrome-gnome-shell بگیرید و کامپایل کنید. برای اینکار دستورات زیر را استفاده کنید:

git clone git://git.gnome.org/chrome-gnome-shell

بعد برین داخل فولدر chrome-gnome-shell و یه فولدر build بسازید.
برین داخلش و این دستور را بنویسید تا تنظیمات محیط کامپایل آماده بشه:

cmake -DCMAKE_INSTALL_PREFIX=/usr/local -DBUILD_EXTENSION=OFF ../

فراموش نکنید بسته jq که یه json parser است را هم نیاز دارید. توی debian با دستور apt install jq دو سوته نصب می‌شه.
بعد که کانفیگ انجام شد، باید کامپایل و نصبش کنید:

sudo make install

همه کارها را براتون انجام می‌ده.
با alt-F2 و بعد r محیط گنوم‌شل را ریست کنید و از extensions.gnome.org در chrome لذت ببرید! اگه به اشکالی هم برخورد کردین از نشانی https://wiki.gnome.org/Projects/GnomeShellIntegrationForChrome/Installation می‌تونید ببینید مشکل کجاست و اون را حل کنید.

شناخته نشدن USB Deviceها در VirtualBox

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

من قبل‌تر برای تست رفته بودم و phpvirtualbox نصب کرده بودم ولی تنظیم‌هاش توی /etc/defaults/virtualbox/ مونده بود. همین باعث شده بود که root نصب تغییر کنه و ابزارهای شناسایی درگاه USB به جای نادرستی اشاره کنند.
این ابزار به صورت پیش‌فرض توی /usr/lib/virtualbox/ قرار دارند و فراخوانی‌شون با استفاده از udev و فایل‌های تنظیمی است که در مسیر /etc/udev/rules.d/60-vboxdrv.rules/ قرارداره فراخوانی می‌شه.

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

فایل تنظیم درست udev برای virtualbox هم به صورت زیر است:

KERNEL=="vboxdrv", NAME="vboxdrv", OWNER="root", GROUP="root", MODE="0600"
KERNEL=="vboxdrvu", NAME="vboxdrvu", OWNER="root", GROUP="root", MODE="0666"
KERNEL=="vboxnetctl", NAME="vboxnetctl", OWNER="root", GROUP="root", MODE="0600"
SUBSYSTEM=="usb_device", ACTION=="add", RUN+="/usr/lib/virtualbox/VBoxCreateUSBNode.sh $major $minor $attr{bDeviceClass}"
SUBSYSTEM=="usb", ACTION=="add", ENV{DEVTYPE}=="usb_device", RUN+="/usr/lib/virtualbox/VBoxCreateUSBNode.sh $major $minor $attr{bDeviceClass}"
SUBSYSTEM=="usb_device", ACTION=="remove", RUN+="/usr/lib/virtualbox/VBoxCreateUSBNode.sh --remove $major $minor"
SUBSYSTEM=="usb", ACTION=="remove", ENV{DEVTYPE}=="usb_device", RUN+="/usr/lib/virtualbox/VBoxCreateUSBNode.sh --remove $major $minor"

اگه این فایل را پاک کنید و Virtual Box را مجدد نصب کنید این فایل ساخته می‌شه. (پیشنهاد من اینه که اول کامل پاک کنید و بعد مجدد نصب کنید)

البته فراموش نشه قبل از هر کاری کاربر شما به گروه vboxusers اضافه شده باشه. بدون اضافه شدن شما به این گروه امکان استفاده از usb در ماشین‌های مجازی را ندارید! همینطور Oracle VM VirtualBox Extension Pack را هم حتما نصب کنید 🙂