Official Site | Support | Changelog | Donate
© 2012-2017 Mike Tigas (@mtigas)
Mozilla Public License 2.0
Onion Browser is a free web browser for iPhone and iPad that encrypts and tunnels web traffic through the Tor network. See the official site for more details and App Store links.
- OnionBrowser: 1.7.5 (20170521.1) - See official release history and changelog.
- Tor.framework: mtigas/tor0.3.0.7-libevent2.1.8-openssl1.0.2k-v2 / 69ca6f1 (May 21 2017)
- iObfs: 26463e2 (Jul 15 2016)
- obfs4proxy: 0.0.8-dev, upstream 97a875e (Nov 15 2016)
- golang: 1.7.4 (Dec 01 2016)
The app uses the Tor.framework package to build the Tor, OpenSSL, and libevent dependencies.
Because iOS applications cannot launch subprocesses or otherwise execute other
binaries, the tor client is run in-process in a NSThread
subclass which
executes the tor_main()
function (as an external tor
executable would)
and attempts to safely wrap Tor within the app. (libor.a
and
libtor.a
, intermediate binaries created when compiling Tor, are used to
provide Tor.) Side-effects of this method have not yet been fully evaluated.
Management of most tor functionality (status checks, reloading tor on connection
changes) is handled by accessing the Tor control port in an internal, telnet-like
session from the AppDelegate
.
The app uses a NSURLProtocol
subclass (ProxyURLProtocol
), registered to
handle HTTP/HTTPS requests. That protocol uses the CKHTTPConnection
class
which nearly matches the NSURLConnection
class, providing wrappers and access
to the underlying CFHTTP
Core Framework connection bits. This connection
class is where SOCKS5 connectivity is enabled. (Because we are using SOCKS5,
DNS requests are sent over the Tor network, as well.)
- Read more about Onion Browser and the challenges of implementing Tor clients on iOS in this post on the Tor Project blog.