چالش جرمشناسی اول - با من بخوان!
توضیحات
با من بخوان تا به تو بگویم چقدر علم فارنزیک ظریف است! پروندهی مربوط به این سوال را از اینجا بارگیری کنید.
حل چالش
گام اول
پس از بارگیری فایل در اولین گام باید نوع آن را تشخیص داد. به همین دلیل در ترمنیال دستور زیر را وارد میکنیم:
$ file bamanbekhan
bamanbekhan: data
خروجی این دستور نوع خاصی از پرونده را نشان نمیدهد و همچنین
دستور strings
نیز داده قابل توجهی ندارد!
گام دوم
بررسی سرآیند (Header) پروندهها گام بعدی حل این سوال است. از
برنامهی binwalk
استفاده میکنیم.
خروجی این دستور همانطور که در ادامه مشخص شده است، نشان میدهد
که که یک فایل سیستم از نوع Squash در این پرونده وجود دارد که
آدرس شروع آن از بایت ۴۰ است.
برای آشنایی با فایل سیستم SquashFS به صفحهی
ویکیپدیا
آن مراجعه کنید.
$ binwalk bamanbekhan
DECIMAL HEXADECIMAL DESCRIPTION
--------------------------------------------------------------------------------
40 0x28 Squashfs filesystem, little endian, version 4.0, compression:gzip, size: 15633389 bytes, 2 inodes, blocksize: 131072 bytes, created: 2020-09-07 12:10:27
گام سوم
در گام سوم فایل سیستم را از پروندهی فایل استخراج میکنیم. برای
این کار از دستور زیر استفاده میکنیم که تمام فایل را میخواند و
فقط ۴۰ بایت اول را حذف میکند. روش دیگر برای چنین کاری این است
که فایل را در یک ویرایشگر hex مانند ghex
باز کنید
و سپس ۴۰ بایت را انتخاب و حذف کنید.
$ dd if=bamanbekhan of=file.squashfs skip=40 bs=1
15634432+0 records in
15634432+0 records out
15634432 bytes transferred in 54.580951 secs (286445 bytes/sec)
پس از این کار با بررسی مجدد دستور فایل مطمئن میشویم که فایل درستی داریم:
$ file file.squashfs
file.squashfs: Squashfs filesystem, little endian, version 4.0, 15633389 bytes, 2 inodes, blocksize: 131072 bytes, created: Mon Sep 7 12:10:27 2020
در نهایت این فایل سیستم را با دستور mount
در سیستم
باز میکنیم.
$ sudo mkdir /mnt/task1
$ sudo mount file.squashfs /mnt/task1/
$ cd /mnt/task1/
$ ls -a
./ ../ zero.img
گام چهارم
پس از اینکه پروندهی zero.img را مشاهده میکنیم باز هم دستورات
file
و binwalk
را اجرا میکنیم.
$ file zero.img
zero.img: data
$ binwalk zero.img
DECIMAL HEXADECIMAL DESCRIPTION
--------------------------------------------------------------------------------
90969 0x16359 Copyright string: "copyright/trademark/acute/dieresis/.notdef/AE/Oslash"
126311 0x1ED67 Copyright string: "copyright/trademark/acute/dieresis/.notdef/AE/Oslash"
156981 0x26535 Copyright string: "copyright 16#00a9"
157000 0x26548 Copyright string: "copyrightsans 16#f8e9"
157023 0x2655F Copyright string: "copyrightserif 16#f6d9"
خروجی این دستورات مطلوب ما نیست. پس از دستور
strings
هم استفاده می کنیم و خروجی آن را بررسی
میکنیم.
گام پنجم
راه حل واقعا درست!
راه حل واقعا درست این چالش این بود که با دیدن نام این پرونده
zero.img
بررسی میکردید که آیا واقعا قابل
mount
شدن است یا خیر!
$ cp /mnt/task1/zero.img ~/tmp/
$ sudo mkdir /mnt/task1.1/
$ sudo mount ~/tmp/zero.img /mnt/task1.1/
$ cd /mnt/task1.1/
$ ls -a
./ ../ 'rand_'$'\001''.img' 'rand_'$'\003''.img' '. ' rand_ 'rand_'$'\002''.img'
سپس با بررسی این فایلها به فایل rand_
برسیم که
دستور file
برای آن به شکل زیر است:
$ file rand_
rand_: PostScript document text conforming DSC level 3.0, Level 2
و با باز کردن این فایل به عبارت
parcham{I_l0v3_fOr3n5ics_to0}
برسید.
راه حل کمی درست!
اگر نام این پرونده شما را به درستی راهنمایی نکرد، احتمالا با
دستورstrings
ادامه بدهیم و با دیدن عبارتهایی شامل
رشتههای PS-Adobe-3.0
ببینیم و به دنبال یک فایل ps
باشیم.
برای این روش، فایل را در یک ویرایشگر hex باز کنید.
سپس سرآیند مربوط به PostScript را جستوجو کنید. میتوانید از
این
پیوند
استفاده کنید. به تصاویر زیر دقت کنید، در تصویر اول سرآیند را
جستوجو کردهایم و در قسمت پایین ویرایشگر مشاهده میکنیم آدرسی
که سرآیند در آن قرار دارد، آدرس 0xd200
است. کمی
در فایل اسکرول میکنیم تا به انتهای این پروندهی PostScript
برسیم و عبارت EOF
را ببینیم. همانطور که در تصویر
دوم مشاهده میکنید انتهای این پرونده در آدرس
0x3843a
است.
در نهایت با دستور زیر یا هر روش دیگری فایل را استخراج کنید و به پرچم برسید!
$ dd if=zero.img of=file.ps bs=1 skip=53760 count=`echo 'ibase=16;3843A-D200' | bc`
راه حل کمی اشتباه!
اگر در گام اول به جای اینکه فایل اصلی را
mount
کنید، با تغییر پسوند به
zip
پرونده را از حالت فشرده خارج کنید تقریبا اشتباه
است!
یعنی در اصل سوال را شانسی حل کردهاید.