Skip to content
KitploitKITPLOIT
أدواتالمدونة
إرسال
أدواتالمدونة
إرسال

أدوات الاختراق واختبار الاختراق والأمن السيبراني لترسانتك الأمنية!

Kitploit هو دليل لأدوات الاختراق والأمن السيبراني واختبار الاختراق. اكتشف آخر تحديثات المشاريع للعثور على الثغرات وتحليل الأنظمة وأتمتة الاختبارات وتعزيز أمنك.

··الخلاصات·اتصال·الخصوصية·© 2026 Kitploit

دليل الأدوات

الفئات

عرض جميع الفئات
Loading categories
Glass — Glass - بديل سريع ومجاني لـ IDA Pro | Kitploit
أدوات/GitHubGitHub/azw413/glass
أمان أندرويدأمان الأنظمة المدمجةالتحليل الثابتأمان iOSالهندسة العكسيةالبرمجة النصية والأتمتةمصممي الأخطاءأمن الجوالتحليل الملفات الثنائيةتحليل البرامج الثابتة
GitHubazw413/glass

Glass

19112منذ 2 أشهرتمت المراجعة من قبل Kitploit

الأكثر شعبية

عرض الكل →

اكتشف الأدوات الأكثر استخدامًا من قبل مجتمعنا.

استكشف جميع الأدوات

تصفح مجموعتنا من الأدوات

عرض جميع الأدوات →
مشاركة

Glass - بديل سريع ومجاني لـ IDA Pro

عرض المستودع

Glass

بمعنى شفاف وسلس

مفكِّك تفاعلي سريع وأصلي، يعطي أولوية لتطبيقات الجوال، وهو الخليفة الروحي لـ IDA Pro في سير عمل الهندسة العكسية لنظامي Android / iOS، مبني حول:

  • smali للتعامل مع APK / DEX / smali
  • armv8-encode لـ AArch64 و ARMv7 (A32 / Thumb) — ملفات .so الأصلية و iOS Mach-O
  • gpui (Zed) لواجهة مستخدم أصلية متسارعة عبر GPU
  • redb للتخزين الدائم المعنون بالمحتوى
  • خادم MCP مدمج بحيث يمكن لأي مضيف يدعم MCP (Claude Desktop, Cursor, Zed) قيادة Glass مباشرة
  • rquickjs لإضافات قابلة للبرمجة (مخطط لها)

الترخيص: GPL-3.0-only (موروث من smali).

لماذا؟

لقد استخدمنا جميعًا IDA Pro — إنه المعيار الصناعي للهندسة العكسية ولديه سنوات من الإضافات خلفه، لكنه بطيء ومكلف وقديم. Glass مبني بنسبة 100% على Rust الأصلي مع واجهة مستخدم متسارعة عبر GPU لتفاعل سلس. كما أنه مجاني ومفتوح المصدر بالكامل — ساهم معنا من فضلك.

الميزات

  • عرض متسارع عبر GPU بسلاسة مطلقة بمعدل 120 إطارًا في الثانية
  • تحليل سريع للغاية: 1-2 ثانية لمعظم الملفات الثنائية الأكبر حجمًا مقارنةً بالدقائق في IDA Pro
  • فك تجميع AArch64 و ARMv7 (وضع ARM + Thumb) — يغطي iOS arm64 / arm64e وكلا نظامي ABI الشائعين في Android.
  • تفكيكات مترابطة ومشروحة بالكامل مع خطوط تدفق التحكم، وقيم حرفية للبيانات في التعليقات، وروابط قابلة للنقر إلى دوال أخرى. كلها ملوّنة لسهولة الرؤية.
  • مخططات تدفق تحكم تعرض الكتل الأساسية وروابط قابلة للنقر إلى دوال أخرى
  • بحث شامل في المشروع عن الرموز أو القيم الحرفية النصية عبر أقسام DEX والكود والبيانات
  • نظرة عامة على تخطيط الملف الثنائي الأصلي مع بيانات الأقسام
  • بحث المراجع المتقاطعة للمستدعين والمراجع إلى البيانات
  • بحث في الملفات الثنائية والتعليمات عبر كل مكوّن أصلي في الحزمة (بحيث يتم البحث في نسختي arm64-v8a و armeabi-v7a من مكتبة في استعلام واحد). قواعد نحوية لأنماط البايت مع إخفاء + فجوات؛ وقواعد نحوية للتجميع المكتوب لـ AArch64 و ARMv7، مع قائمة إكمال تلقائي تدرك بنية التعليمات ISA.
  • أضف تعليقًا توضيحيًا لأي سطر (كود أو بيانات) بلون و/أو تعليق بحيث يسهل العثور عليه لاحقًا.
  • تحرير فوري للتعليمات والبيانات (انقر نقرًا مزدوجًا على عنصر). محرر فئات smali + محرر تعليمات AArch64 / ARMv7؛ انقر بزر الفأرة الأيمن على أي صف في القائمة لفتح عرض سداسي على مستوى البايت في نفس العنوان كمنفذ للخروج.
  • خادم MCP يعرض كل فعل تحليلي كأداة لأي مضيف يدعم MCP — Claude Desktop, Cursor, Zed.
  • سمات لـ Glass وألوان خلفية قابلة للتحديد لكل مساحة عمل.

لقطات الشاشة

جولة سريعة عبر العروض الرئيسية — انقر على أي صورة مصغرة لرؤيتها بالحجم الكامل.

البرمجة النصية

كل تحليل يقوم به Glass في الواجهة الرسومية يُكشف عنه أيضًا كأمر CLI يُخرج JSON منظمًا. نفس الملف التنفيذي glass هو نقطة الدخول إلى الأتمتة — اختر أمرًا فرعيًا وستحصل على نتيجة لمرة واحدة قابلة للبرمجة النصية، مثالية لخطوط أنابيب jq والتكامل المستمر CI.```sh

What classes ship in this APK?

glass classes ./app.apk --package com.example. --text

Who calls glass::main, by address?

glass callers ./libfoo.so --artifact libfoo.so --symbol "glass::main"

Every onCreate across DEX, machine-readable:

glass search ./app.apk onCreate | jq '.data.hits[] | select(.kind=="method")'

All ObjC + Swift types in an iOS bundle (filter by kind if you like):

glass types ./app.ipa --kind swift-class --text

Drill into one type — methods, ivars, properties for ObjC;

fields + vtable for Swift:

glass type ./app.ipa --artifact app --name blackjack.ContentView

root@kitploit:~
مرر `--text` للحصول على عرض قابل للقراءة البشرية، واحذفه للحصول على JSON.

المرجع الكامل: **[docs/cli-api.md](https://github.com/azw413/glass/blob/HEAD/docs/cli-api.md)**.

هذا يعني أنه يمكنك كتابة سكربتات وأتمتة العمليات الشائعة. 


## المهارات وMCP

كل أمر من أوامر CLI يتم كشفه أيضًا كأداة عبر خادم MCP (Model Context Protocol) مدمج، بحيث يمكن لأي مضيف يدعم MCP — Claude Desktop أو Cursor أو Zed أو عميلك الخاص — التحكم في Glass مباشرة للمساعدة في مهام الهندسة العكسية.```sh
# Print the machine-readable skill catalog (one JSON object listing
# every verb with its schema and an example invocation).
glass skills

# Run as an MCP stdio server. Plug into any MCP host's tool list.
glass mcp

للتسجيل مع Claude Desktop، أضف Glass إلى ~/Library/Application Support/Claude/claude_desktop_config.json:```json { "mcpServers": { "glass": { "command": "/usr/local/bin/glass", "args": ["mcp"] } } }

root@kitploit:~
يمكن للنموذج بعد ذلك استدعاء `inspect` و`symbols` و`disasm` و`cfg-of` و`dex-callers` و`search` وأي فعل آخر على أي حزمة (bundle) تشير إليها. تعود نتائج الأدوات في نفس غلاف JSON الذي ستحصل عليه من سطر الأوامر.

## البحث

ثلاثة محركات متكاملة، كلها متاحة من نفس لوحة ⌘F في الواجهة الرسومية وكأفعال CLI / MCP.

### البحث النصي الكامل

مطابقة ضبابية عبر الحزمة بالكامل للرموز الأصلية (native symbols) وفئات / طرق / حقول DEX والسلاسل النصية الحرفية في أقسام الكود والبيانات. تتم التصفية المباشرة أثناء الكتابة؛ وتُوجَّه النتائج إلى العرض الصحيح (قائمة العناوين الأصلية، عارض smali لأهداف DEX، عرض سداسي عشري لإصابات البيانات). تُبنى الفهارس في خيط خلفي بعد التحميل — تظهر شريحة تقدم أثناء ذلك.```sh
glass search ./app.apk onCreate                 # all things named like "onCreate"
glass search ./libfoo.so init --limit 20

مرجع سطر الأوامر: فعل search في docs/cli-api.md.

البحث الثنائي

محرك أنماط على مستوى البايت. كل ذرة عبارة عن قناع سداسي عشري من حرفين (c0, e?, ?f, ??) أو فجوة (* = 0..=32 بايت، *(min..max) للحدود الصريحة). المطابقات لا تمتد عبر الأقسام. في لوحة الواجهة الرسومية، يبدّل ⌘2 إلى الوضع الثنائي؛ خانة اختيار الرمز فقط (مفعّلة افتراضيًا) تقيّد الفحص على أقسام النص حتى لا تغرق في نتائج البيانات عند البحث عن شكل تعليمة.```sh

returning-true stub finder — mov w0, #1 ; ret

glass bin-search ./libfoo.so --artifact libfoo.so --pattern '20 00 80 52 c0 03 5f d6'

any ADRP+ADD pair with no intervening bytes

glass bin-search ./libfoo.so --artifact libfoo.so --pattern '?? ?? ?? 9? ?? ?? 4? 91'

raw data: find embedded magic

glass bin-search ./libfoo.so --artifact libfoo.so --pattern 'de ad be ef'

root@kitploit:~
القواعد الكاملة + أمثلة عملية: [`docs/BinSearch.md`](https://github.com/azw413/glass/blob/HEAD/docs/BinSearch.md).

### البحث في التعليمات

اكتب التجميع (assembly)، ويقوم Glass بترجمته إلى بايتات. يتم ترميز تسلسل مفصول بفاصلة منقوطة `;` عبر [armv8-encode](https://github.com/azw413/armv8-encode) — **AArch64** (`mov w0, #1`, `adrp x1, *`) و**ARMv7** في كلا الوضعين (Thumb `mov r1, r7` / `bxeq lr` / `push {r4-r7, lr}` وA32). تُترجم أي أحرف بدل إلى أقنعة بتات للمعاملات قبل أن يتولى محرك البايتات الأمر. الفحص شامل — كل قطعة أصلية (native artifact) في الحزمة تحصل على ذرات بنية التعليمات الصحيحة (تطبيقات Android التي تحتوي على مكتبات `arm64-v8a` و`armeabi-v7a` معًا يتم البحث فيها باستعلام واحد).

داخل وضع Binary في الواجهة الرسومية، يبدّل ⌘B بين قاعدتي **Bytes** و**Asm**؛ تعرض قائمة إكمال تلقائي مدركة لبنية التعليمات المتغيرات التي ما تزال مطابقة لما كتبته — `r1` يستبعد مرشحي AArch64، و`w0` يستبعد مرشحي ARMv7.

أحرف البدل:

| الرمز | المعنى |
|---|---|
| `*` | أي معامل (يُستدل على نوعه من الـ opcode المختار) |
| `#*` | أي قيمة فورية (تعطي تلميحًا لمنتقي الـ opcode) |
| `x`, `w` | أي سجل من فئة X أو W في AArch64 |
| `r` | أي سجل GPR في ARMv7 (`r0..r15`, `sp`, `lr`, `pc`) |
| `<*>`, `<X>`, `<W>`, `<R>`, `<imm>` | مكافئات بين قوسين، مفيدة عند تداخلها في صيغ أخرى (`[x, #*]`, `[r, #*]`) |```sh
# AArch64 — every `mov w0, #N` (any N)
glass insn-search ./libfoo.so --artifact libfoo.so --pattern 'mov w0, #*'

# AArch64 — any ADRP into x1 followed immediately by ADD into the same reg
glass insn-search ./libfoo.so --artifact libfoo.so --pattern 'adrp x1, * ; add x1, x1, #*'

# ARMv7 (Thumb) — `mov r1, r*` followed by a return
glass insn-search ./libfoo.so --artifact libfoo.so --pattern 'mov r1, r* ; bx lr'

# ARMv7 (any cond) — conditional bx in literal-pool callers
glass insn-search ./libfoo.so --artifact libfoo.so --pattern 'bxeq lr'

# every `ret x30` — concrete, no wildcards
glass insn-search ./libfoo.so --artifact libfoo.so --pattern 'ret'

الاستجابة تحمل bytes_hex تعرض القناع المجمّع (مثل 01/1f ?? ?? 90/9f لـ adrp x1, *) حتى تتمكن من رؤية الأجزاء المثبتة بدقة مقابل الأجزاء البدل. عمليات الالتقاط (<name:kind> التي تشير إلى نفس المعامل لاحقًا في النمط) مصممة ولكنها غير منفّذة بعد.

التصميم الكامل + المراحل: docs/InsnPattern.md. مرجع CLI/MCP: insn-search في docs/cli-api.md.

الحالة الحالية

Glass قابل للاستخدام اليوم لعكس هندسة تطبيقات Android (APK / DEX / .so أصلي) وتطبيقات iOS (IPA / Mach-O) التي تستهدف AArch64 و ARMv7 32-بت (armeabi-v7a للمكتبات، A32 + Thumb).

ما يعمل

تحميل الملفات

  • فتح حزم Android (.apk, .aab)، حزم iOS (.ipa)، أو أي ملف ELF / Mach-O مستقل (.so, .dylib, ملفات تنفيذية خام) مباشرة — يكتشف Glass التنسيق تلقائيًا.
  • ملفات Mach-O السمينة / الشاملة تُعالج بشفافية: يُفضَّل arm64e، ويكون arm64 العادي هو الخيار الاحتياطي. يعمل على الحزم وعلى الملفات المستقلة على حد سواء (مثل glass gui /usr/lib/dyld).
  • خط أنابيب التحميل يُبلغ عن التقدم (قراءة الأرشيف ← تحليل DEX / فك تجميع الأصلي ← بناء الرموز).
  • معرّفات لكل قطعة أثرية تعتمد على المحتوى (blake3، rayon-parallel للمكتبات الكبيرة). التعليقات التوضيحية تتبع القطعة الأثرية، وليس الحاوية — نفس libfoo.so المُرسل في ملفي APK (أو نفس libswiftCore.dylib عبر ملفي IPA) يتشارك حالة التحليل.
  • عارض AndroidManifest (XML ثنائي مفكوك عبر smali).
  • عارض Info.plist لحزم iOS — معرّف الحزمة، اسم الملف التنفيذي، الإصدار، الحد الأدنى لنظام التشغيل، وبقية الـ plist معروضة كـ XML ملوّن.

iOS — IPA / Mach-O

  • فك ضغط الـ IPA، تحديد موقع Payload/*.app/، تحليل Info.plist، واختيار شريحة arm64 / arm64e من أي ملف سمين بداخله.
  • الملف التنفيذي الرئيسي وكل Frameworks/*.framework + *.dylib يُحمَّل كقطعة أثرية أصلية خاصة به، مع نفس عروض النظرة العامة + التفكيك لكل قسم المستخدمة لملفات .so في Android.
  • متصفح فئات Objective-C مستمد من __objc_classlist — الفئات، التصنيفات، الدوال، متغيرات الحالة، الخصائص — مع أسماء مطرودة (تشمل أسماء Swift المائلة القديمة _TtC...) وقفزات قابلة للنقر من عناوين الدوال إلى القائمة.
  • متصفح أنواع Swift مستمد من __swift5_types — الفئات، البنيات، التعدادات مع حقولها و(للفئات) جداول vtables، كما أنها قابلة للنقر داخل القائمة.
  • خريطة الرموز مثراة برموز دوال ObjC ورموز أنواع Swift، بحيث الصفوف التي كانت سابقًا تعرض عناوين خام أصبحت الآن تعرض أسماء محلولة.

Android — APK / DEX / أصلي

  • شجرة الفئات عبر جميع ملفات DEX في الـ APK.
  • قائمة smali لكل فئة مع تمييز نحوي واعٍ بالسياق (توجيهات، أنواع، أسماء دوال، حروف نصية، إلخ).
  • المراجع المتقاطعة للدوال تُحل إلى الفئة والسطر الصحيحين.
  • ملفات .so الأصلية تحت lib/<abi>/ تُحمَّل لكل ABI؛ كل من AArch64 (arm64-v8a) و ARMv7 (armeabi-v7a) يحصلان على عروض تفكيك كاملة. ABIs الأخرى (x86 / x86_64) تُوجَّه إلى عرض hex حتى يتوفر مفكك.

التحرير

  • محرر فئة smali (نقرة مزدوجة على رأس الفئة / الحقل / الدالة لفتح محررات داخلية).
  • تحرير تعليمات AArch64 في مكانها: اكتب تجميعًا جديدًا، يعيد Glass ترميزه إلى بايتات؛ تظهر التغييرات المرحلية بصبغة خضراء في القائمة حتى تقوم بالتصدير إلى APK / IPA جديد.
  • تحرير ARMv7 في مكانه: يتعامل مع الاستبدالات بنفس العرض، تصغير 4 بايتات → 2 بايت (يحشو تلقائيًا بـ Thumb-1 NOP)، وتكبير 2 بايت → 4 بايتات يستهلك NOP تالي. يرفض التكبيرات غير الآمنة التي من شأنها إزاحة التعليمات اللاحقة.
  • إكمال تلقائي واعٍ بنظام التعليمات في المحرر الداخلي — كتابة r1 تعرض متغيرات ARMv7 فقط؛ w0 تعرض AArch64 فقط.
  • انقر بزر الفأرة الأيمن على أي صف في القائمة ← فتح عرض hex هنا للانتقال إلى محرر hex على مستوى البايتات في نفس العنوان عندما لا يستطيع محرر التجميع المكتوب التعبير عن ما تحتاجه.

AArch64 أصلي (ELF + Mach-O رفيع)

  • تفكيك بالمسح الخطي مع عرض افتراضي — المكتبات الكبيرة تُفتح في ثوانٍ، وليس دقائق.
  • خريطة رموز مدمجة من ELF symtab و dynsym و DWARF و .eh_frame FDEs وإدخالات <name>@plt المُصنّعة. إزالة التشويش لـ C++/Rust/Swift عبر symbolic-demangle.
  • معاملات الفروع معروضة كمراجع رموز قابلة للنقر؛ أزواج adrp + add/ldr تُحل إلى أهداف بيانات، بما فيها حروف نصية معروضة كتعليقات داخلية.
  • عروض لكل قسم (أقسام الكود تحصل على تفكيك؛ أقسام البيانات تحصل على عرض hex).

ARMv7 أصلي (ELF)

  • تفكيك تعاودي النزول من نقاط دخول الرموز بحيث لا تُفكَّك مجموعات الحروف الحرفية وجداول القفز والبيانات الداخلية كتعليمات خطأً. وضع لكل رمز (ARM مقابل Thumb) يُحترم عبر علامة البت المنخفض.
  • عرض Thumb متغير العرض: صفوف Thumb-1 ذات 16 بت تعرض 2 بايت (بدون حشو 00 00 وهمي)، Thumb-2 و A32 ذات 32 بت تعرض 4.
  • خريطة الرموز: ELF symtab و DWARF و .eh_frame وإدخالات <name>@plt المُصنّعة (وحدات بحجم 12 بايت).
  • دمج movw + movt: يتم اكتشاف movw R, #lo16 ; movt R, #hi16 عبر أزواج التعليمات، والثابت 32-بت المُحل يحصل على تعليق نصي ; "..." من rodata على صف movt.
  • تحميلات Thumb للحرف الحرفي ldr Rt, [pc, #imm] من تجمعات الحروف الحرفية تتبع مستوى واحد في rodata لنفس نوع تعليق النص الداخلي الذي ينتجه مسار ADRP+ADD في AArch64.
  • ميزاب أسهم تدفق التحكم على الفروع الشرطية وغير الشرطية (نفس تخصيص الممرات كما في AArch64).

الواجهة

  • لوحة يمنى بتبويبات مع قائمة منسدلة آمنة من التدفق، أزرار إغلاق، ونقر للتفعيل.
  • أشرطة تمرير أفقية + رأسية في عروض القائمة و hex والمانيفست.
  • لوحة رموز Cmd-F مع فلتر ضبابي. الاستعلامات متعددة المصطلحات تُطابق بـ AND بالترتيب (change me يجد changeMessage و change_me_count لكن ليس dispatchMenuVisibilityChanged).
  • لوحة ثنائية / تعليمات (⌘2 للتبديل إليها) تفحص كل قطعة أثرية أصلية عالميًا — تطبيقات Android ذات arm64-v8a + armeabi-v7a تحصل على نتائج موحدة مع تسمية القطعة الأثرية + القسم لكل تطابق.
  • مراجع متقاطعة بنقرة يمين في كل عرض: مراجع إلى العنوان / المستدعون للدالة / فتح عرض hex هنا في القائمة وhex و CFG؛ المستدعون للدالة / مراجع إلى الحقل في smali. تظهر النتائج في اللوحة مع شريحة نطاق؛ Esc يمسح النطاق ويعود إلى البحث عبر الحزمة. تُبنى الفهارس على خيط خلفي بعد التحميل — تظهر شريحة تقدم أثناء البناء.
  • سمات (عرض ← السمة) مع صبغات خلفية قابلة للاختيار لكل نافذة.
  • Cmd-O فتح، Cmd-N نافذة جديدة، Cmd-W إغلاق نافذة، Cmd-⇧W إغلاق ملف (إعادة النافذة إلى حالة الإطلاق الفارغة) — على Linux / Windows تستخدم نفس الاختصارات Ctrl بدلًا من Cmd. ملف ← فتح الأخير (آخر 10 حزم، منزوعة التكرار حسب المسار) و عرض ← السمة. على macOS تعيش هذه في شريط القوائم الأصلي؛ على Linux / Windows (حيث لا يرسم gpui شريط قوائم أصليًا) يرسم Glass شريط القوائم الخاص به Glass / ملف / عرض في رأس النافذة.
  • حدود النافذة + التبويبات المفتوحة + حالة توسيع الشجرة محفوظة لكل حزمة في redb؛ إعادة الإطلاق تستأنف من حيث توقفت.

ما هو مفقود

  • تفكيك x86 / x86_64 (تلك الأقسام الكودية تُوجَّه حاليًا إلى عرض hex).
  • تعديلات ARMv7 في مكانها التي تحتاج إلى تكبير بدون NOP مجاور — تُرفض حاليًا مع رسالة خطأ واضحة؛ ستحتاج إلى إعادة تخطيط على مستوى القسم + إعادة ربط أهداف الفروع لدعمها.
  • تحليل امتيازات iOS و embedded.mobileprovision.
  • مراجع متقاطعة DEX ↔ أصلي عبر توقيعات JNI.
  • مضيف نصوص QuickJS.
  • سحب للتمرير على أشرطة التمرير (حاليًا بصرية فقط — استخدم لوحة اللمس / العجلة).
  • فك ترميز معرّفات الموارد في المانيفست (سيحتاج تحليل resources.arsc).
  • محرر التجميع المكتوب لـ ARMv7: يعمل مع الأشكال الشائعة؛ المعاملات المُزاحة (r0, lsl #2) والذاكرة ذات الفهرسة القبلية/البعدية ([rN, #imm]!, [rN], #imm) تُحلّ نحويًا لكن بشكل ملموس فقط — لا توجد بدلات داخل الأقواس.

البناء

يعمل Glass على macOS 13+ (الهدف الأساسي، مسرّع بوحدة معالجة الرسوميات عبر Metal — لا حاجة إلى SDK إضافي، إطار Metal مرفق مع نظام التشغيل)، Linux (X11 أو Wayland عبر gpui_linux، مدعوم بـ Vulkan)، و Windows 10/11 (مدعوم بـ Direct3D عبر gpui، مبني باستخدام سلسلة أدوات MSVC).

يوجد ملف ثنائي مُجمَّع مسبقًا لإصدار macOS ضمن Releases لكن إذا كنت بحاجة إلى البناء من المصدر: الخبر الجيد: إنه أمران.

  1. ثبّت Rust (إذا لم يكن مثبتًا لديك بالفعل): ```sh curl --proto '=https' --tlsv1.2 -sSf https://sh.rustup.rs | sh
    root@kitploit:~
  2. لينكس فقط — تثبيت التبعيات الأصلية لـ gpui. أسهل طريقة هي تشغيل سكربت الإعداد الخاص بـ Zed، والذي يعرف apt / dnf / pacman / إلخ: ```sh curl -sSL https://raw.githubusercontent.com/zed-industries/zed/main/script/linux | bash
    root@kitploit:~

يعمل هذا على جلب libxkbcommon-dev، وترويسات Wayland وXCB، وVulkan، وALSA، وبقية مجموعة الأدوات التي يحتاجها gpui_linux للربط. وبدون هذه الحزم، يفشل البناء في مرحلة الربط بسبب غياب رموز xkbcommon / wayland-client.

إذا كنت تفضّل عدم تشغيل البرنامج النصي، فإن الحزم المكافئة على Debian / Ubuntu (amd64) هي: ```sh sudo apt-get update && sudo apt-get install -y
build-essential clang cmake pkg-config
libfontconfig-dev libfreetype-dev
libwayland-dev libxkbcommon-x11-dev
libasound2-dev libvulkan-dev
libzstd-dev libsqlite3-dev libssl-dev
libglib2.0-dev

root@kitploit:~
يفشل البناء مبكرًا في سكربت بناء أحد التبعيات (`fontconfig was not found in the pkg-config search path`) إذا كان `libfontconfig-dev` مفقودًا، ولاحقًا في وقت الربط لمكتبات X11/Wayland/Vulkan. هناك حاجة إلى `libglib2.0-dev` لأن مشغّل Frida يربط GLib ديناميكيًا على Linux (أما على macOS فتضمّن حزمة تطوير Frida مكتبة GLib بشكل ثابت) — وبدونه يفشل الربط مع `undefined symbol: g_object_unref`.

**نظام Windows فقط — ثبّت سلسلة أدوات البناء الأصلية.** يتطلب `gpui` سلسلة أدوات MSVC (الهدف GNU/MinGW غير مدعوم). باستخدام [winget](https://learn.microsoft.com/windows/package-manager/winget/):   ```powershell
# 1. MSVC compiler, linker, and Windows SDK (the "Desktop development with C++" workload).
winget install --id Microsoft.VisualStudio.2022.BuildTools `
  --override "--quiet --wait --add Microsoft.VisualStudio.Workload.VCTools --includeRecommended"

# 2. CMake — tree-sitter (via the Zed `language` crates) builds wasmtime's C API with it.
winget install --id Kitware.CMake

# 3. LLVM/Clang — `bindgen` (frida-sys, gpui, media) needs libclang.dll.
winget install --id LLVM.LLVM

لا يضيف مثبّت LLVM نفسه إلى PATH، لذا وجّه bindgen إلى libclang.dll قبل البناء (اضبط ذلك بشكل دائم عبر النظام → متغيرات البيئة، أو لكل شلّ): ```powershell $env:LIBCLANG_PATH = "C:\Program Files\LLVM\bin"

root@kitploit:~
بدون هذه، تفشل عملية البناء في سكربتات بناء التبعيات: `linker 'link.exe' not found` (لا يوجد MSVC)، `failed to spawn 'cmake'` (لا يوجد CMake)، أو `Unable to find libclang` (لا يوجد `LIBCLANG_PATH`). يتم زيادة احتياطي المكدس للملف الثنائي `glass` تلقائيًا على MSVC (انظر `crates/glass-cli/build.rs`) بحيث لا يتجاوز CLI المكدس الافتراضي الصغير لمؤشر الترابط الرئيسي في Windows — لا حاجة لأي إجراء.

3. **استنساخ وبناء**:   ```sh
git clone https://github.com/azw413/Glass.git
cd glass
cargo build --release -p glass-cli
cp target/release/glass <to somewhere on your PATH>

سيستغرق البناء الأول وقتًا لتجميع gpui وما يرتبط به، وقد يستغرق عدة دقائق. أما عمليات البناء اللاحقة فستكون سريعة.

  1. شغّلها: ```sh

    Open the GUI on an Android APK or iOS IPA — no subcommand needed.

    glass ~/path/to/app.apk glass ~/path/to/app.ipa

    Or on a standalone binary — ELF .so, Mach-O .dylib, or raw

    executable. Fat / universal Mach-O is sliced automatically.

    glass ~/path/to/libfoo.so glass ~/path/to/libBar.dylib glass /usr/lib/dyld

    No args → opens an empty Glass window; use File → Open.

    glass

    Headless bundle inspect

    glass bundle ~/path/to/app.apk

    Inspect persisted state for a bundle

    glass db-dump ~/path/to/app.apk

    root@kitploit:~

استخدم دائمًا الإصدار النهائي (release build) — فإصدارات التصحيح (debug builds) تفكّك أبطأ بمراتب عدة.

تغليف حزمة .app

لتغليف الملف الثنائي للإصدار النهائي في حزمة Glass.app بحيث يمكن تشغيله بنقرة مزدوجة من Finder:```sh cargo build --release -p glass-cli ./packaging/make-app.sh open dist/Glass.app

root@kitploit:~
الحزمة موقّعة بتوقيع مخصص (ad-hoc) وليست موقّعة بمعرّف المطوّر (Developer-ID) أو موثّقة (notarized)، لذا عند أول تشغيل سيرفض macOS فتحها؛ انقر بزر الماوس الأيمن ← **فتح** لتجاوز Gatekeeper مرة واحدة.

طريقتان للحصول على zip مُجمَّع مسبقًا دون البناء محليًا:

- **أحدث `main`** — كل عملية دفع (push) ترفع `Glass-app-<sha>.zip` كأثر لسير العمل (artifact) صالح لمدة 14 يومًا. اسحبه من [تبويب Actions](https://github.com/azw413/Glass/actions).
- **إصدار موسوم** — دفع وسم `v*` (مثل `v0.1.0`) يشغّل نفس سير العمل وينشر أيضًا `Glass-<tag>-macOS.zip` إلى [صفحة Releases](https://github.com/azw413/Glass/releases) مع ملاحظات إصدار مولّدة تلقائيًا.

## مساحة العمل

| Crate            | الغرض                                                          |
|------------------|------------------------------------------------------------------|
| `glass-core`     | أنواع مشتركة (`CodeKind`، المعرّفات)                                   |
| `glass-arch-arm` | فك تجميع AArch64 + ARMv7، خريطة الرموز، توليف PLT، إزالة تشويه الأسماء |
| `glass-arch-dex` | واجهة DEX / smali فوق `smali`                                  |
| `glass-mobile`   | تحميل حزم APK + IPA، استخراج المكتبات الأصلية، manifest        |
| `glass-db`       | تخزين مستمر بعنونة المحتوى (redb): الحزم، التبويبات، الإعدادات    |
| `glass-device`   | اكتشاف أجهزة Android (adb) + iOS (usbmux)                    |
| `glass-api`      | أفعال التحليل (البحث، المراجع المتقاطعة (xrefs)، CFG، التعديلات) مشتركة بين CLI + MCP + GUI |
| `glass-ui`       | واجهة أمامية بـ `gpui`: الشجرة، القائمة، السداسي العشري، manifest، اللوحة          |
| `glass-cli`      | مفتّش بدون واجهة رسومية (headless) + مُشغِّل الواجهة الرسومية                                |
| `glass-mcp`      | خادم MCP يعرض كل فعل من أفعال CLI كأداة                     |
| `glass-script`   | بيئة تشغيل إضافات QuickJS (عنصر نائب)                             |

## خارطة الطريق

- **iOS أعمق** — تحليل Entitlements و `embedded.mobileprovision`. (تمريرات البيانات الوصفية ObjC `__objc_classlist` و Swift `__swift5_types` أصبحت متاحة — انظر `glass types` / `glass type`.)
- **x86 / x86_64** — فك التجميع لإصدارات المحاكي من ملفات Android `.so`.
- **البرمجة النصية الداخلية** — مضيف إضافات QuickJS بواجهة API مستقرة لتمريرات التحليل.
- **متقدم** — إعادة بناء APK الموقّع، الإزاحة اللاحقة (downstream-shift) في التعديلات الموضعية على ARMv7 (بحيث يمكن لنمو الحجم من 2 إلى 4 بايت أن يتجاوز الكود المجاور بدلاً من الرفض).
تنزيل الأداة
قائمة تفكيك AArch64 مع مجرى أسهم وقيم حرفية نصية محلولة ومراجع رموز قابلة للنقر
قائمة التفكيك
معاملات ملوّنة، أسهم تدفق تحكم، وقيم حرفية نصية محلولة مضمّنة
مخطط تدفق تحكم لدالة أصلية يعرض الكتل الأساسية والحواف الشرطية وغير الشرطية
مخطط تدفق التحكم
CFG لكل دالة مع حواف شرطية منقطة ومسارات متعددة الرتب موجّهة
مخطط استدعاءات دوال DEX متجذر عند دالة smali؛ عقد المستدعاة قابلة للتوسيع بالتحويم
مخطط استدعاءات DEX
وسّع المستدعاة بالتحويم، وانقر للانتقال إلى smali الخاصة بالدالة
نظرة عامة على خريطة أقسام ملف ثنائي أصلي مع شريط تناسبي ملوّن وتفاصيل لكل قسم
نظرة عامة على خريطة الأقسام
شريط تناسبي حسب حجم القسم، وانقر للانتقال إلى عرض القائمة / العرض السداسي