S/۰۳ · خدمات
مهندسی معکوس
وقتی مستندات همراه فروشنده رفت.
باینریها، اپهای اندروید، پروتکلها، فرمتهای فایل و سیستمهای قدیمی بیمستند — باز میشوند، فهمیده و توضیح داده میشوند تا بتوانید با آنها یکپارچه شوید، جایگزینشان کنید یا سرپا نگهشان دارید.
- اهداف
- باینری، اپ اندروید، پروتکل، فریمور، فرمت
- تحویلی
- یافتهها، مشخصات، کد کارا
- همیشه
- روی سیستمهایی که مالکشان هستید
- ۰۱
فروشنده ناپدید شد و مستندات را هم با خودش برد.
- ۰۲
باید با دستگاه، اپ یا سیستمی حرف بزنید که API عمومی ندارد.
- ۰۳
یک سیستم قدیمی کار میکند، ولی کسی نمیداند چطور.
- ۰۴
میخواهید بدانید یک نرمافزار واقعاً چه میکند.
- D/۰۱
مشخصات پروتکل
ترافیک میان یک دستگاه یا برنامه و طرف مقابلش را ضبط میکنیم و از روی بایتها، تکتک پیامها، فیلدها و حالتها را بیرون میکشیم. نتیجه مشخصاتی است که برنامهنویسهایتان میتوانند بر اساسش پیادهسازی کنند، همراه با ضبطهای واقعی به عنوان مدرک.
شامل
- ساختار فریم، بایتبهبایت، با نوع هر فیلد
- همهی انواع پیام، و پاسخی که هر کدام انتظار دارد
- ماشین حالت: چه چیزی کی مجاز است
- checksumها، کدگذاریها و هر رمزنگاریای که به کار رفته
docs/protocol/kiosk-v2.md پروتکل کیوسک v2 · TCP 5020
بازیابیشده از ۲۱۲ نشست ضبطشده · ویرایش ۳
فریم
- 0x02 · length u16 BE · type u8 · payload · crc16 · 0x03
پیامها
- 0x10 HELLO → 0x11 HELLO_ACK: شناسهی دستگاه، نسخهی فریمور.
- 0x20 TICKET_REQ → 0x21 TICKET: شماره، باجه، زمان.
حالتها
- IDLE → AUTH → READY. یک checksum نادرست آن را به IDLE برمیگرداند.
کد کنترلی
- CRC-16/CCITT روی type و payload، با مقدار اولیهی 0xFFFF.
- D/۰۲
اپلیکیشنهای اندروید (APK)
اپ را دیکامپایل میکنیم، کتابخانههای نیتیوش را میخوانیم و ترافیکش را روی یک گوشی آزمایشی زیر نظر میگیریم، حتی با سنجاقکردن گواهی. APIای که با آن حرف میزند به شکل مشخصات مکتوب تحویل میگیرید، همراه با آنچه روی گوشی ذخیره میکند و آنچه میفرستد؛ تا بتوانید با آن یکپارچه شوید، کدی را که از دست رفته بازیابی کنید یا ببینید اپ خودتان چه چیزی را در معرض میگذارد.
شامل
- کد دیکامپایلشده، نقشهبرداری و حاشیهنویسیشده، همراه کتابخانههای .so
- API اپ، بازیابیشده از ترافیک واقعی و مکتوب به شکل OpenAPI
- آنچه روی دستگاه ذخیره میکند و میفرستد، و به کجا
- یادداشتهای امنیتی: کلیدهای داخل کد، رمزنگاری ضعیف، اجزای در معرض
analysis/com.example.queue · v4.2.0 $ apktool d queue-4.2.0.apk -o out/
✓ 3 dex files · 2 native libs (arm64-v8a)
$ jadx -d src/ queue-4.2.0.apk
! obfuscated with R8 · names restored from strings: 412
$ frida -U -f com.example.queue -l unpin.js
✓ certificate pinning bypassed on the test device
→ POST /api/v3/tickets {branch_id, service, phone}
→ GET /api/v3/queue/12 polling every 5 s
! API key hard-coded in libnative.so
✓ 14 endpoints written to docs/api/openapi.yaml
- D/۰۳
مستندسازی فرمت
فایلها و پایگاههای دادهی سیستمهای بسته را فیلدبهفیلد باز میکنیم: جای هر فیلد، نوعش، کدگذاریاش و معنای هر پرچم. وقتی فرمت مکتوب شد، دادههایتان دیگر در نرمافزار یک فروشنده زندانی نیست.
شامل
- نقشهی فیلدها با offset، اندازه و نوع
- کدگذاری متنها و فرمت تاریخها، شناساییشده
- حالتهای خاص: رکوردهای حذفشده، پرکنندهها، نسخههای قدیمیتر
- پارسری که فایلهای نمونهی واقعی را میخواند
docs/formats/sched-dat.md Offset اندازه نوع معنا 0x00 ۴ char[4] امضای فایل، همیشه SCH1 0x04 ۲ u16 LE تعداد رکوردها 0x10 ۴ u32 LE تاریخ، به روز از ۱ ژانویهی ۱۹۰۰ 0x14 ۲ u16 LE ساعت، به دقیقه از نیمهشب 0x16 ۴۰ cp1256 نام بیمار، با فاصله پر شده 0x3E ۱ flags ۱ رزرو · ۲ حاضر · ۴ لغو - D/۰۴
گزارش رفتار
نرمافزار را در محیطی کنترلشده اجرا میکنیم و هر کاری که میکند را ثبت میکنیم: به چه فایلهایی دست میزند، به چه سرورهایی وصل میشود، چه میفرستد و چه نگه میدارد. هر ادعای گزارش همراه با ضبط یا traceای است که نشانش میدهد.
شامل
- ترافیک شبکه: مقصدها، زمانبندی و محتوا
- فایلها، کلیدهای رجیستری و پایگاههای دادهی محلی که استفاده میکند
- هر چیزی که دربارهی کاربران یا دستگاههایتان بیرون میفرستد
- ضبطها و traceها، پیوستشده به عنوان مدرک
captures/agent-trace.log $ mitmdump -w agent.flow --mode transparent
POST telemetry.vendor.example/v1/u · every 15 min
body: hostname, MAC address, installed software
$ frida -f agent.exe -l trace-files.js
open C:\ProgramData\Agent\cache.db (read/write)
! cache.db holds patient names in plain text
✓ 14 behaviours documented, each with a capture
- D/۰۵
کد سازگار
درستی یافتهها را با نوشتن کدی ثابت میکنیم که با سیستم واقعی حرف میزند. یک کتابخانه و یک ابزار خط فرمان کوچک تحویل میگیرید که به پروتکل بازیابیشده حرف میزنند و روی ترافیک ضبطشده تست شدهاند، پس نرمافزار خودتان همین حالا میتواند از آن استفاده کند.
شامل
- کتابخانهای به Go، یا زبانی که تیمتان با آن کار میکند
- تستهایی که ترافیک ضبطشدهی واقعی را دوباره پخش میکنند
- تست fuzz روی پارسر
- ابزار خط فرمان برای امتحان دستی
repository - kioskproto/
- frame.goرمزگذاری · رمزگشایی
- crc.goCRC-16/CCITT
- client.goHELLO، TICKET، STATUS
- frame_test.goپخش دوبارهی ضبطها
- fuzz_test.gogo test -fuzz
- testdata/
- captures/۲۱۲ نشست
- cmd/
- main.goامتحان دستی
- README.mdاز اینجا شروع کنید
- D/۰۶
مسیر مهاجرت
وقتی هدف ترک یک سیستم بسته است، دادههایش را مستقیم میخوانیم، تبدیل میکنیم و به سیستمی میبریم که در اختیار خودتان است. هر اجرا با شمارش و checksum با منبع مقایسه میشود، پس مطمئنید چیزی در راه گم نشده.
شامل
- استخراجکنندهای که روی یک نسخهی فقطخواندنی کار میکند
- نگاشت فیلدهای قدیمی به اسکیمای تازه
- بررسی هر جدول: تعداد ردیف، جمعها و checksum
- یک اجرای آزمایشی کامل پیش از جابهجایی واقعی
docs/migration.mmd - D/۰۷
یادداشتهای ریسک
باز کردن یک نرمافزار نقطههای ضعفش را نشان میدهد: رمزهای هاردکد، رمزنگاری دستساز، بهروزرسانیهای امضانشده. هر کدام را با شدتش و راهی برای کم کردن ریسک، تا وقتی سیستم هنوز در حال استفاده است، مکتوب میکنیم.
شامل
- هر مشکل، با جایش در باینری
- شدتش، و اینکه چه کسی میتواند از آن سوءاستفاده کند
- راه موقت، تا وقتی سیستم در خدمت است
- یادداشت برای فروشنده، اگر هنوز در دسترس باشد
docs/risk-notes.md - بهروزرسانیهای فریمور امضا نشدهاندبالا
- رمز مدیر در agent.exe هاردکد شده استبالا
- کش محلی نام بیماران را بدون رمزنگاری نگه میداردمتوسط
- بررسی لایسنس از یک کلید XOR ثابت استفاده میکندپایین
- آپلودها گواهی TLS سرور را بررسی میکنندسالم
- ۰۱
محدوده و مجوز
پیش از شروع، تأیید میکنیم مالک چه چیزی هستید و مجاز به تحلیل چه چیزی.
- ۰۲
مشاهده
ضبط ترافیک، نمونهی فایلها و رفتار زمان اجرا، بهصورت نظاممند.
- ۰۳
باز کردن
تحلیل ایستا و پویا، تا هر تکهی پازل اسمی داشته باشد.
- ۰۴
اثبات
بر اساس یافتهها کد کارا میسازیم — اگر سازگار کار کند، مشخصات درست است.
بیشتر پروژههای مهندسی معکوس، بسته به هدف و میزان محافظتش، سه تا هشت هفته طول میکشند. هر هفته یک گزارش کوتاه مکتوب میگیرید، پس هر وقت به اندازهی کافی دانستید میتوانید کار را متوقف کنید.
- روز ۱ تا ۳
مالکیت و مجوز را تأیید میکنیم، روی هدف توافق میکنیم و نرمافزار، دستگاهها و دادهی نمونه را جمع میکنیم.
- هفتهی ۱
ضبط ترافیک، نمونهی فایلها و trace زمان اجرا، در یک محیط آزمایشگاهی کنترلشده.
- هفتهی ۲ تا ۴
تحلیل ایستا و پویا، و نوشتن مشخصات همزمان با روشن شدن هر بخش.
- هفتهی ۵ و ۶
ساخت کد کارا بر اساس یافتهها و تست آن روی سیستم واقعی.
- هفتهی ۷
تحویل مشخصات، کد و یادداشتهای ریسک، همراه با یک جلسهی مرور برای تیم شما.
مشخصات
پروتکلها و فرمتها، طوری نوشتهشده که هر برنامهنویسی بتواند پیادهشان کند.
شواهد
ضبطها، traceها و یک پروژهی Ghidra حاشیهنویسیشده پشت هر یافته.
کد کارا
کتابخانه، تستهایش و ابزار خط فرمان، در مخزن کد شما.
اسکریپتهای تحلیل
پارسرها، اسکریپتهای Frida و dissectorهای Wireshark، مستند برای استفادهی دوباره.
یادداشتهای ریسک
هر ضعفی که پیدا کردیم، با شدتش و یک راه موقت.
یک جلسهی پیگیری
یک تماس چند هفته بعد، برای سؤالهایی که وقتی روی آن میسازید پیش میآید.
- Ghidra
- IDA Pro
- radare2
- Frida
- jadx
- apktool
- Wireshark
- mitmproxy
- binwalk
- x64dbg
این کار قانونی است؟
فقط روی سیستمهایی کار میکنیم که مالکشان هستید یا حق تحلیلشان را دارید؛ معمولاً برای سازگاری، امنیت یا بازیابی داده. این را پیش از شروع تأیید میکنیم.
اپ اندروید را هم مهندسی معکوس میکنید؟
بله، اپی که مالکش هستید یا حق تحلیلش را دارید: اپ خودتان که سورسش از دست رفته، اپ فروشندهای که مجوز یکپارچه شدن با آن را دارید، یا اپ خودتان پیش از بررسی امنیتی. دیکامپایلش میکنیم، روی یک گوشی آزمایشی ردگیریاش میکنیم و مستند میکنیم چه کار میکند.
اگر مبهمسازی یا رمزنگاری شده باشد چه؟
کار را کند میکند، نه متوقف. زود به شما میگوییم کار احتمالاً تا کجا عمیق میشود.
ابزارهایی که میسازید را تحویل میدهید؟
بله — اسکریپتها، پارسرها و آداپتورها مال شماست، مستند و تستشده.
چقدر طول میکشد؟
معمولاً سه تا هشت هفته. بعد از هفتهی اول میتوانیم بگوییم هدف چقدر عمیق است و آیا رسیدن به هدفتان واقعبینانه است.
از ما چه چیزی لازم دارید؟
مدرکی که نشان دهد مالک سیستم هستید یا اجازهی تحلیلش را دارید، خود نرمافزار یا دستگاه، و اگر وجود دارد یک نصب در حال کار. فایلها و دادهی نمونه هم خیلی کمک میکنند.
بگویید چه چیزی میسازید.
هر پروژه با یک جلسهی مشاوره شروع میشود: شما ایده و هر آنچه میدانید را میآورید، ما آن را به طرحی تبدیل میکنیم که بشود رویش ساخت.
رزرو مشاوره