محول Java .class إلى .cpp للاستخدام مع JNI
يدعم حاليًا Java 8 بشكل كامل فقط. ويعتبر دعم Java 9+ وAndroid تجريبيًا بالكامل
تحذير: يوصى باستخدام القائمة السوداء/القائمة البيضاء لأن هذه الأداة تؤدي إلى إبطاء التعليمات البرمجية بشكل كبير (مثل عدم تشويش ملف Minecraft .jar الكامل)
كما أن هذه الأداة لا تحجب التعليمات البرمجية الخاصة بك بشكل خاص؛ إنه ينقلها فقط إلى اللغة الأصلية. تذكر استخدام أدوات حماية مثل VMProtect أو Themida أو obfuscator-llvm (في حالة استخدام clang)
جي دي كيه 8
لنظام التشغيل Windows:
أوصي بتنزيل Oracle JDK 8، على الرغم من أنك تحتاج إلى بعض بيانات اعتماد تسجيل الدخول على Oracle.
لنظام التشغيل Linux/MacOS:
ابحث في Google عن "your distro install jdk 8"، وقم بتثبيت الحزم المطلوبة
CMake
لنظام التشغيل Windows:
قم بتنزيل الإصدار الأخير من CMake
لنظام التشغيل Linux/MacOS:
ابحث في Google عن "your distro install cmake" وقم بتثبيت الحزمة المطلوبة (افتراضي - apt/yum/brew install cmake
)
سلسلة أدوات مترجم C++/C
لنظام التشغيل Windows:
قم بتنزيل الإصدار المجاني من MSVS من Microsoft وحدد برنامج التحويل البرمجي Visual C++ في عمليات الاشتراك
أو قم بتثبيت mingw إذا كان لديك أي خبرة في هذا.
لنظام التشغيل Linux/MacOS:
جوجل "تثبيت التوزيعة الخاصة بك g ++"
Usage: native-obfuscator [-ahV] [--debug] [-b=<blackListFile>]
[--custom-lib-dir=<customLibraryDirectory>]
[-l=<librariesDirectory>] [-p=<platform>]
[--plain-lib-name=<libraryName>] [-w=<whiteListFile>]
<jarFile> <outputDirectory>
Transpiles .jar file into .cpp files and generates output .jar file
<jarFile> Jar file to transpile
<outputDirectory> Output directory
-a, --annotations Use annotations to ignore/include native obfuscation
-b, --black-list=<blackListFile>
File with a list of blacklist classes/methods for
transpilation
--custom-lib-dir=<customLibraryDirectory>
Custom library directory for LoaderUnpack
--debug Enable generation of debug .jar file (non-executable)
-h, --help Show this help message and exit.
-l, --libraries=<librariesDirectory>
Directory for dependent libraries
-p, --platform=<platform>
Target platform: hotspot - standard standalone
HotSpot JRE, std_java - java standard, android -
for Android builds (w/o DefineClass)
--plain-lib-name=<libraryName>
Plain library name for LoaderPlain
-V, --version Print version information and exit.
-w, --white-list=<whiteListFile>
File with a list of whitelist classes/methods for
transpilation
<jarFile>
- أدخل ملف .jar للتشويش
<outputDirectory>
- دليل الإخراج حيث يتم إنشاء ملف C++/new .jar
-l <librariesDirectory>
- الدليل الذي يجب أن تكون فيه المكتبات التابعة، اختياريًا، ولكنه مفضل
-p <platform>
- منصة JVM لتشغيل المكتبة عليها
تتوفر ثلاثة خيارات:
hotspot
: ستستخدم المكونات الداخلية لـ HotSpot JVM ويجب أن تعمل مع معظم أدوات التعتيم (حتى مع فحص تتبع المكدس أيضًا)std_java
: سيستخدم فقط عناصر JVM الداخلية البسيطة التي يجب أن تكون متاحة على جميع أجهزة JVMandroid
: استخدم هذه الطريقة عند إنشاء مكتبة لنظام Android. لن يتم استخدام أي عناصر داخلية لـ JVM، بالإضافة إلى عدم استخدام DefineClass للطرق المخفية (لن تعمل أدوات التشويش التي تعتمد على المكدس لأداة تشويش السلسلة/الاسم نظرًا لحقيقة أن بعض الطرق لن تكون مخفية) -a
- تمكين معالجة التعليقات التوضيحية
لاستخدام التعليقات التوضيحية لطرق/فئات القائمة السوداء/البيضاء باعتبارها native
يمكنك إضافة المكتبة التالية إلى مشروعك:
com.github.radioegor146.native-obfuscator:annotations:master-SNAPSHOT
تحتاج أيضًا إلى إضافة JitPack إلى مستودعاتك.
يمكنك إضافة تعليق توضيحي @Native
لتضمين الفئات/الطرق إلى عملية التشويش الأصلية وإضافة تعليق توضيحي @NotNative
لتجاهل الأساليب في الفئات التي تم وضع علامة @Native
عليها
تتمتع القائمة البيضاء/القائمة السوداء بأولوية أعلى من التعليقات التوضيحية.
-w <whiteList>
- المسار إلى ملف .txt للقائمة البيضاء للطرق والفئات إذا لزم الأمر
-b <blackList>
- المسار إلى ملف .txt للحصول على قائمة سوداء بالطرق والفئات إذا لزم الأمر
يجب أن يأتي كلاهما على هذا النحو:
<class>
<class>#<method name>#<method descriptor>
mypackage/myotherpackage/Class1
mypackage/myotherpackage/Class1#doSomething!()V
mypackage/myotherpackage/Class1$SubClass#doOther!(I)V
ويستخدم أسماء داخلية للفئات وواصفات الأساليب للتصفية (يمكنك قراءة المزيد عنها عن طريق البحث في Google عن "أسماء فئات Java الداخلية" أو "واصفات أساليب Java")
يمكنك أيضًا استخدام أداة مطابقة أحرف البدل مثل هذه:
mypackage/myotherpackage/*
mypackage/myotherpackagewithnested/**
mypackage/myotherpackage/*/Class1
mypackage/myotherpackagewithnested/**/Class1
mypackage/myotherpackage/Class*
*
يطابق إدخالًا واحدًا (مقسومًا على /
) في اسم الفئة/الحزمة
**
يطابق جميع الإدخالات في اسم الفئة/الحزمة
--plain-lib-name
- إذا قمت بشحن ملف .jar الخاص بك بشكل منفصل عن المكتبات الأصلية للنتيجة، أو كنت تستخدمه لنظام Android، فيمكنك تحديد اسم المكتبة الأصلية التي سيحاول البحث عنها أثناء استخدامها.
--custom-lib-dir
- إذا كنت تريد تعيين دليل مخصص لتخزين المكتبات داخل الجرة
إذا كنت ترغب في شحن .jar الخاص بك مع المكتبات الأصلية فيه، فيجب عليك حذف هذه الوسيطة، وبعد إنشاء الملفات الأصلية، قم بإضافتها في شكل
x64-windows.dll
x64-linux.so
x86-windows.dll
x64-macos.dylib
arm64-linux.so
arm64-windows.dll
إلى دليل ملف .jar الذي ستطبعه هذه الأداة في stdout
(افتراضيًا native0/
أو مخصص في حالة وجود --custom-lib-dir
)
java -jar native-obfuscator.jar <input jar> <output directory>
cmake .
في دليل نتيجة cpp
cmake --build . --config Release
في دليل cpp
الناتج لإنشاء ملف .so/.dllbuild/libs/
إلى المسار المحدد في الفقرة السابقة.java -jar <output jar>
واستمتع به!gradlew assemble
لإجبار gradle على عدم إجراء الاختبارات بعد الإنشاء أنت بحاجة إلى تثبيت Krakatau على PATH الخاص بك، لأن مجموعة الاختبار تستخدم krak2
في بعض الاختبارات
gradlew build
لتجميع وتشغيل مجموعة الاختبار الكاملةتستخدم هذه الأداة اختبارات من huzpsb/JavaObfuscatorTest
في حالة وجود أي مشكلة، لا تتردد في فتح مشكلة أو الاتصال بي على re146.dev