
RetDec هو مفكك تعليمات برمجية آلي قابل لإعادة التوجيه مبني على LLVM.
تحذير
مشروع RetDec حاليًا في وضع الصيانة المحدودة بسبب نقص الموارد:
- طلبات السحب (Pull Requests) مرحب بها. يتم مراجعتها بأولوية، إن أمكن دون تأخير.
- يتم الرد على المشكلات (Issues) مع تأخير يصل إلى ربع سنة. لا يتم حل المشكلات بنشاط إلا إذا كانت تتعلق بصيانة المشروع الأساسية.
- تستمر الصيانة الأساسية للمشروع.
- يتم تطوير محدود جدًا فقط.
RetDec هو مفكك كود آلة قابل لإعادة الاستهداف مبني على LLVM.
ليس المفكك مقيدًا بأي بنية معمارية مستهدفة أو نظام تشغيل أو تنسيق ملف قابل للتنفيذ:
الميزات:
لمزيد من المعلومات، طالع
هناك طريقتان للحصول على وتثبيت RetDec:
retdec/share/retdec/README.md بعد فك الضغط.ندعم حاليًا Windows (7 أو أحدث)، Linux، macOS، و (بشكل تجريبي) FreeBSD. تتطلب النسخة المثبتة من RetDec ما يقرب من 5 إلى 6 جيجابايت من مساحة القرص الحرة.
يرجى التأكد من قراءة التعليمات المقابلة لإصدار RetDec المستخدم. إذا كنت غير متأكد، راجع ملف retdec/share/retdec/README.md في التثبيت.
بعد تثبيت RetDec، قم بتثبيت Microsoft Visual C++ Redistributable لـ Visual Studio 2017.
قم بتثبيت البرامج التالية:
لفك ترجمة ملف ثنائي باسم test.exe، قم بتشغيل
$RETDEC_INSTALL_DIR\bin\retdec-decompiler.exe test.exe
لمزيد من المعلومات، قم بتشغيل retdec-decompiler.exe مع --help.
بعد تثبيت RetDec، قم بتثبيت الحزم التالية عبر مدير الحزم في توزيعتك:
لفك ترجمة ملف ثنائي باسم test.exe، قم بتشغيل
$RETDEC_INSTALL_DIR/bin/retdec-decompiler test.exe
لمزيد من المعلومات، قم بتشغيل retdec-decompiler مع --help.
بعد تثبيت RetDec، قم بتثبيت الحزم التالية:
لفك ترجمة ملف ثنائي باسم test.exe، قم بتشغيل
$RETDEC_INSTALL_DIR/bin/retdec-decompiler test.exe
لمزيد من المعلومات، قم بتشغيل retdec-decompiler مع --help.
لا توجد حاليًا حزم "ports" مبنية مسبقًا لـ FreeBSD. ستحتاج إلى بناء وتثبيت المفكك بنفسك. العملية موصوفة أدناه.
لفك ترجمة ملف ثنائي باسم test.exe، قم بتشغيل
$RETDEC_INSTALL_DIR/bin/retdec-decompiler test.exe
لمزيد من المعلومات، قم بتشغيل retdec-decompiler مع --help.
يمكنك استخدام مكتبات RetDec المختلفة بسهولة في مشاريعك - إذا كانت مبنية باستخدام CMake. يحتوي تثبيت RetDec على جميع الرؤوس والمكتبات وملفات CMake الضرورية.
إذا قمت بتثبيت RetDec في موقع تثبيت قياسي لنظامك (مثل /usr، /usr/local)، كل ما عليك فعله لاستخدام مكوناته هو:```cmake
find_package(retdec 5.0 REQUIRED
COMPONENTS
[...]
)
target_link_libraries(your-project
PUBLIC
retdec::
[...]
)
إذا لم تقم بتثبيت RetDec في مكان يمكن اكتشافه تلقائياً، فستحتاج إلى مساعدة CMake في العثور عليه قبل استخدام `find_package()`. هناك طريقتان عامتان للقيام بذلك (اختر واحدة فقط واستخدمها):
1. أضف دليل تثبيت RetDec إلى [`CMAKE_PREFIX_PATH`](https://cmake.org/cmake/help/latest/variable/CMAKE_PREFIX_PATH.html):
```cmake
list(APPEND CMAKE_PREFIX_PATH ${RETDEC_INSTALL_DIR})
```
2. عيّن المسار إلى نصوص CMake المثبتة لـ RetDec إلى `retdec_DIR`:
```cmake
set(retdec_DIR ${RETDEC_INSTALL_DIR}/share/retdec/cmake)
```
راجع صفحة [نظرة عامة على المستودع](https://github.com/avast/retdec/wiki/Repository-Overview) في الويكي للحصول على قائمة بمكونات RetDec المتاحة، أو [retdec-build-system-tests](https://github.com/avast/retdec-build-system-tests) للحصول على عروض توضيحية حول كيفية استخدامها.
## البناء والتثبيت
يصف هذا القسم بناء وتثبيت محلي لـ RetDec. ترد تعليمات Docker في القسم التالي.
### المتطلبات
#### لينكس
* مترجم C++ ومكتبة C++ قياسية تدعم C++17 (مثل GCC >= 7)
* [CMake](https://cmake.org/) (الإصدار >= 3.6)
* [Git](https://git-scm.com/)
* [OpenSSL](https://www.openssl.org/) (الإصدار >= 1.1.1)
* [Python](https://www.python.org/) (الإصدار >= 3.4)
* [autotools](https://en.wikipedia.org/wiki/GNU_Build_System) ([autoconf](https://www.gnu.org/software/autoconf/autoconf.html)، [automake](https://www.gnu.org/software/automake/)، و [libtool](https://www.gnu.org/software/libtool/))
* [pkg-config](https://www.freedesktop.org/wiki/Software/pkg-config/)
* [m4](https://www.gnu.org/software/m4/m4.html)
* [zlib](http://zlib.net/)
* اختياري: [Doxygen](http://www.stack.nl/~dimitri/doxygen/) و [Graphviz](http://www.graphviz.org/) لتوليد وثائق API
على التوزيعات المبنية على Debian (مثل Ubuntu)، يمكن تثبيت الحزم المطلوبة باستخدام `apt-get`:```sh
sudo apt-get install build-essential cmake git openssl libssl-dev python3 autoconf automake libtool pkg-config m4 zlib1g-dev upx doxygen graphviz
على توزيعات RPM (مثل Fedora)، يمكن تثبيت الحزم المطلوبة باستخدام dnf:```sh
sudo dnf install gcc gcc-c++ cmake make git openssl openssl-devel python3 autoconf automake libtool pkg-config m4 zlib-devel upx doxygen graphviz
على Arch Linux، يمكن تثبيت الحزم المطلوبة باستخدام `pacman`:```sh
sudo pacman --needed -S base-devel cmake git openssl python3 autoconf automake libtool pkg-config m4 zlib upx doxygen graphviz
يُفضل تثبيت الحزم عبر Homebrew.
يجب تثبيت الحزم عبر مستودع الحزم المجمعة مسبقاً لـ FreeBSD باستخدام الأمر pkg أو بناؤها من الصفر باستخدام طريقة قاعدة بيانات ports.
pkg install cmake python37 git autotools
أوportsnap fetchportsnap extractcmake سيكون
whereis cmakecd /usr/ports/devel/cmakemake install cleanملاحظة: على الرغم من أن RetDec يدعم الآن التثبيت على مستوى النظام (#94)، إلا أنه ما لم تستخدم مدير حزم توزيعة Linux لتثبيته، فإننا نوصي بتثبيت RetDec محلياً في دليل مخصص. السبب في ذلك هو أن إلغاء التثبيت سيكون أسهل حيث ستحتاج فقط إلى إزالة دليل واحد. لإجراء تثبيت محلي، قم بتشغيل cmake مع المعامل -DCMAKE_INSTALL_PREFIX=<path>، حيث <path> هو الدليل الذي سيتم تثبيت RetDec فيه (مثل $HOME/projects/retdec-install على Linux وmacOS، و C:\projects\retdec-install على ويندوز).
git clone https://github.com/avast/retdeccd retdecmkdir build && cd buildcmake .. -DCMAKE_INSTALL_PREFIX=<path>make -jN (N هو عدد العمليات المستخدمة للبناء المتوازي، عادةً عدد النوى + 1 يعطي أسرع وقت ترجمة)make installcmd.exe)cd retdecmkdir build && cd buildcmake .. -DCMAKE_INSTALL_PREFIX=<path> -G<generator>cmake --build . --config Release -- -mيجب تمرير المعاملات التالية إلى cmake:
-DCMAKE_INSTALL_PREFIX=<path> لتعيين مسار التثبيت إلى <path>. ضع علامات الاقتباس حول المسار إذا كنت تستخدم الشرطة المائلة العكسية على ويندوز (مثل -DCMAKE_INSTALL_PREFIX="C:\retdec").-G<generator> هو -G"Visual Studio 15 2017" للبناء 32 بت باستخدام Visual Studio 2017، أو -G"Visual Studio 15 2017 Win64" للبناء 64 بت باستخدام Visual Studio 2017. يمكن استخدام إصدارات أحدث من Visual Studio.يمكنك تمرير المعاملات الإضافية التالية إلى cmake:
-DRETDEC_DOC=ON للبناء مع توثيق API (يتطلب Doxygen و Graphviz، معطل افتراضياً).-DRETDEC_TESTS=ON للبناء مع الاختبارات (معطل افتراضياً).-DRETDEC_DEV_TOOLS=ON للبناء مع أدوات التطوير (معطل افتراضياً).-DRETDEC_COMPILE_YARA=OFF لتعطيل تجميع قواعد YARA في خطوة التثبيت (مفعل افتراضياً).-DCMAKE_BUILD_TYPE=Debug للبناء مع معلومات التصحيح، وهو مفيد أثناء التطوير. افتراضياً، يُبنى المشروع في وضع Release. هذا ليس له تأثير على ويندوز، ولكن يمكن تحقيق نفس الشيء بتشغيل cmake --build . مع المعامل --config Debug.-D<dep>_LOCAL_DIR=<path> حيث <dep> من {CAPSTONE, GOOGLETEST, KEYSTONE, LLVM, YARA, YARAMOD} (مثل -DCAPSTONE_LOCAL_DIR=<path>) لاستخدام نسخة المستودع المحلية عند لاعتماديات RetDec بدلاً من تنزيل نسخة جديدة في وقت البناء. يمكن استخدام عدة خيارات من هذا النوع في نفس الوقت.دعم Docker يتم صيانته من قبل المجتمع. إذا كان هناك شيء لا يعمل لديك أو لديك اقتراحات للتحسين، افتح مشكلة (issue) أو طلب سحب (PR).
البناء في Docker لا يتطلب تثبيت المكتبات المطلوبة محلياً. هذا خيار جيد لتجربة RetDec دون إعداد سلسلة أدوات البناء الكاملة.
لبناء صورة Docker الخاصة بـ RetDec، قم بتشغيل``` docker build -t retdec - < Dockerfile
يؤدي هذا إلى بناء الصورة من فرع master لهذا المستودع.
لبناء الصورة باستخدام النسخة المحلية من المستودع، استخدم Dockerfile التطويري، `Dockerfile.dev`:```
docker build -t retdec:dev . -f Dockerfile.dev
إذا لم يكن uid الخاص بك هو 1000، فتأكد من أن الدليل الذي يحتوي على ملفاتك الثنائية المدخلة يمكن الوصول إليه بواسطة RetDec:```
chmod 0777 /path/to/local/directory
الآن، يمكنك تشغيل أداة التفكيك داخل حاوية:```
docker run --rm -v /path/to/local/directory:/destination retdec retdec-decompiler /destination/binary
ملاحظة: لا تقم بتعديل جزء /destination. كل ما عليك فعله هو تغيير /path/to/local/directory. سيتم بعد ذلك إنشاء ملفات الإخراج إلى /path/to/local/directory.
نقوم بإنشاء حزم RetDec المحدثة من أحدث commit في فرع master بطريقتين:
هذه الإصدارات مخصصة بشكل أساسي لمطوري RetDec والمساهمين والأشخاص الآخرين الذين يجربون المنتج (على سبيل المثال، اختبار ما إذا كانت مشكلة موجودة في الإصدار الرسمي لا تزال موجودة في الفرع master الحالي).
يمكنك استخدامها كما تشاء، ولكن ضع في اعتبارك أنه لا توجد ضمانات بأنها ستعمل على نظامك (خاصة إصدار Linux)، وأن احتمالية وجود تراجعات واردة. للحصول على إصدار مستقر من RetDec، إما قم بتنزيل أحدث حزمة رسمية مسبقة البناء أو قم ببناء آخر علامة إصدار لـ RetDec.
TeamCity
إجراءات GitHub
يمكنك العثور على إصدارات لنظامي macOS وLinux وWindows في أحدث تشغيل لسير عمل RetDec CI.
اطلع على توثيق المشروع للحصول على مرجع برمجي محدث تم إنشاؤه بواسطة Doxygen يتوافق مع أحدث commit في فرع master.
.dsm).حقوق الطبع والنشر (c) 2017 Avast Software، مرخص بموجب ترخيص MIT. راجع ملف LICENSE لمزيد من التفاصيل.
يحتوي RetDec على مكتبة PeLib معدلة. الوحدات الجديدة التي أضافتها Avast Software مرخصة بموجب ترخيص MIT. المصادر الأصلية مرخصة بموجب الترخيص التالي:
LICENSE-PELIB لمزيد من التفاصيل.يستخدم RetDec مكتبات تابعة لجهات خارجية أو موارد أخرى مدرجة، إلى جانب تراخيصها، في ملف LICENSE-THIRD-PARTY.
راجع إرشادات المساهمة في RetDec.
هذا البرنامج مدعوم من تمويل البحث TACR (وكالة التكنولوجيا في جمهورية التشيك)، برنامج ALFA رقم TA01010667.
cmake --build . --config Release --target installretdec.sln الذي تم إنشاؤه بواسطة cmake في بيئة Visual Studio IDEcd retdecmkdir build && cd buildcmake .. -DCMAKE_INSTALL_PREFIX=<path>make -jN (N هو عدد العمليات المستخدمة للبناء المتوازي، عادةً عدد النوى + 1 يعطي أسرع وقت ترجمة)make installsudo pkg install git cmakegit clone https://github.com/avast/retdeccd retdecmkdir build && cd build# FreeBSD (and other BSDs) do need cmake, python3, git, autotools. OpenSSL is pre-installed in the OS but check its version.
# Later versions may be available for each of the packages.
# See what is installed:
sudo pkg info cmake python37 autotools
# Install/upgrade them:
sudo pkg install cmake python37 autotools
cmake .. -DCMAKE_INSTALL_PREFIX=<path>make -jN (N هو عدد العمليات المستخدمة للبناء المتوازي، عادةً عدد النوى + 1 يعطي أسرع وقت ترجمة)make install<path>-DRETDEC_ENABLE_<component>=ON لبناء المكون(ات) المحدد فقط (يمكن استخدام عدة خيارات من هذا النوع دفعة واحدة)، وتبعياته (تبعياتها). افتراضياً، تُبنى جميع المكونات. إذا تم تمكين مكون واحد على الأقل عبر هذه الآلية، فلن تُبنى جميع المكونات الأخرى التي لم يتم تمكينها صراحة (وليست مطلوبة كتبعيات للمكونات الممكّنة). انظر cmake/options.cmake لجميع خيارات المكونات المتاحة.
-DRETDEC_ENABLE_ALL=ON يمكن استخدامه لتمكين (إعادة تمكين) جميع المكونات.-DRETDEC_ENABLE=<قائمة مكونات مفصولة بفواصل> بدلاً من -DRETDEC_ENABLE_<component>=ON (مثل -DRETDEC_ENABLE=fileformat,loader,ctypesparser يعادل -DRETDEC_ENABLE_FILEFORMAT=ON -DRETDEC_ENABLE_LOADER=ON -DRETDEC_ENABLE_CTYPESPARSER=ON).