الغرض من هذا المشروع هو تحليل البرامج الثابتة الخام الخام وتحديد بعض ميزاته تلقائيًا. هذه الأداة متوافقة مع جميع البنى بشكل أساسي ، فهي تقوم بإحصائيات بسيطة عليها.
الميزات الرئيسية:
أولاً ، استنساخ مستودع GIT:
git clone https://github.com/quarkslab/binbloom.git
cd binbloomلبناء أحدث إصدار (Linux فقط):
autoreconf -i
./configure
make
sudo make install binbloom firmware.binيجب أن يعطي هذا الأمر ناتجًا مثل هذا:
[i] 32-bit architecture selected.
[i] File read (20480 bytes)
[i] Endianness is LE
[i] 6 strings indexed
[i] Found 3 base addresses to test
[i] Base address seems to be 0x60000000 (not sure)
More base addresses to consider (just in case):
0x005b5000 (0)
0x0bcd0000 (0)في هذا المخرج ، يعرض السطر الثالث Endianness الممتاز ( LE ، Little-Endian) والخط السادس يعطي العنوان الممتاز ( 0x60000000 ). 6 سلاسل نصية و 3 عناوين قاعدة محتملة. إذا لم يتم تحديد الهندسة المعمارية ، فإن الهندسة المعمارية 32 بت تعتبر افتراضيًا.
القيمة بين قوسين بعد كل عنوان مرشح هي النتيجة المقابلة. كلما ارتفعت النتيجة ، كان العنوان المرجع.
binbloom -a 64 firmware.bin [i] 64-bit architecture selected.
[i] File read (327680 bytes)
[i] Endianness is LE
[i] 717 strings indexed
[i] Found 7535 base addresses to test
[i] Base address found: 0x0000000000010000.
More base addresses to consider (just in case):
0x000000000000e000 (276)
0x000000000000f000 (242)
0x0000000000011000 (175)
0x000000000000d000 (167)
0x000000000000b000 (121)
0x0000000000013000 (107)
0x0000000000012000 (100)
[...] يخبر الخيار -a Binbloom بالنظر في البرنامج الثابت 64 بت ، ويظهر الإخراج أعلاه عنوانًا أساسيًا من 0x10000.
عند التعامل مع الشركات الصغيرة (حجم أقل من 10 كيلو بايت) ، قد لا يكون اكتشاف Binbloom Endianness موثوقًا ويعطي نتيجة خاطئة تؤدي إلى عناوين قاعدة غير متوقعة. في هذه الحالة ، يمكنك استخدام خيار -e لتحديد Endianness:
binbloom -e be firmware.binثم ينتج الإخراج التالي:
[i] Selected big-endian architecture.
[i] File read (1048576 bytes)
[i] Endianness is BE
[i] 764 strings indexed
[i] Found 18615 base addresses to test
[i] Base address seems to be 0x00000000 (not sure).
More base addresses to consider (just in case):
0x3f740000 (121043)
0x7ff48000 (61345)
0x41140000 (59552)
[...]ثم يتم إجبار Endianness (في هذه الحالة على Big-Endian) ويعتمد Binbloom على هذا التكوين لتخمين العنوان الأساسي.
binbloom -a 32 -e be -b 0x0 firmware.bin [i] 32-bit architecture selected.
[i] Selected big-endian architecture.
[i] Base address 0x0000000000000000 provided.
[i] 764 strings indexed
Most probable UDS DB is located at @000ee8c8, found 7 different UDS RID
Identified structure:
struct {
code *p_field_0;
code *p_field_1;
uint32_t dw_2;
}يعتمد هذا التحليل على الاستدلال حتى يتمكن من إعطاء إيجابيات كاذبة. يجب عليك قراءة قائمة قواعد بيانات UDS المحتملة التي وجدتها Binbloom والتحقق من أي منها هي القاعدة الصحيحة ، إن وجدت. يوفر Binbloom الهيكل المحدد في ناتجه ، مما يسمح لبعض المفكرين بتحليل الذاكرة بعد إعلان الهيكل.
يمكنك تسريع عملية البحث عن العنوان الأساسي عن طريق تمكين الخيوط المتعددة مع خيار -t . بشكل افتراضي ، يتم استخدام مؤشر ترابط واحد.
binbloom -t 8 firmware.bin يتم أيضًا تنفيذ وضع البحث العميق ، مع خيار -d ، ولكنه لا يزال تجريبيًا. قد يكون هذا الوضع مفيدًا في مناسبات نادرة جدًا لأنه قد يجد عنوانًا أساسيًا صالحًا عندما لا يعمل أي شيء آخر ، ولكنه وضع أبطأ قد يستغرق بعض الوقت لإكماله.
إذا كنت تريد أن تعرض الأداة المزيد من المعلومات ، فاستخدم -v واحدة أو أكثر.
يتم توفير Binbloom بموجب ترخيص Apache 2.0.