# Reverse Engineering an API

عندما تواجه واجهة برمجة تطبيقات (API) غير موثقة، يصبح من الضروري استخدام الهندسة العكسية لفهم كيفية التفاعل معها. تتضمن هذه العملية جمع الطلبات ورسم خريطة لوظائف واجهة برمجة التطبيقات. هناك طريقتان رئيسيتان لتحقيق ذلك:

1. **جمع يدوي باستخدام Postman**
2. **توثيق تلقائي باستخدام mitmproxy2swagger**

***

#### 1. بناء مجموعة في Postman

**الهدف:** عكس هندسة واجهة برمجة التطبيقات من خلال التقاط وتنظيم الطلبات المرسلة إليها.

**الخطوات:**

1. **إطلاق Postman:**
   * افتح Postman وأنشئ مساحة عمل جديدة (مثل مساحة عمل ACE).
2. **إعداد الوكيل:**
   * استخدم زر **Capture Requests** في أسفل نافذة Postman لتمكين الوكيل.
   * تأكد من ضبط المنفذ ليتناسب مع الرقم الذي تم إعداده في FoxyProxy (مثل 5555).
3. **التقاط الطلبات:**
   * أضف عنوان URL الهدف إلى حقل "URL must contain"، ثم اضغط على زر **Start Capture**.
   * افتح متصفح الويب وانتقل إلى صفحة الهبوط الخاصة بالهدف، ثم استخدم FoxyProxy لتمكين خيار Postman.
4. **استكشاف التطبيق:**
   * استخدم التطبيق بشكل دقيق من خلال النقر على الروابط، التسجيل، تسجيل الدخول، تحديث المعلومات، وما إلى ذلك. الهدف هو التقاط جميع الطلبات الممكنة.
5. **إيقاف** Prox&#x79;**:**
   * بعد الانتهاء من استكشاف جميع الميزات، أوقف Proxyفي Postman.
6. **إنشاء مجموعة crAPI:**
   * أنشئ مجموعة جديدة، ثم أعد تسمية المجموعة إلى **crAPI Proxy Collection**.
   * انتقل إلى جلسة تصحيح الوكيل وافتح علامة تبويب الطلبات. حدد جميع الطلبات التي تم التقاطها وأضفها إلى مجموعة crAPI.
7. **تنظيم الطلبات:**
   * أعد تسمية الطلبات وقم بتجميع الطلبات المماثلة في مجلدات.

***

#### 2. التوثيق التلقائي باستخدام mitmproxy2swagger

**الهدف:** تسهيل جمع الطلبات وتحويلها إلى وثيقة API موثقة.

**الخطوات:**

1. **إعداد mitmproxy:**
   *   افتح وحدة التحكم وأدخل الأمر:

       ```bash
       mitmweb
       ```
   * سيساعدك ذلك في إعداد وكيل على المنفذ 8080.
2. **التقاط الطلبات:**
   * استخدم متصفح الويب لاستكشاف تطبيق الهدف مرة أخرى. سيتم التقاط جميع الطلبات بواسطة mitmproxy.
3. **حفظ الطلبات:**
   * بعد الانتهاء من استكشاف التطبيق، انتقل إلى خادم mitmweb واضغط على **File > Save** لحفظ الطلبات.
4. **إنشاء وثيقة API:**
   *   استخدم الأداة **mitmproxy2swagger** لتحويل الطلبات إلى ملف Open API 3.0 YAML:

       ```bash
       sudo mitmproxy2swagger -i /Downloads/flows -o spec.yml -p http://crapi.apisec.ai -f flow
       ```
5. **تحرير ملف spec.yml:**
   * افتح ملف spec.yml وتحقق مما إذا كانت بعض النقاط قد تم تجاهلها. قم بإزالة "ignore:" من النقاط التي تريد تضمينها.
6. **استيراد إلى Postman:**
   * بعد إعداد وثيقة API، افتح Postman واضغط على زر **Import** لاستيراد ملف spec.yml كمجموعة.
