Spaces:
Build error
Build error
File size: 4,055 Bytes
e015d0b | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 | import os
from groq import Groq
# تحميل المفاتيح من المتغيرات البيئية (التي تم وضعها في HF Secrets)
API_KEYS = [
os.getenv("GROQ_KEY_1"),
os.getenv("GROQ_KEY_2"),
os.getenv("GROQ_KEY_3")
]
clients = [Groq(api_key=key) for key in API_KEYS if key]
class Agents:
def __init__(self):
self.client_index = 0
def _get_client(self):
# تدوير المفاتيح لتجنب حد السرعة (Rate Limiting)
client = clients[self.client_index]
self.client_index = (self.client_index + 1) % len(clients)
return client
def agent_1_binary_analyzer(self, smali_folder_path):
"""
الوكيل 1: يبحث في ملفات Smali عن نظام التحقق
"""
prompt = f"""
أنت خبير في هندسة عكسية لتطبيقات أندرويد (Smali).
تم تفكيك تطبيق (APK) إلى مجلد: {smali_folder_path}
مهمتك: ابحث داخل ملفات الـ Smali عن دالة تتحقق من كلمة المرور أو الاتصال بالخادم.
ابحث عن النصوص التالية: "VIP ACCESS", "ENTRAR", "CONECTAR", "Device:".
اقرأ الكود، وحدد ما يلي في ملف Smali محدد:
1. مكان الدالة (اسم الملف واسم الدالة، مثل: `Lcom/game/auth/Login;->verify(Ljava/lang/String;Ljava/lang/String;)Z`).
2. هل يوجد اتصال HTTP؟ ابحث عن `invoke-virtual {p0}, Ljava/net/URL;->openConnection()Ljava/net/URLConnection;` أو طلبات الشبكة.
3. ما هو الشرط الذي يؤدي إلى نجاح الدخول (ماذا يحدث إذا كان `if-eqz` أو `if-nez` يعيد true)؟
أجب فقط بتنسيق JSON كالتالي:
{{
"found": true/false,
"filename": "مسار الملف داخل المشروع",
"method_signature": "اسم الدالة الكامل",
"snippet": "أول 5 أسطر من الكود",
"analysis": "تحليلك لما يحدث",
"http_url": "الرابط المستخدم للتحقق إذا وجد"
}}
"""
client = self._get_client()
try:
chat = client.chat.completions.create(
messages=[{"role": "user", "content": prompt}],
model="mixtral-8x7b-32768"
)
return chat.choices[0].message.content
except Exception as e:
return f'{{"error": "AI Analysis Failed: {str(e)}"}}'
def agent_3_patcher(self, analysis_result, file_content):
"""
الوكيل 3: بناء على تحليل الوكيل 1، نقوم بتعديل الكود لتجاوز كلمة المرور
"""
prompt = f"""
أنت مطور Smali ماهر.
لقد قام الوكيل 1 بتحليل دالة التحقق في ملف Smali.
التحليل الأصلي: {analysis_result}
الكود الحالي للملف هو: {file_content}
مهمتك: اكتب كود Smali معدل بالكامل (أو التعديلات اللازمة) لجعل هذه الدالة ترجع True دائماً.
- إذا كان التحقق يستخدم `if-eqz`, قم بتغييره إلى `if-nez`.
- أو استبدل دالة التحقق بأكملها بحيث تقوم بـ `const/4 v0, 0x1` وتعطي `return v0` في بدايتها.
أعد فقط كود Smali المعدل (أو التعديلات المطلوبة) في بلوك كود.
"""
client = self._get_client()
try:
chat = client.chat.completions.create(
messages=[{"role": "user", "content": prompt}],
model="mixtral-8x7b-32768"
)
return chat.choices[0].message.content
except Exception as e:
return f"AI Patching Failed: {str(e)}" |