
منصة تحليل تجميع قابلة للتوسع لفهرسة، بحث عن المستنسخات، وتصنيف الملفات القابلة للتنفيذ باستخدام تقنيات ثابتة وديناميكية والتعلم الآلي عبر معماريات متعددة.
Kam1n0 v2.x هي منصة قابلة للتوسع لإدارة وتحليل التجميع. تتيح للمستخدم فهرسة مجموعة (كبيرة) من الملفات الثنائية في مستودعات مختلفة وتوفر خدمات تحليلية متنوعة مثل البحث عن الاستنساخ والتصنيف. تدعم الوصول متعدد المستأجرين وإدارة مستودعات التجميع باستخدام مفهوم التطبيق. تحتوي مثيلات التطبيق على مستودع حصري خاص بها وتوفر خدمة تحليلية متخصصة. بالنظر إلى تنوع مهام الهندسة العكسية، يوفر خادم Kam1n0 v2.x حالياً ثلاثة أنواع مختلفة من تطبيقات البحث عن الاستنساخ: Asm-Clone و Sym1n0 و Asm2Vec، بالإضافة إلى تصنيف الملفات القابلة للتنفيذ استنادًا إلى Asm2Vec. يمكن إضافة نوع تطبيق جديد إلى المنصة.
يمكن للمستخدم إنشاء مثيلات تطبيق متعددة. يمكن مشاركة مثيل تطبيق بين مجموعة محددة من المستخدمين. يمكن لمالك التطبيق التحكم في صلاحيات القراءة والكتابة لمستودع التطبيق وحالة التشغيل والإيقاف. يمكن لخادم Kam1n0 v2.x خدمة التطبيقات بشكل متزامن باستخدام عدة تجمعات موارد مشتركة.
تم تطوير Kam1n0 بواسطة Steven H. H. Ding و Miles Q. Li تحت إشراف Benjamin C. M. Fung من مختبر تنقيب البيانات والأمان في جامعة McGill بكندا. حصل على الجائزة الثانية في مسابقة إضافات Hex-Rays 2015. إذا وجدت Kam1n0 مفيدًا، يرجى الاستشهاد بورقة البحث الخاصة بنا:
S. H. H. Ding, B. C. M. Fung, and P. Charland. Kam1n0: MapReduce-based Assembly Clone Search for Reverse Engineering. In Proceedings of the 22nd ACM SIGKDD International Conference on Knowledge Discovery and Data Mining (SIGKDD), pages 461-470, San Francisco, CA: ACM Press, August 2016.
S. H. H. Ding, B. C. M. Fung, and P. Charland. Asm2Vec: boosting static representation robustness for binary clone search against code obfuscation and compiler optimization. In Proceedings of the 40th IEEE Symposium on Security and Privacy (S&P), 18 pages, San Francisco, CA: IEEE Computer Society, May 2019.
تحاول تطبيقات Asm-Clone حل مشكلة البحث الفعال عن الرسوم البيانية الفرعية (أي مشكلة تماثل الرسم البياني) لوظائف التجميع (متوسط وقت الاستعلام <1.3 ثانية ومتوسط وقت الفهرسة <30 مللي ثانية مع 2.3 مليون دالة). بالنظر إلى دالة مستهدفة (تلك الموجودة على اليسار كما هو موضح أدناه)، يمكنها تحديد الرسوم البيانية الفرعية المستنسخة بين الدوال الأخرى في المستودع (تلك الموجودة على اليمين كما هو موضح أدناه).
بحث عن الاستنساخ الدلالي من خلال اختبار التشويب المتباين وحل القيود. نهج هجين ديناميكي-ثابت فعال وقابل للتوسع (متوسط وقت الاستعلام <1 ثانية ومتوسط وقت الفهرسة <100 مللي ثانية مع 1.5 مليون دالة). بالنظر إلى دالة مستهدفة (تلك الموجودة على اليسار كما هو موضح أدناه)، يمكنها تحديد الرسوم البيانية الفرعية المستنسخة بين الدوال الأخرى في المستودع (تلك الموجودة على اليمين كما هو موضح أدناه). تدعم تصور الرسم البياني النحوي المجرد.
يستفيد Asm2Vec من تعلم التمثيل. يفهم العلاقة الدلالية المعجمية لكود التجميع. على سبيل المثال، ترتبط سجلات xmm* دلاليًا بعمليات المتجهات مثل addps. memcpy مشابه لـ strcpy. يوضح الرسم البياني أدناه دوال تجميع مختلفة تم تجميعها من نفس الكود المصدري لـ gmpz_tdiv_r_2exp في مكتبة libgmp. من اليسار إلى اليمين، تم تجميع دوال التجميع باستخدام خيار GCC O0 وخيار GCC O3 وخيار O-LLVM للمُشوّش Control Flow Graph Flattening وخيار LLVM للمُشوّش Bogus Control Flow Graph. يمكن لـ Asm2Vec تحديدها بشكل ثابت على أنها مستنسخات.
في هذا التطبيق، يحدد المستخدم مجموعة من فئات البرامج التي تستند إلى العلاقة الوظيفية ويوفر ملفات ثنائية تنتمي إلى كل فئة. ثم يقوم النظام تلقائيًا بتجميع الدوال في مجموعات حيث تكون الدوال متصلة بشكل مباشر أو غير مباشر بواسطة علاقة الاستنساخ. يتم الاحتفاظ بالمجموعات المميزة للتصنيف وتعمل كتوقيعات لفئاتها. بالنظر إلى ملف ثنائي مستهدف، يوضح النظام درجة انتمائه إلى كل فئة برنامج.
يوضح الشكل أدناه المكونات الرئيسية لواجهة المستخدم ووظائف Kam1n0 v2.x. نعتمد تصميمًا متوافقًا مع Material Design. بشكل عام، لكل مستخدم قائمة تطبيقات وقائمة مهام قيد التشغيل وقائمة ملفات نتائج.
يتكون الإصدار الحالي من Kam1n0 من مثبتين: الخادم الأساسي وإضافة IDA Pro.
محرك 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 الموجود في $IDA_PRO_PATH$/plugins. على سبيل المثال، على ويندوز، يمكن أن يكون المسار C:/Program Files (x86)/IDA 6.95/plugins. سيكتشف المثبت المسار ويتحقق منه.
تأكد من أن لديك إصدار Oracle من Java 11. (وليس default-jdk في apt.)
sudo add-apt-repository ppa:webupd8team/java
~webupd8team not found)، إذا كنت تستخدم بروكسي، تأكد من تعيين وتصدير متغيرات البيئة http_proxy و https_proxy، ثم حاول مرة أخرى باستخدام الخيار -E مع sudo. بالإضافة إلى ذلك، إذا كنت تواجه خطأ 'add-apt repository command not found، حاول: 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لم تعد مستودعات كود التجميع وملفات التكوين المستخدمة في الإصدارات السابقة (<2.0.0) مدعومة من قبل الإصدار الأحدث. يرجى الاتصال بنا إذا كنت بحاجة إلى ترحيل مستودعاتك القديمة.
استنساخ أحدث فرع مستقر (لا تنس --recursive!):```bash
git clone --recursive -b master2.x --single-branch https://github.com/McGill-DMaS/Kam1n0-Community
## استيراد المشروع.
IntelliJ: قم باستيراد الجذر /kam1n0/kam1n0/ كمشروع مافن. سيتم تحميل جميع الوحدات الفرعية وفقًا لذلك.
EclipseEE: أضف مستودع git المستنسخ إلى عرض git. قم باستيراد جميع مشاريع مافن من مستودع git.
قد تحتاج إلى تعديل classpath لمعالجة أي خطأ.
يتم تعديل جميع مسارات الموارد ديناميكيًا عند التشغيل داخل 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. مطلوب أيضًا وجود متصفح كروم مثبت على النظام. سيقوم كود الاختبار بتشغيل مثيل متصفح لاختبار واجهات المستخدم. ستستغرق عملية الاختبار الكاملة حوالي 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 يعتمد على النظام الأساسي. نستخدم شوكة (fork) من libvex من Angr.
نصوص بناء أكثر جدية بالإضافة إلى مثبتات windows/linux يمكن العثور عليها ضمن /kam1n0-builds/
* kam1n0: الكود المصدري للخادم.
* kam1n0-builds: كود المثبت المصدري ونصوص بناء التوزيعة.
* kam1n0-clients: الكود المصدري للعملاء.
## الإصدارات الثنائية
لدينا خادم Jenkin للتطوير والتوصيل المستمر. سيتم نشر أحدث إصدار مستقر هنا. وبشكل دوري، سنقوم بمزامنة فرعنا التجريبي الداخلي مع هذا المستودع.
## الترخيص
تم تطوير البرنامج بواسطة [Steven H. H. Ding](http://stevending.net/)، و[Miles Q. Li](http://milesqli.github.io/)، و[Benjamin C. M. Fung](http://dmas.lab.mcgill.ca/fung/) في [مختبر ماكجيل لتنقيب البيانات والأمن](http://dmas.lab.mcgill.ca/) و[مختبر أبحاث L1NNA في جامعة كوينز](https://l1nna.com/) في كندا. يتم توزيعه بموجب ترخيص Apache الإصدار 2.0. يُرجى الرجوع إلى [LICENSE.txt](https://github.com/mcgill-dmas/kam1n0-community/blob/HEAD/LICENSE.txt) للحصول على التفاصيل.
حقوق النشر 2014-2021 جامعة ماكجيل والباحثون. جميع الحقوق محفوظة.
## شكر وتقدير
-orange.svg?style=for-the-badge)





| المثبت | المكونات المضمنة | الوصف |
|---|---|---|
| Kam1n0-Server.msi | المحرك الأساسي | المحرك الرئيسي الذي يقدم خدمات الفهرسة والبحث. |
| منصة العمل | واجهة مستخدم لإدارة المستودعات والخدمة قيد التشغيل. | |
| واجهة مستخدم ويب | واجهة مستخدم ويب للبحث/الفهرسة في الملفات الثنائية ودوال التجميع. | |
| حزمة إعادة التوزيع Visual C++ لـ VS 15 | اعتمادية لـ z3. | |
| Kam1n0-IDA-Plugin.msi | الإضافة | موصلات وواجهة مستخدم. |
| عجلات PyPI لـ Cefpython | محرك العرض لواجهة المستخدم. | |
| PyPI والعجلات التابعة | إدارة الحزم لـ Python. مضمنة لـ IDA 6.8 و 6.9. |
قم بتنزيل أحدث إصدار لنظام لينكس (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 إذا كنت لا تعرف كيفية استخدام kam1n0.