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)
اپ را دیکامپایل میکنیم، کتابخانههای نیتیوش را میخوانیم و ترافیکش را روی یک گوشی آزمایشی زیر نظر میگیریم، حتی اگر certificate pinning داشته باشد. مشخصات مکتوب 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
این کار قانونی است؟
فقط روی سیستمهایی کار میکنیم که مالکشان هستید یا حق تحلیلشان را دارید؛ معمولاً برای سازگاری، امنیت یا بازیابی داده. این را پیش از شروع تأیید میکنیم.
اپ اندروید را هم مهندسی معکوس میکنید؟
بله، اپی که مالکش هستید یا حق تحلیلش را دارید: اپ خودتان که سورسش از دست رفته، اپ فروشندهای که مجوز یکپارچه شدن با آن را دارید، یا اپ خودتان پیش از بررسی امنیتی. دیکامپایلش میکنیم، روی یک گوشی آزمایشی ردگیریاش میکنیم و مستند میکنیم چه کار میکند.
اگر مبهمسازی یا رمزنگاری شده باشد چه؟
کار را کند میکند، نه متوقف. از همان اول میگوییم کار احتمالاً تا کجا پیش میرود.
ابزارهایی که میسازید را تحویل میدهید؟
بله — اسکریپتها، پارسرها و آداپتورها مال شماست، مستند و تستشده.
چقدر طول میکشد؟
معمولاً سه تا هشت هفته. بعد از هفتهی اول میتوانیم بگوییم کار روی این سیستم تا کجا عمیق میشود و آیا هدفتان واقعبینانه است.
از ما چه چیزی لازم دارید؟
مدرکی که نشان دهد مالک سیستم هستید یا اجازهی تحلیلش را دارید، خود نرمافزار یا دستگاه، و اگر هست یک نسخهی نصبشده و فعال. فایلها و دادهی نمونه هم خیلی کمک میکنند.
بگویید چه چیزی میسازید.
هر پروژه با یک مشاوره شروع میشود: شما ایده و هر چه میدانید را میآورید و ما از دلش طرحی درمیآوریم که بشود رویش ساخت.
رزرو مشاوره