به عنوان یک نوب ۲ ساله در زمینهی جیلبریک با تجربهی خیلی کمی که در این زمینه دارم گفتم اینجا جای خوبیه برای اینکه تجربههام رو توش ثبت کنم و با توجه به این حافظهی داغونی که دارم، هر موقع نیاز داشتم برگردم و بخونم و همچنین شاید به درد دیگران هم بخوره.
** این توییک رو حدودا اوایل فروردین ۹۸ نوشتم و خب اسکرینشات از ترمینال و نتایج ندارم قرار بدم و دیگه هم حوصلهی دوباره طی کردن این پروسه رو ندارم، سعی میکنم شبیه ترین چیز های ممکن به نتایج رو براتون قرار بدم. **
قراره توی این ویرگول نحوه و پروسهی ساخت یکی از توییک هام رو براتون توضیح بدم.
اولین توییک (Tweak) نسبتا رسمی بود و یکم هم استقبال شد و به مزاج بعضی ها خفن اومد وظیفهش این بود که میتونست وقتی شما مسیج شخصی رو در واتساپ seen میکنید، تیک آبی نخوره، همون ابتدا خیلی ها حمله کردن که این چه توییکیه؟ خود واتساپ همچین قابلیتی داره، خب آره داشت ولی فرقش این بود که اگه از خود اپ گزینهی Read receipt رو غیر فعال میکردید، باعث میشد شما نتونید بفهمید شخص مقابل هم مسیج شما رو دیده یا نه؟ یعنی عملا شما دیگه تیک آبی نمیدیدید ولی این توییک فقط قرار بود برای دیگران رو نشون بده و برای شما رو مخفی کنه. (احتمالا باید چندبار این جمله رو بخونید تا درک کنید چون خودم چندبار خوندمش تا بفهمم چی نوشتم)
ایده اجرایی به شکل سنتی بود که از طریق disassembler و Reveal و از این قبیل برنامهها بود که خداروشکر iOS دولووپر های ایرانی توی این زمینه خدا هستن و بهش نمیپردازم.
ایده دوم استفاده از ابزاری به اسم Frida بود که باهاش آشنا شدم و اتفاقا یکی از دوستان هم قبلا شبیه به همین توییک رو پیاده کرده بود ولی خب من بازم مینویسمش.
توییک (Tweak) خب میشه گفت یک لایبرری داینامیکه که میتونید چیزی که مد نظرتون هست رو به اپلیکیشن مورد نظرتون تزریق کنید تا تغییرات رو بنا به خواستهی خودتون اعمال کنید.
لازمه شما ابزار Frida رو توی دیسوایس جیل شدتون هم داشته باشید که میتونید با رفتن به Cydia و اضافه کردن https://build.frida.re به مخازن قبلی، این ابزار رو هم روی گوشی نصب و ران کنید.
توضیحات کامل توی Frida نوشته شده.
لازمه که متودی که دنباش هستیم رو پیدا کنیم، خب نحوهی کار به چه شکل هست؟
اینجا Frida وارد عمل میشه، لازمه توی ترمینال دستور
frida-ps -U | grep -i whatsapp
رو بنویسید و ps به معنای نشون دادن پروسس های فعلی که در حال ران شدن هستند هست و -U هم بع منظور این هست که دیوایس شما با USB به مک/لپتاپ شما متصله (پس وصل کنید)
خروجی چیزی شبیه به عکس زیر خواهد بود:
قسمت مهم برای ما PID هست که خب برای هر کسی متفاوته، دنبال PID واتساپ میگردیم و میبینیم (بر فرض) PIDش برابر ۱۴۳۲ هست.
سراغ کامند بعدی میریم یعنی:
frida-trace -U -m "-[* *Receipt*]"
حالا اگه داکیومنت رو خوب نخونده باشید براتون این سوال پیش میاد که frida trace چیه و از کجا اومد؟
وقتی استفاده میشه و به کار میاد که بخوایم متود ها رو چاپ کنیم (وقتی که صدا زده میشن) و در قسمت بعدی یک فیلتر براش نوشتیم که فقط اون هایی رو چاپ کن که مرتبط باشن و توشون از receipt استفاده شده
خروجی چیزی شبیه به این خواهد شد:
54599 ms -[WAChatViewController enqueueMessagesForSendingReadReceipts:0x1d0a41080] 54662 ms -[XMPPConnection sendReadReceiptsForMessagesIfNeeded:0x1d085d2b0] 54662 ms | -[WAMessage needsSendReadReceipt] 54662 ms | -[WAMessage needsSendReadReceipt] 54662 ms | -[WAMessage needsSendReadReceipt] 54662 ms | -[WAMessage needsSendReadReceipt] 54662 ms | -[WAMessage needsSendReadReceipt] 54662 ms | -[WAMessage needsSendReadReceipt] 54662 ms | -[WAMessage needsSendReadReceipt] 54663 ms | -[XMPPMultiReceipt addReceiptId:0x1d1243300 edit:0x0] 54663 ms -[ XMPPConnectionMain sendReadReceiptsForMessagesIfNeeded:0x1d0a41080] 54663 ms | -[WAMessage needsSendReadReceipt] 54663 ms | -[WAMessage needsSendReadReceipt] 54663 ms | -[WAMessage needsSendReadReceipt] 54663 ms | -[WAMessage needsSendReadReceipt] 54663 ms | -[WAMessage needsSendReadReceipt] 54663 ms | -[WAMessage needsSendReadReceipt] 54663 ms | -[WAMessage needsSendReadReceipt]
و خب اگه یکم دقت بالایی داشته باشیم و انگلیسیمون نسبتا خوب باشه میتونیم بفهمیم چیز یکه دنبال هستیم
[XMPPConnectionMain sendReadReceiptsForMessagesIfNeeded]
خواهد بود، اگه نه هم حدس و آزمایش کردن متود هایی که بهش مشکوک هستید هیجان خاصی داره و میتونید با تست کردن متود های مختلف به نتایج خیلی جالبی برسید.
با Theos یک قالب توییک میسازید به کمک دستور $ frida-ps -Uai میتونید باندل اپ رو به دست بیارید (کلی راه دیگه هم هست ولی خب این دم دست تره)
خروجی شبیه به نتیجهی زیر خواهد بود:
$ frida-ps -Uai PID Name Identifier --- ------ --------------- 1432 whatsapp net.whatsapp.WhatsApp
داخل فایل Tweak.xm چی بنویسیم؟
ابتدا باید به XMPPConnectionMain هوک بزنیم و sendReadReceiptsForMessagesIfNeeded رو خالی کال کنیم. یعنی چیزی به شکل زیر:
%hook XMPPConnectionMain - (void) sendReadReceiptsForMessagesIfNeeded:(id)arg { } %end
شاید موفق نباشید و خب لازمه که چندبار تلاش کنید و از Alert استفاده کنید تا مطمن بشید که اصلا کار میکنه؟ یا مشکل از چیز دیگهایه. سورس کد رو با Alert رو توی خط بعدی لینک میدم و کافیه از کامنت در بیاریدش.
توییک رو اینجا قرار دادم.
سعی کردم خلاصه و مفید توضیح بدم و بیشتر داکیومنت ها رو به پای خودتون بذارم، همچنین دلیلی نداشت خوبو مفید توضیح بدم، چون شک دارم حتی ۱۰ نفر هم این آموزش به دردشون بخوره و ازش استفاده بکنن، بیشتر برای اینکه جایی ثبتش کنم نوشتمش.
تا حد امکان به سوالات و مشکلات احتمالی دوستان پاسخ داده میشه، موفق باشید
لینک ردیت این توییک: Reddit
سورس این توییک برای علاقمندان: Github
سورس دیگه برای مطالعه و تمرین پریمیوم سازی اپلیکیشن های پولی: Github
لینک Repo سیدیا ی شخصی خودم برای نصب این و چند توییک دیگه: Nimk.ir/repo
و در آخر امیدوارم روزی اونقدر انگیزهی کافی داشته بشم تا چیزی که علاقه دارم رو ادامه بدم و خدمتی به بقیه بکنم، نه اینکه به دلیل مسایل پیش پا افتاده بیخیال همه چیز بشم. موفق باشید.