Kam1n0 v2.x عبارة عن منصة قابلة للتطوير لإدارة التجميع والتحليل. يسمح للمستخدم بفهرسة مجموعة (كبيرة) من الثنائيات أولاً في مستودعات مختلفة وتقديم خدمات تحليلية مختلفة مثل البحث عن النسخ والتصنيف. وهو يدعم الوصول متعدد المستأجرين وإدارة مستودعات التجميع باستخدام مفهوم التطبيق . يحتوي مثيل التطبيق على المستودع الحصري الخاص به ويوفر خدمة تحليلية متخصصة. بالنظر إلى تعدد استخدامات مهام الهندسة العكسية، يوفر خادم Kam1n0 v2.x حاليًا ثلاثة أنواع مختلفة من تطبيقات بحث الاستنساخ: Asm-Clone ، و Sym1n0 ، و Asm2Vec ، وتصنيف قابل للتنفيذ يعتمد على Asm2Vec . يمكن إضافة نوع تطبيق جديد إلى النظام الأساسي.
يمكن للمستخدم إنشاء مثيلات تطبيق متعددة. يمكن مشاركة مثيل التطبيق بين مجموعة محددة من المستخدمين. يمكن لمالك التطبيق التحكم في الوصول للقراءة والكتابة لمستودع التطبيقات وحالة التشغيل والإيقاف. يمكن لخادم Kam1n0 v2.x أن يخدم التطبيقات بشكل متزامن باستخدام العديد من مجموعات الموارد المشتركة.
تم تطوير Kam1n0 بواسطة ستيفن إتش إتش دينج ومايلز كيو لي تحت إشراف بنيامين سي إم فونج من مختبر استخراج البيانات والأمن في جامعة ماكجيل في كندا. لقد فاز بالجائزة الثانية في مسابقة Hex-Rays Plug-In لعام 2015. إذا وجدت Kam1n0 مفيدًا، فيرجى الاستشهاد بمقالتنا البحثية:
إس إتش إتش دينغ، بي سي إم فونغ، و بي تشارلاند. Kam1n0: استنساخ التجميع القائم على MapReduce للبحث عن الهندسة العكسية. في وقائع المؤتمر الدولي الثاني والعشرون لـ ACM SIGKDD حول اكتشاف المعرفة واستخراج البيانات (SIGKDD) ، الصفحات 461-470، سان فرانسيسكو، كاليفورنيا: مطبعة ACM، أغسطس 2016.
إس إتش إتش دينغ، بي سي إم فونغ، و بي تشارلاند. Asm2Vec: تعزيز قوة التمثيل الثابت للبحث عن الاستنساخ الثنائي ضد تشويش التعليمات البرمجية وتحسين المترجم. في وقائع ندوة IEEE الأربعين حول الأمن والخصوصية (S&P) ، 18 صفحة، سان فرانسيسكو، كاليفورنيا: جمعية IEEE للكمبيوتر، مايو 2019.
تحاول تطبيقات Asm-Clone حل مشكلة البحث الفعالة عن الرسم البياني الفرعي (أي مشكلة تماثل الرسم البياني) لوظائف التجميع (<1.3 ثانية متوسط وقت الاستعلام و<30 مللي ثانية متوسط وقت الفهرس مع 2.3 مليون وظيفة). بالنظر إلى الوظيفة المستهدفة (التي على اليسار كما هو موضح أدناه)، يمكنها تحديد الرسوم البيانية الفرعية المستنسخة من بين الوظائف الأخرى في المستودع (التي على اليمين كما هو موضح أدناه).
البحث عن الاستنساخ الدلالي عن طريق اختبار الزغب المتمايز وحل القيود. نهج هجين ديناميكي ثابت فعال وقابل للتطوير (<1 ثانية متوسط وقت الاستعلام و<100 مللي ثانية متوسط وقت الفهرس مع 1.5 مليون وظيفة). بالنظر إلى الوظيفة المستهدفة (التي على اليسار كما هو موضح أدناه)، يمكنها تحديد الرسوم البيانية الفرعية المستنسخة من بين الوظائف الأخرى في المستودع (التي على اليمين كما هو موضح أدناه). دعم تصور الرسم البياني بناء الجملة مجردة.
Asm2Vec يعزز التعلم التمثيلي. إنه يفهم العلاقة الدلالية المعجمية لرمز التجميع. على سبيل المثال، ترتبط سجلات xmm*
دلاليًا بعمليات المتجهات مثل addps
. memcpy
يشبه strcpy
. يوضح الرسم البياني أدناه وظائف التجميع المختلفة التي تم تجميعها من نفس الكود المصدري لـ gmpz_tdiv_r_2exp
في libgmp. من اليسار إلى اليمين، يتم تجميع وظائف التجميع مع خيارGC O0، وخيارGC O3، وO-LLVM obfuscator Control Flow Graph، وخيار Flattening، وخيار LLVM obfuscator Bogus Control Flow Graph. يمكن لـ Asm2Vec التعرف عليها بشكل ثابت على أنها مستنسخة.
في هذا التطبيق، يحدد المستخدم مجموعة من فئات البرامج التي تعتمد على الارتباط الوظيفي وتوفر ثنائيات تنتمي إلى كل فئة. ثم يقوم النظام تلقائيًا بتجميع الوظائف في مجموعات ترتبط فيها الوظائف بشكل مباشر أو غير مباشر عن طريق علاقة الاستنساخ. يتم الاحتفاظ بالمجموعات التمييزية للتصنيف وتكون بمثابة توقيعات لفئاتها. بالنظر إلى الهدف الثنائي، يُظهر النظام الدرجة التي ينتمي إليها كل فئة برمجية.
استخدم Asm2Vec كنموذج لحساب تشابه الوظائف
يوضح الشكل أدناه مكونات واجهة المستخدم الرئيسية ووظائف Kam1n0 v2.x. نحن نعتمد التصميم المادي. بشكل عام، كل مستخدم لديه قائمة تطبيقات، وقائمة مهام قيد التشغيل، وقائمة ملفات النتائج.
يتكون الإصدار الحالي من Kam1n0 من مثبتين: الخادم الأساسي والمكون الإضافي IDA Pro.
المثبت | المكونات المتضمنة | وصف |
---|---|---|
Kam1n0-Server.msi | المحرك الأساسي | المحرك الرئيسي الذي يقدم خدمة الفهرسة والبحث. |
منضدة | واجهة مستخدم لإدارة المستودعات وتشغيل الخدمة. | |
واجهة مستخدم الويب | واجهة مستخدم الويب للبحث/فهرسة الملفات الثنائية ووظائف التجميع. | |
Visual C++ قابل لإعادة التوزيع لـ VS 15 | التبعية لـ z3 | |
Kam1n0-IDA-Plugin.msi | البرنامج المساعد | الموصلات وواجهة المستخدم. |
عجلات PyPI لـ Cefpython | محرك العرض لواجهة المستخدم. | |
PyPI والعجلات التابعة | إدارة الحزم لبيثون. متضمن في IDA 6.8 و6.9. |
المحرك الأساسي Kam1n0 مكتوب بلغة Java فقط. أنت بحاجة إلى التبعيات التالية:
قم بتنزيل ملف Kam1n0-Server.msi
من صفحة الإصدار الخاصة بنا. اتبع التعليمات لتثبيت الخادم. سيُطلب منك تحديد مسار التثبيت. يعد IDA Pro اختياريًا إذا لم يكن الخادم مضطرًا للتعامل مع أي عملية تفكيك. بمعنى آخر، يستخدم جانب العميل البرنامج المساعد Kam1n0 لـ IDA Pro. يُقترح بشدة تثبيت IDA Pro مع خادم Kam1n0. سيكتشف خادم Kam1n0 تلقائيًا IDA Pro الخاص بك من خلال البحث عن التطبيق الافتراضي الذي استخدمته لفتح ملف .i64
.
تمت كتابة المكون الإضافي Kam1n0 IDA Pro بلغة Python للمنطق وفي HTML/JavaScript للعرض. التبعيات التالية مطلوبة لتثبيته:
بعد ذلك، قم بتنزيل برنامج التثبيت Kam1n0-IDA-Plugin.msi
من صفحة الإصدار الخاصة بنا. اتبع الإرشادات لتثبيت البرنامج الإضافي ووقت التشغيل. يرجى ملاحظة أنه يجب تثبيت المكون الإضافي في مجلد IDA Pro plugins الموجود في $IDA_PRO_PATH$/plugins
. على سبيل المثال، في نظام التشغيل Windows، يمكن أن يكون المسار هو C:/Program Files (x86)/IDA 6.95/plugins
. سيقوم المثبت باكتشاف المسار والتحقق من صحته.
تأكد من أن لديك إصدار Oracle من Java 11. (ليس jdk الافتراضي في apt.)
sudo add-apt-repository ppa:webupd8team/java
~webupd8team not found
)، إذا كنت تستخدم وكيلًا، فتأكد من تعيين متغيرات البيئة http_proxy
و https_proxy
وتصديرها، ثم حاول مرة أخرى باستخدام الخيار -E
في sudo. بالإضافة إلى ذلك، إذا كنت تتلقى خطأ "لم يتم العثور على أمر مستودع Add-apt"، فحاول: sudo apt install -y software-properties-common
.sudo apt-get update
و sudo apt-get install oracle-java8-installer
java -version
; قد تحتاج إلى تعيين متغير البيئة JAVA_HOME يدويًا (في /etc/environment
)، JAVA_HOME=/usr/lib/jvm/java-11-oracle
قم بتنزيل أحدث إصدار لنظام التشغيل Linux (Kam1n0-IDA-Plugin.tar.gz وKam1n0-Server.tar.gz) من Kam1n0-Community.
قم باستخراج كرات القطران (أي tar –xvzf Kam1n0-IDA-Plugin.tar.gz و tar –xvzf Kam1n0-Server.tar.gz)
سيقوم ملف Kam1n0-Server.tar.gz بإنشاء دليل الخادم.
داخل دليل server
، يجب أن ترى ملفًا يسمى kam1n0.properties
، حيث ستقوم بتعيين تكوينات مختلفة لـ kam1n0؛ هذا مهم جدا.
قم بتعيين kam1n0.data.path
إلى المكان الذي تريد كتابة البيانات المتعلقة بـ kam1n0 فيه. نختار وضعه في نفس المكان الذي نحتفظ فيه server
. يشير kam1n0.ida.home
إلى مكان تثبيت IDA الخاص بك. قم بالتعليق على هذا السطر (والسطر التالي kam1n0.ida.batch
) إذا لم يكن لديك IDA ولا تخطط لاستخدام kam1n0 للتفكيك. لمزيد من المعلومات (الدقيقة) حول ملف kam1n0.properties
، راجع الملف kam1n0.properties.explained
.
قم بتشغيل kam1n0-server-workbench: java -jar kam1n0-server-workbench.jar
. من المفترض أن يؤدي ذلك إلى ظهور نافذة تطالبك ببدء تشغيل kam1n0 فعليًا. بدلاً من ذلك، قم بتشغيل kam1n0-server: java -jar kam1n0-server.jar --start
. يؤدي هذا إلى بدء تشغيل الخادم من وحدة التحكم بدون نافذة.
للاتصال واستخدامه، انتقل إلى 127.0.0.1:8571
(المنفذ الافتراضي الذي يستمع إليه kam1n0 يجب أن يكون 8571، ولكن يمكن تغييره في kam1n0.properties) في متصفحك. يجب أن تشاهد واجهة مستخدم الويب kam1n0 الجميلة. من هناك، اتبع البرنامج التعليمي الموجود على Kam1n0-Community repo إذا كنت لا تعرف كيفية استخدام kam1n0.
لم تعد مستودعات تعليمات التجميع وملفات التكوين المستخدمة في الإصدارات السابقة (<2.0.0) مدعومة بواسطة الإصدار الأحدث. يرجى الاتصال بنا إذا كنت بحاجة إلى ترحيل مستودعاتك القديمة.
استنساخ أحدث فرع مستقر (لا تنس --recursive
!):
git clone --recursive -b master2.x --single-branch https://github.com/McGill-DMaS/Kam1n0-Community
IntelliJ: قم باستيراد الجذر /kam1n0/kam1n0/ كمشروع مخضرم. سيتم تحميل جميع الوحدات الفرعية وفقًا لذلك. EclipseEE: أضف مستودع git المستنسخ إلى عرض git. قم باستيراد كافة المشاريع المخضرمة من مستودع git. قد تحتاج إلى تعديل مسار الفصل لمعالجة أي خطأ. يتم تعديل جميع مسارات الموارد ديناميكيًا عند التشغيل داخل IDE (من خلال الوحدة الفرعية kam1n0-resources).
لبناء المشروع:
cd /kam1n0/kam1n0
mvn -DskipTests clean package
mvn -DskipTests package
يمكن العثور على الثنائيات الناتجة في /kam1n0/build-bins/
لتشغيل رمز الاختبار، ستحتاج أولاً إلى تنزيل chromedriver.exe
من http://chromedriver.chromium.org/ وإضافة مساره المطلق إلى متغير بيئة يسمى webdriver.chrome.driver
. مطلوب أيضًا أن يكون هناك متصفح Chrome مثبتًا في النظام. سيقوم رمز الاختبار بتشغيل مثيل المتصفح لاختبار واجهات واجهة المستخدم. سيستغرق إجراء الاختبار الكامل حوالي 3 ساعات.
cd /kam1n0/kam1n0
mvn -DskipTests clean package # you can skip this one if you already built the package
mvn -DskipTests package # you can skip this one if you already built the package
mvn -DforkMode=never test
تقوم هذه الأوامر فقط بتجميع جافا باستخدام عجلات libvex وz3 المترجمة مسبقًا. إنه يعمل خارج الصندوق. يعتمد إنشاء libvex وz3 على النظام الأساسي. نستخدم شوكة libvex من Angr. يمكن العثور على نصوص البناء الأكثر جدية بالإضافة إلى المثبتات لنظام التشغيل Windows/Linux ضمن /kam1n0-builds/
لدينا خادم Jenkin للتطوير المستمر والتسليم. سيتم نشر أحدث إصدار مستقر هنا. سنقوم بشكل دوري بمزامنة فرعنا التجريبي الداخلي مع هذا المستودع.
تم تطوير البرنامج بواسطة ستيفن إتش إتش دينج ومايلز كيو لي وبنجامين سي إم فونج في مختبر ماكجيل لتعدين البيانات وأمنها ومختبر أبحاث كوينز L1NNA في كندا. يتم توزيعه بموجب ترخيص Apache الإصدار 2.0. يرجى الرجوع إلى LICENSE.txt للحصول على التفاصيل.
حقوق الطبع والنشر 2014-2021 جامعة ماكجيل والباحثين. جميع الحقوق محفوظة.