Stuff for Geeks
158 subscribers
181 photos
38 videos
178 files
575 links
Admin: @the_mhbr
Download Telegram
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/

بالاخره تونستم یه مانیتور دامی به سیستم اضافه کنم. البته که هنوز روی سیستم بدون مانیتور تست نکردم ببینم کار میکنه یا نه ولی فک کنم کار کنه
Stuff for Geeks
پست بعدی در مورد چی باشه؟
خب عالیع
پس بریم به آخر الکترومغناطیس(فصل هفت و هفت به بعد کتاب چنگ)

توی الکترومغناطیس، برای منابع(چگالی بار pho و چگالی جریان J) ثابت به نسبت زمان روابط زیر رو یاد می‌گیریم:
Div D = pho
Curl E = 0
Curl H = J
Div H = 0
اما اگه منابعمون نسبت به زمان متغیر باشن، دیگه این روابط کامل نیستن و باید از روابط زیر که معادلات ماکسول هستن استفاده کرد:
Div D = pho
Curl E = -dB/dt
Div H = 0
Curl H = J + dD/dt

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

یه بحثی که خیلی جالبه، بحث انتشار امواج الکترومغناطیسی هست. فرض کنید یک ورق فلزی بینهایت روی صفحهٔ xy داشته باشیم و یه جریان J که متغیر با زمان هم هست، در این صفحه وجود داشته باشه. توجه کنید که تمام پارامترهامون الان تابعیت زمان و مکان دارن.
توی این حالت، یه موج از صفحه خارج میشه و درراستای مثبت یا منفی z منتشر میشه.
حالا با ساده‌سازی معادلات ماکسول برای فضای خارج صفحه که pho و J دیگه نداریم، برای E و H به معادلهٔ موج یا به طور دقیق‌تر، به معادلهٔ هلم‌هولتز می‌رسیم و این دقیقا نحوه پخش شدن موج رو توی فضا توضیح میده.

مثلا اگه فرض کنیم J سینوسی باشه، E و H هردو سینوسی میشن. البته با دامنه های متفاوت که بر هم عمودن.

درواقع E بر H و هردو بر راستای انتشار عمود میشن. مثلا توی همین صفحه، راستای انتشار موج میشه z یا منفی z و مثلا اگه J در راستای x باشه، E در راستای منفی ایکس و H در راستای منفی y برای z های مثبت و y برای z های منفی خواهد بود.


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

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

یه سری پارامتر هم اینجا تعریف میشه. مثلا لاندا یا طول موج، فاصلهٔ دو قلهٔ موج توی یه زمان ثابته و عدد موج یا k میشه 2π تقسیم بر لاندا. پارامترهایی که سینوسی مکانی رو توصیف می‌کنن و مشابها در حوزه زمانی پریود زمانی و امگا رو داریم!
جالب اینکه k و لاندا کاملا وابسته به محیطن ولی فرکانس و امگای زمانی هیچ وابستگی‌ای به محیط ندارن.


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

اینجا بود که جناب انیشتین مغزش قفلی زد و نسبیت خاص رو بیرون داد😂

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

بقیش باشه برا بعد...
1
Don't miss UEFI official documents

https://uefi.org/specs/UEFI/2.10/
توی این پست می‌خوام اون چیزی رو که از ACPI فهمیدم بگم.
ببینید شما دکمه پاور رو می‌زنید و یه سری اتفاقات میوفته. به ترتیب، اول UEFI یا BIOS که یه میکروکنترلره، یه برنامه‌ای که داخلش هست رو اجرا می‌کنه. این برنامه CPU و رم رو initialize می‌کنه و سخت‌افزارها رو یه چک کلی می‌کنه. بعد یه سری دیتا رو پاس میده به bootloader و میره کنار. بوت لودر هم میاد و ایمیج OS رو پیدا می‌کنه، decompress می‌کنه و لودش می‌کنه تو مموری. و...

اینجا یه سری مشکل هست. مثلا اینه من باید بدونم چه سخت‌افزارهایی دارم. مثلا فنم کجاست و چجوری کنترل میشه، کیبوردم چی. و خلاصه یه تعداد زیادی دیوایس و سخت افزار داریم که باید بدونیم کجان و چیان. ACPI بخشی از این ماجراست. UEFI که می‌خواد فرایند بوت رو به بوت لودر واگذار کنه، یکی از دیتاهایی که پاس میده بهش آدرس یه استراکچر به اسم RSDT هست که خودش قبلا اون رو ساخته و توی مموری گذاشته. این استراکچر باز یکی دوتا پوینتر داره به استراکچرهای مختلف ولی نهایتا ما رو می‌رسونه به DSDT ها. این DSDT ها یه سری استراکچر به زبان ماشین ACPI (ACPI Machine Language or AML) هستن که به ما اطلاعات خیلی خوبی راجع به دیوایس های ACPI میدن. درواقع هرکدوم مال یه دیوایس هست. حالا سیستم عامل لازمه که این دیتاهای باینری رو به اسکی دیکامپیال کنه تا برسه به کدی به زبان ACPI Source Langugae یا ASL یا هم که دیکامپایل نکنه بلکه پارس کنه و استراکچر خوش از ACPI رو که با اسم ACPI namespace شناخته میشه، بسازه که کار دوم رو می‌کنه. این کار رو ACPI subsystem یا AML Parser توی کرنل انجام میده و ACPI namespace ساخته میشه. این namespace اطلاعات خیلی خوبی داره که مثلا شامل این میشه که کیبورد به چه IRQای متصله و باید حساس به سطح یا لبه باشه و...

البته فقط دیتای خالی نیست که از ACPI به ما میرسه بلکه می‌تونیم به زبون ASL کد بزنیم، کد رو کامپایل کنیم به AML و از این طریق یه سری فانکشن رو صدا بزنیم. عمدتا این توابع برای پاور منیجمنت و مسایل مربوط به باتری و مدار شارژ و فن و... بکار میره(فک کنم).
نهایتا اگه خواستین ببینین توی DSDTهاتون چیا نوشته شده، کافیه کامپایلر اینتل برای ASL رو نصب کنین(iasl) و با استفاده از acpidump جدول‌های ACPI رو دامپ کنین. بعدش میتونین با acpixtract این جداول رو تفکیک شده داشته باشین. نهایتا کافیه iasl -d بزنین و جدولهای تفکیک شده رو دیکامپایل کنین ببینین چی توش هست!
این ابزارهای اینتل و دامپ و اکسترکت، تو پکیج acpica هستتن که باید نصب شه

این داکیومنت‌های اینتل هم برای اطلاعات بیش‌تر:
https://cdrdv2.intel.com/v1/dl/getContent/772721
https://www.intel.com/content/www/us/en/developer/topic-technology/open/acpica/overview.html

#linux