Delphihelper هو مكون إضافي Python Ida Pro يهدف إلى المساعدة في تحليل ثنائيات X86/x86_64 المكتوبة بلغة برمجة دلفي.
نسخ دليل DelphiHelper و DelphiHelper.py داخل دليل IDA المكون الإضافي:
%APPDATA%Hex-RaysIDA Proplugins$HOME/.idapro/plugins/ قم بتنزيل ملفات قاعدة المعرفة IDR يدويًا عن طريق اتباع الإرشادات الواردة أدناه أو تشغيل البرنامج النصي setup_IDRKB.py .
ملاحظة : مطلوب تثبيت
py7zrلتشغيل البرنامج النصي الإعداد:pip install py7zr
يجب أن يكون Delphihelper متوافقًا مع IDA 8.4 وبعد ذلك على Windows و MacOS و GNU/Linux.
من أجل استخدام البرنامج المساعد Delphihelper ، يجب تحميل قسم الموارد في IDA. يمكن تحقيق ذلك عن طريق التحقق من موارد تحميل المربع أو مع الخيار -R في مفتاح سطر الأوامر.
ملاحظة : يجب الانتهاء من التحليل التلقائي IDA قبل استخدام البرنامج المساعد.
<Alt-Shift-H> : مساعدة الطباعة<Alt-Shift-R> : Run VMT Parser<Alt-Shift-F> : Run DFM Finder (إظهار نافذة عارض نموذج Delphi)<Alt-Shift-E> : finder function point point run<Alt-Shift-S> : قم بتشغيل تحميل قاعدة المعرفة IDR لـ SysInit ووحدة System<Alt-Shift-A> : قم بتشغيل تحميل قاعدة المعرفة IDR للوحدات المحددة Hotkey : <Alt-Shift-R>
يجب تنفيذ محلل جدول الطريقة الافتراضية (VMT) مع المؤشر على عنوان البداية لهيكل VMT. يمكن تحديد موقع هذا الهيكل عن طريق البحث في الوظائف المسمى CreateForm و CreateObject وما إلى ذلك ؛ بمجرد العثور على الوظيفة ، يجب أن تكون الوسيطة الأخيرة هي بنية VMT.
في معظم الحالات ، هناك تسلسل من تعليمين:
mov <register>, <VMTStructureOffset>
call CreateForm
على سبيل المثال:
مرة واحدة على الهيكل (VMTStureFfset على سبيل المثال off_664A8C ) ، اضغط على <Enter> :
اضغط على مفتاح Hotkey <Alt-Shift-R> . النتيجة تبدو أدناه:
يحتوي بنية VMT على الكثير من المعلومات المفيدة المخزنة في جداول RTTI المختلفة. الأكثر إثارة للاهتمام هي:
يقوم محلل VMT تلقائيًا باستخراج البيانات من تلك الجداول ويخزنها في التعدادات والهياكل IDA.
يقوم جدول الحقل بتخزين اسم ونوع وإزاحة لكل حقل منشور. يستخلص محلل VMT ويحفظ كل هذه الإدخالات لكل بنية VMT في تعداد IDA:
التعدادات التي تم إنشاؤها بواسطة محلل VMT لها تنسيق التالي: %ObjectName%_Fields . تحتوي أسماء إدخالات التعداد على هذا التنسيق: %ObjectName%_%FieldType%_%FieldName% :
يمكن تسمية الإدخالات من التعدادات التي أنشأتها محلل VMT عن طريق الضغط على اختصار IDA المدمج <M> ، وتستخدم لتسمية الثوابت الرمزية.
قبل
بعد
يخزن جدول الأسلوب الافتراضي مؤشرات لجميع الأساليب الافتراضية التي تم الإعلان عنها لفئة وفئاتها الأساسية:
يستخلص محلل VMT مؤشرات من VMT ويوفرها في بنية IDA التي يسمى بنية VMT المحلية. أسماء إدخالات الهيكل لها التنسيق التالي: %MethodName%_%MethodOffset% :
يمكن بعد ذلك تسمية إدخالات الهياكل التي أنشأها محلل VMT عن طريق الضغط على اختصار IDA المدمج <T> ، وتستخدم لتسمية الإزاحة.
قبل
بعد
يقوم جدول الأسلوب بتخزين أسماء ومؤشرات الأساليب المنشورة. يحتوي جدول الطريقة أيضًا على مؤشرات من معالجات أحداث Delphi التي يمكن العثور عليها والوصول إليها من عارض نموذج Delphi (لمزيد من المعلومات ، انظر DFM Finder)
Hotkey : <Alt-Shift-F
يحاول Finder DFM العثور على جميع DFMs المخزنة في قسم الموارد من Delphi Binary الذي تم تحليله وبعد ذلك يدير محلل VMT على جميع هياكل VMT المرتبطة بـ DMFs الموجودة. بعد معالجة جميع هياكل VMT ، يتم عرض عرض IDA تفاعلي جديد ( عارض نموذج Delphi ). تُظهر العرض الفرعي عرضًا شجرة لأوصاف نموذج Delphi المستخرجة من DFM:
تمثل العقد الغامقة المكونات التي تحتوي على بعض الأحداث Delphi. اتبع هذه العقد الجريئة أعمق في الشجرة الفرعية حتى تكتشف عقدة Properties BOLD ، حيث يمكنك العثور على حدث Delphi باللون الأزرق. من خلال النقر على عنصر الحدث ، يتم نقلك إلى معالج الأحداث المقابل في نافذة تفكيك IDA.
تمثل العقد الخضراء مكونات لها بعض الملفات الثنائية المضمنة. اتبع هذه العقد الخضراء أعمق في الشجرة الفرعية حتى تكتشف عقدة Properties الخضراء ، حيث يمكنك العثور على عنصر بالألوان الأخضر. يعرض العنصر مسارًا ملفًا للملف الثنائي المدمج الذي تم إسقاطه بواسطة DFM Finder . يقع دليل الوجهة الفرعية للملفات المستخرجة في دليل عمل IDA الحالي وله التنسيق التالي: %IDAWorkingDirectory%_extracted_%BinaryFileName%
انقر على عقدة الجذر (النموذج) في نافذة عارض نموذج Delphi تنقلك إلى بنية VMT للنموذج في نافذة تفكيك IDA.
Hotkey : <Alt-Shift-E>
يحاول Finder Point Point Funder العثور على وظائف نقطة الدخول المحتملة من خلال البحث عن مراجع لمكالمات CreateFrom و InitExe و InitLib . يتم عرض النتائج في نافذة إخراج IDA ، على سبيل المثال:
مفاتيح hots : <Alt-Shift-S> و <Alt-Shift-A>
IDR Base Base Loader يحمل توقيعات IDR KB من ملفات KB. يتوقع المكون الإضافي تخزين ملفات KB في الموقع التالي:
على Windows: %APPDATA%Hex-RaysIDA PropluginsDelphiHelperIDR_KB
على macos/linux: $HOME/.idapro/plugins/DelphiHelper/IDR_KB/
<Alt-Shift-S> تحميل توقيعات الوظائف لـ SysInit فقط System
يحاول <Alt-Shift-A> تحميل توقيعات الوظائف لجميع الوحدات المحددة من قائمة الوحدات المستوردة.
ملاحظة : يتم تنزيل ملفات KB من مشروع IDR:
https://github.com/crypto2011/idr
https://github.com/crypto2011/idr64
مشروع IDR مرخص بموجب ترخيص معهد ماساتشوستس للتكنولوجيا:
MIT License
Copyright (c) 2006-2018 crypto
Permission is hereby granted, free of charge, to any person obtaining a copy
of this software and associated documentation files (the "Software"), to deal
in the Software without restriction, including without limitation the rights
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
copies of the Software, and to permit persons to whom the Software is
furnished to do so, subject to the following conditions:
The above copyright notice and this permission notice shall be included in all
copies or substantial portions of the Software.
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
SOFTWARE.
قم بتنزيل ونسخ ملفات KB التالية في DelphiHelperIDR_KBIDR64 directory:
https://github.com/crypto2011/idr64/blob/master/syskb2012.bin
https://github.com/crypto2011/idr64/blob/master/syskb2013.bin
https://github.com/crypto2011/idr64/blob/master/syskb2014.bin
قم بتنزيل واستخراج ملفات KB في DelphiHelperIDR_KBIDR directory:
https://github.com/crypto2011/idr/blob/master/kb2005.7z
https://github.com/crypto2011/idr/blob/master/kb2006.7z
https://github.com/crypto2011/idr/blob/master/kb2007.7z
https://github.com/crypto2011/idr/blob/master/kb2009.7z
https://github.com/crypto2011/idr/blob/master/kb2010.7z
https://github.com/crypto2011/idr/blob/master/kb2011.7z
https://github.com/crypto2011/idr/blob/master/kb2012.7z
https://github.com/crypto2011/idr/blob/master/kb2013.7z
https://github.com/crypto2011/idr/blob/master/kb2014.7z