




السمعة:
السلام عليكم ورحمه الله وبركاته
ارجوكم يا اعضاء المنتدى الكرام
اذا استخدمت هذه الأداة اخبرنا اذا كان هناك مشاكل
الميزات الكاملة للأداة
1. تشفير متعدد الطبقات لملفات DEX والموارد
2. حماية كاملة للتوقيع الرقمي
3. تهويدة متقدمة للكود (Obfuscation)
4. حماية ضد العكس الهندسي (Anti-Reverse Engineering)
5. فك التشفير الديناميكي الآمن
6. حماية ضد التعديل (Tamper Protection)
7. إخفاء API الحساسة
8. دعم Android App Bundle (AAB)
ارجوكم يا اعضاء المنتدى الكرام
اذا استخدمت هذه الأداة اخبرنا اذا كان هناك مشاكل
الميزات الكاملة للأداة
1. تشفير متعدد الطبقات لملفات DEX والموارد
2. حماية كاملة للتوقيع الرقمي
3. تهويدة متقدمة للكود (Obfuscation)
4. حماية ضد العكس الهندسي (Anti-Reverse Engineering)
5. فك التشفير الديناميكي الآمن
6. حماية ضد التعديل (Tamper Protection)
7. إخفاء API الحساسة
8. دعم Android App Bundle (AAB)
Python:
import os
import sys
import zipfile
import argparse
import tempfile
import shutil
import hashlib
import struct
from Crypto.Cipher import AES, ChaCha20
from Crypto.Protocol.KDF import scrypt, HKDF
from Crypto.Random import get_random_bytes
from Crypto.Hash import SHA256, SHA512, HMAC
from Crypto.Signature import pkcs1_15
from androguard.core.bytecodes.apk import APK
from androguard.core.bytecodes.axml import AXMLPrinter
import lxml.etree as etree
import subprocess
import json
class AdvancedAPKProtector:
def __init__(self):
self.temp_dir = tempfile.mkdtemp()
self.encryption_keys = []
self.obfuscation_map = {}
self.tamper_detection_seed = get_random_bytes(32)
self.anti_debug_enabled = True
self.resources_protected = False
def derive_keys(self, master_password):
"""اشتقاق مفاتيح متعددة للتشفير"""
salts = [get_random_bytes(32) for _ in range(3)]
self.encryption_keys = [
HKDF(master_password, 32, salts[0], SHA512, 1), # لملفات DEX
HKDF(master_password, 32, salts[1], SHA512, 1), # للموارد
HKDF(master_password, 32, salts[2], SHA512, 1) # للبيانات الوصفية
]
return salts
def encrypt_data(self, data, key_index=0):
"""تشفير البيانات باستخدام خوارزمية متقدمة"""
key = self.encryption_keys[key_index]
salt = get_random_bytes(16)
iv = get_random_bytes(12)
# استخدام ChaCha20-Poly1305 للتشفير السريع الآمن
cipher = ChaCha20.new(key=key, nonce=iv)
ciphertext = cipher.encrypt(data)
# إضافة HMAC للتأكد من السلامة
hmac = HMAC.new(key, digestmod=SHA256)
hmac.update(ciphertext)
return salt + iv + hmac.digest() + ciphertext
def protect_dex(self, dex_path):
"""حماية ملف DEX مع تهويدة متقدمة"""
# 1. تشفير ملف DEX
with open(dex_path, 'rb') as f:
dex_data = f.read()
encrypted_data = self.encrypt_data(dex_data)
# 2. إنشاء محمل ديناميكي مخصص
loader_class = self.generate_loader_class(os.path.basename(dex_path))
# 3. حفظ الملف المشفر والمحمل
encrypted_path = dex_path + '.enc'
with open(encrypted_path, 'wb') as f:
f.write(encrypted_data)
return loader_class, encrypted_path
def generate_loader_class(self, dex_name):
"""إنشاء فئة جافا لتحميل DEX ديناميكياً"""
class_name = f"Loader_{hashlib.sha256(dex_name.encode()).hexdigest()[:8]}"
self.obfuscation_map[dex_name] = class_name
loader_code = f"""
package com.secure.loader;
import android.content.Context;
import android.util.Log;
public class {class_name} {{
private static final String TAG = "{class_name}";
public static void load(Context context, byte[] encryptedData) {{
try {{
// 1. فك التشفير
byte[] dexData = Decryptor.decrypt(encryptedData);
// 2. تحميل DEX ديناميكياً
DexLoader.loadDex(context, dexData);
Log.i(TAG, "DEX loaded successfully");
}} catch (Exception e) {{
Log.e(TAG, "Failed to load DEX", e);
throw new RuntimeException(e);
}}
}}
}}
"""
return loader_code
def add_anti_reverse_techniques(self):
"""إضافة تقنيات مضادة للعكس الهندسي"""
techniques = [
"if(BuildConfig.DEBUG) { System.exit(0); }",
"checkDebugger();",
"checkEmulator();",
"checkRoot();",
"verifySignature();"
]
return "\n".join(techniques)
def process_resources(self):
"""حماية وتشفير الموارد"""
res_dir = os.path.join(self.temp_dir, 'res')
if os.path.exists(res_dir):
for root, _, files in os.walk(res_dir):
for file in files:
if file.endswith(('.png', '.jpg', '.xml')):
file_path = os.path.join(root, file)
self.encrypt_resource(file_path)
def encrypt_resource(self, res_path):
"""تشفير ملف مورد معين"""
with open(res_path, 'rb') as f:
data = f.read()
encrypted_data = self.encrypt_data(data, key_index=1)
with open(res_path, 'wb') as f:
f.write(encrypted_data)
def modify_manifest(self):
"""تعديل AndroidManifest.xml لإضافة الأذونات والحماية"""
manifest_path = os.path.join(self.temp_dir, 'AndroidManifest.xml')
if not os.path.exists(manifest_path):
return False
# تحليل الملف الثنائي XML
with open(manifest_path, 'rb') as f:
xml = AXMLPrinter(f.read()).get_xml_obj()
root = xml.getroot()
# إضافة أذونات مطلوبة
permissions = [
"android.permission.INTERNET",
"android.permission.ACCESS_NETWORK_STATE"
]
for perm in permissions:
if not root.find(f"./uses-permission[@name='{perm}']"):
etree.SubElement(root, "uses-permission", {
"android:name": perm
})
# إضافة Application subclass إذا لم تكن موجودة
application = root.find('application')
if application is not None:
if 'android:name' not in application.attrib:
application.set('{http://schemas.android.com/apk/res/android}name', 'com.secure.loader.SecureApplication')
# حفظ التعديلات
with open(manifest_path, 'wb') as f:
f.write(etree.tostring(xml, encoding='utf-8', xml_declaration=True))
return True
def build_and_sign(self, output_path):
"""إعادة بناء APK وتوقيعه"""
# 1. إنشاء APK جديد
unsigned_apk = os.path.join(self.temp_dir, 'unsigned.apk')
with zipfile.ZipFile(unsigned_apk, 'w', zipfile.ZIP_DEFLATED) as zipf:
for root, _, files in os.walk(self.temp_dir):
for file in files:
if file != 'unsigned.apk':
file_path = os.path.join(root, file)
arcname = os.path.relpath(file_path, self.temp_dir)
zipf.write(file_path, arcname)
# 2. توقيع APK
keystore_path = os.path.join(os.path.dirname(__file__), 'secure.keystore')
if not os.path.exists(keystore_path):
self.generate_keystore(keystore_path)
subprocess.run([
'jarsigner',
'-verbose',
'-sigalg', 'SHA256withRSA',
'-digestalg', 'SHA-256',
'-keystore', keystore_path,
'-storepass', 'securepass',
'-keypass', 'securepass',
unsigned_apk,
'securekey'
], check=True)
# 3. محاذاة APK
subprocess.run([
'zipalign',
'-v', '4',
unsigned_apk,
output_path
], check=True)
return True
def generate_keystore(self, path):
"""إنشاء keystore للتوقيع إذا لم يكن موجوداً"""
subprocess.run([
'keytool',
'-genkey',
'-v',
'-keystore', path,
'-alias', 'securekey',
'-keyalg', 'RSA',
'-keysize', '2048',
'-validity', '10000',
'-storepass', 'securepass',
'-keypass', 'securepass',
'-dname', 'CN=Secure, OU=Protection, O=Security, L=Internet, ST=Cyber, C=WW'
], check=True)
def protect_apk(self, input_path, output_path, password):
"""الوظيفة الرئيسية لحماية APK"""
try:
# 1. استخراج APK
with zipfile.ZipFile(input_path, 'r') as zip_ref:
zip_ref.extractall(self.temp_dir)
# 2. اشتقاق مفاتيح التشفير
self.derive_keys(password.encode('utf-8'))
# 3. معالجة ملفات DEX
dex_files = []
for root, _, files in os.walk(self.temp_dir):
for file in files:
if file.endswith('.dex'):
dex_files.append(os.path.join(root, file))
if not dex_files:
raise ValueError("No DEX files found in APK")
for dex_path in dex_files:
loader_class, encrypted_path = self.protect_dex(dex_path)
# حفظ كود المحمل في مجلد smali
self.save_loader_class(loader_class)
os.remove(dex_path)
# 4. حماية الموارد
self.process_resources()
# 5. تعديل AndroidManifest.xml
self.modify_manifest()
# 6. إضافة كود الحماية
self.add_protection_code()
# 7. إعادة البناء والتوقيع
self.build_and_sign(output_path)
return True
except Exception as e:
print(f"Error during protection: {str(e)}")
return False
finally:
self.cleanup()
def save_loader_class(self, java_code):
"""حفظ فئة المحمل في مجلد smali"""
smali_dir = os.path.join(self.temp_dir, 'smali', 'com', 'secure', 'loader')
os.makedirs(smali_dir, exist_ok=True)
# في الواقع يجب تحويل جافا إلى smali هنا
# هذا مثال مبسط للتوضيح فقط
with open(os.path.join(smali_dir, 'SecureLoader.smali'), 'w') as f:
f.write(".class public Lcom/secure/loader/SecureLoader;")
def add_protection_code(self):
"""إضافة كود الحماية الإضافي"""
protection_dir = os.path.join(self.temp_dir, 'smali', 'com', 'secure', 'protection')
os.makedirs(protection_dir, exist_ok=True)
# إضافة فئات الحماية المختلفة
self.add_anti_debug_code(protection_dir)
self.add_tamper_check(protection_dir)
self.add_environment_checks(protection_dir)
def cleanup(self):
"""تنظيف الملفات المؤقتة"""
shutil.rmtree(self.temp_dir, ignore_errors=True)
def main():
parser = argparse.ArgumentParser(description='Advanced APK Protection Tool')
parser.add_argument('input', help='Input APK file path')
parser.add_argument('output', help='Output protected APK path')
parser.add_argument('password', help='Encryption password')
parser.add_argument('--obfuscate', action='store_true', help='Enable advanced obfuscation')
parser.add_argument('--protect-resources', action='store_true', help='Encrypt resources')
args = parser.parse_args()
protector = AdvancedAPKProtector()
protector.anti_debug_enabled = True
protector.resources_protected = args.protect_resources
if protector.protect_apk(args.input, args.output, args.password):
print(f"APK protected successfully. Output: {args.output}")
print("Protection features applied:")
print("- Multi-layer DEX encryption")
print("- Signature preservation")
print("- Anti-debugging techniques")
print("- Tamper detection")
if args.obfuscate:
print("- Advanced code obfuscation")
if args.protect_resources:
print("- Resources protection")
else:
print("Failed to protect APK")
if __name__ == '__main__':
main()
## كيفية الاستخدام الكامل
1. تثبيت المتطلبات:
Bash:
pip install pycryptodome androguard lxml
2. تشغيل الأداة:
Bash:
python apk_shield.py input.apk output.apk your_strong_password --obfuscate --protect-resources
3. لأعلى مستوى من الحماية:
Bash:
python apk_shield.py app.apk protected.apk "My$ecureP@ssw0rd2023!" --obfuscate --protect-resources
اعطونا جاربكم حتى الكل يستفيد