نگاهی بر جیلبریک از گذشته تا امروز ( قسمت سوم )

سلام به شما دوستان اپل اپسی عزیز, در ادامه‌ی قسمت دوم مقاله‌ی نگاهی بر جیلبریک از گذشته تا امروز به بررسی نحوه عملکرد ابزار های جیلبرک مختلف میپردازیم.

بررسی جیلبرک TaiG برای ورژن های 8.0 تا 8.1.2

خوب بالاخره iOS 9 هم منتشر شد و جیلبرک شد و چیزی که واضح است این است که قطعا توضیح روشن درباره ی نحوه عملکرد برنامه های معروف Pangu8 و TaiG آسیبی به کمپانی اپل و همچنین افراد نخواهد زد. (این موضوع را در نظر بگیرید که جیلبرک بعد روشن ماجرا است و میتوان از این آسیب پذیری ها برای ساخت بدافزار هم استفاده کرد!)

برای درک بهتر این قسمت از مقاله توصیه میکنم کمی در مورد نحوه دیباگ کردن (Debugging) و دی اسمبلر ها (Disassembler) و مانیتور کردن برنامه ها تحقیق کنید.برای درک بهتر این قسمت از مقاله توصیه میکنم کمی در مورد نحوه دیباگ کردن (Debugging) و دی اسمبلر ها (Disassembler) و مانیتور کردن برنامه ها تحقیق کنید.

این آسیب پذیری ها توسط اپل رفع شده و در وبسایت اپل از هر دو تیم برای پیدا کردن باگ ها تشکر شده است.

لینک بخش مربوطه در وبسایت اپل

جیلبرک TaiG دارای کد نویسی بسیار تمیزتر و با ارزش تری نسبت به Pangu8 است و میتوان مطالب بسیاری را از آن یاد گرفت.

نرم افزار های مورد نیاز

چون برنامه TaiG در اصل تحت ویندوز است ما نیز این برنامه را در ویندوز بررسی میکنیم, برای اینکار شما به برنامه هایی نیاز دارید که در زیر لیست آنها را برایتان آماده کردم:

  • Process Explorer: برنامه ای که توسط Mark Russinovich نوشته شده و اطلاعات بسیار خوبی را در مورد پروسه های در حال اجرا در اختیار ما میگذارد
  • Process Monitor: این برنامه نیز مانند برنامه بالا اطلاعاتی در مورد پروسه های در حال اجرا در اختیار ما میگذارد اما وجه تمایز این دو برنامه این است که این برنامه میتواند لاگ های مربوط به API را نیز به ما نشان بدهد
  • IDA: از بهترین برنامه های دی اسمبلر (Disassembler) برای ویندوز
  • WinDBG: از دیباگر های خوب برای ویندوز است ولی در این مقاله استفاده کمی دارد چون TaiG همکاری خوبی با ما در این زمینه ندارد!

در هنگام نوشتن مقاله دستگاه ما با استفاده از نرم افزار Pangu8 جیلبرک شده بود (در واقع خراب شده بود!)
در زیر لیست برنامه های استفاده شده روی دستگاه iOS را برای شما قرار میدهم:

  • FileMon: برنامه ای برای مشاهده ی FSEvents
  • fs_usage: برنامه ای بر پایه kdebug مکینتاش که کارایی مشابهی دارد که خروجی چندان جالبی ارائه نمیدهد ولی برا چک کردن دوباره خروجی ها مناسب است.
  • Jtool: یک دی اسمبلر خوب برای iOS

در واقع اگر از دستگاه جیلبرک نشده استفاده میکردیم بسیار بهتر بود زیرا میتوانستیم تمام پروسه ها را به صورت زنده مانیتور کنیم, اما یک مزیت که باید به آن توجه کنیم این است که کد نویسی نرم افزار Pangu8 بسیار ضعیف تر TaiG بود و هرگونه درخواستی به سمت OSKextRequest میتوانست باعث پنیک (Panic) کردن کرنل و در نتیجه ری استارت شدن دستگاه شود, در نتیجه ریسک ایجاد تغییرات دائمی توسط TaiG کاملا از بین میرود و میتوانیم با خیال راحت و بدون ترس از بریک شدن دستگاه به کار خود ادامه دهیم. هر دو شرکت سامسونگ و اپل از مهندسی های خاصی در ساخت دستگاه های خود استفاده کردند که حتی اگر عمدا قصد بریک کردن دستگاه خود را داشته باشید باید بسیار تلاش کنید!
اگر دقت کرده باشید حجم برنامه TaiG به نسبت زیاد بود (51.938.816 بایت) زیرا برنامه تماما در فرمت PE نوشته شده بود که کار دی اسمبل کردن بسیار سخت میکرد, زیرا شما در هنگام کار با برنامه معمولا با کد های بسیار پیچیده و زیاد مواجه میشدید که در آخر معلوم میشد که عکس هایی با فرمت PNG هستند که به صورت Base64 اینکد شده اند!

PE (پی‌ئی) یا اجرایی انتقال‌پذیر (Portable Executable) بیانگر نوعی ساختار از پرونده‌های اجرایی، آبجکت‌فایل‌ها یا دی‌ال‌الها در سیستم‌عامل ۳۲ یا ۶۴بیتی ویندوز است. عبارت “انتقال‌پذیر” به انطباق‌پذیری آن با محیط‌های بی‌شمار و معماری‌های گوناگون نرم‌افزارهای سیستم اشاره دارد.

در نگاه اول هیچ وابستگی به فایل های کتابخانه ای اپل مانند CoreFoundation, AppleMobileDevice, iTuneSMobileDevice دیده نمیشود, که جای کمی فکر دارد!
راز این شعبده بازی با نگاه کردن به فایل های موقتی که ابزار جیلبرک TaiG ایجاد میکند روشن میشود. در این زمان یک فایل دی ال ال کوچک با نام Tai***.tmp (که به جای *** یک اسم تصادفی وجود دارد) به وجود می آید. همچنین با مانیتور کردن پروسه های در حال اجرا به سادگی میبینید که یک دی ال ال اجرا میشود که یک پروسه به نام CreateDevHelp دارد. در واقع اسم دقیق این دی ال ال TGHelp.dll است.
بخش ویندوزی کار چندان چنگی به دل نمیزند, به همین دلیل این بخش را به صورت خلاصه تر توضیح میدم و فایل دی ال ال را در صورتی که خواستید خودتان روی آن کار کنید را برایتان قرار میدهم.

لینک دانلود فایل دی ال ال از وبسایت شخصی بنده

در زیر لیست آدرس های مهم را با هم مرور میکنیم:

TAIGsyms

0x 10011E60: تابعی است که تمام آبجکت های مربوط به کتابخانه ی اپل (مانند: CoreFoundation.dll, MobileDevice.dll, iTunesMobileDevice.dll, AirTrafficHost.dll) را فراخوانی میکند, که اینکار را با فراخوانی آدرس 0x 10011DE0 که از تابع LdrLoadDll در فایل ntdll.dll به جای LoadLibrary در kernel32 استفاده میکند که پروسه ی کار چندان هم واضح نباشد.
0x1001465C: چک کردن وضعیت اکتیویشن دستگاه
0x10013AC9: چک کردن وجود یا عدم وجود پسورد روی دستگاه
0x10017DE0: برقراری ارتباط با com.apple.mobilebackup2
0x10011360: برقراری ارتباط با com.apple.afc2

لیست بالا چندان کامل نیست اما اطلاعات تقریبا کافی برای انجام مهندسی معکوس به شما میدهد. اما اگر خواستید لیست کامل تری را درست کنید میتوانید از طریق آدرس زیر اقدام کنید و لیست تمام API ها را مشاهده کنید.

لینک کامل توابعی که باید بشناسید

خوب به قسمت سرگرم کننده ی مقاله رسیدیم! میخواهیم فرایند جیلبرک را روی خود دستگاه اپلیمان بررسی کنیم.

اپل تعدادی از این آسیب پذیری ها را در APPLE-SA-2015-01-27-2 لیست کرده است ولی همانطور که قبلا اشاره کردم به هیچ عنوان توضیحات کامل و یا حتی مشخصی وجود ندارد که کدام آسیب پذیری مسئولیت کدام قسمت از فرایند جیلبرک را بر عهده دارد.

به علت ساختار بسیار سخت و محکم (ولی نه ضد گلوله!) iOS معمولا باید از ترکیب چند باگ استفاده کرد تا بتوانند به چنین آزادی عمل و جیلبرکی دست پیدا کرد. در زیر لیست فرایند هایی که در همه ی زمان ها از گذشته تا به امروز برای انجام جیلبرک با آن ها سر و کار داریم را بیان میکنم:

  • از بین بردن سندباکس: اپل به صورت دیفالت تمامی برنامه ها را محدود کرده, البته به لطف Sandbox.kext و AppleMobileFileIntegrity.kext میتوان این محدودیت را از بین برد, که در ادامه توضیح میدهم.
  • به دست آوردن قابلیت اجرای کد دلخواه: چیزی شبیه مثالی که در مبحث قبل زدیم, اما با این تفاوت که این کار معمولا با استفاده از حمله کردن به یکی از فایل های امضا شده (Signed) توسط اپل و اکسپلویت (Exploit) کردن آن مانند libmis انجام میگیرد.
  • گرفتن دسترسی روت (root): از هک ساده وبسایت ها تا هک کردن دستگاه های اپل همیشه هدف رسیدن به بالاترین سطح دسترسی در سیستم عامل بوده و هست, که در دستگاه های اپلی از طریق حمله کردن به یکی از دیمون هایی (daemon) که به صورت روت در حال اجرا است, بسیار محترمانه خواهش میکنیم که دیمون launchd را به صورت روت برای ما اجرا کند!
  • پچ کردن کرنل (Kernel Patching): بیشتر روش های این عمل در iOS به لطف Comex ممکن شده و ما در اینجا در واقع کرنل را بعد از روی کار آمدن Userland با استفاده از دستوراتی در هنگام بوت شدن (boot-args) و نه در nvram (همانطور که گفتیم امنیت iBoot بسیار پیشرفت کرده و تمام دستورات ما را رد میکند) انجام میدهیم.

البته نکته ای باید در نظر بگیرید این است که همیشه شما نیاز به 4 پیلود مختلف برای انجام اینکار ندارید و در بیشتر موارد میتوان با حمله به یکی از سرویس های در حال اجرا روی دستگاه به هر سه مورد اول رسید. (که این دقیقا همان کاری است که TaiG با استفاده کردن از کندی سرویس AFC و کد نویسی بد آن انجام داده است!) اما پچ کردن کرنل همیشه یک پیلود جداگانه نیاز خواهد داشت, زیرا امنیت XNU در طی سال های اخیر بسیار بالاتر رفته تا جلوی جیلبرک های متعدد با یک روش یکسان گرفته شود.

گفتیم که در اینجا جیلبرک از طریق حمله به سرویس AFC انجام شده است, اما چگونه؟
AFC در واقع مسئولیت برقراری ارتباطات میان iTunes (در این مورد TaiG) و iDevice (همان دستگاه اپلی) را بر عهده دارد و تنها سرویس قابل دسترسی است که در نهایت اجازه ی ساخت فایل و فولدر و همینطور پاک کردن آن ها در iDevice را دارد.
اگر قبلا به این موضوع توجه کرده باشید با برنامه هایی مانند iTools, iFunbox, iMazing و… حتی اگر دستگاه شما جیلبرک هم نباشد شما میتوانید عکس هایتان را به Camera roll یا همان فولدر /private/var/mobile/Media/DCIM انتقال دهید. دلیل این امر هم آن است که اپل اجازه ی دسترسی کامل به فولدر /private/var/mobile/Media را به AFC داده است و هر چیزی (عکس, فیلم, موزیک و کتاب ها) که شما به کمک iTunes و سایر برنامه ها در iDevice خود انتقال میدهید در این فولدر ذخیره میشود.
TaiG دقیقا از همین موضوع استفاده کرد و فایل ها و فولدر هایی در /private/var/mobile/Media ایجاد میکند.
به خروجی های زیر توجه کنید, ابتدا فولدر _exhelp و سپس _mvhelp ایجاد میشود.

126 afcd Created dir /private/var/mobile/Media/_exhelp
126 afcd Created dir /private/var/mobile/Media/_exhelp/a
126 afcd Created dir /private/var/mobile/Media/_exhelp/a/a
126 afcd Created dir /private/var/mobile/Media/_exhelp/a/a/a
126 afcd Created dir /private/var/mobile/Media/_exhelp/var
126 afcd Created dir /private/var/mobile/Media/_exhelp/var/mobile
126 afcd Created dir /private/var/mobile/Media/_exhelp/var/mobile/Media
126 afcd Created dir /private/var/mobile/Media/_exhelp/var/mobile/Media/Books
126 afcd Created dir /private/var/mobile/Media/_exhelp/var/mobile/Media/Books/Purchases
126 afcd Created /private/var/mobile/Media/_exhelp/var/mobile/Media/Books/Purchases/mload
126 afcd Created /private/var/mobile/Media/_exhelp/a/a/a/c (symlink)
126 afcd Created dir /private/var/mobile/Media/_mvhelp
126 afcd Created dir /private/var/mobile/Media/_mvhelp/a
126 afcd Created dir /private/var/mobile/Media/_mvhelp/a/a
126 afcd Created dir /private/var/mobile/Media/_mvhelp/a/a/a
126 afcd Created dir /private/var/mobile/Media/_mvhelp/a/a/a/a
126 afcd Created dir /private/var/mobile/Media/_mvhelp/a/a/a/a/a
126 afcd Created dir /private/var/mobile/Media/_mvhelp/a/a/a/a/a/a
126 afcd Created dir /private/var/mobile/Media/_mvhelp/a/a/a/a/a/a/a
126 afcd Created dir /private/var/mobile/Media/_mvhelp/private
126 afcd Created dir /private/var/mobile/Media/_mvhelp/private/var
126 afcd Created /private/var/mobile/Media/_mvhelp/private/var/run
126 afcd Created /private/var/mobile/Media/_mvhelp/a/a/a/a/a/a/a/c (symlink)

— BackupAgent wakes up
279 BackupAgent Chowned /private/var/MobileDevice/ProvisioningProfiles
Some events dropped
*** Warning: Some events may be lost
279 BackupAgent Created dir /private/var/.backup.i/var/MobileDevice
279 BackupAgent Created dir /private/var/.backup.i/var/MobileDevice/ProvisioningProfiles
279 BackupAgent Chowned /private/var/.backup.i/var/MobileDevice/ProvisioningProfiles
279 BackupAgent Created dir /private/var/.backup.i/var/mobile/Media
279 BackupAgent Created dir /private/var/.backup.i/var/mobile/Media/PhotoData
279 BackupAgent Renamed /private/var/mobile/Media/_mvhelp/a/a/a/a/a/a/a/c /private/var/.backup.i/var/mobile/Media/PhotoData/c
279 BackupAgent Chowned /private/var/run
279 BackupAgent Chowned /private/var/run
279 BackupAgent Renamed /private/var/mobile/Media/_exhelp/a/a/a/c /private/var/run/mobile_image_mounter
279 BackupAgent Chowned /private/var/mobile/Media/Books/Purchases/mload

پس از پایان کار و گرفتن دسترسی مورد نظر فایل ها را پاک میکند:

126 afcd Deleted /private/var/mobile/Media/_mvhelp/a/a/a/a/a/a/a
126 afcd Deleted /private/var/mobile/Media/_mvhelp/a/a/a/a/a/a
126 afcd Deleted /private/var/mobile/Media/_mvhelp/a/a/a/a/a
126 afcd Deleted /private/var/mobile/Media/_mvhelp/a/a/a/a
126 afcd Deleted /private/var/mobile/Media/_mvhelp/a/a/a
126 afcd Deleted /private/var/mobile/Media/_mvhelp/a/a
126 afcd Deleted /private/var/mobile/Media/_mvhelp/a
126 afcd Deleted /private/var/mobile/Media/_mvhelp/private/var/run
126 afcd Deleted /private/var/mobile/Media/_mvhelp/private/var
126 afcd Deleted /private/var/mobile/Media/_mvhelp/private
126 afcd Deleted /private/var/mobile/Media/_mvhelp
126 afcd Deleted /private/var/mobile/Media/_exhelp/a/a/a
126 afcd Deleted /private/var/mobile/Media/_exhelp/a/a
126 afcd Deleted /private/var/mobile/Media/_exhelp/a
126 afcd Deleted /private/var/mobile/Media/_exhelp/var/mobile/Media/Books/Purchases/mload
126 afcd Deleted /private/var/mobile/Media/_exhelp/var/mobile/Media/Books/Purchases
126 afcd Deleted /private/var/mobile/Media/_exhelp/var/mobile/Media/Books
126 afcd Deleted /private/var/mobile/Media/_exhelp/var/mobile/Media
126 afcd Deleted /private/var/mobile/Media/_exhelp/var/mobile
126 afcd Deleted /private/var/mobile/Media/_exhelp/var
126 afcd Deleted /private/var/mobile/Media/_exhelp

شاید کمی گیج کننده باشد ولی چیزی که در نهایت به آن دست یافتیم بدین شکل است:

/private/var/run/mobile_image_mounter -> ../../../var/mobile/Media/Books/Purchases/mload

چرا این همه دردسر؟ اصلا چرا فایل mobile_image_mounter ؟
خوب AFCD راه ورود را برای ما باز میکند ولی فقط یکی دو قدم میتوانیم برداریم! بقیه دستورات باید توسط DeveloperDiskImage پشتیبانی بشوند. DeveloperDiskImage یا همان DDI زمانی روی کار می آید که شما دستگاه خود را به Xcode متصل میکنید (DDI بخشی از SDK مورد استفاده در Xcode است) که تعدادی ابزار و فریم ورک (Framework) را در اختیار ما میگذارد.

وقتی که دستگاه را به Xcode متصل میکنیم این ابزارها و فریم ورک ها در /Developer ماونت (Mount) میشود, و شما میتوانید در /Developer/Library/Frameworks و /System/Library/Frameworks و چند فولدر دیگر جست و جو کنید! البته فقط این فولدر نیست اپل این کار را برای فولدر های دیگر مانند /AppleInternal نیز تکرار کرده. خوب پس اگر کسی بتواند یک DDI را شبیه سازی کند میتواند به فایل های فولدر /Developer دسترسی داشته باشد و آن ها را تغییر دهد.

قضیه به این سادگی ها هم نیست! باید به این موضوع توجه داشته باشید که DDI ساین شده است و شما نمیتوانید هر فایلی که خواستید را به عنوان DDI به iDevice بخورانید و افکار پلید خود را پیاده کنید! اینجا پای یک روش قدیمی به نام The race condition یا وضعیت مسابقه ای میان می آید.

در بین زمان چک کردن امضاء و خواندن فایل یک فاصله زمانی بسیار بسیار کوتاه وجود دارد, تصور کنید بتوانید DDI اصلی را در زمان چک کردن امضاء بدهید و سپس در هنگاه خواندن فایل خود را ارائه بدهید, فکر جالب و البته شدنی است!

TaiG دقیقا همین کار را کرده, در هنگام انجام عملیات جیلبرک, در حدود موقعی که کار به 30% میرسد یک فایل شبیه به DDI در فرمت DMG که بسیار با دقت ساخته شده است با نام input در کنار DDI اصلی به نام input2 در دستگاه آپلود میشود که به صورت پشت سر هم تلاش میکند تا MobileStorageMounter.app را مجبور به خواندن DMG اشتباه کند, این کار آنقدر تکرار میشود تا سرانجام فایل مورد نظر ما خوانده شود که به این عمل وضعیت مسابقه ای گفته میشود.

لینک دانلود فایل input از وبسایت شخصی بنده

# در اینجا فایل DMG که قرار است جایگزین شود ساخته میشود

126 afcd Created /private/var/mobile/Media/Books/Purchases/mload/input
126 afcd Modified /private/var/mobile/Media/Books/Purchases/mload/input

# فایل ساخته شده را در MobileStorageMounter.app ثبت میکند. به خاطر داشته باشید که قبلا از طریق متد سیم لینک (Symlink) این پوشه را به یکی از پوشه هایی که AFC به آن دسترسی داشت متصل کردیم (/private/var/mobile/Media/Books/Purchases/mload/)

6362 mobile_storage_p Created /private/var/mobile/Media/Books/Purchases/mload/6d55c2edf0583c63adc540dbe8bf8547b49d54957ce9dc8032d1a9f9ad759e2b1fe99fcb2baeb3db5348ab322cb65c7fc38b59cb75697cbc29221dce1ecd120d/909b75240921fc3f2d96ff08d317e199e033a7f8a8ff430b0c97bf3c6210fc39f35e1c239d1bf7d568be613aafef53104f3bc1801eda87ef963a7abeb57b8369/37kpPQ.dmg
6362 mobile_storage_p Modified /private/var/mobile/Media/Books/Purchases/mload/6d55c2edf0583c63adc540dbe8bf8547b49d54957ce9dc8032d1a9f9ad759e2b1fe99fcb2baeb3db5348ab322cb65c7fc38b59cb75697cbc29221dce1ecd120d/909b75240921fc3f2d96ff08d317e199e033a7f8a8ff430b0c97bf3c6210fc39f35e1c239d1bf7d568be613aafef53104f3bc1801eda87ef963a7abeb57b8369/37kpPQ.dmg

# DMG اصلی به input2 انتقال داده میشود

126 afcd Renamed /private/var/mobile/Media/Books/Purchases/mload/6d55c2edf0583c63adc540dbe8bf8547b49d54957ce9dc8032d1a9f9ad759e2b1fe99fcb2baeb3db5348ab322cb65c7fc38b59cb75697cbc29221dce1ecd120d/909b75240921fc3f2d96ff08d317e199e033a7f8a8ff430b0c97bf3c6210fc39f35e1c239d1bf7d568be613aafef53104f3bc1801eda87ef963a7abeb57b8369/37kpPQ.dmg to
/private/var/mobile/Media/Books/Purchases/mload/input2

# نام DMG ساخته شده از input به نام اصلی تغییر میکند

126 afcd Renamed /private/var/mobile/Media/Books/Purchases/mload/input /private/var/mobile/Media/Books/Purchases/
mload/6d55c2edf0583c63adc540dbe8bf8547b49d54957ce9dc8032d1a9f9ad759e2b1fe99fcb2baeb3db5348ab322cb65c7fc38b59cb75697cbc29221dce1ecd120d/909b75240921fc3f2d96ff08d317e199e033a7f8a8ff430b0c97bf3c6210fc39f35e1c239d1bf7d568be613aafef53104f3bc1801eda87ef963a7abeb57b8369/37kpPQ.dmg

# خوب بار اول کار نکرد! بالاخره MobileStorageMounter.app آنقدرها هم احمق نیست و فایل را پاک میکند!

6347 MobileStorageMou Deleted /private/var/mobile/Media/Books/Purchases/mload/6d55c2edf0583c63adc540dbe8bf8547b49d54957ce9dc8032d1a9f9ad759e2b1fe99fcb2baeb3db5348ab322cb65c7fc38b59cb75697cbc29221dce1ecd120d/909b75240921fc3f2d96ff08d317e199e033a7f8a8ff430b0c97bf3c6210fc39f35e1c239d1bf7d568be613aafef53104f3bc1801eda87ef963a7abeb57b8369/37kpPQ.dmg

# MobileStorageMounter.app لاگ فایلی به منظور توضیح فرایند انجام شده ایجاد میکند.

6362 Modified /private/var/mobile/Library/Logs/Device-O-Matic/com.apple.mobile.storage_proxy.log.0

# خوب این فرایند باید دوباره تکرار شود پس فایل input2 را پاک میکنیم

126 afcd Deleted /private/var/mobile/Media/Books/Purchases/mload/input2

# این فرایند آنقدر تکرار میشود تا بالاخره موفق شویم.

معمولا پروسه بالا باید چندین بار تکرار شود تا فایل مورد نظر ما خوانده شود.

فایل input به راحتی در مک قابل خواندن است, در زیر لیست فایل های موجود در input را برای شما قرار میدهم:

input

اگر دقت کنید دستور مربوط به پارتیشن DeveloperDiskImage هیچ خروجی ندارد که نشان میدهد این فولدر خالی است, این موضوع شاید در نگاه اول کمی جلب توجه کند و عجیب به نظر برسد ولی در واقع چندان مهم هم نیست! در واقع در اینجا مهم ترین قسمت /Volumes/DeveloperLib است که داخل /usr/lib ماونت میشود! و به همین شکل /Volumes/DeveloperCaches در /System/Library/Caches ماونت میشود که شامل فایل های apticket.der (که حداقل من نیازی به وجودش نمیبینم!) و com.apple.dyld/enable-dylibs-to-override-cache که کار اصلی را بر عهده دارد و بار ها و بار ها اجرا میشود تا عملیات موفقیت آمیز بوده و فایل های مورد نظر ما در کش جایگزین شوند. در این حال عملیات ساین با مشکل انجام میشود و دستگاه نمیتواند فایل ها را با DDI ساین کند در نتیجه از /usr/libexec/amfid استفاده میکند و در نهایت پس از چندین بار تلاش بی نتیجه کد ساین نشده ی شما, ساین میشود! تبریک!

اما (همیشه یک اما وجود دارد!) به این توجه کنید که ما هنوز جلوی چک کردن کد ساین در amfid را نگرفتیم بلکه فقط فایلی که amfid باید چک میکرد را جایگزین کردیم پس با این وجود نمیتوانیم از DYLD_INSERT_LIBRARIES استفاده کنیم که این موضوع عملا جا به جایی فایل ها را بلا استفاده میکند چرا که در نهایت amfid هر پروسه ای که ساین نشده باشد را میبندد!

در بخش بعد خواهید خواند

در بخش بعد چگونگی دور زدن amfid را با هم بررسی خواهیم کرد و همچنین اشاره کمی هم به نحوه ی پچ کرنل توسط TaiG میکنیم. اگر این مطلب براتون مفید بود لطفا به اشتراک بگذارید تا دیگر دوستانتان هم استفاده کنند؛ درضمن نظرات و سوال های خودتان هم درمورد جیلبریک و هم درمورد اطلاعاتی که در این باره میخواهید بدانید را در قسمت نظرات مطرح کنید.