По сос­тоянию на июль 2014 года Apple про­дала более 800 мил­лионов устрой­ств, работа­ющих под управле­нием iOS. Более полови­ны из них — раз­личные модели iPhone. При таком количес­тве устрой­ств в обра­щении совер­шенно не уди­витель­но, что они час­то ста­новят­ся объ­екта­ми компь­ютер­но‑тех­ничес­кой экспер­тизы (forensics). На рын­ке пред­став­лены раз­личные решения для авто­мати­зации подоб­ных экспер­тиз, но цен­ник на них зачас­тую дела­ет их недос­тупны­ми. Поэто­му сегод­ня мы погово­рим о том, как мож­но про­вес­ти такую экспер­тизу с минималь­ными зат­ратами или, про­ще говоря, исполь­зуя бес­плат­ные и/или open source инс­тру­мен­ты.
 

Немного теории

При про­веде­нии экспер­тизы в боль­шинс­тве слу­чаев под­разуме­вает­ся физичес­кий дос­туп к устрой­ству, и перед экспер­том сто­ят две задачи: извлечь как мож­но боль­ше дан­ных и информа­ции из устрой­ства и оста­вить при этом как мож­но мень­ше сле­дов (арте­фак­тов). Вто­рая задача осо­бен­но важ­на, если резуль­таты экспер­тизы пред­став­ляют­ся в суде: слиш­ком боль­шое количес­тво арте­фак­тов может помешать про­веде­нию пов­торной экспер­тизы, что, в свою оче­редь, может пос­тавить резуль­таты пер­воначаль­ной экспер­тизы под сом­нение. Во мно­гих слу­чаях избе­жать появ­ления арте­фак­тов невоз­можно; эту проб­лему пыта­ются решать, под­робно докумен­тируя арте­фак­ты, соз­дава­емые на раз­личных эта­пах про­веде­ния иссле­дова­ния.

Дан­ные, хра­нящи­еся на iOS-устрой­ствах, защище­ны отно­ситель­но хорошо, и, что­бы их извлечь, обыч­но нуж­но пре­одо­леть сле­дующие пре­пятс­твия:

  1. Пас­скод. Он защища­ет устрой­ство от неав­торизо­ван­ного дос­тупа (в том чис­ле и от экспер­тизы) и крип­тогра­фичес­ки защища­ет часть дан­ных. Это зна­чит, что даже если пас­скод как‑то обой­ти, то некото­рые фай­лы и записи Keychain будут недос­тупны, потому что устрой­ство не смо­жет получить соот­ветс­тву­ющие клю­чи шиф­рования, не зная пас­скод.
  2. Связ­ка клю­чей (Keychain). Это цен­тра­лизо­ван­ное хра­нили­ще паролей, токенов, клю­чей шиф­рования и про­чих сек­ретов, в котором Apple рекомен­дует раз­работ­чикам при­ложе­ний дер­жать цен­ные дан­ные. Физичес­ки пред­став­ляет собой SQLite3-базу, записи в которой зашиф­рованы и дос­туп к которой осу­щест­вля­ется опос­редован­но, через зап­росы к сер­вису securityd.
  3. Шиф­рование фай­лов. В отли­чие от сис­тем пол­нодис­кового шиф­рования (full disk encryption, FDE), iOS шиф­рует каж­дый файл отдель­ным клю­чом (чем‑то это напоми­нает EFS в Windows). Часть фай­лов защище­на клю­чом, про­изводным от уни­каль­ного клю­ча устрой­ства, и может быть рас­шифро­вана без зна­ния пас­ско­да, часть защище­на таким обра­зом, что рас­шифро­вать их без зна­ния пас­ско­да невоз­можно.

Вмес­те эти три механиз­ма обра­зуют под­систе­му защиты дан­ных (Data Protection), которая появи­лась в iOS 4 и сво­им появ­лени­ем сущес­твен­но усложни­ла про­веде­ние экспер­тиз. Пос­ле выхода iOS 4 Data Protection изме­нялась не очень сущес­твен­но, за одним исклю­чени­ем — появ­ление Secure Enclave в iPhone 5s и более новых моделях. Secure Enclave исполь­зует­ся в рам­ках Data Protection для опе­раций с отпе­чат­ками паль­цев, пас­ско­дом, клю­чами шиф­рования и подоб­ным, но в дан­ной статье мы его рас­смат­ривать не будем.

 

Извлечение данных

Для извле­чения дан­ных из iOS-устрой­ств на прак­тике тра­дици­онно при­меня­ются нес­коль­ко методов:

  1. «Физичес­кое извле­чение» поз­воля­ет получить побито­вый образ дис­ка, все клю­чи шиф­рования устрой­ства и, в боль­шинс­тве слу­чаев, так­же поз­воля­ет переби­рать пас­скод (если он уста­нов­лен). Для физичес­кого извле­чения в общем слу­чае тре­бует­ся выпол­нение кода на устрой­стве в кон­тек­сте поль­зовате­ля с пол­ными пра­вами (root) и вне песоч­ницы (sandbox). Этот метод был популя­рен нес­коль­ко лет назад, так как уяз­вимость в заг­рузчи­ках ста­рых устрой­ств (таких как iPhone 4 или пер­вые iPad’ы) поз­воляла выпол­нять на устрой­стве про­изволь­ный код. На более новых устрой­ствах физичес­кое извле­чение воз­можно (да и то с ого­вор­ками) толь­ко при наличии jailbreak, поэто­му сегод­ня мы его рас­смат­ривать не будем.
  2. «Логичес­кое извле­чение» исполь­зует для получе­ния дан­ных интерфей­сы и сер­висы, которые уже есть на устрой­стве и которые исполь­зуют­ся прог­рамма­ми вро­де iTunes или Xcode. Клас­сичес­ким при­мером здесь слу­жит соз­дание резер­вной копии iTunes: для ее соз­дания не нуж­но уста­нав­ливать на устрой­ство никаких допол­нитель­ных прог­рамм, и при этом она содер­жит боль­шое количес­тво цен­ной информа­ции об устрой­стве (вклю­чая спи­сок кон­тактов и вызовов, исто­рию перепис­ки, исто­рию мес­тополо­жений, фото/видео). Но одним толь­ко бэкапом дело не огра­ничи­вает­ся — на iOS-устрой­ствах при­сутс­тву­ют и дру­гие служ­бы, поз­воля­ющие получить дос­туп к дан­ным.
  3. Из­вле­чение из iCloud поз­воля­ет заг­рузить резер­вную копию устрой­ства из обла­ка. Для это­го необ­ходимо знать аутен­тифика­цион­ные дан­ные нас­тро­енно­го на устрой­стве Apple ID: Apple ID и пароль либо аутен­тифика­цион­ный токен. Резер­вная копия в iCloud так­же содер­жит мас­су цен­ной информа­ции.
 

Спаривание

Ког­да речь заходит о «логичес­ком» извле­чении, то одно из клю­чевых понятий — это спа­рива­ние (pairing) устрой­ства и хос­та. В боль­шинс­тве слу­чаев устрой­ство будет отве­чать на зап­росы толь­ко того хос­та, с которым оно было спа­рено ранее (таких хос­тов может быть боль­ше одно­го). Запись спа­рива­ния (pairing record) сос­тоит из двух час­тей — одна хра­нит­ся на устрой­стве и одна на хос­те — и соз­дает­ся при пер­вом под­клю­чении устрой­ства к новому хос­ту. Для соз­дания такой записи необ­ходимо, что­бы устрой­ство было раз­бло­киро­вано (то есть для спа­рива­ния в общем слу­чае необ­ходимо ввес­ти пас­скод) и что­бы поль­зователь под­твер­дил соз­дание записи спа­рива­ния на устрой­стве (начиная с iOS 7; в более ран­них вер­сиях запись соз­давалась авто­мати­чес­ки).

За­пись спа­рива­ния содер­жит клю­чи шиф­рования для все­го кон­тента, хра­няще­гося на устрой­стве, и, сле­дова­тель­но, может быть исполь­зована для под­клю­чения к устрой­ству и его раз­бло­киров­ки. Дру­гими сло­вами, с точ­ки зре­ния дос­тупа к зашиф­рован­ным дан­ным запись спа­рива­ния экви­вален­тна зна­нию пас­ско­да: наличие любого из этих двух фак­торов поз­воля­ет раз­бло­киро­вать устрой­ство и получить дос­туп ко всем дан­ным (в крип­тогра­фичес­ком смыс­ле).

С прак­тичес­кой точ­ки зре­ния вышес­казан­ное зна­чит, что для логичес­кого извле­чения в общем слу­чае необ­ходима сущес­тву­ющая запись спа­рива­ния с одно­го из доверен­ных компь­юте­ров или пас­скод (что­бы эту запись соз­дать). Без это­го боль­шая часть сер­висов iOS отка­жет­ся работать и воз­вра­щать дан­ные.

 

Практика

Для наших экспе­римен­тов понадо­бит­ся вир­туаль­ная или физичес­кая машина под управле­нием Linux. Linux, в прин­ципе, может быть любым, важ­но что­бы под ним нор­маль­но собира­лись и работа­ли libusb и libimobiledevice. Я буду исполь­зовать Santoku Linux — дис­три­бутив, соз­данный в том чис­ле и для про­веде­ния иссле­дова­ния устрой­ств под управле­нием Android и iOS. К сожале­нию, Santoku Linux содер­жит не все необ­ходимое, поэто­му кое‑что «допили­вать» все же при­дет­ся.

 

Логическое извлечение

Для логичес­кого извле­чения дан­ных из устрой­ства нам пот­ребу­ется libimobiledevice — кросс‑плат­формен­ная биб­лиоте­ка для обще­ния с раз­личны­ми служ­бами iOS. К сожале­нию, Santoku Linux 0.5 пос­тавля­ется с уста­рев­шей вер­сией libimobiledevice (1.1.5), которая не пол­ностью под­держи­вает iOS 8, поэто­му пер­вым делом уста­новим самую све­жую вер­сию (1.1.7) и все ее зависи­мос­ти (ска­чива­ем архи­вы по ука­зан­ным ссыл­кам, рас­паковы­ваем, перехо­дим в получен­ную пап­ку и выпол­няем ./autogen.sh && make && sudo make install):

  • libplist-1.12;
  • libusbmuxd-1.0.10;
  • libimobiledevice-1.1.7 — здесь обра­ти вни­мание на ключ --enable-dev-tools, он вклю­чает сбор­ку допол­нитель­ных ути­лит, которые мы в даль­нейшем будем исполь­зовать для обще­ния с некото­рыми сер­висами iOS: ./autogen.sh --enable-dev-tools;
  • usbmuxd-1.1.0 — похоже, ключ --without-systemd необ­ходим на Santoku 0.5, так как без него usbmuxd не стар­тует: ./autogen.sh --without-systemd;
  • ideviceinstaller-1.1.0;
  • ifuse-1.1.3.

Ес­ли все прош­ло удач­но, то теперь самое вре­мя под­клю­чить какое‑нибудь iOS-устрой­ство к компь­юте­ру (или к вир­туаль­ной машине) и про­верить, что хост его видит:

santoku@santoku-vm:~$ idevice_id -l
23f88587e12c30376f8ab0b05236798fdfa4e853
santoku@santoku-vm:~$

Эта коман­да дол­жна вывес­ти иден­тифика­торы (UUID) под­клю­чен­ных устрой­ств.

 

Информация об устройстве

Сле­дующий этап — получе­ние более под­робной информа­ции об устрой­стве. Для это­го слу­жит ути­лита ideviceinfo. Она может исполь­зовать­ся в двух вари­антах:

  • ideviceinfo –s выводит обще­дос­тупную информа­цию об устрой­стве без попыт­ки соз­дать новое или исполь­зовать сущес­тву­ющее спа­рива­ние меж­ду хос­том и устрой­ством;
  • ideviceinfo [-q <домен>] [-x] выводит сущес­твен­но более под­робную информа­цию, но тре­бует наличия спа­рива­ния меж­ду устрой­ством и хос­том. Ути­лита зап­рашива­ет информа­цию у сер­виса lockdownd, выпол­няюще­гося на устрой­стве. Информа­ция пред­став­ляет собой пары ключ — зна­чение и клю­чи сгруп­пирова­ны в домены. С помощью парамет­ра -q мож­но задать кон­крет­ный домен, из которо­го тре­бует­ся получить дан­ные.

Па­раметр -x поз­воля­ет фор­матиро­вать вывод прог­раммы в виде XML (а точ­нее — в виде property list), так что вывод мож­но перенап­равить в файл и в даль­нейшем обра­баты­вать дру­гими прог­рамма­ми или скрип­тами.

 

Приложения

В рам­ках логичес­кого извле­чения мож­но получить дос­туп к дан­ным при­ложе­ний. Для это­го сна­чала необ­ходимо получить спи­сок уста­нов­ленных при­ложе­ний при помощи ути­литы ideviceinstaller:

santoku@santoku-vm:~$ ideviceinstaller -l
Total: 4 apps
com.viaforensics.viaprotect-app - NowSecure 1
com.facebook.Facebook - Facebook 6017145
ph.telegra.Telegraph - Telegram 39280
com.getdropbox.Dropbox - Dropbox 3.6.2
santoku@santoku-vm:~$

В резуль­тате для каж­дого при­ложе­ния получа­ем его иден­тифика­тор (так называ­емый bundle ID), наз­вание и вер­сию. Зная иден­тифика­тор при­ложе­ния, мы можем получить дос­туп к его дан­ным. Для это­го задей­ству­ются два сер­виса iOS — house_arrest и afc. AFC (Apple File Conduit) — это служ­ба дос­тупа к фай­лам; с ее помощью, в час­тнос­ти, iTunes осу­щест­вля­ет дос­туп к музыке и про­чим меди­афай­лам на устрой­стве. house_arrest — это менее извес­тный сер­вис, который поз­воля­ет запус­кать сер­вер AFC в песоч­нице кон­крет­ного при­ложе­ния; он, в час­тнос­ти, исполь­зует­ся для реали­зации фун­кции File Sharing в iTunes.

Но это все теория. На прак­тике для получе­ния дос­тупа к фай­лам при­ложе­ния дос­таточ­но вос­поль­зовать­ся ути­литой ifuse:

santoku@santoku-vm:~$ ifuse --container com.getdropbox.Dropbox ~/Desktop/Applications/
santoku@santoku-vm:~$

В резуль­тате выпол­нения этой коман­ды дирек­тория с дан­ными при­ложе­ния будет смон­тирова­на в дирек­тории ~/Desktop/Applications:

santoku@santoku-vm:~$ ls ~/Desktop/Applications/
Documents Library StoreKit tmp
santoku@santoku-vm:~$

От­монти­ровать дан­ные при­ложе­ния мож­но коман­дой fusermount –u ~/Desktop/Applications.

 

Резервная копия iTunes

Бэ­кап устрой­ства тра­дици­онно слу­жит одним из популяр­ных век­торов извле­чения дан­ных, что неуди­витель­но, учи­тывая, что бэкап по опре­деле­нию дол­жен содер­жать мас­су цен­ной информа­ции об устрой­стве и его вла­дель­це. Для соз­дания бэкапа мож­но вос­поль­зовать­ся ути­литой idevicebackup2:

santoku@santoku-vm:~$ idevicebackup2 backup --full ~/Desktop
Backup directory is "/home/santoku/Desktop"
Started "com.apple.mobilebackup2" service on port 50066.
Negotiated Protocol Version 2.1
Starting backup...
Enforcing full backup from device.
Backup will be unencrypted.
Requesting backup from device...
Full backup mode.
[= ] 1% Finished
Receiving files
....
Received 237 files from device.
Backup Successful.
santoku@santoku-vm:~$

В зависи­мос­ти от количес­тва кон­тента на устрой­стве соз­дание резер­вной копии может занять дли­тель­ное вре­мя (до получа­са).

Дру­гая потен­циаль­ная проб­лема, свя­зан­ная с бэкапа­ми, зак­люча­ется в том, что они могут быть зашиф­рованы. Шиф­рование бэкапов в iOS осу­щест­вля­ется на сто­роне устрой­ства, поэто­му если поль­зователь защитил бэкап паролем, то все дан­ные, отда­ваемые устрой­ством в про­цес­се бэкапа, будут зашиф­рованы. Пароль мож­но попытать­ся подоб­рать — для это­го сущес­тву­ют как ком­мерчес­кие, так и бес­плат­ные инс­тру­мен­ты. Без пароля дос­туп к содер­жимому фай­лов бэкапа невоз­можен.

По умол­чанию idevicebackup2 сох­раня­ет резер­вную копию во внут­реннем фор­мате iOS, который не впол­не под­ходит для руч­ного иссле­дова­ния, пос­коль­ку, нап­ример, вмес­то име­ни фай­ла в нем исполь­зует­ся зна­чение хеш‑фун­кции SHA-1 от пути фай­ла. Пре­иму­щес­тво это­го внут­ренне­го фор­мата iOS в том, что мно­гие прог­раммы зна­ют, как с ним работать, так что для ана­лиза содер­жимого бэкапа дос­таточ­но открыть его в одной из таких прог­рамм (нап­ример, iOS Backup Analyzer, iBackupBot, или iExplorer).

Ес­ли же по каким‑то при­чинам тре­бует­ся получить бэкап в более «чита­емом» фор­мате, то мож­но вос­поль­зовать­ся коман­дой unback:

santoku@santoku-vm:~$ idevicebackup2 unback ~/Desktop

Эта коман­да соз­даст на рабочем сто­ле дирек­торию _unback_, в которой будет сох­ранена резер­вная копия устрой­ства в виде тра­дици­онно­го дерева фай­лов, а не в виде спис­ка фай­лов с псев­дослу­чай­ными име­нами, как ранее.

 

Файловая система

Ути­лита ifuse может быть исполь­зована и для дос­тупа к фай­ловой сис­теме iOS-устрой­ства. Сра­зу замечу, что стан­дар­тная служ­ба AFC поз­воля­ет получить дос­туп толь­ко к содер­жимому дирек­тории /var/mobile/Media, в которой хра­нят­ся фото- и виде­офай­лы, филь­мы, музыка и про­чий меди­акон­тент. Эта дирек­тория может быть смон­тирова­на при помощи коман­ды ifuse ~/Desktop/Media/.

Ес­ли устрой­ству был сде­лан jailbreak и уста­нов­лена служ­ба AFC2, то воз­можнос­ти дос­тупа к фай­ловой сис­теме сущес­твен­но рас­ширя­ются. AFC2 — это тот же AFC, толь­ко име­ющий дос­туп ко всей фай­ловой сис­теме, а не толь­ко к дирек­тории /var/mobile/Media. Кор­невая фай­ловая сис­тема устрой­ства может быть смон­тирова­на сле­дующим обра­зом: ifuse --root ~/Desktop/Media/. Отмонти­рова­ние устрой­ства осу­щест­вля­ется, как и в слу­чае с дос­тупом к дан­ным при­ложе­ний, коман­дой fusermount –u ~/Desktop/Media.

 

FILE_RELAY

File_relay — один из менее извес­тных сер­висов iOS, поз­воля­ющий в некото­рых слу­чаях получать дан­ные, недос­тупные через дру­гие интерфей­сы. Сер­вис при­сутс­тву­ет во всех вер­сиях iOS, начиная с 2.0 (тог­да ОС еще называ­лась iPhone OS), но спи­сок дос­тупных дан­ных меня­ется от вер­сии к вер­сии.

Для извле­чения дан­ных через служ­бу file_relay мож­но вос­поль­зовать­ся ути­литой filerelaytest (она будет ском­пилиро­вана, толь­ко если ука­зать параметр --enable-dev-tools при кон­фигура­ции libimobiledevice):

![3](3.jpg)santoku@santoku-vm:~$ filerelaytest
Connecting...
Requesting AppleSupport, Network, VPN, WiFi, UserDatabases, CrashReporter, tmp, SystemConfiguration
Receiving .........................................................................................................
Total size received: 393414
santoku@santoku-vm:~$

Источники file_relay в iOS 8

AppleTV Baseband Bluetooth Caches CoreLocation CrashReporter CLTM demod Keyboard Lockdown MobileBackup MobileInstallation MobileMusicPlayer Network Photos SafeHarbor SystemConfiguration Ubiquity UserDatabases AppSuppor t Voicemail VPN WiFi WirelessAutomation MapsLogs NANDDebugInfo IORegUSBDevice VARFS HFSMeta tmp MobileAsset GameKitLogs Device-O-Matic MobileDelete itunesstored Accounts AddressBook FindMyiPhone DataAccess DataMigrator EmbeddedSocial MobileCal MobileNotes

Эта коман­да выпол­нит под­клю­чение к служ­бе file_relay и зап­росит фик­сирован­ный набор «источни­ков» (sources): AppleSupport, Network, VPN, WiFi, UserDatabases, CrashReporter, tmp, SystemConfiguration. Каж­дый такой источник — это один файл или более с устрой­ства. Пол­ный спи­сок источни­ков для iOS 8 при­веден во врез­ке. Для зап­роса опре­делен­ного источни­ка дос­таточ­но исполь­зовать его имя в качес­тве парамет­ра для filerelaytest:

santoku@santoku-vm:~$ filerelaytest Accounts
Connecting...
Requesting Accounts
Receiving ..........
Total size received: 31217
santoku@santoku-vm:~$

Ре­зуль­тат (то есть извле­чен­ные дан­ные) будет записан в файл dump.cpio.gz в текущей дирек­тории. Его мож­но рас­паковать с помощью стан­дар­тных ути­лит gunzip и cpio:

santoku@santoku-vm:~$ gunzip dump.cpio.gz
santoku@santoku-vm:~$ cpio -idmv < dump.cpio
.
./var
./var/mobile
./var/mobile/Library
./var/mobile/Library/Accounts
./var/mobile/Library/Accounts/Accounts3.sqlite
./var/mobile/Library/Accounts/Accounts3.sqlite-shm
./var/mobile/Library/Accounts/Accounts3.sqlite-wal
./var/mobile/Library/Preferences
./var/mobile/Library/Preferences/com.apple.accountsd.plist
6297 blocks
santoku@santoku-vm:~$

До iOS 8 этот сер­вис был исклю­читель­но полез­ным и поз­волял получить дан­ные, недос­тупные через дру­гие интерфей­сы (нап­ример, если бэкап зашиф­рован). Но, начиная с iOS 8, Apple вве­ла допол­нитель­ную про­вер­ку: для того что­бы служ­ба file_relay работа­ла, на устрой­стве дол­жен быть уста­нов­лен спе­циаль­ный кон­фигура­цион­ный про­филь, под­писан­ный Apple.

При уста­нов­ке такого про­филя в дирек­тории /Library/Managed Preferences/mobile/ будет соз­дан файл com.apple.mobile_file_relay.plist со сле­дующим содер­жани­ем:

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<dict>
<key>Enabled</key>
<true />
</dict>
</plist>

file_relay во вре­мя выпол­нения про­веря­ет наличие это­го фай­ла и зна­чение клю­ча Enabled в нем и воз­вра­щает дан­ные, толь­ко если оно уста­нов­лено в true.

Автоматизация

Один из замеча­тель­ных аспектов libimobiledevice сос­тоит в том, что эта биб­лиоте­ка, помимо готовых ути­лит для обще­ния с устрой­ством, пре­дос­тавля­ет и API для соз­дания сво­их инс­тру­мен­тов. Она содер­жит, нап­ример, при­вяз­ки для Python, пре­дос­тавля­ющие такой же уро­вень дос­тупа к раз­личным сер­висам устрой­ства. Исполь­зуя этот API, ты можешь дос­таточ­но быс­тро соз­дать имен­но тот инс­тру­мен­тарий, который тебе необ­ходим.

 

iCloud

На­чиная с iOS 5, устрой­ства могут соз­давать собс­твен­ную резер­вную копию в обла­ке iCloud, а так­же вос­ста­нав­ливать­ся из такой копии при пер­воначаль­ной нас­трой­ке. Для дос­тупа к дан­ным необ­ходимо зна­ние Apple ID и пароля. Одно из решений с откры­тым кодом для это­го — iLoot. Ути­лита дос­таточ­но прос­та в исполь­зовании, поэто­му давать какие‑либо пояс­нения излишне: на вход пода­ется Apple ID и пароль, на выходе — резер­вные копии, заг­ружен­ные из iCloud’а. На момент написа­ния статьи iLoot не работа­ет с учет­ными запися­ми, для которых вклю­чена дву­хэтап­ная аутен­тифика­ция.

 

Заключение

В статье я пос­тарал­ся рас­ска­зать о дос­тупных спо­собах извле­чения дан­ных из iOS-устрой­ств — спо­собах, не тре­бующих финан­совых зат­рат. За кад­ром остался такой важ­ный аспект иссле­дова­ния, как ана­лиз извле­чен­ных дан­ных, — эта тема гораз­до более обширна и сущес­твен­но зависит от вер­сии iOS и уста­нов­ленных прог­рамм, поэто­му рас­крыть тему ана­лиза «в общем» пред­став­ляет­ся труд­нодос­тижимым. Тем не менее я наде­юсь, что пред­став­ленный матери­ал ока­зал­ся инте­ресен и ты узнал из него что‑то новое. Happy hacking!

Оставить мнение