Repository navigation
fa ARCHITECTURE
Languages: English | العربية | Čeština | Deutsch | Español | فارسی | Français | हिन्दी | Bahasa Indonesia | Italiano | 日本語 | 한국어 | Nederlands | Polski | Português | Русский | Svenska | ไทย | Türkçe | Tiếng Việt | 中文
نحوهٔ ساخت VD Google و دلیل آن. این صفحه طراحی و اصول را توضیح میدهد. فایلها، جدولها یا پرسوجوهای دقیقی را که هر خواننده به کار میبرد فهرست نمیکند. اینها تنها در کد منبع زندگی میکنند، بهصورت عمدی، تا اپلیکیشن و مستندات هرگز به یک راهنمای گامبهگام برای کسی که میخواهد همان مقادیر را جعل کند تبدیل نشوند.
- خواندن حقیقت. آنچه را که اپلیکیشنهای خودِ گوگل پیشتر ثبت کردهاند نشان بده، آن را توضیح بده، و هرگز مقداری را از خود نساز. وقتی دستگاه پاسخی ندارد، نامشخص را نشان بده.
- صفرِ شبکه. اپلیکیشن هیچ مجوزی اعلام نمیکند؛ WebUI هر مبدأ راهدور را مسدود میکند. هیچچیز، هرگز، به هیچکجا فرستاده نمیشود.
- یک رفتار، دو چهره. اپلیکیشن و ماژول WebUI کاملاً یکسان نگه داشته میشوند: همان سیگنالها، همان واژگان، همان گزارش صادرشده.
- صادق بهجای چاپلوس. یک منفیِ واقعی بهصورت منفی نشان داده میشود؛ یک حافظهٔ نهانِ کهنه بهعنوان نهانشده برچسب میخورد؛ یک مقدار غایب نامشخص است. تشخیص هرگز برای زیباتر بهنظر رسیدن نرم نمیشود.
-
اپلیکیشن با Kotlin و Jetpack Compose (Material 3) نوشته شده است. root را از طریق
RootServiceکتابخانهٔ libsu به دست میآورد، هرگز با فراخوانی مستقیمsu، و خواندنها را درون همان سرویسِ ممتاز انجام میدهد. - ماژول WebUI یک web root کوچک HTML/JS است که توسط مدیر root شما (KernelSU، APatch یا Magisk) سرو میشود. همان خواندنها را از طریق پل root مدیر انجام میدهد. یک Content-Security-Policy سختگیرانه هر مبدأ راهدور را ممنوع میکند، بنابراین صفحه حتی در اصل هم نمیتواند به بیرون تماس بگیرد.
هر دو از یک مجموعهٔ مشترکِ رشتهها در ۲۱ زبان تولید میشوند، بنابراین یک برچسب هرگز دو بار ترجمه نمیشود.
بخشی از وضعیتی که VD Google میخواند در پایگاههای دادهٔ SQLite متعلق به اپلیکیشنهای گوگل قرار دارد. اندروید SQLite خودش را عرضه میکند، اما SQLite چارچوب برای باز کردن نسخهای کنارگذاشتهشده از پایگاه دادهٔ اپلیکیشنی دیگر قابلاعتماد نیست: روی برخی ROMهای سازندگان برای هر پایگاه داده شکست میخورد و چیزی برنمیگرداند. برای اینکه روی هر دستگاه به یک شکل بخواند، VD Google باینری sqlite3 خودش را (arm64 و arm32) همراه میبرد و پرسوجوها را بهصورت root از طریق آن اجرا میکند. اپلیکیشن و WebUI باینریِ یکسان را به کار میبرند، بنابراین همیشه با همان موتور و همان نتیجه میخوانند. منشأ و جمعهای کنترلی این باینری در باینریهای همراه مستند شده است.
خواندنها پیش از باز کردنِ پایگاه داده نسخهای از آن را کنار میگذارند و هرگز به فایل زنده دست نمیزنند، و هرگز نمایهٔ حافظهٔ مشترک را کپی نمیکنند، که یک پایگاه دادهٔ در حال اجرا ممکن است آن را خراب گزارش کند.
دشوارترین بخشِ خواندنِ صادقانهٔ RCS این است که پرچمهای آشکار دروغ میگویند. پرچم سادهٔ «در دسترس»، پرچمهای ویژگی و وضعیت provisioning همگی میتوانند روی خطی که RCS در آن کاملاً کار میکند منفی خوانده شوند، چون حافظهٔ نهاناند یا چون خط بهجای شبکهٔ IMS اپراتور روی backend خودِ گوگل (Jibe) اجرا میشود. VD Google یک حکمِ اتصال واحد را از پیکربندی واقعی چت و موتور provisioning محاسبه میکند که در نسخههای گوناگون اندروید و Google Messages درست میماند، و پرچمهای دروغگو را بهروشنی با برچسب نهانشده نشان میدهد تا آگاهی دهند بیآنکه گمراه کنند. برای معنای هر خط به راهنمای کاربر مراجعه کنید.
خروجی یک عکس فوریِ JSON پاکسازیشده است. پیش از نوشتن هر چیز یک پاکساز اجرا میشود: کلیدها و مقادیری را که شبیه اعتبارنامهاند حذف میکند، رشتههای طولانی از ارقام را پنهان میکند، و هرگز شمارهٔ تلفن شما، محتوای پیامها، نام مخاطبان یا blobهای خامِ قابلیتها را بیرون نمیدهد. بخش اختیاریِ تشخیص تنها نامهای شِما، شمارشها، اندازهها و نسخهها را حمل میکند. و حتی آنجا، هر اثرانگشتِ مختص به یک هویت که درون یک نام جاسازی شده باشد فشرده و حذف میشود. اپلیکیشن و WebUI همان شِما را تولید میکنند.
- هرگز مجوز شبکه اعلام نمیکند، و WebUI هرگز با یک مبدأ راهدور تماس نمیگیرد.
- هرگز مقداری را نمیسازد، جعل نمیکند یا پنهان نمیکند.
- هرگز حکم Play Integrity را گزارش نمیکند، چون آن حکم روی دستگاه نیست.
- وضعیت را تنها از طریق یک کنشِ صریح، تأییدشده و بهصورت محلی ثبتشده تغییر میدهد.
این مستندات با Claude (Anthropic) تولید شده و توسط VD171 نگهداری میشود. اصلاحات و بهبودها خوشآمد است؛ به CONTRIBUTING.md مراجعه کنید.