android hacks, variants, tricks and resources esc sv 2012

58
1 Android Hacks, Variants, Tricks and Resources Embedded Systems Conference SV 2012 Karim Yaghmour @karimyaghmour

Upload: opersys-inc

Post on 06-May-2015

2.403 views

Category:

Technology


1 download

DESCRIPTION

Karim Yaghmour's "Android Hacks, Variants, Tricks, and Resources" Presentation at ESC SV 2012

TRANSCRIPT

Page 1: Android Hacks, Variants, Tricks and Resources ESC SV 2012

1

Android Hacks, Variants, Tricks and

Resources

Embedded Systems Conference SV 2012

Karim Yaghmour@karimyaghmour

Page 2: Android Hacks, Variants, Tricks and Resources ESC SV 2012

2

These slides are made available to you under a Creative Commons Share-Alike 3.0 license. The full terms of this license are here: https://creativecommons.org/licenses/by-sa/3.0/

Attribution requirements and misc., PLEASE READ:

● This slide must remain as-is in this specific location (slide #2), everything else you are free to change; including the logo :-)

● Use of figures in other documents must feature the below “Originals at” URL immediately under that figure and the below copyright notice where appropriate.

● You are free to fill in the “Delivered and/or customized by” space on the right as you see fit.

● You are FORBIDEN from using the default “About” slide as-is or any of its contents.

(C) Copyright 2012, Opersys inc.

These slides created by: Karim Yaghmour

Originals at: www.opersys.com/community/docs

Delivered and/or customized by

Page 3: Android Hacks, Variants, Tricks and Resources ESC SV 2012

3

About

● Author of:

● Introduced Linux Trace Toolkit in 1999● Originated Adeos and relayfs (kernel/relay.c)● Training, Custom Dev, Consulting, ...

Page 4: Android Hacks, Variants, Tricks and Resources ESC SV 2012

4

Agenda

● AOSP's limitations● Tearing AOSP apart● Forks● Ports● Mods● Melding with “Classic” Linux Stack● Headless Android

Page 5: Android Hacks, Variants, Tricks and Resources ESC SV 2012

5

AOSP's limits

● Rigid● Closed dev model● Fits Google's prerogatives● Excludes a lot of stuff● ... IOW, doesn't always fit what you need

Page 6: Android Hacks, Variants, Tricks and Resources ESC SV 2012

6

Tearing AOSP apart

● Forks● Ports● Mods● Melds

Page 7: Android Hacks, Variants, Tricks and Resources ESC SV 2012

7

Forks

● Cyanogenmod● Replicant● MIUI● Cyborgstack

Page 8: Android Hacks, Variants, Tricks and Resources ESC SV 2012

8

Cyanogenmod

● After-market handset firmware● Requires rooted phone● http://www.cyanogenmod.com● Advertized features:

● Lockscreen Gestures● Phone Goggles● OpenVPN● Incognito mode● Themes support● DSP Equalizer

Page 9: Android Hacks, Variants, Tricks and Resources ESC SV 2012

9

Page 10: Android Hacks, Variants, Tricks and Resources ESC SV 2012

10

● More interestingly:● http://wiki.cyanogenmod.com/● https://github.com/CyanogenMod● Includes Busybox● Custom Launcher (ADWLauncher)● Lots of tiny tweaks and mods ... worth doing a “diff”

Page 11: Android Hacks, Variants, Tricks and Resources ESC SV 2012

11

Replicant

● Android distro that is 100% Free Software● http://replicant.us/● Includes FDroid free software app store

Page 12: Android Hacks, Variants, Tricks and Resources ESC SV 2012

12

MIUI

● Closed-source fork with slick UI enhancements

● Many translations

● http://en.miui.com/

● Advertized features:● Home screen

● Dialer

● SMS

● Contacts

● Themes

● Camera

● Gallery

● Net disk, File manager, Traffic monitor, Backup, Notes, ...

Page 13: Android Hacks, Variants, Tricks and Resources ESC SV 2012

13

Page 14: Android Hacks, Variants, Tricks and Resources ESC SV 2012

14

Cyborgstack

A truly open, no holds barred Android-based distro

www.cyborgstack.org

“Boldly go where no droid has gone before”

Page 15: Android Hacks, Variants, Tricks and Resources ESC SV 2012

15

What the AOSP does

Page 16: Android Hacks, Variants, Tricks and Resources ESC SV 2012

16

Where Cyborgstack is going

Page 17: Android Hacks, Variants, Tricks and Resources ESC SV 2012

17

Goals

● Truly Open development community● Nothing is off limits

● Accept things which will likely never make it to AOSP

● Configurability● Customizability● Mission-critical● Ability to provide high security● Vendor/Platform Independent

Page 18: Android Hacks, Variants, Tricks and Resources ESC SV 2012

18

What's there?

● glibc-based rootfs add-ons● LTTng● “Headless Android”● BusyBox

Page 19: Android Hacks, Variants, Tricks and Resources ESC SV 2012

19

Ports

● RIM Playbook● BlueStacks● Alien Dalvik

Page 20: Android Hacks, Variants, Tricks and Resources ESC SV 2012

20

RIM Playbook

Page 21: Android Hacks, Variants, Tricks and Resources ESC SV 2012

21

BlueStacks

Page 22: Android Hacks, Variants, Tricks and Resources ESC SV 2012

22

Alien Dalvik (Myriad Group)

Page 23: Android Hacks, Variants, Tricks and Resources ESC SV 2012

23

Mods

● XDA Developers● ...

Page 24: Android Hacks, Variants, Tricks and Resources ESC SV 2012

24

Melding with “Classic” Linux stack

1. Rationale2. Roadblocks3. Where do I start?4. Coexistence Approaches5. Been there done that6. Unresolved / Uncharted7. Tools8. Embedded Linux Workspace9. Basic Root Filesystem Structure10. Libraries11. Main System Applications12. Demos

Page 25: Android Hacks, Variants, Tricks and Resources ESC SV 2012

25

1. Rationale

“Android took GNU out the back door, shot him in the head, and ran away with the penguin” -- Surely from Tarantino's next flick

● A ton of mature user-space packages available● Linux has been around for 20 years

● Linux's user-space has been developed in the open

● A ton of “Linux”-centric stacks have been developed through the years● “Porting” to Android not always possible/desirable/realistic

● Android doesn't provide everything● Touch-based, consumer-oriented

● Linux is very strong on backend/server side

● Android exhibits symptoms of “my way or the highway” design

● A whole GNU world● glibc vs. Bionic

Page 26: Android Hacks, Variants, Tricks and Resources ESC SV 2012

26

2. Roadblocks

● Filesystem● Android is non-FHS-compliant

● C library● Bionic vs. glibc

● Interconnect fabric● Intents vs. DBUS

● IPC● Binder vs. Sockets and other std Unix IPC

● Display management● SurfaceFlinger vs. X

● I/O● Framebuffer, keyboard, mouse, disk, ...

Page 27: Android Hacks, Variants, Tricks and Resources ESC SV 2012

27

3. Where do I start?

● Android-side:● AOSP

● “Linux”-side:● Traditional distro

– Ubuntu, Fedora, Debian, Gentoo, ...● Embedded distro

– Yocto, Buildroot, LTIB, ...● Build Your Own● Cherry-picking

Page 28: Android Hacks, Variants, Tricks and Resources ESC SV 2012

28

4. Coexistence Approaches

● Single filesystem● Build system integration● Build-time aggregation● Image repackaging

● chroot jails● Have a look at AlwaysInnovating Gregoire Gentil's ELC presentation● Patching to lots of pieces of the OS● Use of one FB for each OS or chvt

● Virtualization / Paravirtualization● QEMU● XEN?

Page 29: Android Hacks, Variants, Tricks and Resources ESC SV 2012

29

Page 30: Android Hacks, Variants, Tricks and Resources ESC SV 2012

30

5. Been there done that

● BusyBox in CyanogenMod● Gstreamer vs. Stagefright● Don't know how they do it:

● Alien Dalvik: Android on Meego

● ...

Page 31: Android Hacks, Variants, Tricks and Resources ESC SV 2012

31

6. Unresolved / Uncharted

● Binder from glibc

● Intent <-> DBUS bridge

● Running Android apps in X

● Running X apps in Android

“The easier thing to do, which would work on just about all Android phones without having to modify the system software at all, would be to port an X server to the NDK, using a SurfaceFlinger Surface as its root window.

You could do a generic "X11WrapperApp" that has you XSurfaceFlinger bundled and launches whatever X based app you want, and have it all play nice together.

A bit more work would be to just do an implementation of xlib that sits on top of a native Android window (opengl ES 2 if you like) without any server in the middle, and again bundle this and the X based app of your choice and you have something that is a first class app on the phone without any need for modifying the OS.”

Page 32: Android Hacks, Variants, Tricks and Resources ESC SV 2012

32

7. Tools

● GNU cross-development toolchain:● gcc - compiler● as - assembler● ld - linker● gdb/gdbserver - debugger● etc.

● C library: uClibc, eglibc or glibc

Page 33: Android Hacks, Variants, Tricks and Resources ESC SV 2012

33

8. Embedded Linux Workspace● Need to organize the components used during

cross-platform development. Workspace layout:

bootldr: target bootloader (s)build-tools: toolchain build packages and sourcesdebug: debugging toolsdoc: project documentationimages: binary images ready to be used on targetkernel: sources and build directories for target kernelsproject: your own custom code for the targetrootfs: root filesystem as seen on the targetsysapps: sources for target's system applicationstmp: temporary data and experimentstools: toolchain and all other tools required to build

software for the target.

Page 34: Android Hacks, Variants, Tricks and Resources ESC SV 2012

34

8.1. Workspace env. vars. script● Complete workspace script (devex)export PROJECT=emblinuxexport PRJROOT=/home/karim/${PROJECT}export TARGET=arm-none-linux-gnueabiexport PATH=${PATH}:[CODESOURCERY_DIR]/bincd $PRJROOT

● To use this script:

$ .⌴devex

● Possible values for $TARGET:● ARM: arm-linux, arm-unknown-linux-gnueabi● MIPS: mips-linux, mipsel-unknown-linux-gnu● I386: i386-linux, i586-geode-linux-uclibc

Page 35: Android Hacks, Variants, Tricks and Resources ESC SV 2012

35

9. Basic root filesystem structure● Unix FS structured for multi-user systems● Some directories not necessary for embedded● Filesystem Hierarchy Standard (FHS):

● /bin => Essential user binaries● /boot => Bootloader and kernel images● /dev => Device files● /etc => System configuration● /home => User home directories● /lib => Essential shared libs and kernel modules● /mnt => Temporary mount point● /opt => Add-on software packages● /sbin => Essential system binaries● /tmp => Temporary files● /usr => Secondary hierarchy (mostly user apps)● /var => Variable data generated by daemons

Page 36: Android Hacks, Variants, Tricks and Resources ESC SV 2012

36

● Non-essential multi-user dirs:● /home, /mnt, /opt, /root

● Depends on bootloader:● /boot

● Traditionally “essential”:● /bin, /dev, /etc, /lib, /proc, /sbin, /usr, /tmp, /var

● Careful with “/etc”, Android needs it to point to “/system/etc” for Dbus config ... Just hack it.

● Contain their own hierarchy:● /usr, /var

Page 37: Android Hacks, Variants, Tricks and Resources ESC SV 2012

37

● What are all these binaries directories for?● /bin => Essential binaries for user and admin● /sbin => Essential binaries for admin● /usr/bin => Non-essential user and admin binaries● /usr/sbin=> Non-essential admin binaries

● What are all those libraries directories for?● /lib => Essential system libraries● /usr/lib => Non-essential libraries

● The kernel does not force FS layout. Layout is “universally” agree upon (i.e. FHS.)

Page 38: Android Hacks, Variants, Tricks and Resources ESC SV 2012

38

● To start working on rootfs:$ cd ${PRJROOT}/rootfs

● Create core rootfs directories:$ mkdir bin lib sbin usr var

● Create the /usr hierarchy:$ mkdir usr/{bin,lib,sbin}

● Create the /var hierarchy:$ mkdir var/{lib,lock,log,run,tmp}$ chmod 1777 var/tmp

Page 39: Android Hacks, Variants, Tricks and Resources ESC SV 2012

39

10. Libraries

1.glibc

2.uClibc

Page 40: Android Hacks, Variants, Tricks and Resources ESC SV 2012

40

10.1. glibc● glibc components:

● Actual shared libraries:– Format: libLIB_NAME-GLIBC_VER.so– Examples: libm-2.3.2.so, libc-2.3.2.so

● Major revision version symbolic links:– Format: libLIB_NAME.so.MAJOR_REV_VER– Examples: libdl.so.2, libc.so.6

● Version-independent symbolic links to the major revision version symbolic links:– Format: libLIB_NAME.so– Examples: libdl.so, libm.so

● Static library archives:– Format: libLIB_NAME.a– Examples: libdl.a, libm.a

Page 41: Android Hacks, Variants, Tricks and Resources ESC SV 2012

41

● For target, need:● The actual shared libs● The major revision version symbolic links

● Also need dynamic linker:● Actual linker: ld-GLIBC_VER.so● Symbolic link to linker:

– x86, ARM, SH, m68k => ld-linux.so.MAJOR_REV_VER– MIPS, PPC => ld.so.MAJOR_REV_VER

● Must determine exact library components required.● BELS table 6.2 contains complete list

Page 42: Android Hacks, Variants, Tricks and Resources ESC SV 2012

42

● Most important components:● ld => the dynamic linker● libc => the C library● libm => the math library● libdl => the shared objects manipulation library

● Must determine exact dependencies of your applications.

● Native ldd is not cross-platform-capable

● Can use readelf or uclibc-ldd:

Page 43: Android Hacks, Variants, Tricks and Resources ESC SV 2012

43

● Copying all libraries:$ cp -d [CODESOURCERY_DIR]/arm-none-linux-gnueabi/libc/lib/* \> ${PRJROOT}/rootfs/lib

● Stripping all target libraries for space efficiency:$ arm-none-linux-gnueabi-strip ${PRJROOT}/rootfs/lib/*.so*

Page 44: Android Hacks, Variants, Tricks and Resources ESC SV 2012

44

10.2. uClibc● Same naming conventions as glibc● Implements most of the glibc components:

● ld, libc, libcrypt, libdl, libm, libpthread, libresolv, libutil.● uClibc libraries can coexist with glibc libraries in

target's /lib directory.● Copying all uClibc components:

$ cd ${PREFIX}/uclibc/lib$ cp *-*.so ${PRJROOT}/rootfs/lib$ cp -d *.so.[*0-9] ${PRJROOT}/rootfs/lib

● No need to strip uClibc libraries, they are stripped by the uClibc build script

Page 45: Android Hacks, Variants, Tricks and Resources ESC SV 2012

45

11. Main system applications● Unix systems rely on a common set of commands● Standard distros have one binary per command● May compile each relevant command one-by-one

or use packages that provide many commands in a single binary:

1.Busybox

2.Distro

Page 46: Android Hacks, Variants, Tricks and Resources ESC SV 2012

46

11.1. BusyBox● Main package used in embedded Linux to provide

core set of Unix commands: busybox.net[, [[, acpid, add-shell, addgroup, adduser, adjtimex, arp, arping, ash, awk, base64, basename, beep, blkid, blockdev, bootchartd, brctl, bunzip2, bzcat, bzip2, cal, cat, catv, chat, chattr, chgrp, chmod, chown, chpasswd, chpst, chroot, chrt, chvt, cksum, clear, cmp, comm, cp, cpio, crond, crontab, cryptpw, cttyhack, cut, date, dc, dd, deallocvt, delgroup, deluser, depmod, devmem, df, dhcprelay, diff, dirname, dmesg, dnsd, dnsdomainname, dos2unix, du, dumpkmap, dumpleases, echo, ed, egrep, eject, env, envdir, envuidgid, ether-wake, expand, expr, fakeidentd, false, fbset, fbsplash, fdflush, fdformat, fdisk, fgconsole, fgrep, find, findfs, flock, fold, free, freeramdisk, fsck, fsck.minix, fsync, ftpd, ftpget, ftpput, fuser, getopt, getty, grep, gunzip, gzip, halt, hd, hdparm, head, hexdump, hostid, hostname, httpd, hush, hwclock, id, ifconfig, ifdown, ifenslave, ifplugd, ifup, inetd, init, insmod, install, ionice, iostat, ip, ipaddr, ipcalc, ipcrm, ipcs, iplink, iproute, iprule, iptunnel, kbd_mode, kill, killall, killall5, klogd, last, length, less, linux32, linux64, linuxrc, ln, loadfont, loadkmap, logger, login, logname, logread, losetup, lpd, lpq, lpr, ls, lsattr, lsmod, lspci, lsusb, lzcat, lzma, lzop, lzopcat, makedevs, makemime, man, md5sum, mdev, mesg, microcom, mkdir, mkdosfs, mke2fs, mkfifo, mkfs.ext2, mkfs.minix, mkfs.vfat, mknod, mkpasswd, mkswap, mktemp, modinfo, modprobe, more, mount, mountpoint, mpstat, mt, mv, nameif, nbd-client, nc, netstat, nice, nmeter, nohup, nslookup, ntpd, od, openvt, passwd, patch, pgrep, pidof, ping, ping6, pipe_progress, pivot_root, pkill, pmap, popmaildir, poweroff, powertop, printenv, printf, ps, pscan, pwd, raidautorun, rdate, rdev, readahead, readlink, readprofile, realpath, reboot, reformime, remove-shell, renice, reset, resize, rev, rm, rmdir, rmmod, route, rpm, rpm2cpio, rtcwake, run-parts, runlevel, runsv, runsvdir, rx, script, scriptreplay, sed, sendmail, seq, setarch, setconsole, setfont, setkeycodes, setlogcons, setsid, setuidgid, sh, sha1sum, sha256sum, sha512sum, showkey, slattach, sleep, smemcap, softlimit, sort, split, start-stop-daemon, stat, strings, stty, su, sulogin, sum, sv, svlogd, swapoff, swapon, switch_root, sync, sysctl, syslogd, tac, tail, tar, tcpsvd, tee, telnet, telnetd, test, tftp, tftpd, time, timeout, top, touch, tr, traceroute, traceroute6, true, tty, ttysize, tunctl, udhcpc, udhcpd, udpsvd, umount, uname, unexpand, uniq, unix2dos, unlzma, unlzop, unxz, unzip, uptime, usleep, uudecode, uuencode, vconfig, vi, vlock, volname, wall, watch, watchdog, wc, wget, which, who, whoami, xargs, xz, xzcat, yes, zcat, zcip

Page 47: Android Hacks, Variants, Tricks and Resources ESC SV 2012

47

● Download BusyBox (1.18.3) to your ${PRJROOT}/sysapps directory and extract it there.

● Move to the directory for the rest of the setup:$ cd ${PRJROOT}/sysapps/busybox-1.18.3

● Configuration of BusyBox's options:$ make menuconfig

Page 48: Android Hacks, Variants, Tricks and Resources ESC SV 2012

48

Page 49: Android Hacks, Variants, Tricks and Resources ESC SV 2012

49

● “Busybox Settings”:● “Build Options” -> Cross-compiler prefix:

${TARGET}-

● “Installation Options” -> Installation prefix:${PRJROOT}/rootfs

● Build:$ make

● Install:$ make install

Page 50: Android Hacks, Variants, Tricks and Resources ESC SV 2012

50

12. Demos

● All:● AOSP● BYO glibc-based rootfs

● Demo 1: BusyBox● Demo 2: Client-Server app talking through socket

● glibc client● bionic server

● Demo 3: Surprise!

Page 51: Android Hacks, Variants, Tricks and Resources ESC SV 2012

51

12.1. Demo 1 - BusyBox

● Configure, build and “install” BusyBox● Get it copied into final RAM disk image● Modify AOSP to:

● Make sure /lib/* is executable● Path start with “/bin”● adb shell is BusyBox, not Toolbox

Page 52: Android Hacks, Variants, Tricks and Resources ESC SV 2012

52

12.2. Demo 2 – Client/Server

Page 53: Android Hacks, Variants, Tricks and Resources ESC SV 2012

53

12.3. Demo 3 – LTTng

● Patch kernel● Cross-build ltt-ctl● Modify AOSP to log to LTTng

Page 54: Android Hacks, Variants, Tricks and Resources ESC SV 2012

54

+ =

“And then GNU came back for revenge ...”-- Tarantino's sequel

Headless Android

Page 55: Android Hacks, Variants, Tricks and Resources ESC SV 2012

55

Android's display architecture

Page 56: Android Hacks, Variants, Tricks and Resources ESC SV 2012

56

How to decapitate Android

● Disable:

● SurfaceFlinger

● WindowManager

● WallpaperService

● InputMethodManager

● SystemUI

● Don't let SurfaceFlinger Client try to open binder to SurfaceFlinger

● Feed bogus values back from SurfaceFlinger Client

● Disable qemud (emulator artefact)

● Tweak internals by disabling key calls:

● In ActivityStack.java:

– startHomeActivityLocked()

– setAppStartingWindow()

● wm.detectSafeMode()

● wm.systemReady()

● wm.reclaimSuraceMemoryLocked()

Page 57: Android Hacks, Variants, Tricks and Resources ESC SV 2012

57

What's in there?

● Most everything Android gives you:● No UX

● Fully-integrated Eclipse IDE

● SDK/NDK

● ADB

● Fastboot

● Published, well-known, and very rich APIs

● A large and growing developer community

● And still we can use the usual suspects:

– GNU toolchain, BusyBox, u- boot, glibc, ...

● Caveat -- “Activity” no longer works

● You have:● Services

● ContentProviders

● BroadcastReceivers

Page 58: Android Hacks, Variants, Tricks and Resources ESC SV 2012

58

Thank you ...

[email protected]

@karimyaghmour