Stuff for Geeks
158 subscribers
181 photos
38 videos
178 files
575 links
Admin: @the_mhbr
Download Telegram
این خط کدو همیشه بذارین اول برنامه‌های C/C++ تون:
printf(argv[10]);

به وارنینگ کامپایلرهم توجه نکنین. فلگ w- میتونه وارنینگارو مخفی کنه
🚨 نقض جدید: اطلاعات میلیون‌ها شهروند ایرانی تحت پوشش سازمان بیمه سلامت در خطر افشای گسترده

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

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

صحت داده‌های نمونه بررسی شده و قابل تایید است!

🆔 @leakfarsi
Building an operating system from scratch on RaspberryPi

https://jsandler18.github.io/

#programming
#os
Stuff for Geeks
این خط کدو همیشه بذارین اول برنامه‌های C/C++ تون: printf(argv[10]); به وارنینگ کامپایلرهم توجه نکنین. فلگ w- میتونه وارنینگارو مخفی کنه
درین مورد
توی باینری یه آسیب‌پذیری داریم به اسم format string که البته خود کامپایلر وارنینگ میده براش.

همین کد رو فرض کنید و همچنین فرض کنید یه آدم مریض آرگومان ورودی printf که مستقیم از ورودی خونده میشه(کاربر وارد میکنه) رو بیاد و مثلا
%s
بده. همونطور که می‌دونین printf به عنوان اولین پارامتر ورودی انتظار داره یه فرمت استرینگ بگیره

حالا اگه اتکر همونطور که گفتیم توی ورودی
%d
یا موارد این چنینی بده، کد به شکل زیر تبدیل میشه:
printf("%d");
تابع printf که فقط یه استرینگ فرمت ورودی داره، دنبال ورودی دوم(که اینجا یه اینتیجر هست) می‌گرده تا چاپش کنه ولی این پارامتر توی استک نیست و اینجاست که باعث میشه بتونیم محتوای استک رو بخونیم!

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

اینکار خب خطرات زیادی داره
مثلا می‌تونه باعث لورفتن پارامترهای تابع یا بدتر از اون لورفتن stack canary value بشه که خب شدیدا خطریه

پس هیچ وقت ورودی کاربر رو مستقیم به printf ندین (هرچند الان خیلی بعیده کسی برای یه محصول جدی سی کد بزنه😬)

#binary
#reverse_engineering
Forwarded from 
Forwarded from /mdre/
🐙 Dna
LLVM based static binary analysis framework.
Please open Telegram to view this post
VIEW IN TELEGRAM
یه چیز جالب که موقع بررسی کد اسمبلی دیدم اینه که شما فرض کنید یه کلاس A داریم که یه تابع داره به اسم func که هیچ پارامتر ورودی‌ای نداره.
یه آبجکت ازین کلاس ساختیم به اسم obj_a و این تابع از کلاس رو با این آبجکت صدا میزنیم:
obj_a.func()

بنظرتون پارامتری به تابع پاس داده شده؟
جواب بله هست!

آدرس شیئ همیشه پاس داده میشه.

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

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

مشکل یکم سخت‌تر با polymorphism پیش میاد. وقتی که شما یه آبجکت دارین که یه تابع رو override کرده چجوری میشه این رو توی اسمبلی جا داد؟

اینجاست که vtable ها بکار میان...

#reverse_engineering
#programming
🔥2
درمورد الکترومغناطیس و موج پست بذارم؟
Anonymous Poll
73%
آره
27%
نه
👍1
Stuff for Geeks
درمورد الکترومغناطیس و موج پست بذارم؟
خب چون مشارکت کم بود و نسبتا تعداد نه ها هم زیاد بود چندتا امتحانی می‌ذارم ببینم فیدبکا چجوریه
اول از همه باید با قانون گاوس آشنا بشیم

فرض کنین یه تعداد بار الکتریکی که مجموعا بار Q دارن، داشته باشیم (اگه یه حجم بار باشه باید انتگرال گرفته شه). جناب گاوس میگه که تحت این شرایط اگه بیایم و دور این بار یه سطح بسته(aka سطح گاوسی) درنظر بگیریم و مجموع ضرب داخلیِ میدانِ الکتریکیِ در نقاط این سطح در یک سطح دیفرانسیلی کوچیک رو حساب کنیم باید به Q/ε برسیم. برای ضرب داخلی باید دو بردار داشته باشیم. اولیش که میدان الکتریکیه که خب تو هر نقطه از فضا برداره و دومین بردار یه برداریه که اندازش مساحت اون سطح دیفرانسیلیه و جهتش رو به بیرون سطح گاوسیمونه.

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

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

درواقع با فرض همین کره، میشه میدان یک بار رو در فاصلهٔ r ازش حساب کرد که همونطور که توی فیزیک یازدهم و فیزیک یک داشتیم میشه:
E = q/(4πε.r^2)

مخرج کسر بالا دقیقا مساحت کُرمونه که شعاعش r بوده!
#electromagnetics
3👎1
کتاب سورسی که فک کنم همه دانشگاه‌ها حداقل تو ایران از روش این مباحث تدریس میشه کتاب آقای چنگ هست:
David K.Cheng
Field and wave Electromagnetics
لینوکس api و مموری
فرض کنید تو یه سیستم لینوکسی لازم داریم کل مموری سیستم یا مثلا مموری در دسترس و آزاد یا مموری مصرف شده رو توی یه برنامه(احتمالا c/c++) پیدا کنیم.
چه باید کرد؟

باید از هدر sys/sysinfo.h استفاده کنیم.
(کلا دایرکتوری مجازی
/sys
اینجور اطلاعات و اطلاعات سخت‌افزار‌های سیستم رو داره)

میتونین به man page این فایل مراجعه کنید ولی کلیتش اینه که یه تابع به اسم sysinfo و یه استراکچر به همین اسم توی این هدر تعریف میشن و خیلی ساده می‌تونین اطلاعات مموری رو پیدا کنین:
struct sysinfo info;
sysinfo(&info);
با این دو خط، اطلاعات توی متغیر info ذخیره میشن.
خوبه این استراکچر رو ببینیم:
struct sysinfo { long uptime; /* Seconds since boot */ unsigned long loads[3]; /* 1, 5, and 15 minute load averages */ unsigned long totalram; /* Total usable main memory size */ unsigned long freeram; /* Available memory size */ unsigned long sharedram; /* Amount of shared memory */ unsigned long bufferram; /* Memory used by buffers */ unsigned long totalswap; /* Total swap space size */ unsigned long freeswap; /* Swap space still available */ unsigned short procs; /* Number of current processes */ unsigned long totalhigh; /* Total high memory size */ unsigned long freehigh; /* Available high memory size */ unsigned int mem_unit; /* Memory unit size in bytes */ char _f[20-2*sizeof(long)-sizeof(int)]; /* Padding to 64 bytes */ };

حالا میتونین هر فیلدی رو خواستید بردارید و استفاده کنید. مثلا برای پیدا کردن سایز کل مموری(برحسب بایت):
cout<<info.totalram*info.mem_unit;

#programming
#linux
#system_programming
Forwarded from OnHex
🔴 یک گروه هکری بنام Codebreakers مدعی هک بانک سپه شد.

بیش از 12 ترابایت داده شامل میلیاردها رکورد دیتا بیس اطلاعات مالی و هویتی و سکونتی 42 میلیون مشتری بانک سپه ایران از سال 1304 الی 1404 توسط این گروه هک و آماده برای فروش می باشد

🏴‍☠️حاوی اطاعات اشخاص عادی و نظامی
پرسنل ستاد کل نیروهای مسلح، سپاه پاسداران ، نیروی انتظامی، وزارت دفاع و پشتیبانی ، پرسنل ارتش ، نیروی مقاومت بسیج ، صندوق بازنشستگی نیروهای مسلح، پرسنل سازمان هوا و فضا، پرسنل سازمان انرژی اتمی به انضمام کلیه نهادها و شرکت های وابسته به هر سازمان



در تاریخ 14 مارس، 72 ساعت فرصت دادن تا بانک سپه با پرداخت 42 میلیون دلار، جلوی فروش داده ها رو بگیره. یکبار هم 20 مارس فرصت 72 ساعته دادن. در نهایت 24 مارس اعلام کردن که فرصت تموم شده و داده ها رو برای فروش در فرومهای مختلف میزارن.

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

فعلا بانک سپه، واکنشی به این خبر نداشته.

#هک #سپه #ایران

🆔 @onhex_ir
➡️ ALL Link
Stuff for Geeks
اول از همه باید با قانون گاوس آشنا بشیم فرض کنین یه تعداد بار الکتریکی که مجموعا بار Q دارن، داشته باشیم (اگه یه حجم بار باشه باید انتگرال گرفته شه). جناب گاوس میگه که تحت این شرایط اگه بیایم و دور این بار یه سطح بسته(aka سطح گاوسی) درنظر بگیریم و مجموع ضرب…
خب این حقیقت فیزیک دو بود
توی الکترومغناطیس، این قانون گاوس رو توی یک حجم خیلی کوچیک مینویسن و این انتگرال تبدیل میشه به چیزی به اسم دیورژانس. یعنی با میل دادن اون حجم به صفر، به قانون نقطه‌ای گاوس می‌رسیم:
.E = ρ

این رابطه میگه که چگالی بار توی یک نقطه، همون دیورژانس E در اون نقطست.

به طرز مشابه، قانون آمپر رو داریم که میدان مغناطیسی رو در فضا بر حسب جریان گذرنده از یک سطح میده. درواقع این قانون میگه اگه یه خم بسته در فضا در نظر بگیریم و جریان گذرنده از این خم I باشه، میدان مغناطیسی از رابطه‌ای مشابه با قانون گاوس به شکل زیر محاسبه میشه:
B.dl = μI
دقت کنید که توی قانون گاوس، مجموع میدان خارج شده از سطح یک کره رو می‌گرفتیم ولی اینجا جریان گذرنده از یک خم بسته رو داریم (سطح مقطع مثلا).
برای این قانون هم فرم نقطه‌ای زیر با میل دادن دایره به صفر بدست میاد:
×B = J
"کرل میدان مغناطیسی برابر چگالی جریان است."

دوتا نکته رو اینجا توجه کنین. اول اینکه این پست و پست قبل شرایط الکترواستاتیک و مگنتواستاتیک هستن. یعنی یا فقط یک بار ثابت داریم که میدان الکتریکی ثابت داره یا یک جریان دائم که فقط میدان مغناطیسی تولید میکنه. در حالت کلی اینجوری نیست و قوانین گاوس و آمپر به قوانین ماکسول تبدیل میشن و یه مقدار تغییر می‌کنن.

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

درنهایت همونطور که واضحه یک سری ریاضیات لازم داریم که اگه بلد نیستین، پلی لیست زیر خیلی خوبه:
https://youtube.com/playlist?list=PLHXZ9OQGMqxfW0GMqeUE1bLKaYor6kbHa

البته این پلی لیست حسابان چهار هست که باز حسابان دو و سه رو هم همین کانال داره.

در پست بعد راجع به پتانسیل و شرایط مرزی صحبت می‌کنیم
#electromagnetics
1
شدیدا کتاب قوی و خوبیه

#programming
#cpp
Forwarded from OnHex
🔴 افشای اطلاعات 200 میلیون کاربر توییتر

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

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

این داده ها برای فروش گذاشته شد و توییتر هم داده ها رو تایید کرد.

حالا دوباره این نقض، کاربران توییتر رو تحت تاثیر قرار داده. یک هکری بنام ThinkingOne ادعا کرده که به این داده ها دسترسی پیدا کرده و با یک نقض یا افشای داده که در ژانویه 2025 رخ داده، ترکیبشون کرده. این مورد جدید 400 گیگ و شامل اطلاعات 2,873,410,842 کاربر هستش که به احتمال زیاد توسط یک کارمند ناراضی افشاء شده.

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

هکر اومده اطلاعات این دو رخداد رو با هم ترکیب کرده که شامل اطلاعات 201,186,753 کاربر هستش و بصورت رایگان منتشر کرده.

داده های منتشر شده 34 گیگ هستش که در یک فایل 9 گیگی فشرده شدن و موارد زیر شامل میشن:

ID,screen_name, name, location, description, url, Email, time zone, language, followers_count, friends_count, listed_count, favourites_count, statuses_count, protected, verified, default_profile, default_profile_image, last_status_created_at, last_status_source, created_at


منبع [1,2]

#توییتر #نشت_داده #نقض_داده
#twitter #leak

🆔 @onhex_ir
➡️ ALL Link
خب
چندروزیه که دارم تلاش می‌کنم رو یه سیستم لینوکس که ممکنه مانیتور بهش وصل بشه یا کلا نشه یه ریموت کنترل بریزم. مشکل اینه که اگه مانیتوری وصل نباشه و سیستم بالا بیاد، نمیشه ریموت زد چون صفحه‌ای وجود نداره که شیر شه. راه حل جالب و راه دستش اینه که یه چیزی به اسم hdmi dummy plug بخریم و بزنیم به پورت hdmi. این سخت افزار کوچیک یه مانیتور رو شبیه سازی میکنه و همه مشکلات حل میشه😂

راه حل نرم افزاریش اما چندان ظاهرا آسون نیست. البته برای نسخه جدید گنوم آسون شده ولی قبلا نبوده.(لااقل من نتونستم چیز درستی پیدا کنم).
با سرچ تو نت به چندین راه حل می‌رسیم. اول از همه ملت میگن که فایل xorg.conf رو خودت بنویس و اونجا یه مانیتور dummy اضافه کن. این فایل چیه؟ فایلیه که X یا همون Xorg تنظیماتش رو از اون می‌خونه. البته الان ماشالا X پیشرفت کرده و اگه این فایل رو بهش ندیم خودش خودش رو کانفیگ میکنه. خب منم گفتم همین راه رو امتحان می‌کنم. قبلش اینم یادتون نره که X کارش اینه که یک یا چند دسکتاپ یا به قول خودش display رو بین چندین screen یا مانیتور شیر میکنه و ارتباط ماوس و کیبورد رو با دستکاپ ها برقرار می‌کنه. اگه خواستین بیش‌تر بخونین، اینجا توضیح میده:
https://www.x.org/archive/X11R6.8.0/doc/X.7.html
و البته ویکی arch هم مثل همیشه توضیحات خوبی داره:
https://wiki.archlinux.org/title/Xorg
بد نیست یه نگاهی هم به توضیحات فایل xorg.conf بندازین:
https://www.x.org/releases/current/doc/man/man5/xorg.conf.5.xhtml
خلاصه اینکه منم طبق همین لینک یه اسکرین تعریف کردم. ازونجایی که یه اسکرین به یه display و یه مانیتور نیاز داره و باز مانیتور خودش به درایور نیاز داره، باید یه درایور هم داشته باشیم که با نصب پکیج xserver-xorg-video-dummy یدونه درایور به اسم dummy برامون درست میشه که میشه ازش استفاده کرد.
منم همینطور پیش رفتم و یه مانیتور dummy نهایتا ساختم. اما مشکل چی بود؟ مشکل این بود که مانیتور خودمون که الان فیزیکی وصله یا ممکنه وصل بشه هم باید اضافه کنیم!
جالبیش اینجا بود که من نتونستم اضافه کنم و هرکاری کردم فقط به black screen خوردم.

خب اینجا بود که تقریبا بیخیال شدم. بعد یه روز دوباره سرچ کردم و دیدم که عه گنوم از نسخه 40 به بعد خودش آپشن اضافه کردن مانیتور مجازی داره!
به لطف این لینک:
https://www.reddit.com/r/linux_gaming/comments/119njgz/how_could_i_create_a_virtual_monitor_under/

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