Владимир Пузанов - JailBreak: Разработка без лимитов
Upcoming SlideShare
Loading in...5
×

Like this? Share it with your network

Share

Владимир Пузанов - JailBreak: Разработка без лимитов

  • 3,281 views
Uploaded on

 

More in: Technology
  • Full Name Full Name Comment goes here.
    Are you sure you want to
    Your message goes here
  • Unlock any iOS Device Safe and Free!
    Website:
    UnlockiOSNow.com
    Are you sure you want to
    Your message goes here
No Downloads

Views

Total Views
3,281
On Slideshare
3,046
From Embeds
235
Number of Embeds
2

Actions

Shares
Downloads
21
Comments
1
Likes
2

Embeds 235

http://iphonedevcamp.com.ua 231
http://www.slideshare.net 4

Report content

Flagged as inappropriate Flag as inappropriate
Flag as inappropriate

Select your reason for flagging this presentation as inappropriate.

Cancel
    No notes for slide

Transcript

  • 1. Jailbreak: разработка без лимитов Владимир Пузанов farcaller@hackndev.com Владимир Кириллов proger@hackndev.com Hack&Dev Team
  • 2. Что такое Jailbreak возможность доступа ко всей ФС устройства возможность выполнения приложений вне системной песочницы использование всех системных вызовов, в т.ч. fork(2) возможность запуска неподписанных бинарников возможность использования динамических библиотек активируется при помощи бинарного патча на ядро Sandbox Системный фреймворк для ограничения доступа, управляется набором правил (аналог systrace, DTrace) Активен для всех установленых приложений (в ˜/Applications/).
  • 3. Cydia Порт APT (Application Packaging Tool для Debian Linux) на iPhone, GUI. Полноценная система зависимостей, обновлений и блокировок. Встроенный магазин для продажи контента (Cydia Store).
  • 4. Новые горизонты публикация (и продажа) приложений, не прошедших модерацию в AppStore интеграция привычных UNIX-приложений на iPhone: OpenSSH gdb <your favorite unix tool here> темы оформления расширеная функциональность: доступ ко всем системным вызовам использование демонов инъекция в приложения (в том числе системные демоны и менеджеры: SpringBoard, etc.)
  • 5. Hacking iPhone: ABI ABI Application Binary Interface набор соглашений между программами, библиотеками и операционной системой, обеспечивающих взаимодействие этих компонентов на низком уровне на данной платформе Mach-O Mach Object стандарт ABI в Mac OS X (mach-o(5)) mobile$ file /System/Library/CoreServices/SpringBoard.app/SpringBoard /System/Library/CoreServices/SpringBoard.app/SpringBoard: Mach-O executable acorn
  • 6. Mach Object reference: xnu/osfmk/mach-o/ заголовок struct mach_header команды загрузки (описывают разметку и компоновочные характеристики файла) struct load_command сегменты описывают регионы виртуальной памяти (код, данные, стек, ...) struct segment_command сегмент редактирования ссылок (link edit, для динамических бинарников) struct dysymtab_command
  • 7. Лезем в бинарник binutils as ассемблер ld компоновщик объектных файлов dyld рантаймовый редактор компоновки nm просмотрщик символов (помогает найти точки для внедрения) otool парсер формата Mach-O (информация о бинарнике)
  • 8. Разметка бинарного файла mobile$ otool -hlL /bin/bash # stripped /bin/bash: Mach header magic cputype cpusubtype caps filetype ncmds sizeofcmds flags 0xfeedface 12 0 0x00 2 15 1560 0x00000085 Section sectname __text Load command 1 segname __TEXT cmd LC_SEGMENT addr 0x00002000 cmdsize 396 size 0x0005942c segname __TEXT offset 4096 vmaddr 0x00001000 align 2^2 (4) vmsize 0x00070000 reloff 0 fileoff 0 nreloc 0 filesize 458752 flags 0x80000400 maxprot 0x00000005 reserved1 0 initprot 0x00000005 reserved2 0 nsects 5 Load command 6 flags 0x0 cmd LC_LOAD_DYLINKER cmdsize 28 name /usr/lib/dyld (offset 12)
  • 9. Виртуальная память процесса vmmap(1) Virtual Memory Map of process 1 (launchd) ==== Non-writable regions for process 1 __TEXT 0000000100000000-000000010002a000 168K r-x/rwx SM=COW /sbin/launchd __LINKEDIT 000000010002d000-0000000100036000 36K r--/rwx SM=COW /sbin/launchd STACK GUARD 000000010005b000-000000010005c000 4K ---/rwx SM=NUL STACK GUARD 00007fff5bc00000-00007fff5f400000 56.0M ---/rwx SM=NUL __TEXT 00007fff5fc00000-00007fff5fc3c000 240K r-x/rwx SM=COW /usr/lib/dyld __LINKEDIT 00007fff5fc7b000-00007fff5fc8f000 80K r--/rwx SM=COW /usr/lib/dyld ==== Writable regions for process 1 __DATA 000000010002a000-000000010002c000 8K rw-/rwx SM=COW /sbin/launchd __DATA 000000010002c000-000000010002d000 4K rw-/rwx SM=PRV /sbin/launchd MALLOC (admin) 000000010003e000-000000010003f000 4K rw-/rwx SM=PRV Stack 000000010005c000-00000001000de000 520K rw-/rwx SM=COW thread 1 Mach message 00000001000fb000-00000001000fd000 8K rw-/rwx SM=PRV MALLOC_LARGE 00000001000fd000-00000001000fe000 4K rw-/rwx SM=COW DefaultMallocZon Stack 0000000100401000-0000000100483000 520K rw-/rwx SM=PRV thread 2 shared memory 0000000100483000-000000010048c000 36K rw-/rwx SM=SHM shared memory 000000010048d000-0000000100490000 12K rw-/rwx SM=SHM MALLOC_LARGE (freed) 0000000101800000-0000000102200000 10.0M rw-/rwx SM=COW Stack 00007fff5f400000-00007fff5fc00000 8192K rw-/rwx SM=SHM thread 0 __DATA 00007fff5fc3c000-00007fff5fc7b000 252K rw-/rwx SM=COW /usr/lib/dyld ==== Summary for process 1 ReadOnly portion of Libraries: Total=33.0M resident=4804K(14%) swapped_out_or_unallocated=28.3M(86%) Writable regions: Total=38.3M written=384K(1%) resident=476K(1%) swapped_out=320K(1%) unallocated=37.8M(99%)
  • 10. More Tools gdb GNU Debugger, позволяет изучать программу изнутри почти в режиме интерпретатора реализован на ptrace(2) class-dump генератор прототипов классов и протоколов на базе runtime-секции бинарника IDA профессиональный инструмент для дизассемблирования и анализа кода ARM Help встроенный в OSX ARMARM с индексированием man(1) ваш друг, товарищ и брат
  • 11. Как не потерятся в hex’e IDA
  • 12. Лезем в бинарник время выполнения DYLD_PRELOAD (dyld(1)) изменение протекции виртуальных страниц vm_protect/mprotect(2) не везде!
  • 13. Плагин для просмотра баланса оператора Разработаем плагин, который 1 будет посылать USSD-запрос оператору с текстом ∗101# 2 будет перехватывать интерфейс USSD-оповещений в SpringBoard и временно отключать его 3 будет обрабатывать ответ и выдирать из него остаток на счету 4 будет показывать остаток в форме, доступной через SBSettings 5 и будет автоматически обновлять баланс каждые пять минут
  • 14. Алло, коммборд! Для звонков в iPhone используется связка из MobilePhone, CoreTelephony и commcenter. Необходимый нам код скорее всего находится в MobilePhone, изучим его с помощью class-dump, IDA и GDB... Судя по списку классов, нам надо смотреть в PhoneApplication, особенно красив метод - (BOOL)dialPhoneNumber:(NSString *)phone forUID:(int)fp12 dialAssist:(BOOL)fp16; // IMP=0x0000a14c
  • 15. Внутри MobilePhone... Агрументы функции в arm передаются в регистрах (при этом не забываем про “магические” self и cmd в r0 и r1). Остановим выполнение MobilePhone в gdb прямо в начале потенциального метода: (gdb) b *0xa14c Breakpoint 1 at 0xa14c (gdb) cont Continuing. и посмотрим на phone, как только брекпоинт сработает: Breakpoint 1, 0x0000a14c in ?? () (gdb) po $r2 *101# (тут po сокращение от print-object, команды, которая вызывает -description на целевом ObjC-объекте)
  • 16. Внутри MobilePhone... (продолжение) В теле функции есть интересный вызов к CoreTelephony: CTCallDialWithID После анализа тела функции выше, можно смело утверждать о назначании двух аргументов этой функции. Попробуем запустить ее самостоятельно: (gdb) p (int)*0x5e3ac(@"*101#", -1) 0x0 функция выполнилась, а на экране – UI отправки USSD запроса. Искомый API для инициализации USSD запросов найден.
  • 17. MobileSubstrate перехват вызовов MobileSubstrate позволяет перехватить C и ObjC вызовы и выполнить необходимый код. Так, Winterboard перехватывает open и возвращает не оригинальные файлы с графикой, а файлы из каталогов текущей темы. Функции: инъекция в любую ARM/Thumb C-функцию инъекция в любой Objective-C метод загрузка пользовательских библиотек или бандлов
  • 18. Блокируем USSD интерфейс в SpringBoard Задача: заблокировать отображение USSD-окон в SpringBoard. получим список классов с помощью class-dump и изучим их. Нашей цели скорее всего соответствует класс SBUSSDAlert. с помощью анализа бектрейса у методов этого класса (используя брейкпоинты в gdb и адресам полученным из class-dump), что в методе +registerForAlerts происходит регистрация SpringBoard в системе событий CoreTelephony.
  • 19. SpringBoard inside
  • 20. Компилируем код без Xcode используйте make(1) (GNU Make для OSX) DEV=/Developer/Platforms/iPhoneOS.platform/Developer CC=$(DEV)/usr/bin/arm-apple-darwin9-gcc-4.2.1 SDK=$(DEV)/SDKs/iPhoneOS3.0.sdk LD=$(CC) LDFLAGS=-lobjc -dynamiclib -bind_at_load -L"$(SDK)$/usr/lib/" -F"$(SDK)$/System/Library/PrivateFrameworks/" -F"$(SDK)/System/Library/Frameworks/" -framework CoreTelephony -framework CoreFoundation -framework Foundation -framework UIKit -framework CoreGraphics -framework SystemConfiguration CFLAGS=-fconstant-cfstrings -std=gnu99 -Wall -O2 -I"$(SDK)/usr/include" -I"$(DEV)/usr/lib/gcc/arm-apple-darwin9/4.2.1/include/" -F"$(SDK)/System/Library/Frameworks" -F"$(SDK)/System/Library/PrivateFrameworks" -I"$(SDK)" VERSION=1.0 Balance.dylib: main.o BalanceView.o SBSwizzler.o Oper_Djuice.o Oper_MTC.o $(LD) $(LDFLAGS) -o $@ $^ env CODESIGN_ALLOCATE=$(DEV)/usr/bin/codesign_allocate ldid -S Balance.dylib
  • 21. Makefile на каждый день make(1) (OpenBSD), bsdmake(1) (OS X), pmake(1) (Linux) SRC?= jail INCL?= template.tex pygments.tex VIEWER?= evince -s PREVIEWER?= evince .PATH: ${.CURDIR} FIG= FIGPDF= ${FIG:S/.eps/.pdf/g} ${SRC}.pdf: ${SRC}.tex ${INCL} ${FIG} env TEXINPUTS=:${.CURDIR} pdflatex ${SRC}.tex ${FIGPDF}: ${FIG} figs: ${FIGPDF} obj: -[ -d ${.CURDIR}/obj ] || mkdir -p ${.CURDIR}/obj clean: -rm -f *.{aux,log,nav,out,snm,toc,pdf} view: ${SRC}.pdf ${VIEWER} ${SRC}.pdf pre: ${SRC}.pdf ${PREVIEWER} ${SRC}.pdf
  • 22. Makefile на каждый день (продолжение) src: for source in ‘find ${.CURDIR}/src/ -type f | grep -v CVS‘; do printf ">>> %snn" $$source; pygmentize -f latex $$source | perl -pi -e ’s/Verbatim}[/Verbatim}[fontsize=footnotesize,/g’; echo; done nframes: grep ’begin{frame}’ ${.CURDIR}/${SRC}.tex | grep -v ’s*%’ | wc -l .PHONY: clean view src nframes .SUFFIXES: .eps .pdf .eps.pdf: epstopdf $<
  • 23. Плагин для SpringBoard Можно встроится в какой-то из UIView от SpringBoard (например в lock–screen), или просто сделать плагин для SBSettings:
  • 24. Итак, для того, чтобы рассказать Вам про Jailbreak мы: farcaller@ покурил ARMARM и дампы xxd proger@ наконец залез в исходники XNU одели костюмы (:P) © 2009 Hack&Dev Team