Jailbreaks Demystified
The Jailbreaking process has long been a mysterious process where the iOS system suddenly gets unlocked out of Apple’s shackles after running an application for a few seconds. For a very long time, exactly what happened during the runtime of that application was largely unknown and even today as of iOS 11 (12 actually), the end-user (be that casual user, eta folk, reditter or nagger) remains largely oblivious about the processes going on. In this blog post, I am going to try to explain the main elements of a jailbreak as they were implemented and used historically. This post is not all-encompassing and various jailbreak tools for various iOS versions may use different patches and techniques, but they do boil down mostly to what you are about to read.
Why Jailbreak?
The nomenclature of the process likely comes from the Apple’s “Jailed” approach. Applications and users are bound to use only what Apple provides which is a fraction of what the device is capable of. Breaking this Jail of restrictions is the scope of the entire Jailbreak Process.
For the eta folk, reditter, nagger, et. al.
No, Cydia has nothing to do with Jailbreaking itself. Cydia is a byproduct of the jailbreak “community” and a jailbreak is not considered a jailbreak just because it has Cydia, just like a jailbreak that lacks Cydia is still a jailbreak. What differs is the target audience (or user).
Cydia is a GUI (Graphical User Interface) application which uses dpkg
and apt
(amongst others) in the background to install .deb (Debian) Packages. These packages follow a very strict (way too strict if you ask me) format that I will be discussing later. As the astute might have figured out, you don’t need Cydia to install packages. Since Cydia relies on apt and dpkg (etc), you can simply use these binaries via SSH
or through a mobile terminal application on the device. Cydia is just there to make this process as fool-proof as possible. Sometimes it fails.
So yes, my iOS 11.3.x/11.2.x Jailbreak, Osiris, released long before Electra was even a thing, was and is a jailbreak even though I never bundled any GUI installer (Cydia or such) with it. The same thing applies for LiberiOS by Jonathan Levin (iOS 11 to 11.1.2) which was maybe the most stable iOS 11 Jailbreak to date. These jailbreaks are mostly destined for researchers and power users and not the random eta folk (who usually flames at the lack of Cydia).
So how does it work?
Before being able to open Cydia, Installer 5, Icy Project, or an SSH on the device, the jailbreak has to run. The stages of a jailbreak differ depending on the iOS version and the device. It used to be less reliant on the device type, but with the advent of KPP (Kernel Patch Protector) on iOS 9.0 and KTRR (allegedly Kernel Text Readonly Region) on iOS 10, that has become a thing more and more. For example, devices pre-iPhone 7 use KPP which is a software protection running in EL3 (ARM Exception LEVEL 3), but the iPhone 7 and newer are using KTRR which is hardware-based. In this case, a jailbreak containing only a KPP bypass (like Yalu) would not work on iPhone 7 and newer because KPP itself isn’t a thing there. Yalu, however, supports iPhone 7 thanks to @xerub and his “KPPLess” aproach. Normally, for these devices a KTRR bypass of sorts is required, as siguza has explained in his write-up aptly called KTRR. So this way, the jailbreak tool has to know very well what kind of device it deals with.
Jailbreak History? Look no further than Pangu for iOS 7.x.x
Before anything can happen on the device, the jailbreak payload has to be somehow deployed to the device. This may sound very trivial today because anybody has access to a free Apple Developer Account to sign an IPA file and install it on the device with Cydia Impactor or something akin to this, but it did not use to be this simple. This self-signing with Provisioning Profiles was introduced to the masses by Apple by iOS 9.0 which is not even that far back in the jailbreak history.
Long before that was a thing, CodeSign
was bypassed in very interesting ways by the highly skilled Jailbreak teams which are unfortunately long gone now. If you still have an iPhone 4 just collecting dust around, chances are you are jailbroken with Pangu for iOS 7.1 - 7.1.2. The astute can easily see that since this is talking about iOS 7.1.x, self-signing with provisioning profiles for free and deploying the signed IPAs was not a thing. So what was their trick?
Pangu for iOS 7.1- 7.1.2 has its own Windows and macOS program that does the deployment for you. The application it installs, aptly called “Pangu”, is signed with an enterprise certificate which existed at that point and was a powerful thing but it wasn’t as easy to obtain on the black market as it is today (hence the advent of all these signing services like Ignition and AppValley).
Their certificate was, however, expired. The Pangu program on the computer instructed the user to set the date and the time of the device way back to a date in 2014 (June 2, 2014, to be more specific).
The dummy application is deployed by the Pangu program and its main purpose is to drop that sweet certificate. The IPA itself is actually part of the Pangu Windows / macOS binary itself. That can easily be spotted by using any disassembler (I use Jtool and IDA). Jtool by Jonathan Levin has a dope feature which can produce HTML output(!!!) which is very useful for when I build write-ups for my blog.
Here’s how the Pangu binary on macOS looks like. See the extra segments?
LC 00: LC_SEGMENT_64 Mem: 0x000000000-0x100000000 __PAGEZERO
LC 01: LC_SEGMENT_64 Mem: 0x100000000-0x101e71000 __TEXT
Mem: 0x100002370-0x1000292cf __TEXT.__text (Normal)
Mem: 0x1000292d0-0x10002982e __TEXT.__stubs (Symbol Stubs)
Mem: 0x100029830-0x10002a132 __TEXT.__stub_helper (Normal)
Mem: 0x10002a140-0x10002a690 __TEXT.__const
Mem: 0x10002a690-0x10002b914 __TEXT.__objc_methname (C-String Literals)
Mem: 0x10002b914-0x10002b9d5 __TEXT.__objc_classname (C-String Literals)
Mem: 0x10002b9d5-0x10002beb6 __TEXT.__objc_methtype (C-String Literals)
Mem: 0x10002bec0-0x10002e8d5 __TEXT.__cstring (C-String Literals)
Mem: 0x10002e8d6-0x10002e92e __TEXT.__ustring
Mem: 0x10002e92e-0x10003dc04 __TEXT.__objc_cons1
Mem: 0x10003dc04-0x10029ed87 __TEXT.__objc_cons2 ; Yeee, see this!
Mem: 0x10029ed87-0x1002b71a9 __TEXT.__objc_cons3
Mem: 0x1002b71a9-0x100f11a36 __TEXT.__objc_cons4
Mem: 0x100f11a36-0x10160e0ca __TEXT.__objc_cons5
Mem: 0x10160e0ca-0x101dd6e3f __TEXT.__objc_cons6
Mem: 0x101dd6e3f-0x101dd7152 __TEXT.__objc_cons7
Mem: 0x101dd7152-0x101dd7a17 __TEXT.__objc_cons8
Mem: 0x101dd7a17-0x101e45a6e __TEXT.__objc_cons9
Mem: 0x101e45a6e-0x101e57e74 __TEXT.__objc_cons10
Mem: 0x101e57e74-0x101e69288 __TEXT.__objc_cons11
Mem: 0x101e69288-0x101e699e0 __TEXT.__unwind_info
Mem: 0x101e699e0-0x101e71000 __TEXT.__eh_frame
LC 02: LC_SEGMENT_64 Mem: 0x101e71000-0x101e75000 __DATA
Mem: 0x101e71000-0x101e71028 __DATA.__program_vars
Mem: 0x101e71028-0x101e710b8 __DATA.__got (Non-Lazy Symbol Ptrs)
Mem: 0x101e710b8-0x101e710c8 __DATA.__nl_symbol_ptr (Non-Lazy Symbol Ptrs)
Mem: 0x101e710c8-0x101e717f0 __DATA.__la_symbol_ptr (Lazy Symbol Ptrs)
Mem: 0x101e717f0-0x101e717f8 __DATA.__mod_init_func (Module Init Function Ptrs)
Mem: 0x101e717f8-0x101e71800 __DATA.__mod_term_func (Module Termination Function Ptrs)
Mem: 0x101e71800-0x101e71b40 __DATA.__const
Mem: 0x101e71b40-0x101e71b60 __DATA.__objc_classlist (Normal)
Mem: 0x101e71b60-0x101e71b68 __DATA.__objc_nlclslist (Normal)
Mem: 0x101e71b68-0x101e71b78 __DATA.__objc_catlist (Normal)
Mem: 0x101e71b78-0x101e71ba0 __DATA.__objc_protolist
Mem: 0x101e71ba0-0x101e71ba8 __DATA.__objc_imageinfo
Mem: 0x101e71ba8-0x101e72f90 __DATA.__objc_const
Mem: 0x101e72f90-0x101e73590 __DATA.__objc_selrefs (Literal Pointers)
Mem: 0x101e73590-0x101e735a0 __DATA.__objc_protorefs
Mem: 0x101e735a0-0x101e736f8 __DATA.__objc_classrefs (Normal)
Mem: 0x101e736f8-0x101e73718 __DATA.__objc_superrefs (Normal)
Mem: 0x101e73718-0x101e738a8 __DATA.__objc_data
Mem: 0x101e738a8-0x101e73930 __DATA.__objc_ivar
Mem: 0x101e73930-0x101e74390 __DATA.__cfstring
Mem: 0x101e74390-0x101e746b8 __DATA.__data
Mem: 0x101e746c0-0x101e74b60 __DATA.__bss (Zero Fill)
Mem: 0x101e74b60-0x101e74b90 __DATA.__common (Zero Fill)
LC 03: LC_SEGMENT_64 Mem: 0x101e75000-0x101eba000 __ui0
LC 04: LC_SEGMENT_64 Mem: 0x101eba000-0x101ebf000 __LINKEDIT
LC 05: LC_DYLD_INFO
LC 06: LC_SYMTAB
Symbol table is at offset 0x1ebbc48 (32226376), 293 entries
String table is at offset 0x1ebd610 (32232976), 4776 bytes
....
Do you see the __TEXT.__objc_cons2 section
?
If you do 0x10029ed87 - 0x10003dc04 = 2494851 bytes (decimal) => 2.494851 Megabytes
.
That is hell of a big section. No wonder, It is the embedded IPA file. objc_cons1, objc_cons2 and objc_cons3 are all embedded parts of the jailbreak payload (the untether, plists, libraries etc).
In fact, let’s not talk about it, let’s see it!
Jtool is a very powerful tool. It has the ability to extract whole sections from a binary. The command is jtool -e (extract) /path
.
If we do that to the Pangu binary we will get a new file called pangu.__TEXT.__objc_cons2
which so happens to be identified by the file(1)
as being a gzip compressed data, from Unix
, so a tar tvf
should be able to list the contents quite fine.
It can and it does.
Saigon:~ geosn0w$ /Users/geosn0w/Desktop/ToolChain/jtool/jtool -e __TEXT.__objc_cons2 /Users/geosn0w/Desktop/pangu.app/Contents/MacOS/pangu
Requested section found at Offset 252932
Extracting __TEXT.__objc_cons2 at 252932, 2494851 (261183) bytes into pangu.__TEXT.__objc_cons2
Saigon:~ geosn0w$ file /Users/geosn0w/pangu.__TEXT.__objc_cons2
/Users/geosn0w/pangu.__TEXT.__objc_cons2: gzip compressed data, from Unix
Saigon:~ geosn0w$ tar tvf /Users/geosn0w/pangu.__TEXT.__objc_cons2
drwxrwxrwx 0 0 0 0 Jun 27 2014 Payload/
drwxrwxrwx 0 0 0 0 Jun 27 2014 Payload/ipa1.app/
drwxrwxrwx 0 0 0 0 Jun 27 2014 Payload/ipa1.app/_CodeSignature/
-rwxrwxrwx 0 0 0 3638 Jun 27 2014 Payload/ipa1.app/_CodeSignature/CodeResources
-rwxrwxrwx 0 0 0 15112 Jun 27 2014 Payload/ipa1.app/AppIcon60x60@2x.png
-rwxrwxrwx 0 0 0 20753 Jun 27 2014 Payload/ipa1.app/AppIcon76x76@2x~ipad.png
-rwxrwxrwx 0 0 0 8017 Jun 27 2014 Payload/ipa1.app/AppIcon76x76~ipad.png
-rwxrwxrwx 0 0 0 75320 Jun 27 2014 Payload/ipa1.app/Assets.car
-rwxrwxrwx 0 0 0 7399 Jun 27 2014 Payload/ipa1.app/embedded.mobileprovision
drwxrwxrwx 0 0 0 0 Jun 27 2014 Payload/ipa1.app/en.lproj/
-rwxrwxrwx 0 0 0 74 Jun 27 2014 Payload/ipa1.app/en.lproj/InfoPlist.strings
-rwxrwxrwx 0 0 0 1955 Jun 27 2014 Payload/ipa1.app/Info.plist
-rwxrwxrwx 0 0 0 312208 Jun 27 2014 Payload/ipa1.app/ipa1
-rwxrwxrwx 0 0 0 968 Jun 27 2014 Payload/ipa1.app/ipa1-Info.plist
-rwxrwxrwx 0 0 0 235794 Jun 27 2014 Payload/ipa1.app/LaunchImage-700-568h@2x.png
-rwxrwxrwx 0 0 0 785321 Jun 27 2014 Payload/ipa1.app/LaunchImage-700-Landscape@2x~ipad.png
-rwxrwxrwx 0 0 0 261481 Jun 27 2014 Payload/ipa1.app/LaunchImage-700-Landscape~ipad.png
-rwxrwxrwx 0 0 0 660541 Jun 27 2014 Payload/ipa1.app/LaunchImage-700-Portrait@2x~ipad.png
-rwxrwxrwx 0 0 0 244644 Jun 27 2014 Payload/ipa1.app/LaunchImage-700-Portrait~ipad.png
-rwxrwxrwx 0 0 0 216627 Jun 27 2014 Payload/ipa1.app/LaunchImage-700@2x.png
-rwxrwxrwx 0 0 0 8 Jun 27 2014 Payload/ipa1.app/PkgInfo
-rwxrwxrwx 0 0 0 150 Jun 27 2014 Payload/ipa1.app/ResourceRules.plist
drwxrwxrwx 0 0 0 0 Jun 27 2014 Payload/ipa1.app/zh-Hans.lproj/
-rwxrwxrwx 0 0 0 73 Jun 27 2014 Payload/ipa1.app/zh-Hans.lproj/InfoPlist.strings
Saigon:~ geosn0w$
Doing a tar xvf
will extract the contents to a “Payload” folder.
So the IPA file that gets deployed on the phone is actually ipa1. As you can see, there is a file called embedded.mobileprovision
which contains the enterprise certificate. If we Right-click on it and select “Get Info”, Finder is capable to show us some information about the embedded certificate. As you can see, it belongs to “Hefei Bo Fang”, whatever that is.
Getting there…
As you can see, Pangu, like many other jailbreaks relied on developer certificate to bypass the CodeSign, but getting the IPA deployed to the device is not as easy as you may think. Nowadays we quickly fire Cydia Impactor, drag and drop the IPA, sign in and there we go. This wasn’t the case until iOS 9.0, so Pangu had to do what other jailbreak teams before them did - use Apple against itself.
iTunes can easily communicate with the device and up until iTunes 12.x, iTunes was capable to handle iOS applications too. It was since stripped off this functionality but that hinted to the fact that one or more frameworks (or DLLs for the Windows folk) have to be able to create a connection to the device and perform application-related tasks. Of course, we are talking about AppleMobileDevice.(framework / dll). Shipped with iTunes and its driver packages, this framework was largely used in the jailbreaks before and it is still used by all these “Backup iOS / Photos / Contacts / Whatever” programs on Windows to communicate reliably with the device. The APIs are, of course, private but they were reversed to shit and beyond by multiple researchers. They were also recreated in the libimobiledevice
project.
As you can see, with that in place, Pangu could finally talk to the device and drop the payload at the right moment. The rest follows an almost formulaic set of canonical patches I am going to discuss below.
Pangu was my desired example here because it is fairly new so it applies most of the following patches (compared to redsn0w etc) and also because it is one of the jailbreaks I have used myself a lot on an iPhone 4 I still happen to have.
I mostly gave it as an example so that you can see the difference between getting to bypass CodeSign back then vs getting to bypass CodeSign now.
Canonical Patches
I have created the following diagram which should (in theory) show the flow of most jailbreaks. Of course, the implementation and techniques would be different from iOS version to iOS version and some jailbreaks may do the actions in a totally different order.
So, as you can see from the diagram, the most important step is getting on the device. You cannot do much from outside the device. The entry vector can be different from jailbreak to jailbreak. Nowadays, most jailbreaks including my Osiris, Coolstar & Co’s Electra and Jonathan’s LiberiOS use the IPA applications signed with a temporary certificate and deployed with either Xcode or Cydia Impactor (or a signing service) to the device. From there, the application is executed by the user and the exploit is triggered.
Other methods include but are not limited to WebKit exploits, mail exploits, etc. The WebKit ones are more common. TotallyNotSpyware* is a good example of an iOS 10.x to 10.3.3 64-Bit Jailbreak, and if we talk legacy, JailbreakMe series is probably the best example. These WebKit-based jailbreaks are usually deployed by accessing a website in Safari on the device. The website is crafted so that it exploits a webkit vulnerability (WebKit is at Safari’s core), and thus gaining arbitrary code execution.
In the rest of this write-up, I will assume an IPA based Jailbreak like Osiris, LiberiOS or Electra. Also, this write-up assumes we already have a raw kernel exploit that gives us TFP0
, and the KPPless approach.
After the application has been successfully installed and can run, CodeSign is no longer a problem, at least for the initial stage. We still cannot run unsigned or fake-signed binaries, but at least we can run ourselves (the exploit application) without being killed by AMFI. However, the problem is that we are still limited by the SandBox. The SandBox keeps us from accessing anything outside our container, so no R/W permissions for us. All we can see is our own data, nothing more. That has to change. We have to bestow ourselves the might of ShaiHulud!
The SandBox is a kernel extension (KEXT) which ensures that you do not access more than you’re supposed to access. By default, everything in /var/mobile/Containers is sandboxed. Apple’s own default applications are also sandboxed. When you install an application via Xcode, the App Store or via Cydia Impactor, you are automatically placing the application in /var/mobile/Containers/Bundle/Application/UUID of the APP
. There is no other way to install an app, so our jailbreak application will be sandboxed by default, no matter what.
So how do apps have access to the services required in order for them to run?! How can Deezer connect to my Bluetooth headset? How can YouTube decode frames? How can Twitter send me notifications? It’s simple, through APIs. These APIs allow your containerized app to communicate in a controlled manner with Core Services (bluetoothd
, wifid
, mediaserverd
, etc) which are also sandboxed, and these Core Services talk with the kexts / kernel through IOKit
. So no, you don’t directly talk to the kernel. The following diagram should help you see how this looks like.
Of course, as an Application on iOS, not only you cannot see the File System and the User Data, but you are also largely oblivious of the existence of any other applications. Yes, through some APIs you can pass files / data to another application if that other application is registered as one that accepts to handle such input, but even then, you as an application don’t know anything about the existence of the other app and it is through the series of APIs provided by iOS that you pass your .PDF file, for example, to be opened in whatever application.
Some applications also provide uri schemes for you to communicate with them. Let’s say you are in Chrome on iOS and you find a phone number to a company you wanna call. If you press it, you get asked if you really wanna call, and then you go straight to the Call app from iOS and the number is already being dialed. How?
Simple. The “Phone” application has registered an uri scheme that looks like this: tel://XXXXXXXXXXXX
so if you add tel://5552220001
to an HTML page and click it in Safari, the iOS knows who to open to handle that. Same goes for Facebook, WhatsApp, etc.
To use the URI scheme from your app, you just have to call the right UIApplication method. That is
UIApplication.shared.open(url, options: [:], completionHandler: nil)
So does that mean you bypassed SandBox because you were able to pass data to another app and open it? Not even close. All you did was through a very well controlled set of APIs. You don’t know that Phone app exists. iOS knows. Here’s how SandBoxing feels for an application.
SandBox escaping can be done in multiple ways.
Osiris Jailbreak uses QiLin’s built-in SandBox escape which is called “ShaiHulud”, a Dune reference.
QiLin (and therefore LiberiOS and Osiris Jailbreak) escape the SandBox by assuming Kernel’s credentials. Not only that, but since now we have the Kernel’s credentials, we have access to whatever we want including syscalls like execve(), fork(), and posix_spawn()! Jonathan Levin has explained very well how QiLin proceeds in escaping the sandbox and assuming the kernel creds in this write-up, part of the *OS Internals Volume III
Of course, QiLin saves our application’s credentials and restores them before exiting, that is to prevent creating panics due to the various locks that govern the kernel creds (and by increasing the wrong reference counters).
Electra for iOS 11.2.x -> iOS 11.3.1 also uses the same kernel credential method for sandbox bypass and other privs.
Running fake-signed binaries, the Alpha and Omega of a Jailbreak
A Jailbreak doesn’t provide much of a value if it doesn’t come with a binary pack, part of what is called the “bootstrap”. This binary pack can often contain a long set of command-line (CLI) binaries that one can use either programatically or via an SSH connection. These binaries include but are not limited to binaries that: rename, move, remove files, SSH clients like dropbear and their dependencies, various shells like ZSH
, archive utilities like gzip
and the standard chown
, chmod
and chflags
for messing with files permissions and such.
NOTA BENE! Please do not confuse bootstrap
with bin pack
or base binaries
. The base binaries are the jailbreak-specific daemons or additional binaries and may change from a jailbreak to another. The bin pack
is part of a Boostrap
, and a Bootstrap
contains Cydia, the CLI tools, Cydia dependencies and any other support files for it. Just like the base binaries
, the content of the Bootstrap
can also vary. For example, pwn20wnd’s version of Osiris he rewrote from scratch doesn’t contain Cydia in its bootstrap but it contains Filza.
Across the history of jailbreaks, various jailbreak teams have built their own binary packs in the .tar format which they deployed and extracted once they had access to the root file system which we discuss below.
On iOS 11.x which is 64-Bit, there is a very well made universal binary pack created by Jonathan Levin and published on NewOSXBook that can be used in any iOS 11 Jailbreak. The binpack contains a ton of binaries for various purposes, including an ARM compiled version of jtool to mess with the signatures and disassemble on the device.
The following is the content of the binpack by Jonathan Levin used in his LiberiOS Jailbreak for iOS 11.x and my Osiris Jailbreak for iOS 11.2.x
Saigon:~ geosn0w$ tar tvf /Users/geosn0w/Desktop/binpack64-256.tar.gz
-rwxr-xr-x 0 morpheus staff 54736 Apr 25 17:55 amfidebilitate
-rwxr-xr-x 0 morpheus staff 178 Mar 18 2018 ./._bin
drwxr-xr-x 0 morpheus staff 0 Mar 18 2018 bin/
-rwxr-xr-x 0 morpheus staff 178 Apr 25 17:45 bin/._cat
-rwxr-xr-x 0 morpheus staff 52672 Apr 25 17:45 bin/cat
-rwxr-xr-x 0 morpheus staff 178 Apr 25 17:45 bin/._launchctl
-rwxr-xr-x 0 morpheus staff 127488 Apr 25 17:45 bin/launchctl
-rwxr-xr-x 0 morpheus staff 178 Apr 25 17:45 bin/._pwd
-rwxr-xr-x 0 morpheus staff 50944 Apr 25 17:45 bin/pwd
-rwxr-xr-x 0 morpheus staff 178 Apr 25 17:45 bin/._sleep
-rwxr-xr-x 0 morpheus staff 50736 Apr 25 17:45 bin/sleep
-rwxr-xr-x 0 morpheus staff 178 Apr 25 17:45 bin/._stty
-rwxr-xr-x 0 morpheus staff 53984 Apr 25 17:45 bin/stty
-rwxr-xr-x 0 morpheus staff 178 Apr 25 17:45 bin/._date
-rwxr-xr-x 0 morpheus staff 53952 Apr 25 17:45 bin/date
-rwxr-xr-x 0 morpheus staff 178 Apr 25 17:45 bin/._bash
-rwxr-xr-x 0 morpheus staff 1038208 Apr 25 17:45 bin/bash
-rwxr-xr-x 0 morpheus staff 178 Apr 25 17:45 bin/._kill
-rwxr-xr-x 0 morpheus staff 51376 Apr 25 17:45 bin/kill
-rwxr-xr-x 0 morpheus staff 178 Apr 25 17:45 bin/._sh
-rwxr-xr-x 0 morpheus staff 669664 Apr 25 17:45 bin/sh
-rwxr-xr-x 0 morpheus staff 178 Apr 25 17:45 bin/._dd
-rwxr-xr-x 0 morpheus staff 70769 Apr 25 17:45 bin/dd
-rwxr-xr-x 0 morpheus staff 178 Apr 25 17:45 bin/._mkdir
-rwxr-xr-x 0 morpheus staff 51312 Apr 25 17:45 bin/mkdir
-rwxr-xr-x 0 morpheus staff 178 Apr 25 17:45 bin/._hostname
-rwxr-xr-x 0 morpheus staff 50960 Apr 25 17:45 bin/hostname
-rwxr-xr-x 0 morpheus staff 178 Apr 25 17:45 bin/._rmdir
-rwxr-xr-x 0 morpheus staff 50912 Apr 25 17:45 bin/rmdir
-rwxr-xr-x 0 morpheus staff 178 Apr 25 17:45 bin/._mv
-rwxr-xr-x 0 morpheus staff 53056 Apr 25 17:45 bin/mv
-rwxr-xr-x 0 morpheus staff 178 Apr 25 17:45 bin/._ln
-rwxr-xr-x 0 morpheus staff 51936 Apr 25 17:45 bin/ln
-rwxr-xr-x 0 morpheus staff 178 Apr 25 17:45 bin/._ls
-rwxr-xr-x 0 morpheus staff 74656 Apr 25 17:45 bin/ls
-rwxr-xr-x 0 morpheus staff 178 Apr 25 17:45 bin/._cp
-rwxr-xr-x 0 morpheus staff 53872 Apr 25 17:45 bin/cp
-rwxr-xr-x 0 morpheus staff 178 Apr 25 17:45 bin/._sync
-rwxr-xr-x 0 morpheus staff 50448 Apr 25 17:45 bin/sync
-rwxr-xr-x 0 morpheus staff 178 Apr 25 17:45 bin/._zsh
-rwxr-xr-x 0 morpheus staff 669664 Apr 25 17:45 bin/zsh
-rwxr-xr-x 0 morpheus staff 178 Apr 25 17:45 bin/._chmod
-rwxr-xr-x 0 morpheus staff 55328 Apr 25 17:45 bin/chmod
-rwxr-xr-x 0 morpheus staff 178 Apr 25 17:45 bin/._rm
-rwxr-xr-x 0 morpheus staff 53392 Apr 25 17:45 bin/rm
-rw-r--r-- 0 morpheus staff 271 Apr 25 17:45 default.ent
-rwxr-xr-x 0 morpheus staff 178 Apr 11 22:36 ./._etc
drwxr-xr-x 0 morpheus staff 0 Apr 11 22:36 etc/
-rwxr-xr-x 0 morpheus staff 178 Dec 20 2017 etc/._ssl
lrwxr-xr-x 0 morpheus staff 0 Dec 20 2017 etc/ssl -> ../usr/
-r--r--r-- 0 morpheus staff 178 Apr 11 22:36 etc/._zshrc
-r--r--r-- 0 morpheus staff 2770 Apr 11 22:36 etc/zshrc
-rwxr-xr-x 0 morpheus staff 178 Mar 4 2016 etc/._dropbear
drwxr-xr-x 0 morpheus staff 0 Mar 4 2016 etc/dropbear/
-rw-r--r-- 0 morpheus staff 178 Mar 4 2016 etc/._profile
-rw-r--r-- 0 morpheus staff 92 Mar 4 2016 etc/profile
-rwxr-xr-x 0 morpheus staff 178 Mar 18 2018 etc/._apt
drwxr-xr-x 0 morpheus staff 0 Mar 18 2018 etc/apt/
-rwxr-xr-x 0 morpheus staff 178 Mar 18 2018 etc/._alternatives
drwxr-xr-x 0 morpheus staff 0 Mar 18 2018 etc/alternatives/
-rwxr-xr-x 0 morpheus staff 178 Mar 18 2018 etc/._dpkg
drwxr-xr-x 0 morpheus staff 0 Mar 18 2018 etc/dpkg/
-rw-r--r-- 0 morpheus staff 178 Jan 18 2018 etc/._motd
-rw-r--r-- 0 morpheus staff 1012 Jan 18 2018 etc/motd
-rwxr-xr-x 0 morpheus staff 178 Dec 20 2017 etc/dpkg/._dselect.cfg.d
drwxr-xr-x 0 morpheus staff 0 Dec 20 2017 etc/dpkg/dselect.cfg.d/
-rwxr-xr-x 0 morpheus staff 178 Dec 20 2017 etc/dpkg/._dpkg.cfg.d
drwxr-xr-x 0 morpheus staff 0 Dec 20 2017 etc/dpkg/dpkg.cfg.d/
-rw-r--r-- 0 morpheus staff 178 Dec 20 2017 etc/alternatives/._README
-rw-r--r-- 0 morpheus staff 100 Dec 20 2017 etc/alternatives/README
-rwxr-xr-x 0 morpheus staff 178 Mar 18 2018 etc/apt/._sources.list.d
drwxr-xr-x 0 morpheus staff 0 Mar 18 2018 etc/apt/sources.list.d/
-rwxr-xr-x 0 morpheus staff 178 Mar 18 2018 etc/apt/._trusted.gpg.d
drwxr-xr-x 0 morpheus staff 0 Mar 18 2018 etc/apt/trusted.gpg.d/
-rw-r--r-- 0 morpheus staff 178 Feb 3 2017 etc/apt/trusted.gpg.d/._zodttd.gpg
-rw-r--r-- 0 morpheus staff 1158 Feb 3 2017 etc/apt/trusted.gpg.d/zodttd.gpg
-rw-r--r-- 0 morpheus staff 178 Feb 3 2017 etc/apt/trusted.gpg.d/._bigboss.gpg
-rw-r--r-- 0 morpheus staff 1164 Feb 3 2017 etc/apt/trusted.gpg.d/bigboss.gpg
-rw-r--r-- 0 morpheus staff 178 Feb 3 2017 etc/apt/trusted.gpg.d/._modmyi.gpg
-rw-r--r-- 0 morpheus staff 1180 Feb 3 2017 etc/apt/trusted.gpg.d/modmyi.gpg
-rw-r--r-- 0 morpheus staff 178 Feb 3 2017 etc/apt/trusted.gpg.d/._saurik.gpg
-rw-r--r-- 0 morpheus staff 1172 Feb 3 2017 etc/apt/trusted.gpg.d/saurik.gpg
-rw-r--r-- 0 morpheus staff 178 Feb 3 2017 etc/apt/sources.list.d/._cydia.list
-rw-r--r-- 0 morpheus staff 0 Feb 3 2017 etc/apt/sources.list.d/cydia.list
-rw-r--r-- 0 morpheus staff 178 Feb 3 2017 etc/apt/sources.list.d/._saurik.list
-rw-r--r-- 0 morpheus staff 227 Feb 3 2017 etc/apt/sources.list.d/saurik.list
-rwxr-xr-x 0 morpheus staff 178 Jan 3 2018 ./._makeMeAtHome.sh
-rwxr-xr-x 0 morpheus staff 729 Jan 3 2018 makeMeAtHome.sh
-rwxr-xr-x 0 morpheus staff 952 Mar 19 2018 removeMe.sh
-rwxr-xr-x 0 morpheus staff 178 Apr 25 18:24 ./._sbin
drwxr-xr-x 0 morpheus staff 0 Apr 25 18:24 sbin/
-rwxr-xr-x 0 morpheus staff 178 Apr 25 17:45 sbin/._md5
-rwxr-xr-x 0 morpheus staff 54016 Apr 25 17:45 sbin/md5
-rwxr-xr-x 0 morpheus staff 178 Apr 25 17:45 sbin/._ping
-rwxr-xr-x 0 morpheus staff 72528 Apr 25 17:45 sbin/ping
-rwxr-xr-x 0 morpheus staff 178 Apr 25 17:45 sbin/._shutdown
-rwxr-xr-x 0 morpheus staff 54704 Apr 25 17:45 sbin/shutdown
-rwxr-xr-x 0 morpheus staff 178 Apr 25 17:45 sbin/._ifconfig
-rwxr-xr-x 0 morpheus staff 111696 Apr 25 17:45 sbin/ifconfig
-rwxr-xr-x 0 morpheus staff 53616 Apr 25 18:24 sbin/umount
-rwxr-xr-x 0 morpheus staff 178 Apr 25 17:53 sbin/._kextunload
-rwxr-xr-x 0 morpheus staff 76256 Apr 25 17:53 sbin/kextunload
-rwxr-xr-x 0 morpheus staff 178 Apr 25 17:45 sbin/._mknod
-rwxr-xr-x 0 morpheus staff 51504 Apr 25 17:45 sbin/mknod
-rwxr-xr-x 0 morpheus staff 178 Apr 25 17:45 sbin/._dmesg
-rwxr-xr-x 0 morpheus staff 50912 Apr 25 17:45 sbin/dmesg
-rwxr-xr-x 0 morpheus staff 178 Mar 18 2018 ./._usr
drwxr-xr-x 0 morpheus staff 0 Mar 18 2018 usr/
-rwxr-xr-x 0 morpheus staff 178 Apr 25 17:46 usr/._bin
drwxr-xr-x 0 morpheus staff 0 Apr 25 17:46 usr/bin/
-rwxr-xr-x 0 morpheus staff 178 Mar 18 2018 usr/._sbin
drwxr-xr-x 0 morpheus staff 0 Mar 18 2018 usr/sbin/
-rwxr-xr-x 0 morpheus staff 178 Mar 18 2018 usr/._local
drwxr-xr-x 0 morpheus staff 0 Mar 18 2018 usr/local/
-rwxr-xr-x 0 morpheus staff 178 Mar 18 2018 usr/._share
drwxr-xr-x 0 morpheus staff 0 Mar 18 2018 usr/share/
-rwxr-xr-x 0 morpheus staff 178 Mar 18 2018 usr/share/._terminfo
drwxr-xr-x 0 morpheus staff 0 Mar 18 2018 usr/share/terminfo/
-rwxr-xr-x 0 morpheus staff 178 Mar 18 2018 usr/share/terminfo/._61
drwxr-xr-x 0 morpheus staff 0 Mar 18 2018 usr/share/terminfo/61/
-rwxr-xr-x 0 morpheus staff 178 Mar 18 2018 usr/share/terminfo/._73
drwxr-xr-x 0 morpheus staff 0 Mar 18 2018 usr/share/terminfo/73/
-rwxr-xr-x 0 morpheus staff 178 Mar 18 2018 usr/share/terminfo/._6c
drwxr-xr-x 0 morpheus staff 0 Mar 18 2018 usr/share/terminfo/6c/
-rwxr-xr-x 0 morpheus staff 178 Mar 18 2018 usr/share/terminfo/._76
drwxr-xr-x 0 morpheus staff 0 Mar 18 2018 usr/share/terminfo/76/
-rwxr-xr-x 0 morpheus staff 178 Mar 18 2018 usr/share/terminfo/._78
drwxr-xr-x 0 morpheus staff 0 Mar 18 2018 usr/share/terminfo/78/
-rw-r--r-- 0 morpheus staff 178 Sep 9 2014 usr/share/terminfo/78/._xterm-256color
-rw-r--r-- 0 morpheus staff 3322 Sep 9 2014 usr/share/terminfo/78/xterm-256color
-rw-r--r-- 0 morpheus staff 178 Mar 4 2016 usr/share/terminfo/76/._vt100-putty
-rw-r--r-- 0 morpheus staff 1199 Mar 4 2016 usr/share/terminfo/76/vt100-putty
-rw-r--r-- 0 morpheus staff 178 Mar 4 2016 usr/share/terminfo/76/._vt100-nav-w
-rw-r--r-- 0 morpheus staff 1093 Mar 4 2016 usr/share/terminfo/76/vt100-nav-w
-rw-r--r-- 0 morpheus staff 178 Mar 4 2016 usr/share/terminfo/76/._vt100-s
-rw-r--r-- 0 morpheus staff 1272 Mar 4 2016 usr/share/terminfo/76/vt100-s
-rw-r--r-- 0 morpheus staff 178 Mar 4 2016 usr/share/terminfo/76/._vt100+
-rw-r--r-- 0 morpheus staff 1657 Mar 4 2016 usr/share/terminfo/76/vt100+
-rw-r--r-- 0 morpheus staff 178 Mar 4 2016 usr/share/terminfo/76/._vt100nam
-rw-r--r-- 0 morpheus staff 1190 Mar 4 2016 usr/share/terminfo/76/vt100nam
-rw-r--r-- 0 morpheus staff 178 Mar 4 2016 usr/share/terminfo/76/._vt100-vb
-rw-r--r-- 0 morpheus staff 1207 Mar 4 2016 usr/share/terminfo/76/vt100-vb
-rw-r--r-- 0 morpheus staff 178 Mar 4 2016 usr/share/terminfo/76/._vt100+enq
-rw-r--r-- 0 morpheus staff 682 Mar 4 2016 usr/share/terminfo/76/vt100+enq
-rw-r--r-- 0 morpheus staff 178 Mar 4 2016 usr/share/terminfo/76/._vt100-s-top
-rw-r--r-- 0 morpheus staff 1272 Mar 4 2016 usr/share/terminfo/76/vt100-s-top
-rw-r--r-- 0 morpheus staff 178 Mar 4 2016 usr/share/terminfo/76/._vt100-nam-w
-rw-r--r-- 0 morpheus staff 1221 Mar 4 2016 usr/share/terminfo/76/vt100-nam-w
-rw-r--r-- 0 morpheus staff 178 Mar 4 2016 usr/share/terminfo/76/._vt100+fnkeys
-rw-r--r-- 0 morpheus staff 450 Mar 4 2016 usr/share/terminfo/76/vt100+fnkeys
-rw-r--r-- 0 morpheus staff 178 Mar 4 2016 usr/share/terminfo/76/._vt100-w
-rw-r--r-- 0 morpheus staff 1203 Mar 4 2016 usr/share/terminfo/76/vt100-w
-rw-r--r-- 0 morpheus staff 178 Mar 4 2016 usr/share/terminfo/76/._vt100
-rw-r--r-- 0 morpheus staff 1194 Mar 4 2016 usr/share/terminfo/76/vt100
-rw-r--r-- 0 morpheus staff 178 Mar 4 2016 usr/share/terminfo/76/._vt100-w-nav
-rw-r--r-- 0 morpheus staff 1093 Mar 4 2016 usr/share/terminfo/76/vt100-w-nav
-rw-r--r-- 0 morpheus staff 178 Mar 4 2016 usr/share/terminfo/76/._vt100-bot-s
-rw-r--r-- 0 morpheus staff 1256 Mar 4 2016 usr/share/terminfo/76/vt100-bot-s
-rw-r--r-- 0 morpheus staff 178 Mar 4 2016 usr/share/terminfo/76/._vt100-w-nam
-rw-r--r-- 0 morpheus staff 1221 Mar 4 2016 usr/share/terminfo/76/vt100-w-nam
-rw-r--r-- 0 morpheus staff 178 Mar 4 2016 usr/share/terminfo/76/._vt100+pfkeys
-rw-r--r-- 0 morpheus staff 422 Mar 4 2016 usr/share/terminfo/76/vt100+pfkeys
-rw-r--r-- 0 morpheus staff 178 Mar 4 2016 usr/share/terminfo/76/._vt100-top-s
-rw-r--r-- 0 morpheus staff 1272 Mar 4 2016 usr/share/terminfo/76/vt100-top-s
-rw-r--r-- 0 morpheus staff 178 Mar 4 2016 usr/share/terminfo/76/._vt100-nav
-rw-r--r-- 0 morpheus staff 1059 Mar 4 2016 usr/share/terminfo/76/vt100-nav
-rw-r--r-- 0 morpheus staff 178 Mar 4 2016 usr/share/terminfo/76/._vt100-nam
-rw-r--r-- 0 morpheus staff 1190 Mar 4 2016 usr/share/terminfo/76/vt100-nam
-rw-r--r-- 0 morpheus staff 178 Mar 4 2016 usr/share/terminfo/76/._vt100-bm-o
-rw-r--r-- 0 morpheus staff 1207 Mar 4 2016 usr/share/terminfo/76/vt100-bm-o
-rw-r--r-- 0 morpheus staff 178 Mar 4 2016 usr/share/terminfo/76/._vt100+keypad
-rw-r--r-- 0 morpheus staff 368 Mar 4 2016 usr/share/terminfo/76/vt100+keypad
-rw-r--r-- 0 morpheus staff 178 Mar 4 2016 usr/share/terminfo/76/._vt100-am
-rw-r--r-- 0 morpheus staff 1194 Mar 4 2016 usr/share/terminfo/76/vt100-am
-rw-r--r-- 0 morpheus staff 178 Mar 4 2016 usr/share/terminfo/76/._vt100-s-bot
-rw-r--r-- 0 morpheus staff 1256 Mar 4 2016 usr/share/terminfo/76/vt100-s-bot
-rw-r--r-- 0 morpheus staff 178 Mar 4 2016 usr/share/terminfo/76/._vt100-w-am
-rw-r--r-- 0 morpheus staff 1203 Mar 4 2016 usr/share/terminfo/76/vt100-w-am
-rw-r--r-- 0 morpheus staff 178 Mar 4 2016 usr/share/terminfo/76/._vt100-bm
-rw-r--r-- 0 morpheus staff 1201 Mar 4 2016 usr/share/terminfo/76/vt100-bm
-rw-r--r-- 0 morpheus staff 178 Sep 9 2014 usr/share/terminfo/6c/._linux-lat
-rw-r--r-- 0 morpheus staff 1782 Sep 9 2014 usr/share/terminfo/6c/linux-lat
-rw-r--r-- 0 morpheus staff 178 Sep 9 2014 usr/share/terminfo/6c/._linux-koi8r
-rw-r--r-- 0 morpheus staff 1774 Sep 9 2014 usr/share/terminfo/6c/linux-koi8r
-rw-r--r-- 0 morpheus staff 178 Sep 9 2014 usr/share/terminfo/6c/._linux-vt
-rw-r--r-- 0 morpheus staff 1652 Sep 9 2014 usr/share/terminfo/6c/linux-vt
-rw-r--r-- 0 morpheus staff 178 Sep 9 2014 usr/share/terminfo/6c/._linux-basic
-rw-r--r-- 0 morpheus staff 1626 Sep 9 2014 usr/share/terminfo/6c/linux-basic
-rw-r--r-- 0 morpheus staff 178 Sep 9 2014 usr/share/terminfo/6c/._linux
-rw-r--r-- 0 morpheus staff 1740 Sep 9 2014 usr/share/terminfo/6c/linux
-rw-r--r-- 0 morpheus staff 178 Sep 9 2014 usr/share/terminfo/6c/._linux-c-nc
-rw-r--r-- 0 morpheus staff 1726 Sep 9 2014 usr/share/terminfo/6c/linux-c-nc
-rw-r--r-- 0 morpheus staff 178 Sep 9 2014 usr/share/terminfo/6c/._linux2.6.26
-rw-r--r-- 0 morpheus staff 1752 Sep 9 2014 usr/share/terminfo/6c/linux2.6.26
-rw-r--r-- 0 morpheus staff 178 Sep 9 2014 usr/share/terminfo/6c/._linux-c
-rw-r--r-- 0 morpheus staff 2080 Sep 9 2014 usr/share/terminfo/6c/linux-c
-rw-r--r-- 0 morpheus staff 178 Sep 9 2014 usr/share/terminfo/6c/._linux-m
-rw-r--r-- 0 morpheus staff 1730 Sep 9 2014 usr/share/terminfo/6c/linux-m
-rw-r--r-- 0 morpheus staff 178 Sep 9 2014 usr/share/terminfo/6c/._linux-nic
-rw-r--r-- 0 morpheus staff 1772 Sep 9 2014 usr/share/terminfo/6c/linux-nic
-rw-r--r-- 0 morpheus staff 178 Sep 9 2014 usr/share/terminfo/6c/._linux-koi8
-rw-r--r-- 0 morpheus staff 1768 Sep 9 2014 usr/share/terminfo/6c/linux-koi8
-rw-r--r-- 0 morpheus staff 178 Sep 9 2014 usr/share/terminfo/73/._screen-16color
-rw-r--r-- 0 morpheus staff 1990 Sep 9 2014 usr/share/terminfo/73/screen-16color
-rw-r--r-- 0 morpheus staff 178 Sep 9 2014 usr/share/terminfo/73/._screen2
-rw-r--r-- 0 morpheus staff 585 Sep 9 2014 usr/share/terminfo/73/screen2
-rw-r--r-- 0 morpheus staff 178 Sep 9 2014 usr/share/terminfo/73/._screen3
-rw-r--r-- 0 morpheus staff 630 Sep 9 2014 usr/share/terminfo/73/screen3
-rw-r--r-- 0 morpheus staff 178 Sep 9 2014 usr/share/terminfo/73/._screen-16color-bce-s
-rw-r--r-- 0 morpheus staff 2030 Sep 9 2014 usr/share/terminfo/73/screen-16color-bce-s
-rw-r--r-- 0 morpheus staff 178 Sep 9 2014 usr/share/terminfo/73/._screen-256color-bce
-rw-r--r-- 0 morpheus staff 1840 Sep 9 2014 usr/share/terminfo/73/screen-256color-bce
-rw-r--r-- 0 morpheus staff 178 Sep 9 2014 usr/share/terminfo/73/._screen.rxvt
-rw-r--r-- 0 morpheus staff 2082 Sep 9 2014 usr/share/terminfo/73/screen.rxvt
-rw-r--r-- 0 morpheus staff 178 Sep 9 2014 usr/share/terminfo/73/._screen.xterm-r6
-rw-r--r-- 0 morpheus staff 1503 Sep 9 2014 usr/share/terminfo/73/screen.xterm-r6
-rw-r--r-- 0 morpheus staff 178 Sep 9 2014 usr/share/terminfo/73/._screen-w
-rw-r--r-- 0 morpheus staff 1566 Sep 9 2014 usr/share/terminfo/73/screen-w
-rw-r--r-- 0 morpheus staff 178 Sep 9 2014 usr/share/terminfo/73/._screen.xterm-xfree86
-rw-r--r-- 0 morpheus staff 3263 Sep 9 2014 usr/share/terminfo/73/screen.xterm-xfree86
-rw-r--r-- 0 morpheus staff 178 Sep 9 2014 usr/share/terminfo/73/._screen-16color-s
-rw-r--r-- 0 morpheus staff 2020 Sep 9 2014 usr/share/terminfo/73/screen-16color-s
-rw-r--r-- 0 morpheus staff 178 Sep 9 2014 usr/share/terminfo/73/._screen.linux
-rw-r--r-- 0 morpheus staff 1710 Sep 9 2014 usr/share/terminfo/73/screen.linux
-rw-r--r-- 0 morpheus staff 178 Sep 9 2014 usr/share/terminfo/73/._screen-256color-bce-s
-rw-r--r-- 0 morpheus staff 1866 Sep 9 2014 usr/share/terminfo/73/screen-256color-bce-s
-rw-r--r-- 0 morpheus staff 178 Sep 9 2014 usr/share/terminfo/73/._screen
-rw-r--r-- 0 morpheus staff 1550 Sep 9 2014 usr/share/terminfo/73/screen
-rw-r--r-- 0 morpheus staff 178 Sep 9 2014 usr/share/terminfo/73/._screen-bce
-rw-r--r-- 0 morpheus staff 1562 Sep 9 2014 usr/share/terminfo/73/screen-bce
-rw-r--r-- 0 morpheus staff 178 Sep 9 2014 usr/share/terminfo/73/._screen-256color-s
-rw-r--r-- 0 morpheus staff 1856 Sep 9 2014 usr/share/terminfo/73/screen-256color-s
-rw-r--r-- 0 morpheus staff 178 Sep 9 2014 usr/share/terminfo/73/._screen.mlterm
-rw-r--r-- 0 morpheus staff 2590 Sep 9 2014 usr/share/terminfo/73/screen.mlterm
-rw-r--r-- 0 morpheus staff 178 Sep 9 2014 usr/share/terminfo/73/._screen-s
-rw-r--r-- 0 morpheus staff 1584 Sep 9 2014 usr/share/terminfo/73/screen-s
-rw-r--r-- 0 morpheus staff 178 Sep 9 2014 usr/share/terminfo/73/._screen.teraterm
-rw-r--r-- 0 morpheus staff 1548 Sep 9 2014 usr/share/terminfo/73/screen.teraterm
-rw-r--r-- 0 morpheus staff 178 Sep 9 2014 usr/share/terminfo/73/._screen-16color-bce
-rw-r--r-- 0 morpheus staff 2002 Sep 9 2014 usr/share/terminfo/73/screen-16color-bce
-rw-r--r-- 0 morpheus staff 178 Sep 9 2014 usr/share/terminfo/73/._screen.xterm-new
-rw-r--r-- 0 morpheus staff 3263 Sep 9 2014 usr/share/terminfo/73/screen.xterm-new
-rw-r--r-- 0 morpheus staff 178 Sep 9 2014 usr/share/terminfo/73/._screen-256color
-rw-r--r-- 0 morpheus staff 1828 Sep 9 2014 usr/share/terminfo/73/screen-256color
-rw-r--r-- 0 morpheus staff 178 Sep 9 2014 usr/share/terminfo/73/._screen+fkeys
-rw-r--r-- 0 morpheus staff 474 Sep 9 2014 usr/share/terminfo/73/screen+fkeys
-rw-r--r-- 0 morpheus staff 178 Sep 9 2014 usr/share/terminfo/61/._ansi80x50-mono
-rw-r--r-- 0 morpheus staff 1264 Sep 9 2014 usr/share/terminfo/61/ansi80x50-mono
-rw-r--r-- 0 morpheus staff 178 Sep 9 2014 usr/share/terminfo/61/._ansi+idl1
-rw-r--r-- 0 morpheus staff 138 Sep 9 2014 usr/share/terminfo/61/ansi+idl1
-rw-r--r-- 0 morpheus staff 178 Sep 9 2014 usr/share/terminfo/61/._ansil
-rw-r--r-- 0 morpheus staff 1502 Sep 9 2014 usr/share/terminfo/61/ansil
-rw-r--r-- 0 morpheus staff 178 Sep 9 2014 usr/share/terminfo/61/._ansi+idc
-rw-r--r-- 0 morpheus staff 263 Sep 9 2014 usr/share/terminfo/61/ansi+idc
-rw-r--r-- 0 morpheus staff 178 Sep 9 2014 usr/share/terminfo/61/._ansiw
-rw-r--r-- 0 morpheus staff 1459 Sep 9 2014 usr/share/terminfo/61/ansiw
-rw-r--r-- 0 morpheus staff 178 Sep 9 2014 usr/share/terminfo/61/._ansi80x30
-rw-r--r-- 0 morpheus staff 1496 Sep 9 2014 usr/share/terminfo/61/ansi80x30
-rw-r--r-- 0 morpheus staff 178 Sep 9 2014 usr/share/terminfo/61/._ansi-mono
-rw-r--r-- 0 morpheus staff 1370 Sep 9 2014 usr/share/terminfo/61/ansi-mono
-rw-r--r-- 0 morpheus staff 178 Sep 9 2014 usr/share/terminfo/61/._ansi+pp
-rw-r--r-- 0 morpheus staff 295 Sep 9 2014 usr/share/terminfo/61/ansi+pp
-rw-r--r-- 0 morpheus staff 178 Sep 9 2014 usr/share/terminfo/61/._ansi+idl
-rw-r--r-- 0 morpheus staff 270 Sep 9 2014 usr/share/terminfo/61/ansi+idl
-rw-r--r-- 0 morpheus staff 178 Sep 9 2014 usr/share/terminfo/61/._ansil-mono
-rw-r--r-- 0 morpheus staff 1264 Sep 9 2014 usr/share/terminfo/61/ansil-mono
-rw-r--r-- 0 morpheus staff 178 Sep 9 2014 usr/share/terminfo/61/._ansi80x30-mono
-rw-r--r-- 0 morpheus staff 1252 Sep 9 2014 usr/share/terminfo/61/ansi80x30-mono
-rw-r--r-- 0 morpheus staff 178 Sep 9 2014 usr/share/terminfo/61/._ansi80x25-raw
-rw-r--r-- 0 morpheus staff 1459 Sep 9 2014 usr/share/terminfo/61/ansi80x25-raw
-rw-r--r-- 0 morpheus staff 178 Sep 9 2014 usr/share/terminfo/61/._ansi+csr
-rw-r--r-- 0 morpheus staff 349 Sep 9 2014 usr/share/terminfo/61/ansi+csr
-rw-r--r-- 0 morpheus staff 178 Sep 9 2014 usr/share/terminfo/61/._ansi-generic
-rw-r--r-- 0 morpheus staff 733 Sep 9 2014 usr/share/terminfo/61/ansi-generic
-rw-r--r-- 0 morpheus staff 178 Sep 9 2014 usr/share/terminfo/61/._ansi+sgr
-rw-r--r-- 0 morpheus staff 368 Sep 9 2014 usr/share/terminfo/61/ansi+sgr
-rw-r--r-- 0 morpheus staff 178 Sep 9 2014 usr/share/terminfo/61/._ansi+cup
-rw-r--r-- 0 morpheus staff 69 Sep 9 2014 usr/share/terminfo/61/ansi+cup
-rw-r--r-- 0 morpheus staff 178 Sep 9 2014 usr/share/terminfo/61/._ansi-emx
-rw-r--r-- 0 morpheus staff 1582 Sep 9 2014 usr/share/terminfo/61/ansi-emx
-rw-r--r-- 0 morpheus staff 178 Sep 9 2014 usr/share/terminfo/61/._ansi+sgrbold
-rw-r--r-- 0 morpheus staff 463 Sep 9 2014 usr/share/terminfo/61/ansi+sgrbold
-rw-r--r-- 0 morpheus staff 178 Sep 9 2014 usr/share/terminfo/61/._ansi+sgrul
-rw-r--r-- 0 morpheus staff 143 Sep 9 2014 usr/share/terminfo/61/ansi+sgrul
-rw-r--r-- 0 morpheus staff 178 Sep 9 2014 usr/share/terminfo/61/._ansi80x60-mono
-rw-r--r-- 0 morpheus staff 1252 Sep 9 2014 usr/share/terminfo/61/ansi80x60-mono
-rw-r--r-- 0 morpheus staff 178 Sep 9 2014 usr/share/terminfo/61/._ansi+sgrso
-rw-r--r-- 0 morpheus staff 139 Sep 9 2014 usr/share/terminfo/61/ansi+sgrso
-rw-r--r-- 0 morpheus staff 178 Sep 9 2014 usr/share/terminfo/61/._ansi
-rw-r--r-- 0 morpheus staff 1481 Sep 9 2014 usr/share/terminfo/61/ansi
-rw-r--r-- 0 morpheus staff 178 Sep 9 2014 usr/share/terminfo/61/._ansi-color-2-emx
-rw-r--r-- 0 morpheus staff 1580 Sep 9 2014 usr/share/terminfo/61/ansi-color-2-emx
-rw-r--r-- 0 morpheus staff 178 Sep 9 2014 usr/share/terminfo/61/._ansis-mono
-rw-r--r-- 0 morpheus staff 1478 Sep 9 2014 usr/share/terminfo/61/ansis-mono
-rw-r--r-- 0 morpheus staff 178 Sep 9 2014 usr/share/terminfo/61/._ansi-color-3-emx
-rw-r--r-- 0 morpheus staff 1577 Sep 9 2014 usr/share/terminfo/61/ansi-color-3-emx
-rw-r--r-- 0 morpheus staff 178 Sep 9 2014 usr/share/terminfo/61/._ansisysk
-rw-r--r-- 0 morpheus staff 1518 Sep 9 2014 usr/share/terminfo/61/ansisysk
-rw-r--r-- 0 morpheus staff 178 Sep 9 2014 usr/share/terminfo/61/._ansi43m
-rw-r--r-- 0 morpheus staff 735 Sep 9 2014 usr/share/terminfo/61/ansi43m
-rw-r--r-- 0 morpheus staff 178 Sep 9 2014 usr/share/terminfo/61/._ansi-mtabs
-rw-r--r-- 0 morpheus staff 444 Sep 9 2014 usr/share/terminfo/61/ansi-mtabs
-rw-r--r-- 0 morpheus staff 178 Sep 9 2014 usr/share/terminfo/61/._ansi+sgrdim
-rw-r--r-- 0 morpheus staff 463 Sep 9 2014 usr/share/terminfo/61/ansi+sgrdim
-rw-r--r-- 0 morpheus staff 178 Sep 9 2014 usr/share/terminfo/61/._ansi80x25
-rw-r--r-- 0 morpheus staff 1502 Sep 9 2014 usr/share/terminfo/61/ansi80x25
-rw-r--r-- 0 morpheus staff 178 Sep 9 2014 usr/share/terminfo/61/._ansi+erase
-rw-r--r-- 0 morpheus staff 55 Sep 9 2014 usr/share/terminfo/61/ansi+erase
-rw-r--r-- 0 morpheus staff 178 Sep 9 2014 usr/share/terminfo/61/._ansi+rep
-rw-r--r-- 0 morpheus staff 286 Sep 9 2014 usr/share/terminfo/61/ansi+rep
-rw-r--r-- 0 morpheus staff 178 Sep 9 2014 usr/share/terminfo/61/._ansis
-rw-r--r-- 0 morpheus staff 1502 Sep 9 2014 usr/share/terminfo/61/ansis
-rw-r--r-- 0 morpheus staff 178 Sep 9 2014 usr/share/terminfo/61/._ansi80x50
-rw-r--r-- 0 morpheus staff 1502 Sep 9 2014 usr/share/terminfo/61/ansi80x50
-rw-r--r-- 0 morpheus staff 178 Sep 9 2014 usr/share/terminfo/61/._ansi+tabs
-rw-r--r-- 0 morpheus staff 306 Sep 9 2014 usr/share/terminfo/61/ansi+tabs
-rw-r--r-- 0 morpheus staff 178 Sep 9 2014 usr/share/terminfo/61/._ansi+local1
-rw-r--r-- 0 morpheus staff 80 Sep 9 2014 usr/share/terminfo/61/ansi+local1
-rw-r--r-- 0 morpheus staff 178 Sep 9 2014 usr/share/terminfo/61/._ansi80x60
-rw-r--r-- 0 morpheus staff 1496 Sep 9 2014 usr/share/terminfo/61/ansi80x60
-rw-r--r-- 0 morpheus staff 178 Sep 9 2014 usr/share/terminfo/61/._ansi+rca
-rw-r--r-- 0 morpheus staff 308 Sep 9 2014 usr/share/terminfo/61/ansi+rca
-rw-r--r-- 0 morpheus staff 178 Sep 9 2014 usr/share/terminfo/61/._ansi-mini
-rw-r--r-- 0 morpheus staff 418 Sep 9 2014 usr/share/terminfo/61/ansi-mini
-rw-r--r-- 0 morpheus staff 178 Sep 9 2014 usr/share/terminfo/61/._ansi+enq
-rw-r--r-- 0 morpheus staff 685 Sep 9 2014 usr/share/terminfo/61/ansi+enq
-rw-r--r-- 0 morpheus staff 178 Sep 9 2014 usr/share/terminfo/61/._ansi-nt
-rw-r--r-- 0 morpheus staff 476 Sep 9 2014 usr/share/terminfo/61/ansi-nt
-rw-r--r-- 0 morpheus staff 178 Sep 9 2014 usr/share/terminfo/61/._ansi77
-rw-r--r-- 0 morpheus staff 543 Sep 9 2014 usr/share/terminfo/61/ansi77
-rw-r--r-- 0 morpheus staff 178 Sep 9 2014 usr/share/terminfo/61/._ansi-mr
-rw-r--r-- 0 morpheus staff 377 Sep 9 2014 usr/share/terminfo/61/ansi-mr
-rw-r--r-- 0 morpheus staff 178 Sep 9 2014 usr/share/terminfo/61/._ansi80x43-mono
-rw-r--r-- 0 morpheus staff 1252 Sep 9 2014 usr/share/terminfo/61/ansi80x43-mono
-rw-r--r-- 0 morpheus staff 178 Sep 9 2014 usr/share/terminfo/61/._ansi.sys
-rw-r--r-- 0 morpheus staff 1257 Sep 9 2014 usr/share/terminfo/61/ansi.sys
-rw-r--r-- 0 morpheus staff 178 Sep 9 2014 usr/share/terminfo/61/._ansi.sys-old
-rw-r--r-- 0 morpheus staff 1255 Sep 9 2014 usr/share/terminfo/61/ansi.sys-old
-rw-r--r-- 0 morpheus staff 178 Sep 9 2014 usr/share/terminfo/61/._ansi.sysk
-rw-r--r-- 0 morpheus staff 1518 Sep 9 2014 usr/share/terminfo/61/ansi.sysk
-rw-r--r-- 0 morpheus staff 178 Sep 9 2014 usr/share/terminfo/61/._ansi80x25-mono
-rw-r--r-- 0 morpheus staff 1478 Sep 9 2014 usr/share/terminfo/61/ansi80x25-mono
-rw-r--r-- 0 morpheus staff 178 Sep 9 2014 usr/share/terminfo/61/._ansi+inittabs
-rw-r--r-- 0 morpheus staff 314 Sep 9 2014 usr/share/terminfo/61/ansi+inittabs
-rw-r--r-- 0 morpheus staff 178 Sep 9 2014 usr/share/terminfo/61/._ansi+local
-rw-r--r-- 0 morpheus staff 306 Sep 9 2014 usr/share/terminfo/61/ansi+local
-rw-r--r-- 0 morpheus staff 178 Sep 9 2014 usr/share/terminfo/61/._ansi-m
-rw-r--r-- 0 morpheus staff 1370 Sep 9 2014 usr/share/terminfo/61/ansi-m
-rw-r--r-- 0 morpheus staff 178 Sep 9 2014 usr/share/terminfo/61/._ansi80x43
-rw-r--r-- 0 morpheus staff 1496 Sep 9 2014 usr/share/terminfo/61/ansi80x43
-rw-r--r-- 0 morpheus staff 178 Sep 9 2014 usr/share/terminfo/61/._ansi+arrows
-rw-r--r-- 0 morpheus staff 222 Sep 9 2014 usr/share/terminfo/61/ansi+arrows
-rwxr-xr-x 0 morpheus staff 178 Apr 25 19:23 usr/local/._bin
drwxr-xr-x 0 morpheus staff 0 Apr 25 19:23 usr/local/bin/
-rwxr-xr-x 0 morpheus staff 178 Mar 18 2018 usr/local/._lib
drwxr-xr-x 0 morpheus staff 0 Mar 18 2018 usr/local/lib/
-rwxr-xr-x 0 morpheus staff 178 Mar 18 2018 usr/local/lib/._zsh
drwxr-xr-x 0 morpheus staff 0 Mar 18 2018 usr/local/lib/zsh/
-rwxr-xr-x 0 morpheus staff 178 Mar 18 2018 usr/local/lib/zsh/._5.0.8
drwxr-xr-x 0 morpheus staff 0 Mar 18 2018 usr/local/lib/zsh/5.0.8/
-rwxr-xr-x 0 morpheus staff 178 Mar 18 2018 usr/local/lib/zsh/5.0.8/._zsh
drwxr-xr-x 0 morpheus staff 0 Mar 18 2018 usr/local/lib/zsh/5.0.8/zsh/
-rwxr-xr-x 0 morpheus staff 178 Dec 20 2017 usr/local/lib/zsh/5.0.8/zsh/._termcap.so
-rwxr-xr-x 0 morpheus staff 51968 Dec 20 2017 usr/local/lib/zsh/5.0.8/zsh/termcap.so
-rwxr-xr-x 0 morpheus staff 178 Dec 20 2017 usr/local/lib/zsh/5.0.8/zsh/._zleparameter.so
-rwxr-xr-x 0 morpheus staff 51424 Dec 20 2017 usr/local/lib/zsh/5.0.8/zsh/zleparameter.so
-rwxr-xr-x 0 morpheus staff 178 Dec 20 2017 usr/local/lib/zsh/5.0.8/zsh/._example.so
-rwxr-xr-x 0 morpheus staff 51728 Dec 20 2017 usr/local/lib/zsh/5.0.8/zsh/example.so
-rwxr-xr-x 0 morpheus staff 178 Dec 20 2017 usr/local/lib/zsh/5.0.8/zsh/._tcp.so
-rwxr-xr-x 0 morpheus staff 52832 Dec 20 2017 usr/local/lib/zsh/5.0.8/zsh/tcp.so
-rwxr-xr-x 0 morpheus staff 178 Dec 20 2017 usr/local/lib/zsh/5.0.8/zsh/._newuser.so
-rwxr-xr-x 0 morpheus staff 50992 Dec 20 2017 usr/local/lib/zsh/5.0.8/zsh/newuser.so
-rwxr-xr-x 0 morpheus staff 178 Dec 20 2017 usr/local/lib/zsh/5.0.8/zsh/._deltochar.so
-rwxr-xr-x 0 morpheus staff 51296 Dec 20 2017 usr/local/lib/zsh/5.0.8/zsh/deltochar.so
-rwxr-xr-x 0 morpheus staff 178 Dec 20 2017 usr/local/lib/zsh/5.0.8/zsh/._complete.so
-rwxr-xr-x 0 morpheus staff 157488 Dec 20 2017 usr/local/lib/zsh/5.0.8/zsh/complete.so
-rwxr-xr-x 0 morpheus staff 178 Dec 20 2017 usr/local/lib/zsh/5.0.8/zsh/._mapfile.so
-rwxr-xr-x 0 morpheus staff 51936 Dec 20 2017 usr/local/lib/zsh/5.0.8/zsh/mapfile.so
-rwxr-xr-x 0 morpheus staff 178 Dec 20 2017 usr/local/lib/zsh/5.0.8/zsh/._stat.so
-rwxr-xr-x 0 morpheus staff 52224 Dec 20 2017 usr/local/lib/zsh/5.0.8/zsh/stat.so
-rwxr-xr-x 0 morpheus staff 178 Dec 20 2017 usr/local/lib/zsh/5.0.8/zsh/._compctl.so
-rwxr-xr-x 0 morpheus staff 94992 Dec 20 2017 usr/local/lib/zsh/5.0.8/zsh/compctl.so
-rwxr-xr-x 0 morpheus staff 178 Dec 20 2017 usr/local/lib/zsh/5.0.8/zsh/._zselect.so
-rwxr-xr-x 0 morpheus staff 51936 Dec 20 2017 usr/local/lib/zsh/5.0.8/zsh/zselect.so
-rwxr-xr-x 0 morpheus staff 178 Dec 20 2017 usr/local/lib/zsh/5.0.8/zsh/._parameter.so
-rwxr-xr-x 0 morpheus staff 72032 Dec 20 2017 usr/local/lib/zsh/5.0.8/zsh/parameter.so
-rwxr-xr-x 0 morpheus staff 178 Dec 20 2017 usr/local/lib/zsh/5.0.8/zsh/._datetime.so
-rwxr-xr-x 0 morpheus staff 52320 Dec 20 2017 usr/local/lib/zsh/5.0.8/zsh/datetime.so
-rwxr-xr-x 0 morpheus staff 178 Dec 20 2017 usr/local/lib/zsh/5.0.8/zsh/._socket.so
-rwxr-xr-x 0 morpheus staff 51696 Dec 20 2017 usr/local/lib/zsh/5.0.8/zsh/socket.so
-rwxr-xr-x 0 morpheus staff 178 Dec 20 2017 usr/local/lib/zsh/5.0.8/zsh/._terminfo.so
-rwxr-xr-x 0 morpheus staff 51968 Dec 20 2017 usr/local/lib/zsh/5.0.8/zsh/terminfo.so
-rwxr-xr-x 0 morpheus staff 178 Dec 20 2017 usr/local/lib/zsh/5.0.8/zsh/._clone.so
-rwxr-xr-x 0 morpheus staff 51792 Dec 20 2017 usr/local/lib/zsh/5.0.8/zsh/clone.so
-rwxr-xr-x 0 morpheus staff 178 Dec 20 2017 usr/local/lib/zsh/5.0.8/zsh/._regex.so
-rwxr-xr-x 0 morpheus staff 51776 Dec 20 2017 usr/local/lib/zsh/5.0.8/zsh/regex.so
-rwxr-xr-x 0 morpheus staff 178 Dec 20 2017 usr/local/lib/zsh/5.0.8/zsh/._attr.so
-rwxr-xr-x 0 morpheus staff 51488 Dec 20 2017 usr/local/lib/zsh/5.0.8/zsh/attr.so
-rwxr-xr-x 0 morpheus staff 178 Dec 20 2017 usr/local/lib/zsh/5.0.8/zsh/._curses.so
-rwxr-xr-x 0 morpheus staff 56272 Dec 20 2017 usr/local/lib/zsh/5.0.8/zsh/curses.so
-rwxr-xr-x 0 morpheus staff 178 Dec 20 2017 usr/local/lib/zsh/5.0.8/zsh/._files.so
-rwxr-xr-x 0 morpheus staff 53360 Dec 20 2017 usr/local/lib/zsh/5.0.8/zsh/files.so
-rwxr-xr-x 0 morpheus staff 178 Dec 20 2017 usr/local/lib/zsh/5.0.8/zsh/._system.so
-rwxr-xr-x 0 morpheus staff 53056 Dec 20 2017 usr/local/lib/zsh/5.0.8/zsh/system.so
-rwxr-xr-x 0 morpheus staff 178 Dec 20 2017 usr/local/lib/zsh/5.0.8/zsh/._zpty.so
-rwxr-xr-x 0 morpheus staff 54592 Dec 20 2017 usr/local/lib/zsh/5.0.8/zsh/zpty.so
-rwxr-xr-x 0 morpheus staff 178 Dec 20 2017 usr/local/lib/zsh/5.0.8/zsh/._zle.so
-rwxr-xr-x 0 morpheus staff 284896 Dec 20 2017 usr/local/lib/zsh/5.0.8/zsh/zle.so
-rwxr-xr-x 0 morpheus staff 178 Dec 20 2017 usr/local/lib/zsh/5.0.8/zsh/._mathfunc.so
-rwxr-xr-x 0 morpheus staff 53200 Dec 20 2017 usr/local/lib/zsh/5.0.8/zsh/mathfunc.so
-rwxr-xr-x 0 morpheus staff 178 Dec 20 2017 usr/local/lib/zsh/5.0.8/zsh/._zutil.so
-rwxr-xr-x 0 morpheus staff 54880 Dec 20 2017 usr/local/lib/zsh/5.0.8/zsh/zutil.so
-rwxr-xr-x 0 morpheus staff 178 Dec 20 2017 usr/local/lib/zsh/5.0.8/zsh/._complist.so
-rwxr-xr-x 0 morpheus staff 92064 Dec 20 2017 usr/local/lib/zsh/5.0.8/zsh/complist.so
-rwxr-xr-x 0 morpheus staff 178 Dec 20 2017 usr/local/lib/zsh/5.0.8/zsh/._zftp.so
-rwxr-xr-x 0 morpheus staff 73568 Dec 20 2017 usr/local/lib/zsh/5.0.8/zsh/zftp.so
-rwxr-xr-x 0 morpheus staff 178 Dec 20 2017 usr/local/lib/zsh/5.0.8/zsh/._cap.so
-rwxr-xr-x 0 morpheus staff 50736 Dec 20 2017 usr/local/lib/zsh/5.0.8/zsh/cap.so
-rwxr-xr-x 0 morpheus staff 178 Dec 20 2017 usr/local/lib/zsh/5.0.8/zsh/._computil.so
-rwxr-xr-x 0 morpheus staff 89472 Dec 20 2017 usr/local/lib/zsh/5.0.8/zsh/computil.so
-rwxr-xr-x 0 morpheus staff 178 Dec 20 2017 usr/local/lib/zsh/5.0.8/zsh/._zprof.so
-rwxr-xr-x 0 morpheus staff 51312 Dec 20 2017 usr/local/lib/zsh/5.0.8/zsh/zprof.so
-rwxr-xr-x 0 morpheus staff 178 Dec 20 2017 usr/local/lib/zsh/5.0.8/zsh/._langinfo.so
-rwxr-xr-x 0 morpheus staff 50992 Dec 20 2017 usr/local/lib/zsh/5.0.8/zsh/langinfo.so
-rwxr-xr-x 0 morpheus staff 178 Dec 20 2017 usr/local/bin/._wget
-rwxr-xr-x 0 morpheus staff 737808 Dec 20 2017 usr/local/bin/wget
-rwxr-xr-x 0 morpheus staff 178 Dec 20 2017 usr/local/bin/._dbclient
-rwxr-xr-x 0 morpheus staff 234688 Dec 20 2017 usr/local/bin/dbclient
-rw-r--r-- 0 morpheus staff 166576 Apr 25 19:23 usr/local/bin/qilin.o
-rw-r--r-- 0 morpheus staff 1060 Apr 25 19:23 usr/local/bin/shaihulud.c
-rwxr-xr-x 0 morpheus staff 178 Dec 20 2017 usr/local/bin/._filemon
-rwxr-xr-x 0 morpheus staff 52304 Dec 20 2017 usr/local/bin/filemon
-rwxr-xr-x 0 morpheus staff 178 Dec 20 2017 usr/local/bin/._dropbear
-rwxr-xr-x 0 morpheus staff 235696 Dec 20 2017 usr/local/bin/dropbear
-rwxr-xr-x 0 morpheus staff 194480 Apr 25 19:23 usr/local/bin/shaihulud
-rwxr-xr-x 0 morpheus staff 590944 Apr 25 17:48 usr/local/bin/procexp
-rwxr-xr-x 0 morpheus staff 552544 Apr 25 17:50 usr/local/bin/jtool
-rwxr-xr-x 0 morpheus staff 178 Dec 20 2017 usr/local/bin/._dropbearkey
-rwxr-xr-x 0 morpheus staff 169408 Dec 20 2017 usr/local/bin/dropbearkey
-rwxr-xr-x 0 morpheus staff 70592 Feb 28 2018 usr/local/bin/jlutil
-rwxr-xr-x 0 morpheus staff 504928 Apr 25 18:03 usr/local/bin/joker
-rwxr-xr-x 0 morpheus staff 178 Dec 20 2017 usr/local/bin/._dropbearconvert
-rwxr-xr-x 0 morpheus staff 170144 Dec 20 2017 usr/local/bin/dropbearconvert
-rwxr-xr-x 0 morpheus staff 178 Dec 20 2017 usr/local/bin/._dropbear.orig
-rwxr-xr-x 0 morpheus staff 252400 Dec 20 2017 usr/local/bin/dropbear.orig
-rw-r--r-- 0 morpheus staff 910 Apr 25 17:48 usr/local/bin/procexp.ent
-rwxr-xr-x 0 morpheus staff 178 Apr 25 17:45 usr/sbin/._joreg
-rwxr-xr-x 0 morpheus staff 75296 Apr 25 17:45 usr/sbin/joreg
-rwxr-xr-x 0 morpheus staff 178 Apr 25 17:45 usr/sbin/._ioreg
-rwxr-xr-x 0 morpheus staff 75296 Apr 25 17:45 usr/sbin/ioreg
-rwxr-xr-x 0 morpheus staff 178 Apr 25 17:45 usr/sbin/._sysctl
-rwxr-xr-x 0 morpheus staff 53088 Apr 25 17:45 usr/sbin/sysctl
-rwxr-xr-x 0 morpheus staff 178 Apr 25 17:45 usr/sbin/._taskpolicy
-rwxr-xr-x 0 morpheus staff 51824 Apr 25 17:45 usr/sbin/taskpolicy
-rwxr-xr-x 0 morpheus staff 178 Apr 25 17:45 usr/sbin/._netstat
-rwxr-xr-x 0 morpheus staff 227472 Apr 25 17:45 usr/sbin/netstat
-rwxr-xr-x 0 morpheus staff 178 Apr 25 17:45 usr/sbin/._ltop
-rwxr-xr-x 0 morpheus staff 52384 Apr 25 17:45 usr/sbin/ltop
-rwxr-xr-x 0 morpheus staff 178 Apr 25 17:45 usr/sbin/._chown
-rwxr-xr-x 0 morpheus staff 52192 Apr 25 17:45 usr/sbin/chown
-rwxr-xr-x 0 morpheus staff 178 Apr 25 17:53 usr/sbin/._kextstat
-rwxr-xr-x 0 morpheus staff 77024 Apr 25 17:53 usr/sbin/kextstat
-rwxr-xr-x 0 morpheus staff 178 Apr 25 17:46 usr/bin/._tee
-rwxr-xr-x 0 morpheus staff 51120 Apr 25 17:46 usr/bin/tee
-rwxr-xr-x 0 morpheus staff 178 Apr 25 17:46 usr/bin/._split
-rwxr-xr-x 0 morpheus staff 68880 Apr 25 17:46 usr/bin/split
-rwxr-xr-x 0 morpheus staff 178 Apr 25 17:46 usr/bin/._vim
-rwxr-xr-x 0 morpheus staff 2190272 Apr 25 17:46 usr/bin/vim
-rwxr-xr-x 0 morpheus staff 178 Apr 25 17:46 usr/bin/._hexdump
-rwxr-xr-x 0 morpheus staff 71488 Apr 25 17:46 usr/bin/hexdump
-rwxr-xr-x 0 morpheus staff 178 Apr 25 17:52 usr/bin/._lsmp
-rwxr-xr-x 0 morpheus staff 71380 Apr 25 17:52 usr/bin/lsmp
-rwxr-xr-x 0 morpheus staff 178 Apr 25 17:46 usr/bin/._vm_stat
-rwxr-xr-x 0 morpheus staff 52064 Apr 25 17:46 usr/bin/vm_stat
-rwxr-xr-x 0 morpheus staff 178 Apr 25 17:46 usr/bin/._syslog
-rwxr-xr-x 0 morpheus staff 187472 Apr 25 17:46 usr/bin/syslog
-rwxr-xr-x 0 morpheus staff 178 Apr 25 17:46 usr/bin/._du
-rwxr-xr-x 0 morpheus staff 53088 Apr 25 17:46 usr/bin/du
-rwxr-xr-x 0 morpheus staff 178 Apr 25 17:46 usr/bin/._fs_usage
-rwxr-xr-x 0 morpheus staff 125344 Apr 25 17:46 usr/bin/fs_usage
-rwxr-xr-x 0 morpheus staff 178 Apr 25 17:46 usr/bin/._renice
-rwxr-xr-x 0 morpheus staff 51008 Apr 25 17:46 usr/bin/renice
-rwxr-xr-x 0 morpheus staff 178 Apr 25 17:46 usr/bin/._xxd
-rwxr-xr-x 0 morpheus staff 52016 Apr 25 17:46 usr/bin/xxd
-rwxr-xr-x 0 morpheus staff 178 Apr 25 17:46 usr/bin/._sc_usage
-rwxr-xr-x 0 morpheus staff 73968 Apr 25 17:46 usr/bin/sc_usage
-rwxr-xr-x 0 morpheus staff 178 Apr 25 17:46 usr/bin/._less
-rwxr-xr-x 0 morpheus staff 233968 Apr 25 17:46 usr/bin/less
-rwxr-xr-x 0 morpheus staff 178 Apr 25 17:46 usr/bin/._sed
-rwxr-xr-x 0 morpheus staff 73184 Apr 25 17:46 usr/bin/sed
-rwxr-xr-x 0 morpheus staff 178 Apr 25 17:46 usr/bin/._nano
-rwxr-xr-x 0 morpheus staff 262992 Apr 25 17:46 usr/bin/nano
-rwxr-xr-x 0 morpheus staff 178 Apr 25 17:46 usr/bin/._tset
-rwxr-xr-x 0 morpheus staff 54400 Apr 25 17:46 usr/bin/tset
-rwxr-xr-x 0 morpheus staff 178 Apr 25 17:46 usr/bin/._seq
-rwxr-xr-x 0 morpheus staff 51904 Apr 25 17:46 usr/bin/seq
-rwxr-xr-x 0 morpheus staff 178 Apr 25 17:46 usr/bin/._uname
-rwxr-xr-x 0 morpheus staff 51104 Apr 25 17:46 usr/bin/uname
-rwxr-xr-x 0 morpheus staff 178 Apr 25 17:46 usr/bin/._uicache
-rwxr-xr-x 0 morpheus staff 53520 Apr 25 17:46 usr/bin/uicache
-rwxr-xr-x 0 morpheus staff 178 Apr 25 17:46 usr/bin/._reset
-rwxr-xr-x 0 morpheus staff 54400 Apr 25 17:46 usr/bin/reset
-rwxr-xr-x 0 morpheus staff 178 Apr 25 17:46 usr/bin/._wc
-rwxr-xr-x 0 morpheus staff 51840 Apr 25 17:46 usr/bin/wc
-rwxr-xr-x 0 morpheus staff 178 Apr 25 17:46 usr/bin/._gzip
-rwxr-xr-x 0 morpheus staff 90000 Apr 25 17:46 usr/bin/gzip
-rwxr-xr-x 0 morpheus staff 178 Apr 25 17:46 usr/bin/._printf
-rwxr-xr-x 0 morpheus staff 51968 Apr 25 17:46 usr/bin/printf
-rwxr-xr-x 0 morpheus staff 178 Apr 25 17:46 usr/bin/._tail
-rwxr-xr-x 0 morpheus staff 53872 Apr 25 17:46 usr/bin/tail
-rwxr-xr-x 0 morpheus staff 178 Apr 25 17:46 usr/bin/._grep
-rwxr-xr-x 0 morpheus staff 190768 Apr 25 17:46 usr/bin/grep
-rwxr-xr-x 0 morpheus staff 178 Apr 25 17:46 usr/bin/._script
-rwxr-xr-x 0 morpheus staff 53232 Apr 25 17:46 usr/bin/script
-rwxr-xr-x 0 morpheus staff 178 Apr 25 17:46 usr/bin/._more
-rwxr-xr-x 0 morpheus staff 233968 Apr 25 17:46 usr/bin/more
-rwxr-xr-x 0 morpheus staff 178 Apr 25 17:46 usr/bin/._time
-rwxr-xr-x 0 morpheus staff 51136 Apr 25 17:46 usr/bin/time
-rwxr-xr-x 0 morpheus staff 178 Apr 25 17:46 usr/bin/._plconvert
-rwxr-xr-x 0 morpheus staff 52080 Apr 25 17:46 usr/bin/plconvert
-rwxr-xr-x 0 morpheus staff 178 Apr 25 17:46 usr/bin/._head
-rwxr-xr-x 0 morpheus staff 51776 Apr 25 17:46 usr/bin/head
-rwxr-xr-x 0 morpheus staff 178 Apr 25 17:46 usr/bin/._clear
-rwxr-xr-x 0 morpheus staff 50640 Apr 25 17:46 usr/bin/clear
-rwxr-xr-x 0 morpheus staff 178 Apr 25 17:46 usr/bin/._killall
-rwxr-xr-x 0 morpheus staff 52496 Apr 25 17:46 usr/bin/killall
-rwxr-xr-x 0 morpheus staff 178 Apr 25 17:46 usr/bin/._stat
-rwxr-xr-x 0 morpheus staff 52080 Apr 25 17:46 usr/bin/stat
-rwxr-xr-x 0 morpheus staff 178 Apr 25 17:46 usr/bin/._sqlite3
-rwxr-xr-x 0 morpheus staff 1333456 Apr 25 17:46 usr/bin/sqlite3
-rwxr-xr-x 0 morpheus staff 178 Apr 25 17:46 usr/bin/._screen
-rwxr-xr-x 0 morpheus staff 428416 Apr 25 17:46 usr/bin/screen
-rwxr-xr-x 0 morpheus staff 178 Apr 25 17:46 usr/bin/._arch
-rwxr-xr-x 0 morpheus staff 54976 Apr 25 17:46 usr/bin/arch
-rwxr-xr-x 0 morpheus staff 178 Apr 25 17:46 usr/bin/._cut
-rwxr-xr-x 0 morpheus staff 53040 Apr 25 17:46 usr/bin/cut
-rwxr-xr-x 0 morpheus staff 178 Apr 25 17:46 usr/bin/._xargs
-rwxr-xr-x 0 morpheus staff 53568 Apr 25 17:46 usr/bin/xargs
-rwxr-xr-x 0 morpheus staff 178 Apr 25 17:46 usr/bin/._what
-rwxr-xr-x 0 morpheus staff 50816 Apr 25 17:46 usr/bin/what
-rwxr-xr-x 0 morpheus staff 178 Apr 25 17:46 usr/bin/._chflags
-rwxr-xr-x 0 morpheus staff 51296 Apr 25 17:46 usr/bin/chflags
-rwxr-xr-x 0 morpheus staff 178 Apr 25 17:46 usr/bin/._id
-rwxr-xr-x 0 morpheus staff 51936 Apr 25 17:46 usr/bin/id
-rwxr-xr-x 0 morpheus staff 178 Apr 25 17:46 usr/bin/._find
-rwxr-xr-x 0 morpheus staff 94368 Apr 25 17:46 usr/bin/find
-rwxr-xr-x 0 morpheus staff 178 Apr 25 17:46 usr/bin/._scp
-rwxr-xr-x 0 morpheus staff 55552 Apr 25 17:46 usr/bin/scp
-rwxr-xr-x 0 morpheus staff 178 Apr 25 17:46 usr/bin/._true
-rwxr-xr-x 0 morpheus staff 50416 Apr 25 17:46 usr/bin/true
-rwxr-xr-x 0 morpheus staff 178 Apr 25 17:46 usr/bin/._hostinfo
-rwxr-xr-x 0 morpheus staff 51216 Apr 25 17:46 usr/bin/hostinfo
-rwxr-xr-x 0 morpheus staff 178 Apr 25 17:46 usr/bin/._tar
-rwxr-xr-x 0 morpheus staff 459392 Apr 25 17:46 usr/bin/tar
-rwxr-xr-x 0 morpheus staff 178 Apr 25 17:46 usr/bin/._false
-rwxr-xr-x 0 morpheus staff 50416 Apr 25 17:46 usr/bin/false
-rwxr-xr-x 0 morpheus staff 55648 Apr 25 17:46 usr/bin/login
-rwxr-xr-x 0 morpheus staff 178 Apr 25 17:46 usr/bin/._which
-rwxr-xr-x 0 morpheus staff 51504 Apr 25 17:46 usr/bin/which
-rwxr-xr-x 0 morpheus staff 178 Apr 25 17:46 usr/bin/._passwd
-rwxr-xr-x 0 morpheus staff 52832 Apr 25 17:46 usr/bin/passwd
-rwxr-xr-x 0 morpheus staff 178 Apr 25 17:46 usr/bin/._nohup
-rwxr-xr-x 0 morpheus staff 51312 Apr 25 17:46 usr/bin/nohup
-rwxr-xr-x 0 morpheus staff 53184 Apr 25 17:46 usr/bin/w
-rwxr-xr-x 0 morpheus staff 178 Apr 25 17:46 usr/bin/._gunzip
-rwxr-xr-x 0 morpheus staff 90000 Apr 25 17:46 usr/bin/gunzip
Saigon:~ geosn0w$
Remounting the File System
So, we exploited the kernel and got kernel memory R/W, we exploited a bug or we bestowed ourselves the kernel credentials so we also exited the SandBox, now we wanna drop our payload (which can contain Cydia, binaries, config files, dummy files for checking whether the jailbreak was installed, etc). To be able to do that, we need to have Write permissions over the file system. By default, the iOS ROOT FS is mounted as Read Only, so we will need to remount that, hence the name of the patch: Root FS Remount.
This is the component that was missing back in July 2018 when Electra for iOS 11.3.1 was in development, and most of the eta folks went haywire.
So, how do we do that?
On QiLin (and therefore on LiberiOS and Osiris Jailbreak), the remounting up to iOS 11.2.6 works this way:
As I said, by default the ROOT FS is mounted as read-only. Not only that, but the SandBox also has a hook that prevents you from remounting it as Read / Write. The hook is enforced through MACF calls in mount_begin_update()
and mount_common()
. All the hook does it to check for the presence of the MNT_ROOTFS
flag in the mount flags. If it exists, the operation fails. So what QiLin does? Simple. It turns off the MNT_ROOTFS
flag.
The following listing is the remountRootFS
in the QiLin Toolkit and was made publicly available by Jonathan Levin on newosxbook.com and in the Volume III of *OS Internals.
int remountRootFS (void)
{
...
uint64_t rootVnodeAddr = findKernelSymbol("_rootvnode");
uint64_t *actualVnodeAddr;
struct vnode *rootvnode = 0;
char *v_mount;
status("Attempting to remount rootFS...\n");
readKernelMemory(rootVnodeAddr, sizeof(void *), &actualVnodeAddr);
readKernelMemory(*actualVnodeAddr, sizeof(struct vnode), &rootvnode);
readKernelMemory(rootvnode->v_mount, 0x100, &v_mount);
// Disable MNT_ROOTFS momentarily, remounts , and then flips the flag back
uint32_t mountFlags = (*(uint32_t * )(v_mount + 0x70)) & ~(MNT_ROOTFS | MNT_RDONLY);
writeKernelMemory(((char *)rootvnode->v_mount) + 0x70 ,sizeof(mountFlags), &mountFlags);
char *opts = strdup("/dev/disk0s1s1");
// Not enough to just change the MNT_RDONLY flag - we have to call
// mount(2) again, to refresh the kernel code paths for mounting..
int rc = mount("apfs", "/", MNT_UPDATE, (void *)&opts);
printf("RC: %d (flags: 0x%x) %s \n", rc, mountFlags, strerror(errno));
mountFlags |= MNT_ROOTFS;
writeKernelMemory(((char *)rootvnode->v_mount) + 0x70 ,sizeof(mountFlags), &mountFlags);
// Quick test:
int fd = open ("/test.txt", O_TRUNC| O_CREAT);
if (fd < 0) { error ("Failed to remount /"); }
else {
status("Mounted / as read write :-)\n");
unlink("/test.txt"); // clean up
}
return 0;
Jonathan Levin’s code is pretty straightforward. Flip the MNT_ROOTFS
flag, call mount(2)
to refresh the kernel code paths for mounting, restore the flag and test. Done. You’re R/W.
On older jailbreaks patches to LightweightVolumeManager::_mapForIO
were done.
Electra’s remount
iOS 11.3 took it a step further by involving APFS Snapshots. APFS has been used for quite a long time in iOS at the moment when Apple started using the snapshots, but when they did it broke the tried and true remount we had for iOS 11.2.x and even older. To fix this, a new bug needed to be found. The problem is that iOS would revert to a snapshot which is mounted read-only, so everything we install in terms of tweaks, binaries, etc is gone every time we reboot.
At this point two things can be done: Change the whole jailbreaking and go “ROOTless”, or find a way around the snapshots. It is thanks to @pwn20wnd and @umanghere that a proper remount has been created. Umang has found a “bug” that pwn20wnd has exploited in Electra.
Well, to say that it was a bug it’s a bit of a stretch. It isn’t a bug but rather a feature of fs_snapshot syscall
. Anyways, it works.
Pwn20wnd’s bypass for this snapshot problem is also a very straightforward one. Here is the function from the source code of Electra for iOS 11.3.1:
int remountRootAsRW(uint64_t slide, uint64_t kern_proc, uint64_t our_proc, int snapshot_success){
if (/* iOS 11.2.6 or lower don't need snapshot */ kCFCoreFoundationVersionNumber <= 1451.51 || /* we're already remounted properly */ snapshot_success == 0){
return remountRootAsRW_old(slide, kern_proc, our_proc);
}
if (!getOffsets(slide)){
return -1;
}
uint64_t kernucred = rk64(kern_proc+offsetof_p_ucred);
uint64_t ourucred = rk64(our_proc+offsetof_p_ucred);
uint64_t vfs_context = get_vfs_context();
char *dev_path = "/dev/disk0s1s1";
uint64_t devVnode = getVnodeAtPath(vfs_context, dev_path);
uint64_t specInfo = rk64(devVnode + offsetof_v_specinfo);
wk32(specInfo + offsetof_si_flags, 0); //clear dev vnode's v_specflags
if (file_exists(ROOTFSMNT))
rmdir(ROOTFSMNT);
mkdir(ROOTFSMNT, 0755);
chown(ROOTFSMNT, 0, 0);
printf("Temporarily setting kern ucred\n");
wk64(our_proc+offsetof_p_ucred, kernucred);
int rv = -1;
if (mountDevAsRWAtPath(dev_path, ROOTFSMNT) != ERR_SUCCESS) {
printf("Error mounting root at %s\n", ROOTFSMNT);
goto out;
}
/* APFS snapshot mitigation bypass bug by CoolStar, exploitation by Pwn20wnd */
/* Disables the new APFS snapshot mitigations introduced in iOS 11.3 */
printf("Disabling the APFS snapshot mitigations\n");
const char *systemSnapshot = find_system_snapshot(ROOTFSMNT);
const char *newSystemSnapshot = "orig-fs";
if (!systemSnapshot) {
goto out;
}
int rvrename = do_rename(ROOTFSMNT, systemSnapshot, newSystemSnapshot);
if (rvrename) {
goto out;
}
rv = 0;
unmount(ROOTFSMNT, 0);
rmdir(ROOTFSMNT);
out:
printf("Restoring our ucred\n");
wk64(our_proc+offsetof_p_ucred, ourucred);
//cleanup
vnode_put(devVnode);
if (!rv) {
printf("Disabled the APFS snapshot mitigations\n");
printf("Restarting\n");
restarting();
sleep(2);
do_restart();
} else {
printf("Failed to disable the APFS snapshot mitigations\n");
}
return -1;
}
It may look complicated. That’s because it is. It took Pwn20wnd a lot of work to achieve this bypass, but once the bug was known, the problem started to fall apart. See, the bug is very simple: iOS will revert to an APFS System snapshot after every reboot if there is one. Here’s the catch - if there is one. If there isn’t, instead of boot looping or erroring out in a destructive way, iOS casually continues booting just like it did on iOS 11.2.6 where there was no snapshot.
So the patch? Find and rename the snapshot to something else.
The implementation? A bit more complicated.
If you analyze the code you can see that the name of the said snapshot is dynamic (or at least contains a dynamic part) so it cannot be hardcoded. The dynamic part happens to be the boot-manifest-hash
. Before doing anything, Pwn20wnd seems to be bestowing himself the kernel credentials.
You can find it yourself by running:
ioreg -p IODeviceTree -l | grep boot-manifest-hash
In the Electra, all the logic for finding the boot-manifest-hash is located in apfs_util.c
as you can see here:
char *copyBootHash(void) {
unsigned char buf[1024];
uint32_t length = 1024;
io_registry_entry_t chosen = IORegistryEntryFromPath(kIOMasterPortDefault, "IODeviceTree:/chosen");
if (!MACH_PORT_VALID(chosen)) {
printf("Unable to get IODeviceTree:/chosen port\n");
return NULL;
}
kern_return_t ret = IORegistryEntryGetProperty(chosen, "boot-manifest-hash", (void*)buf, &length);
IOObjectRelease(chosen);
if (ret != ERR_SUCCESS) {
printf("Unable to read boot-manifest-hash\n");
return NULL;
}
// Make a hex string out of the hash
char manifestHash[length*2+1];
bzero(manifestHash, sizeof(manifestHash));
int i;
for (i=0; i<length; i++) {
sprintf(manifestHash+i*2, "%02X", buf[i]);
}
printf("Hash: %s\n", manifestHash);
return strdup(manifestHash);
}
This function is called from inside another function called find_system_snapshot
which handles the logic for finding the snapshot itself. The function appends the retrieved manifestHash to the hard-coded part which is com.apple.os.update-
resulting in the real name of the current snapshot. It then returns the snapshot name to the caller, but not before printing it out loud :P
const char *find_system_snapshot(const char *rootfsmnt) {
char *bootHash = copyBootHash();
char *system_snapshot = malloc(sizeof(char *) + (21 + strlen(bootHash)));
bzero(system_snapshot, sizeof(char *) + (21 + strlen(bootHash)));
if (!bootHash) {
return NULL;
}
sprintf(system_snapshot, "com.apple.os.update-%s", bootHash);
printf("System snapshot: %s\n", system_snapshot);
return system_snapshot;
}
With kernel’s credentials in place, and with the proper name of the snapshot, Pwn20wnd returns back into rootfs_remount.c for the last part of this magnificent exploit - renaming the Snapshot. He renames it to “orig-fs”, then he checks if the renaming succeeded. Then he restores his own credentials and drops kernel’s. Finally, he reboots the device. That’s why the first time you use Electra for iOS 11.3-11.3.1 your device will have a mandatory reboot no matter which exploit you use.
Now that the snapshot has been renamed, iOS has no snapshot to mount so it simply doesn’t. Problem solved. 10/10 - IGN.
A note on the VFS exploit released by Ian Beer of Google Project Zero
The issue with the VFS exploit called “empty_list” is that, due to the nature of the exploit it is usually pretty hard to get it to work reliably. It has been used, however, in both Electra and Unc0ver Jailbreaks because it doesn’t require a paid Apple Developer Account compared to the other exploit released by Ian Beer called MPTCP which is almost bulletproof but requires the Multi-Path entitlement which is not available without a Paid developer account.
Of course, not requiring a paid developer account, even though getting it to work is an exercise in futility sometimes, this seems to be prefered by the general public - that is until they learn about Ignition and other signing services who sign for free the MPTCP version.
Stars
Star 1: Not a real spyware, just a nice name because WebKitness.
Special thanks
- Jonathan Levin for his books, tools and impressive patience with me and my odd questions - YOU ROCK!
- @pwn20wnd for pushing me to learn more (and more) being supportive, and findinding errors in the write-up :)
- ETA Folks / reditters / naggers for making me laugh from time to time
- IBSparkes for answering many of my questions during all these months
- stek29 for answering my weird memory related questions
License for the diagrams
The diagrams are all built by myself in a tedious process, however, I license them as MIT. Use them as you please as long as you credit me.
Errare humanum est!
If you find anything wrong in the article feel free to trash-talk me on reddit or better yet, to tell me on Twitter :P