Note that there are some explanatory texts on larger screens.

plurals
  1. PO
    primarykey
    data
    text
    <p>Looked into it and it doesnt link against IOSurface. I did however find that it uses <code>dlsym</code>, and after some more reverse engineering, I found this:</p> <pre><code>/System/Library/Frameworks/IOKit.framework/IOKit IOServiceGetMatchingServices IOServiceGetMatchingService IOServiceMatching IOMasterPort IOIteratorNext IORegistryEntryCreateCFProperty IOObjectRelease /System/Library/Frameworks/UIKit.framework/UIKit UIGetScreenImage /System/Library/PrivateFrameworks/IOMobileFramebuffer.framework/IOMobileFramebuffer IOMobileFramebufferOpen IOMobileFramebufferGetLayerDefaultSurface /System/Library/PrivateFrameworks/IOSurface.framework/IOSurface IOSurfaceAcceleratorCreate IOSurfaceAcceleratorTransferSurface IOSurfaceLock IOSurfaceUnlock IOSurfaceGetWidth IOSurfaceGetHeight IOSurfaceCreate IOSurfaceGetBaseAddress </code></pre> <p>So, as you see here, after each framework path are the strings of the symbols that it loads from each framework, dynamically. This is to avoid getting in trouble for linking against a Private Framework. Since it is loaded in at runtime, a static analyzer cannot tell that this app uses it, thereby escaping detection.</p> <p>It does look like my initial suspicion was correct; it is using IOSurface to sneak past sandbox restrictions to have raw screen access. It also uses <code>UIGetScreenImage</code>, which I assume is for the second method of generating video. It also uses some IOKit functions and IOMobileFramebuffer functions. It looks like the app is grabbing an IOSurface from the <code>IOMobileFramebufferGetLayerDefaultSurface</code> function. Not quite sure what it uses IOKit for though.</p> <p>In conclusion, this app uses some sneaky techniques to avoid detection by static analyzers: it doesn't link against the private frameworks but instead grabs the symbols dynamically. It uses a combination of IOSurface and IOMobileFramebuffer to record the video, or <code>UIGetScreenImage</code> for the other mode. It is a tricky app that <em>WILL</em> get pulled from the AppStore, so if you want it, you better get it now.</p> <h2>UPDATE:</h2> <p>It appears that this app was indeed pulled from the AppStore. If you were lucky enough to grab a copy before it was pulled, that's great. I know that I'm glad I got it.</p> <p>Apple probably justified its decision by stating that the app used private APIs and it could be viewed as a potential security problem (an app that watches you as you type in your iTunes password is one example, scary thought). I wonder if this will lead to a change in their reviewing process, but we will likely never know. One thing that is interesting to me is that there are still many more tricks developers could potentially use to hide their app's behavior from static analysis. No reviewing process is perfect, but they can do pretty well. Even if Apple automatically refuses apps that link against the <code>dlsym</code> symbol, there are methods that can be used to bypass detection.</p> <h2>UPDATE 2:</h2> <p>Apparently, there is another version of this application in the AppStore now. It is called "Disp Recorder" and has the same exact icon as the first. The GUI looks almost identical to the original one with a few minor changes. I haven't yet reversed the newer one, but I'd be willing to bet that they used the same techniques to hide the illegal behavior. I will update this answer once I reverse the new version. The new one costs $5, but if you have ever wanted a screen recording app on an unjailbroken device, you should grab it before it is pulled.</p> <h2>UPDATE 3:</h2> <p>It looks as if I was very much correct with how this application works. There is an open-source implementation of this on GitHub by <a href="https://twitter.com/coolstarorg">@coolstarorg</a> called <a href="https://github.com/coolstar/RecordMyScreen">RecordMyScreen</a>. If you still wonder how this app works, I suggest you go check it out.</p>
    singulars
    1. This table or related slice is empty.
    plurals
    1. This table or related slice is empty.
    1. This table or related slice is empty.
    1. This table or related slice is empty.
    1. VO
      singulars
      1. This table or related slice is empty.
    2. VO
      singulars
      1. This table or related slice is empty.
    3. VO
      singulars
      1. This table or related slice is empty.
 

Querying!

 
Guidance

SQuiL has stopped working due to an internal error.

If you are curious you may find further information in the browser console, which is accessible through the devtools (F12).

Reload