پیامرسان SMS سبک، آفلاین و بدون سرور با لایهٔ نامرئی پیام غنی — پروژهٔ ObsiFox
تا نسخهٔ 1.0.0 هیچ APK بیلد نمیشود؛ تحویلها = سورس + تست + گزارش. کلید امضا حفظشده است.
یک اپ SMS معمولی اندروید با یک ارتقای نامرئی: کسی که oMessage دارد پیام شما را زیبا و ساختارمند (کارت، نقلقول، لیست، هایلایت، رنگ، تراز…) میبیند؛ بقیهٔ دنیا دقیقاً همان SMS معمولی و خوانا را دریافت میکنند. بدون سرور، بدون حساب، حتی بدون مجوز اینترنت.
پیام (ادیتور بصری)
↓ OML Encoder (باینری فشرده + fallback متنی داخلی)
ظرف OML
↓ فشردهسازی خودکار (Deflate سطح ۱ یا خام — هرکدام کوچکتر)
↓ قاب OFD (هدر + قطعهبندی ۱۲۰×۱۶ + CRC16)
دیتا SMS پورتدار (پورت 20312) ← برای گوشیهای دیگر کاملاً نامرئی
↓
گیرندهٔ oMessage: CRC ✓ → بازسازی → پارس امن → رندر نیتیو + ✦
| بخش | وضعیت |
|---|---|
| هستهٔ پروتکل OML v1 / OFD v1 (۱۸ توکن + CLR) | ✅ کامل + ۳۹ تست سبز (fuzz ۲۰هزار ورودی) |
| اپ پیشفرض SMS (DELIVER / Provider / نوتیفیکیشن / پاسخ سریع) | ✅ |
| کشف قابلیت با دیتا SMS + ACK + ماشین حالت | ✅ |
| انتقال هیبریدی (دوگانه در کشف، تکپیامکی پس از تثبیت) + ارسال تضمینی | ✅ |
| رندر نیتیو (بدون WebView) + نشانگر ✦ | ✅ |
| طراح پیام با ۸ پریست + پیشنمایش زنده + شمارندهٔ پیامک | ✅ |
| ۷ والپیپر رویهای + پترنساز سفارشی + رنگ اپ + رنگ حباب هر گفتگو | ✅ |
| دوزبانه فارسی/انگلیسی خودکار + RTL + تم روشن/تاریک + کاهش حرکت | ✅ |
- پوشهٔ
omessageرا در Android Studio (Hedgehog یا جدیدتر، JDK 17) باز کنید. - منتظر همگامسازی Gradle بمانید (وابستگیها فقط androidx هستند).
Runروی دستگاه واقعی (برای SMS امولاتور محدود است).
تستهای پروتکل بدون دستگاه:
./gradlew :app:testDebugUnitTest # از طریق پل JUnit
# یا مستقل:
kotlinc app/src/main/java/com/obsifox/omessage/protocol/*.kt \
app/src/test/java/com/obsifox/omessage/protocol/ProtocolTest.kt \
-include-runtime -d test.jar && java -jar test.jar- پورت دیتا SMS:
0x4F58(20312) - هگزِ تستشدهٔ پیام نمونهٔ «Hello!» کارتدار: ۳۲ بایت، CRC =
CBB8— جزئیات در سند طراحی §۷.۴ - CRC16-CCITT-FALSE · varint LEB128 · سقف امنیتی پارسر: عمق ≤۱۰، گره ≤۲۰۰، متن ≤۱۲۰۰ بایت
- ویرایشگر آزاد WYSIWYG (قالببندی روی انتخابِ متن) در نسخهٔ بعدی میآید؛ فعلاً پریست + فیلدها
- MMS فقط دریافت حداقلی با hand-off صادقانه
- بازسازی قطعهها در حافظه است (TTL ۲۴ ساعت)؛ پایداری پس از ریاستارت در نسخهٔ بعد
- برخی اپراتورها دیتا SMS را فیلتر میکنند → خودکار به فاز دوگانه برمیگردیم (SMS همیشه میرسد)
oMessage is a lightweight, offline-first Android SMS app with an invisible rich-message layer. Contacts who also run oMessage receive beautifully formatted messages; everyone else receives a perfectly normal SMS. No servers, no accounts, no INTERNET permission.
- Protocol core (pure Kotlin, no Android deps): OML v1 binary (18 tokens + CLR color token), OFD v1 datagram framing, CRC16-CCITT-FALSE, LEB128 varints, auto deflate/raw, 120×16 segmentation, strict parser with hard limits, deterministic plain-text fallback. 39 automated checks green, including a 20,000-case fuzz pass and a byte-exact spec example (32-byte frame, CRC
CBB8). - Discovery: port-addressed data SMS on port
0x4F58(20312); silent on all other phones; ACK carries capabilities; per-thread state machine (UNKNOWN → PROBING → AVAILABLE → TRUSTED) with TTL and auto-downgrade. - Transport: hybrid — dual (readable SMS + hidden data SMS) until capability stabilizes, then single data-SMS; a "Guaranteed send" toggle forces dual.
- UI: Conversations / Chat / Designer, 8 style presets with live preview, 7 procedural wallpapers + pattern maker, global accent + per-chat bubble color, bilingual (fa/en) with RTL, light/dark, accessibility-friendly.
Build: open omessage/ in Android Studio (JDK 17), Run. Tests: ./gradlew :app:testDebugUnitTest.
See CHANGELOG.md for the release notes and docs/ObsiFox-Technical-Design-FA.html for the full technical design document (v1.1).