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

33 %
67 %
Information about Владимир Пузанов - JailBreak: Разработка без лимитов
Technology

Published on September 7, 2009

Author: bexcite

Source: slideshare.net

Jailbreak: разработка без лимитов Владимир Пузанов farcaller@hackndev.com Владимир Кириллов proger@hackndev.com Hack&Dev Team

Что такое Jailbreak возможность доступа ко всей ФС устройства возможность выполнения приложений вне системной песочницы использование всех системных вызовов, в т.ч. fork(2) возможность запуска неподписанных бинарников возможность использования динамических библиотек активируется при помощи бинарного патча на ядро Sandbox Системный фреймворк для ограничения доступа, управляется набором правил (аналог systrace, DTrace) Активен для всех установленых приложений (в ˜/Applications/).

Cydia Порт APT (Application Packaging Tool для Debian Linux) на iPhone, GUI. Полноценная система зависимостей, обновлений и блокировок. Встроенный магазин для продажи контента (Cydia Store).

Новые горизонты публикация (и продажа) приложений, не прошедших модерацию в AppStore интеграция привычных UNIX-приложений на iPhone: OpenSSH gdb <your favorite unix tool here> темы оформления расширеная функциональность: доступ ко всем системным вызовам использование демонов инъекция в приложения (в том числе системные демоны и менеджеры: SpringBoard, etc.)

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

Mach Object reference: xnu/osfmk/mach-o/ заголовок struct mach_header команды загрузки (описывают разметку и компоновочные характеристики файла) struct load_command сегменты описывают регионы виртуальной памяти (код, данные, стек, ...) struct segment_command сегмент редактирования ссылок (link edit, для динамических бинарников) struct dysymtab_command

Лезем в бинарник binutils as ассемблер ld компоновщик объектных файлов dyld рантаймовый редактор компоновки nm просмотрщик символов (помогает найти точки для внедрения) otool парсер формата Mach-O (информация о бинарнике)

Разметка бинарного файла 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)

Виртуальная память процесса 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%)

More Tools gdb GNU Debugger, позволяет изучать программу изнутри почти в режиме интерпретатора реализован на ptrace(2) class-dump генератор прототипов классов и протоколов на базе runtime-секции бинарника IDA профессиональный инструмент для дизассемблирования и анализа кода ARM Help встроенный в OSX ARMARM с индексированием man(1) ваш друг, товарищ и брат

Как не потерятся в hex’e IDA

Лезем в бинарник время выполнения DYLD_PRELOAD (dyld(1)) изменение протекции виртуальных страниц vm_protect/mprotect(2) не везде!

Плагин для просмотра баланса оператора Разработаем плагин, который 1 будет посылать USSD-запрос оператору с текстом ∗101# 2 будет перехватывать интерфейс USSD-оповещений в SpringBoard и временно отключать его 3 будет обрабатывать ответ и выдирать из него остаток на счету 4 будет показывать остаток в форме, доступной через SBSettings 5 и будет автоматически обновлять баланс каждые пять минут

Алло, коммборд! Для звонков в iPhone используется связка из MobilePhone, CoreTelephony и commcenter. Необходимый нам код скорее всего находится в MobilePhone, изучим его с помощью class-dump, IDA и GDB... Судя по списку классов, нам надо смотреть в PhoneApplication, особенно красив метод - (BOOL)dialPhoneNumber:(NSString *)phone forUID:(int)fp12 dialAssist:(BOOL)fp16; // IMP=0x0000a14c

Внутри 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-объекте)

Внутри MobilePhone... (продолжение) В теле функции есть интересный вызов к CoreTelephony: CTCallDialWithID После анализа тела функции выше, можно смело утверждать о назначании двух аргументов этой функции. Попробуем запустить ее самостоятельно: (gdb) p (int)*0x5e3ac(@"*101#", -1) 0x0 функция выполнилась, а на экране – UI отправки USSD запроса. Искомый API для инициализации USSD запросов найден.

MobileSubstrate перехват вызовов MobileSubstrate позволяет перехватить C и ObjC вызовы и выполнить необходимый код. Так, Winterboard перехватывает open и возвращает не оригинальные файлы с графикой, а файлы из каталогов текущей темы. Функции: инъекция в любую ARM/Thumb C-функцию инъекция в любой Objective-C метод загрузка пользовательских библиотек или бандлов

Блокируем USSD интерфейс в SpringBoard Задача: заблокировать отображение USSD-окон в SpringBoard. получим список классов с помощью class-dump и изучим их. Нашей цели скорее всего соответствует класс SBUSSDAlert. с помощью анализа бектрейса у методов этого класса (используя брейкпоинты в gdb и адресам полученным из class-dump), что в методе +registerForAlerts происходит регистрация SpringBoard в системе событий CoreTelephony.

SpringBoard inside

Компилируем код без 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

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

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 $<

Плагин для SpringBoard Можно встроится в какой-то из UIView от SpringBoard (например в lock–screen), или просто сделать плагин для SBSettings:

Итак, для того, чтобы рассказать Вам про Jailbreak мы: farcaller@ покурил ARMARM и дампы xxd proger@ наконец залез в исходники XNU одели костюмы (:P) © 2009 Hack&Dev Team

Add a comment

Related presentations

Presentación que realice en el Evento Nacional de Gobierno Abierto, realizado los ...

In this presentation we will describe our experience developing with a highly dyna...

Presentation to the LITA Forum 7th November 2014 Albuquerque, NM

Un recorrido por los cambios que nos generará el wearabletech en el futuro

Um paralelo entre as novidades & mercado em Wearable Computing e Tecnologias Assis...

Microsoft finally joins the smartwatch and fitness tracker game by introducing the...

Related pages

Mac OS X Hints

Владимир Пузанов — разработчик ... разработка, ... DVD-RW SIMBL полезности MacBook Ctrl jailbreak Leopard ...
Read more

Mac OS X Hints | Macosxhints.ru | WebCompanyInfo.com

« apple baskakov dirokoler faily feedburner feeds goraya gsmpress hints iphone itunes jailbreak ... Владимир Пузанов ... без ...
Read more

Morison International - the global association of ...

Morison International: London (head office) United Kingdom: Morison Kak & Associes: Phnom Penh (head office) Cambodia: Morison Köln AG ...
Read more

Работа в Банке - mkb.ru

+7 495 777-4-888, 8 800 100-4-888 (бесплатно по России); ежедневно, круглосуточно. Служба поддержки ...
Read more

Интернет | Mac OS X Hints

Владимир Пузанов ... я решил попытаться решить её без ... файлы Leopard jailbreak web-разработка ...
Read more

Информация АШАН Алтуфьево - auchan.ru

Владимир; Балашов ... Разработка сайта ...
Read more

Ворошилов, Климент Ефремович — Википедия

... утвердил большое количество т. н. «лимитов» ... Клим и Владимир, ... Пузанов ...
Read more

Как узнать ключ от своей лицензионной Windows 7, 8, 8.1 ...

Великий Владимир; ... без жертв ... разработка ...
Read more

Распределение обязанностей заместителями

Действует от имени Банка России и представляет без ... лимитов ... разработка и ...
Read more