iOS 模塊分解—「逆向流程分析(上)」

引言

本文測(cè)試工具 iPhone:7P歇由、iOS9.3.2

  1. ios逆向工程指的是在軟件層面上進(jìn)行逆向分析的一個(gè)過程。如果想要達(dá)到對(duì)ios軟件較強(qiáng)的逆向分析能力射亏,最好能非常熟悉ios設(shè)備的硬件構(gòu)成烘跺、ios系統(tǒng)的運(yùn)行原理萎坷,還要具備豐富的ios開發(fā)經(jīng)驗(yàn),比如:拿到一個(gè)App之后能清晰的推斷出這個(gè)App使用的技術(shù)成艘,包括引用了那些FrameWork赏半,那些經(jīng)典的第三方代碼,以及整個(gè)App工程大致的文件個(gè)數(shù)等淆两。
  2. 逆向工程的主要兩個(gè)作用:首先是攻破目標(biāo)程序断箫,拿到關(guān)鍵信息,可以歸類于安全相關(guān)的逆向工程琼腔,其次是借鑒他人的程序功能來開發(fā)自己的軟件瑰枫,可以歸類于開發(fā)相關(guān)的逆向工程
  3. 與安全相關(guān)的ios逆向工程
    ios 逆向工程最突出的應(yīng)用領(lǐng)域就是與安全相關(guān)的,比如:通過逆向一個(gè)金融App丹莲,來評(píng)定這個(gè)軟件的安全等級(jí)光坝,安全專家通過逆向ios病毒,來找到殺毒的方法甥材,安全公司通過逆向ios系統(tǒng)電話盯另、短信功能,來構(gòu)建一個(gè)手機(jī)防火墻

a.評(píng)定安全等級(jí)
ios中那些具有交易功能的App一般會(huì)先加密敏感數(shù)據(jù)洲赵,然后將加密過的數(shù)據(jù)存儲(chǔ)在本地或通過互聯(lián)網(wǎng)傳輸鸳惯,而如果安全意識(shí)不夠強(qiáng)商蕴,就完全有可能將重要信息直接用明文保存或傳輸,安全隱患極大芝发。App雖然可以將低維的攻擊防守得如銅墻鐵壁一般绪商,但是擋不住高維的逆向攻擊,不過不可以據(jù)此得出App不安全的結(jié)論,因?yàn)閕os逆向工程的使用均來自一個(gè)前提:ios越獄,在這種環(huán)境下叛复,我們使用這些逆向工程技術(shù)來分析評(píng)估目標(biāo)App中可被攻擊點(diǎn)有多少浑厚,可攻擊點(diǎn)越少的自然就越安全。

b. 逆向惡意軟件
ios 是只能移動(dòng)終端操作系統(tǒng),它同計(jì)算機(jī)操作系統(tǒng)沒有本質(zhì)區(qū)別,惡意軟件就是通過逆向工程定位系統(tǒng)和軟件漏洞,利用漏洞滲透進(jìn)目標(biāo)主機(jī)决采,獲取敏感數(shù)據(jù)

  1. 與開發(fā)相關(guān)的ios逆向工程
    開發(fā)者可以逆向系統(tǒng)調(diào)用,在自己的程序里使用一些文檔中沒有提及的私有功能坟奥,還可以逆向一些經(jīng)典的軟件等
    a.逆向系統(tǒng)調(diào)用
    開發(fā)者編寫的軟件能夠運(yùn)行在操作系統(tǒng)中树瞭,提供各種各樣的功能,是因?yàn)椴僮飨到y(tǒng)本身已經(jīng)內(nèi)嵌了這些功能筏勒,軟件只是拿來重組使用移迫。絕大多數(shù)的App的實(shí)現(xiàn)都源于公開的開發(fā)文檔,而不能使用諸如鎖屏管行,關(guān)機(jī)等文檔中不涉及的功能厨埋,如果你的程序面向Cydia,那么不采用非公開功能將導(dǎo)致程序幾乎沒有競(jìng)爭(zhēng)力,故可以通過逆向ios系統(tǒng)調(diào)用捐顷,還原系統(tǒng)實(shí)現(xiàn)相應(yīng)功能的代碼荡陷,并應(yīng)用到自己的程序中。
    b.借鑒別的軟件
    逆向工程最受歡迎的應(yīng)用場(chǎng)合就是“借鑒”他人的軟件功能迅涮。

ios 越獄

ios 完美越獄和不完美越獄

完美越獄废赞,越獄后的iPhone可以正常關(guān)機(jī)和重啟
不完美越獄,iPhone一旦關(guān)機(jī)后再開機(jī)時(shí)叮姑,屏幕就會(huì)一直停留在啟動(dòng)畫面唉地,也就是“白蘋果”狀態(tài)〈福或者能正常開機(jī)耘沼,但已經(jīng)安裝的破解軟件都無法正常使用,需要將設(shè)備與PC連接后朱盐,使用軟件進(jìn)行引導(dǎo)才能使用群嗤。一般說來,在蘋果發(fā)布新的iOS固件后兵琳,針對(duì)該固件的不完美越獄會(huì)先發(fā)布狂秘,隨后完美越獄才可能發(fā)布骇径,一般較新的系統(tǒng)版本,均為不完美越獄

越獄方法推薦
PP助手:http://jailbreak.25pp.com/
ps:不同機(jī)型者春,不同系統(tǒng)破衔,有的可以越獄,有的不可以
http://jailbreak.25pp.com/iphone5syueyu/

如何判斷是否越獄成功?

  1. 桌面是否有cydia


2.工具判斷(比如pp助手)


image.png

使用cydia安裝軟件


Snip20180927_2.png

一钱烟、遠(yuǎn)程登錄到手機(jī):

SSH介紹

SSH是Secure Shell的縮寫,意為"安全外殼協(xié)議"运敢,是遠(yuǎn)程登錄會(huì)話和其他網(wǎng)絡(luò)服務(wù)提供安全性的協(xié)議,用于計(jì)算機(jī)之間的加密登錄忠售,使用SSH,可以把所有傳輸?shù)臄?shù)據(jù)進(jìn)行加密,"中間人"攻擊方式就不可能實(shí)現(xiàn),防止DNS欺騙和IP欺騙,OpenSSH 是SSH協(xié)議的免費(fèi)開源的實(shí)現(xiàn)迄沫,是一個(gè)運(yùn)用ssh稻扬、提供ssh登錄的一個(gè)軟件。

  • SSH過程

client首先向server發(fā)送登錄請(qǐng)求
server收到請(qǐng)求以后發(fā)送一個(gè)公鑰給client
client將密碼用公鑰加密以后發(fā)給server
server收到這段信息羊瘩,用私鑰解密泰佳,如果是正確的密碼就登錄成功

SSH登錄原理.png
  • ssh安全隱患-中間人攻擊(MITM攻擊)

在client向server發(fā)送請(qǐng)求的時(shí)候,在client與server之間架起偽server然后攔截client的請(qǐng)求
用偽server向server發(fā)送一個(gè)登錄請(qǐng)求尘吗,
server生成密鑰A:公鑰A逝她,私鑰A 反給偽server
偽server拿到公鑰A以后,立馬生成一對(duì)密鑰B:公鑰B睬捶、私鑰B黔宛,將公鑰B反給client
client拿到公鑰B以后進(jìn)行密碼加密,發(fā)送server擒贸,然后偽server攔截
偽server拿到這段密文臀晃,用私鑰B進(jìn)行解密拿到密碼,發(fā)送給黑客server介劫,再將密碼用公鑰A進(jìn)行加密發(fā)送給server

SSH中間人攻擊.png

1徽惋、WiFi使用SSH登錄到手機(jī):

  • 準(zhǔn)備

在同一個(gè)Wi-Fi下使用ssh
越獄機(jī)中先安裝插件OpenSSH,密碼在openSSH可以查看座韵,初始密碼為alpine险绘,默認(rèn)端口是22

OpenSSH使用方法如下:
openssh.png
  • 操作:
//192.168.68.178 為手機(jī)的IP
GarryKings-Mac:~ macair$ ssh root@192.168.68.178
root@192.168.68.178's password: 
fall1994de-iPhone:~ root# 

2、通過usbmuxd登錄到手機(jī):

  • 準(zhǔn)備

usbmuxd下載

下載完成后如下:
usermuxd.png
  • 操作:
//在下載的文件下
/Users/macair/usbmuxd
GarryKings-Mac:usbmuxd macair$ cd python-client/
//查看內(nèi)容
GarryKings-Mac:python-client macair$ ls
tcprelay.py usbmux.py   usbmux.pyc
//執(zhí)行Python里腳本誉碴,進(jìn)行端口轉(zhuǎn)發(fā)宦棺,把手機(jī)的22端口(SSH端口)轉(zhuǎn)發(fā)為Mac本地的2222端口
GarryKings-Mac:python-client macair$ python tcprelay.py 22:2222
Forwarding local port 2222 to remote port 22
Incoming connection to 2222
Waiting for devices...
Connecting to device <MuxDevice: ID 132 ProdID 0x12a8 Serial 'ba0ab21065964b366d700af1e2f73bd94bc8c8e3' Location 0x14200000>
Connection established, relaying data

打開另一個(gè)終端:

//登錄手機(jī)端口、localhost是一個(gè)域名
GarryKings-Mac:~ macair$ ssh root@localhost -p 2222
root@localhost's password: 
fall1994de-iPhone:~ root# 

二翔烁、砸殼

  • 前言

從 APPStore 商店下載安裝的APP 默認(rèn)都被蘋果加了一層殼渺氧,加了殼后我們就無法使用dump導(dǎo)出頭文件等其它操作,所以我們就必須要砸殼

1蹬屹、砸殼方式
  • a侣背、靜態(tài)砸殼
    靜態(tài)砸殼使用Clutch, 主動(dòng)調(diào)起iPhone的解密功能, 得到解密的APP文件
    步驟:
    1白华、下載Clutch,
    2、copy Clutch文件到手機(jī)的 /usr/bin/ 目錄下
    scp -P 2222 Clutch root@127.0.0.1:/usr/bin/
    3贩耐、查看可砸殼的應(yīng)用 Clutch -i
    4弧腥、砸殼應(yīng)用 Clutch -d bundleId
    5、查看砸殼后的路徑潮太,生產(chǎn).ipa文件
    6管搪、驗(yàn)證是否砸殼成功: cryptid 為 0, 即沒有任何加密,砸殼成功

  • 操作

//ssh登錄到手機(jī)
macair:~ GarryKings-Mac$ ssh root@192.168.68.178
root@192.168.68.178's password: 
//進(jìn)入手機(jī)的bin目錄下
fall1994de-iPhone:~ root# cd /usr/bin/
//找到Clutch
fall1994de-iPhone:/usr/bin root# ls
Clutch*                   expr*          mkfifo*            ssh-keygen*
//查看Clutch說明
fall1994de-iPhone:/usr/bin root# Clutch 
2018-08-07 17:04:16.671 Clutch[2104:61556] command: None command
Usage: Clutch [OPTIONS]
-b --binary-dump                 Only dump binary files from specified bundleID
-d --dump                        Dump specified bundleID into .ipa file
-i --print-installed             Prints installed applications
   --clean                       Clean /var/tmp/clutch directory
   --version                     Display version and exit
-? --help                        Displays this help and exit
-n --no-color                    Prints with colors disabled
-v --verbose                     Print verbose messages
//查看手機(jī)上可砸殼的應(yīng)用
fall1994de-iPhone:/usr/bin root# Clutch -i
2018-08-07 17:04:39.962 Clutch[2105:61595] command: Prints installed applications
Installed apps:
1:   百度網(wǎng)盤 <com.baidu.netdisk>
2:   今日頭條 <com.ss.iphone.article.News>
3:   QQ <com.tencent.mqq>
4:   微信 <com.tencent.xin>
5:   釘釘 <com.laiwang.DingTalk>
6:   火山小視頻 - 分享生活铡买,讓世界為你點(diǎn)贊 <com.ss.iphone.ugc.Live>
7:   WhatsApp Messenger <net.whatsapp.WhatsApp>
8:   蘋果助手 <com.klozz.anyrun>
9:   快掃二維碼 <com.magicpocket.qrcodereader>
10:  播放器OPlayer Lite - 視頻播放器 <com.olimsoft.oplayer.lite>
//砸殼應(yīng)用
fall1994de-iPhone:/usr/bin root# Clutch -d com.olimsoft.oplayer.lite
2018-08-07 17:04:53.531 Clutch[2106:61621] command: Dump specified bundleID into .ipa file
Zipping OPlayer Lite.app
Dumping <OPlayer WatchKit Extension> (arm64)
Patched cryptid (64bit segment)
Writing new checksum
Dumping <OPlayer Lite> (arm64)
Patched cryptid (64bit segment)
Writing new checksum
Zipping OPlayer WatchKit Extension.appex
//砸殼后生產(chǎn)的ipa包
DONE: /private/var/mobile/Documents/Dumped/com.olimsoft.oplayer.lite-iOS7.0-(Clutch-(null))-3.ipa
Finished dumping com.olimsoft.oplayer.lite in 21.2 seconds
fall1994de-iPhone:/usr/bin root# exit
logout
Connection to 192.168.68.178 closed.
macair:~ GarryKings-Mac$ cd /Users/macair/Desktop/reverse 
//驗(yàn)證是否砸殼成功更鲁,cryptid 0沒有加密,砸殼成功
macair:reverse GarryKings-Mac$ otool -l OPlayer\ Lite | grep crypt
     cryptoff 16384
    cryptsize 21282816
      cryptid 0
macair:reverse GarryKings-Mac$ 

通過iTool查看路徑如下圖:
DONE: /private/var/mobile/Documents/Dumped/com.olimsoft.oplayer.lite-iOS7.0-(Clutch-(null))-5.ipa

ipapath.png
  • b奇钞、動(dòng)態(tài)砸殼
    準(zhǔn)備:

dumpdecrypted下載澡为,并編譯,得到dumpdecrypted.dylib
原理:將應(yīng)用運(yùn)行起來, 然后從內(nèi)存中得到已經(jīng)解密的Mach-O文件

步驟:
1景埃、注入dumpdecrypted 到需要砸殼的應(yīng)用

  • 操作
//ssh登錄手機(jī)
macair:~ GarryKings-Mac$ ssh root@192.168.68.172
//默認(rèn)密碼alpine
root@192.168.68.172's password: 
//查看手機(jī)進(jìn)程
fall1994de-iPhone:~ root# ps -e
  PID TTY           TIME CMD
    1 ??         2:04.09 /sbin/launchd
 1352 ??         0:01.79 /usr/sbin/syslogd
 1354 ??         0:00.12 /usr/sbin/WirelessRadioManagerd
  .
  .
  .
 1933 ??         0:00.05 /usr/sbin/filecoordinationd
 1967 ??         0:01.80 /var/containers/Bundle/Application/9AA9E393-EE7A-47A6-B0BB-75F60C56A688/WeChat.app/WeChat
 1969 ??         0:00.20 sshd: root@ttys000 
 1971 ttys000    0:00.03 -sh
 1974 ttys000    0:00.01 ps -e
//附加進(jìn)程
fall1994de-iPhone:~ root# cycript -p 1967
//查看路徑
cy# [[NSFileManager defaultManager] URLsForDirectory:NSDocumentDirectory inDomains:NSUserDomainMask][0]
#"file:///var/mobile/Containers/Data/Application/BCEF4156-0E01-4D7A-89D7-4898DD3A1A88/Documents/"
cy# 
//control+d退出媒至,進(jìn)入終端二、執(zhí)行完成后進(jìn)入到wechat的Documents目錄下
fall1994de-iPhone:~ root# cd /var/mobile/Containers/Data/Application/BCEF4156-0E01-4D7A-89D7-4898DD3A1A88/Documents
//利用環(huán)境變量 DYLD_INSERT_LIBRARY 來添加動(dòng)態(tài)庫dumpdecrypted.dylib
fall1994de-iPhone:/var/mobile/Containers/Data/Application/BCEF4156-0E01-4D7A-89D7-4898DD3A1A88/Documents root# DYLD_INSERT_LIBRARIES=dumpdecrypted.dylib /var/containers/Bundle/Application/9AA9E393-EE7A-47A6-B0BB-75F60C56A688/WeChat.app/WeChat
Killed: 9
//su mobile解決Killed: 9的問題
fall1994de-iPhone:/var/mobile/Containers/Data/Application/BCEF4156-0E01-4D7A-89D7-4898DD3A1A88/Documents root# su mobile 
fall1994de-iPhone:~/Containers/Data/Application/BCEF4156-0E01-4D7A-89D7-4898DD3A1A88/Documents mobile$ DYLD_INSERT_LIBRARIES=dumpdecrypted.dylib /var/containers/Bundle/Application/9AA9E393-EE7A-47A6-B0BB-75F60C56A688/WeChat.app/WeChat
mach-o decryption dumper

DISCLAIMER: This tool is only meant for security research purposes, not for application crackers.

[+] detected 64bit ARM binary in memory.
[+] offset to cryptid found: @0x100018ca8(from 0x100018000) = ca8
[+] Found encrypted data at address 00004000 of length 59129856 bytes - type 1.
[+] Opening /private/var/containers/Bundle/Application/9AA9E393-EE7A-47A6-B0BB-75F60C56A688/WeChat.app/WeChat for reading.
[+] Reading header
[+] Detecting header type
[+] Executable is a plain MACH-O image
[+] Opening WeChat.decrypted for writing.
[+] Copying the not encrypted start of the file
[+] Dumping the decrypted data into the file
[+] Copying the not encrypted remainder of the file
[+] Setting the LC_ENCRYPTION_INFO->cryptid to 0 at offset ca8
[+] Closing original file
[+] Closing dump file
//查看砸殼后得到的WeChat.decrypted
fall1994de-iPhone:~/Containers/Data/Application/BCEF4156-0E01-4D7A-89D7-4898DD3A1A88/Documents mobile$ ls
00000000000000000000000000000000  8988bed64ad49de43bb92358e80eb712  LocalInfo.lst   MemoryStat      WeChat.decrypted              c6b1224b7e98abe938eb5a77961de633  heavy_user_id_mapping.dat
0536d2db0169c7330e147ab22b4c12d8  9083f532701f365dcb748827438e4ac8  LoginInfo2.dat  OpenImResource  aa5c5b713a622d61083988a71b0b448a  d6ff5cb02a15b19eb7f797dc866de9e7  mmupdateinfo.archive
516c1e86e3a79d704c7c78dbf43cba82  CrashReport               MMResourceMgr   SMReport.dat    app_tutt                  db.globalconfig
5b8df94ef782697848221b40d04d9835  Ksid                  MMappedKV       SafeMode.dat    c5488da61168334a11af0d0e524109db  dumpdecrypted.dylib
fall1994de-iPhone:~/Containers/Data/Application/BCEF4156-0E01-4D7A-89D7-4898DD3A1A88/Documents mobile$ 
wechatdec.png

終端二:

/Users/macair/dumpdecrypted
//用scp命令將dumpdecrypted.dylib copy到要砸殼應(yīng)用的Documents目錄下
macair:dumpdecrypted GarryKings-Mac$ scp ./dumpdecrypted.dylib root@192.168.68.172:/var/mobile/Containers/Data/Application/BCEF4156-0E01-4D7A-89D7-4898DD3A1A88/Documents
root@192.168.68.172's password: 
dumpdecrypted.dylib                                                                          100%  193KB   1.2MB/s   00:00    
macair:dumpdecrypted GarryKings-Mac$ 

終端三:

/Users/macair/Desktop/reverse
//驗(yàn)證得到的WeChat.decrypted是否解密
macair:reverse GarryKings-Mac$ otool -l WeChat.decrypted | grep crypt
WeChat.decrypted:
     cryptoff 16384
    cryptsize 59129856
      cryptid 0
macair:reverse GarryKings-Mac$ 

2谷徙、用class-dump開始砸殼:

步驟:
1拒啰、下載 class-dump,編譯生成class-dump的可執(zhí)行文件
如下圖:

class-dump.png

class-dumpu-nix.png

2、終端執(zhí)行命令 ./class-dump XXXX -H -o ./headers 得到.h文件
如下圖:


headers.png

操作:

/Users/macair/Desktop/reverse
//查看是否解密
macair:reverse GarryKings-Mac$ otool -l OPlayer\ Lite| grep crypt
     cryptoff 16384
    cryptsize 21282816
      cryptid 0
//查看class-dump命令
macair:reverse GarryKings-Mac$ ./class-dump 
class-dump 3.5 (64 bit) (Debug version compiled Aug  3 2018 15:06:07)
Usage: class-dump [options] <mach-o-file>

  where options are:
        -a             show instance variable offsets
        -A             show implementation addresses
      .
      .
      .       
      
        --sdk-root     specify the full SDK root path (or use --sdk-ios/--sdk-mac for a shortcut)
//生產(chǎn).h頭文件
macair:reverse GarryKings-Mac$ ./class-dump OPlayer\ Lite -H -o ./headers
2018-08-08 11:13:28.898 class-dump[7327:103611] Warning: Parsing instance variable type failed, _canMakePayments
macair:reverse GarryKings-Mac$ 

三完慧、用 cycript 定位到感興趣的視圖
步驟:
1谋旦、登錄到手機(jī),查看進(jìn)程
2骗随、找到OPlayer Lite的進(jìn)程ID,查看APP的當(dāng)前界面結(jié)構(gòu)蛤织,定位到廣告視圖的view
3、去除廣告視圖鸿染,分析:廣告是個(gè)小的UIView指蚜,一定有個(gè)地方進(jìn)行了addSubView的操作添加到大的View上,那么定位到調(diào)用的地方涨椒,改變邏輯摊鸡,讓調(diào)用者繞過addSubView

操作:

//SSH登錄到手機(jī)
macair:~ GarryKings-Mac$ ssh root@localhost -p 2222
//默認(rèn)密碼alpine
root@localhost's password: 
//查看手機(jī)進(jìn)程
fall1994de-iPhone:~ root# ps -e
  PID TTY           TIME CMD
    1 ??         0:47.59 /sbin/launchd
  240 ??         0:32.77 /usr/sbin/syslogd
  242 ??         0:00.95 /usr/sbin/WirelessRadioManagerd
  .
  .
  .
 2951 ??         0:10.68 /var/containers/Bundle/Application/9995465C-AD4C-434D-92AF-2CDC46EA60E8/OPlayer Lite.app/OPlayer Lite
 3002 ??         0:00.18 sshd: root@ttys000 
 3004 ttys000    0:00.03 -sh
 3007 ttys000    0:00.01 ps -e
//附加進(jìn)程
fall1994de-iPhone:~ root# cycript -p 2951
//查看當(dāng)前UI的視圖層次機(jī)構(gòu)
cy# [[UIApp keyWindow ]recursiveDescription ].toString()
`<UIWindow: 0x124590360; frame = (0 0; 414 736); opaque = NO; autoresize = RM+BM; gestureRecognizers = <NSArray: 0x124591610>; layer = <UIWindowLayer: 0x124590110>>
   | <UITransitionView: 0x128257690; frame = (0 0; 414 736); autoresize = W+H; layer = <CALayer: 0x128255b40>>
   |    | <UIView: 0x125fa61d0; frame = (0 0; 414 736); autoresize = W+H; autoresizesSubviews = NO; layer = <CALayer: 0x125838da0>>
   |    |    | <UIView: 0x1258ac2e0; frame = (0 0; 414 736); layer = <CALayer: 0x125f33c20>>
   |    |    |    | <PlayerView: 0x125f09380; frame = (0 0; 414 736); layer = <CAEAGLLayer: 0x125f07700>>
   |    |    |    | <AVPlayerDemoPlaybackView: 0x125f475c0; frame = (0 0; 414 736); layer = <AVPlayerLayer: 0x1245f57d0>>
   |    |    |    |    | <AVPlayerLayerIntermediateLayer: 0x12580d450> (layer)
   |    |    |    |    |    | <FigVideoContainerLayer: 0x1258bb6c0> (layer)
   |    |    |    |    |    |    | <FigVideoLayer: 0x12479a4d0> (layer)
   |    |    |    |    |    | <FigSubtitleCALayer: 0x128206db0> (layer)
   |    |    |    |    |    | <AVPlayerLayerIntermediateLayer: 0x1258ed330> (layer)
   |    |    | <SubtitleLabel: 0x1247a7300; baseClass = UILabel; frame = (0 0; 414 40); text = ''; userInteractionEnabled = NO; layer = <_UILabelLayer: 0x1247864d0>>
   |    |    | <UIView: 0x1258c5ba0; frame = (47 0; 320 50); layer = <CALayer: 0x125f04310>>
   |    |    |    | <UIButton: 0x125f34c50; frame = (0 0; 320 50); opaque = NO; layer = <CALayer: 0x1258b3520>>
   |    |    |    |    | <UIImageView: 0x12478dae0; frame = (0 0; 320 50); clipsToBounds = YES; opaque = NO; userInteractionEnabled = NO; layer = <CALayer: 0x12469b090>>
   |    |    |    | <UILabel: 0x12476aa20; frame = (60 0; 260 50); text = 'Buy the full version to r...'; userInteractionEnabled = NO; layer = <_UILabelLayer: 0x1247a8590>>
   |    |    |    |    | <_UILabelContentLayer: 0x124796d50> (layer)
   |    |    | <RoundedRectView: 0x1258b5ed0; frame = (0 0; 414 64); hidden = YES; layer = <CALayer: 0x125f9a2f0>>
   |    |    |    | <PlaySeekView: 0x125f31f40; frame = (39 22; 336 32); layer = <CALayer: 0x1245687e0>>
   |    |    |    |    | <UILabel: 0x1258e2130; frame = (0 3; 60 25); text = '00:03:51'; userInteractionEnabled = NO; tag = 10000; layer = <_UILabelLayer: 0x128225c70>>
   |    |    |    |    | <OBSlider: 0x125f48840; baseClass = UISlider; frame = (60 5; 212 22); opaque = NO; tag = 10002; layer = <CALayer: 0x125fe65a0>; value: 231.000000>
   |    |    |    |    |    | <UIView: 0x124795d50; frame = (46 7; 164 8); clipsToBounds = YES; opaque = NO; userInteractionEnabled = NO; layer = <CALayer: 0x1247cc680>>
   |    |    |    |    |    |    | <UIImageView: 0x12476ebd0; frame = (-44 0; 208 8); clipsToBounds = YES; opaque = NO; userInteractionEnabled = NO; layer = <CALayer: 0x1247a64c0>>
   |    |    |    |    |    | <UIImageView: 0x1247d8e70; frame = (2 7; 44 8); clipsToBounds = YES; opaque = NO; userInteractionEnabled = NO; layer = <CALayer: 0x124798980>>
   |    |    |    |    |    | <UIImageView: 0x1247ce0f0; frame = (31 -4; 30 30); opaque = NO; userInteractionEnabled = NO; layer = <CALayer: 0x1247bb3b0>>
   |    |    |    |    | <UILabel: 0x124593630; frame = (272 3; 64 25); text = '-00:18:45'; userInteractionEnabled = NO; tag = 10001; layer = <_UILabelLayer: 0x1258ec6b0>>
   |    |    |    | <UIButton: 0x1258ea630; frame = (352 6; 58 50); opaque = NO; layer = <CALayer: 0x125893de0>>
   |    |    |    | <UIButton: 0x1258dbdb0; frame = (0 6; 58 54); opaque = NO; layer = <CALayer: 0x125fb3910>>
   |    |    |    | <UIButton: 0x1258e23c0; frame = (362 16; 48 44); opaque = NO; layer = <CALayer: 0x128246bc0>>
   |    |    |    |    | <UIImageView: 0x12816ef20; frame = (2 7; 44 30); clipsToBounds = YES; opaque = NO; userInteractionEnabled = NO; layer = <CALayer: 0x128140f10>>
   |    |    |    | <UIButton: 0x125f35c40; frame = (4 16; 48 44); opaque = NO; layer = <CALayer: 0x125f1b9f0>>
   |    |    |    |    | <UIImageView: 0x1247df950; frame = (2 7; 44 30); clipsToBounds = YES; opaque = NO; userInteractionEnabled = NO; layer = <CALayer: 0x1247c41f0>>
   |    |    | <NewRoundedRectView: 0x128223050; frame = (-5 648; 424 90); hidden = YES; layer = <CALayer: 0x125fbefd0>>
   |    |    |    | <UIButton: 0x1246da880; frame = (41 4; 44 44); opaque = NO; layer = <CALayer: 0x12473f5b0>>
   |    |    |    |    | <UIImageView: 0x1247cc3f0; frame = (6.33333 6.33333; 31 31); clipsToBounds = YES; opaque = NO; userInteractionEnabled = NO; layer = <CALayer: 0x1281092e0>>
   |    |    |    | <UIButton: 0x125f125e0; frame = (113 4; 44 44); opaque = NO; layer = <CALayer: 0x125f13460>>
   |    |    |    |    | <UIImageView: 0x12813b780; frame = (6.33333 6.33333; 31 31); clipsToBounds = YES; opaque = NO; userInteractionEnabled = NO; layer = <CALayer: 0x12813ea70>>
   |    |    |    | <UIButton: 0x1258ca7f0; frame = (185 4; 44 44); opaque = NO; layer = <CALayer: 0x125fdc6c0>>
   |    |    |    |    | <UIImageView: 0x124766000; frame = (6.33333 6.33333; 31 31); clipsToBounds = YES; opaque = NO; userInteractionEnabled = NO; layer = <CALayer: 0x1247b5370>>
   |    |    |    | <UIButton: 0x128245630; frame = (257 4; 44 44); opaque = NO; layer = <CALayer: 0x1258311d0>>
   |    |    |    |    | <UIImageView: 0x12468ca30; frame = (6.33333 6.33333; 31 31); clipsToBounds = YES; opaque = NO; userInteractionEnabled = NO; layer = <CALayer: 0x12460eda0>>
   |    |    |    | <UIButton: 0x128241120; frame = (329 4; 44 44); opaque = NO; layer = <CALayer: 0x1245f4790>>
   |    |    |    |    | <UIImageView: 0x12813ff00; frame = (6.33333 6.33333; 31 31); clipsToBounds = YES; opaque = NO; userInteractionEnabled = NO; layer = <CALayer: 0x1247d4ec0>>
   |    |    |    | <MPVolumeView: 0x1258e1510; frame = (27 56; 320 30); opaque = NO; layer = <CALayer: 0x125f65010>>
   |    |    |    |    | <MPButton: 0x124797e30; baseClass = UIButton; frame = (327 2; 21.6667 18); alpha = 0; opaque = NO; autoresize = LM+BM; layer = <CALayer: 0x1281548c0>>
   |    |    |    |    |    | <UIImageView: 0x12473e1b0; frame = (-39.1667 -41; 100 100); alpha = 0; opaque = NO; userInteractionEnabled = NO; tag = 1886548836; layer = <CALayer: 0x12469fdd0>>
   |    |    |    |    |    | <UIImageView: 0x1246c60f0; frame = (0 0; 21.6667 18); clipsToBounds = YES; opaque = NO; userInteractionEnabled = NO; layer = <CALayer: 0x128142800>>
   |    |    |    |    | <MPVolumeSlider: 0x125f00240; baseClass = UISlider; frame = (0 -5; 320 28); opaque = NO; autoresize = W+BM; layer = <CALayer: 0x1258f0d50>; value: 0.000000>
   |    |    |    |    |    | <UIView: 0x124795420; frame = (2 10; 316 8); clipsToBounds = YES; opaque = NO; userInteractionEnabled = NO; layer = <CALayer: 0x128159c30>>
   |    |    |    |    |    |    | <UIImageView: 0x12816f4e0; frame = (0 0; 316 8); clipsToBounds = YES; opaque = NO; userInteractionEnabled = NO; layer = <CALayer: 0x12471e730>>
   |    |    |    |    |    | <UIImageView: 0x1247bcca0; frame = (2 10; 0 8); clipsToBounds = YES; opaque = NO; userInteractionEnabled = NO; layer = <CALayer: 0x124796360>>
   |    |    |    |    |    | <UIImageView: 0x1246954c0; frame = (-3 -1; 30 30); opaque = NO; userInteractionEnabled = NO; layer = <CALayer: 0x124797750>>
   |    |    |    | <UIButton: 0x1246b6c10; frame = (370 40; 44 44); opaque = NO; layer = <CALayer: 0x1247bed20>>
   |    |    |    |    | <UIImageView: 0x1258e91a0; frame = (6.33333 6.33333; 31 31); clipsToBounds = YES; opaque = NO; userInteractionEnabled = NO; layer = <CALayer: 0x1245e7e50>>
   |    |    |    | <UIButton: 0x125fd9560; frame = (370 40; 44 44); hidden = YES; opaque = NO; layer = <CALayer: 0x125811b60>>
   |    |    | <FloatingView: 0x125fe6170; frame = (92 208; 230 160); hidden = YES; layer = <CALayer: 0x125fb3300>>
   |    |    |    | <UIButton: 0x125fd1840; frame = (21 4; 50 50); opaque = NO; layer = <CALayer: 0x125f0dee0>>
   |    |    |    |    | <UIImageView: 0x125f0ace0; frame = (0 0; 50 50); clipsToBounds = YES; opaque = NO; userInteractionEnabled = NO; layer = <CALayer: 0x1258c92c0>>
   |    |    |    | <UIButton: 0x12824fb30; frame = (91 4; 50 50); opaque = NO; layer = <CALayer: 0x125819670>>
   |    |    |    |    | <UIImageView: 0x125f515b0; frame = (0 0; 50 50); clipsToBounds = YES; opaque = NO; userInteractionEnabled = NO; layer = <CALayer: 0x125f1cd90>>
   |    |    |    | <UIButton: 0x1258f1ee0; frame = (91 56; 50 50); opaque = NO; layer = <CALayer: 0x125f6b830>>
   |    |    |    |    | <UIImageView: 0x12823e2d0; frame = (0 0; 50 50); clipsToBounds = YES; opaque = NO; userInteractionEnabled = NO; layer = <CALayer: 0x1258dd080>>
   |    |    |    | <UIButton: 0x1258db810; frame = (21 106; 50 50); opaque = NO; layer = <CALayer: 0x1258e6360>>
   |    |    |    |    | <UIImageView: 0x125fdc470; frame = (0 0; 50 50); clipsToBounds = YES; opaque = NO; userInteractionEnabled = NO; layer = <CALayer: 0x125f56440>>
   |    |    |    | <UIButton: 0x125fd9140; frame = (91 106; 50 50); opaque = NO; tintColor = UIDeviceWhiteColorSpace 1 1; layer = <CALayer: 0x12820e380>>
   |    |    |    |    | <UIImageView: 0x125875a00; frame = (0 0; 50 50); clipsToBounds = YES; opaque = NO; userInteractionEnabled = NO; layer = <CALayer: 0x125f5bea0>>
   |    |    |    | <UIButton: 0x125f0db50; frame = (161 4; 50 50); opaque = NO; tintColor = UIDeviceWhiteColorSpace 1 1; layer = <CALayer: 0x125f3a090>>
   |    |    |    |    | <UIImageView: 0x125fbfe30; frame = (0 0; 50 50); clipsToBounds = YES; opaque = NO; userInteractionEnabled = NO; layer = <CALayer: 0x125f5c5c0>>
   |    |    |    | <UIButton: 0x1258cc4a0; frame = (161 106; 50 50); opaque = NO; layer = <CALayer: 0x128200de0>>
   |    |    |    |    | <UIImageView: 0x125fc34e0; frame = (0 0; 50 50); clipsToBounds = YES; opaque = NO; userInteractionEnabled = NO; layer = <CALayer: 0x1258e08f0>>
   |    |    | <FloatingView: 0x128244d80; frame = (-5 272; 62 192); hidden = YES; layer = <CALayer: 0x125fd8570>>
   |    |    |    | <UIButton: 0x125f4ac40; frame = (11 3.2; 44 44); opaque = NO; tintColor = UIDeviceWhiteColorSpace 1 1; layer = <CALayer: 0x1258c42b0>>
   |    |    |    |    | <UIImageView: 0x125f47120; frame = (6.33333 6.33333; 31 31); clipsToBounds = YES; opaque = NO; userInteractionEnabled = NO; layer = <CALayer: 0x125f6d510>>
   |    |    |    | <UIButton: 0x1258c4ca0; frame = (11 50.4; 44 44); opaque = NO; tintColor = UIDeviceWhiteColorSpace 1 1; layer = <CALayer: 0x125fd98d0>>
   |    |    |    |    | <UIImageView: 0x124567940; frame = (6.33333 6.33333; 31 31); clipsToBounds = YES; opaque = NO; userInteractionEnabled = NO; layer = <CALayer: 0x1282258e0>>
   |    |    |    | <UIButton: 0x1258a6940; frame = (11 97.6; 44 44); opaque = NO; tintColor = UIDeviceWhiteColorSpace 1 1; layer = <CALayer: 0x1258c0950>>
   |    |    |    |    | <UIImageView: 0x125fe1da0; frame = (7 7; 30 30); clipsToBounds = YES; opaque = NO; userInteractionEnabled = NO; layer = <CALayer: 0x125fe1f50>>
   |    |    |    | <UIButton: 0x12588ae10; frame = (11 144.8; 44 44); opaque = NO; tintColor = UIDeviceWhiteColorSpace 1 1; layer = <CALayer: 0x1245f5840>>
   |    |    |    |    | <UIImageView: 0x12478ab30; frame = (6.33333 6.33333; 31 31); clipsToBounds = YES; opaque = NO; userInteractionEnabled = NO; layer = <CALayer: 0x128159810>>
   |    |    | <FloatingView: 0x1282064d0; frame = (357 272; 62 192); hidden = YES; layer = <CALayer: 0x12457a420>>
   |    |    |    | <UIButton: 0x1258a99d0; frame = (6 3.2; 44 44); opaque = NO; tintColor = UIDeviceWhiteColorSpace 1 1; layer = <CALayer: 0x1282047b0>>
   |    |    |    |    | <UIImageView: 0x1247c4b70; frame = (6.33333 6.33333; 31 31); clipsToBounds = YES; opaque = NO; userInteractionEnabled = NO; layer = <CALayer: 0x1247cddb0>>
   |    |    |    | <UIButton: 0x125fec5c0; frame = (6 50.4; 44 44); opaque = NO; tintColor = UIDeviceWhiteColorSpace 1 1; layer = <CALayer: 0x1258cd9d0>>
   |    |    |    |    | <UIImageView: 0x1247cd0f0; frame = (6.33333 6.33333; 31 31); clipsToBounds = YES; opaque = NO; userInteractionEnabled = NO; layer = <CALayer: 0x12468a9c0>>
   |    |    |    | <UIButton: 0x1258c15c0; frame = (6 97.6; 44 44); opaque = NO; tintColor = UIDeviceWhiteColorSpace 1 1; layer = <CALayer: 0x1258ca7c0>>
   |    |    |    |    | <UIImageView: 0x12468e440; frame = (6.33333 6.33333; 31 31); clipsToBounds = YES; opaque = NO; userInteractionEnabled = NO; layer = <CALayer: 0x128136af0>>
   |    |    |    | <UIButton: 0x12824d0c0; frame = (6 144.8; 44 44); opaque = NO; tintColor = UIDeviceRGBColorSpace 0.192157 0.760784 0.486275 1; layer = <CALayer: 0x1258a7e20>>
   |    |    |    |    | <UIImageView: 0x1247bb830; frame = (6.33333 6.33333; 31 31); clipsToBounds = YES; opaque = NO; userInteractionEnabled = NO; layer = <CALayer: 0x1246db090>>
   |    |    | <UILabel: 0x12820eca0; frame = (0 616; 414 30); text = ''; alpha = 0; userInteractionEnabled = NO; layer = <_UILabelLayer: 0x1258894d0>>
   |    |    | <UILabel: 0x125f30ee0; frame = (0 368; 414 100); userInteractionEnabled = NO; layer = <_UILabelLayer: 0x1258bf000>>
   |    |    |    | <_UILabelContentLayer: 0x12470a710> (layer)
   |    |    | <SingleHandRoundedRectView: 0x125fbd080; frame = (0 509; 227 227); hidden = YES; layer = <CALayer: 0x125f534f0>>
   |    |    |    | <UIImageView: 0x125fbd270; frame = (0 0; 227 227); opaque = NO; userInteractionEnabled = NO; layer = <CALayer: 0x125f535e0>>
   |    |    |    | <UIButton: 0x1258e9eb0; frame = (80 165; 52 52); opaque = NO; layer = <CALayer: 0x125f2b6c0>>
   |    |    |    |    | <UIImageView: 0x12816de50; frame = (10.3333 10.3333; 31 31); clipsToBounds = YES; opaque = NO; userInteractionEnabled = NO; layer = <CALayer: 0x12460f370>>
   |    |    |    | <UIButton: 0x128223d90; frame = (150 160; 52 52); opaque = NO; layer = <CALayer: 0x125f9adf0>>
   |    |    |    |    | <UIImageView: 0x124690350; frame = (10.3333 10.3333; 31 31); clipsToBounds = YES; opaque = NO; userInteractionEnabled = NO; layer = <CALayer: 0x12816c270>>
   |    |    |    | <UIButton: 0x125f1c0b0; frame = (105 75; 52 52); opaque = NO; layer = <CALayer: 0x125f9ab90>>
   |    |    |    |    | <UIImageView: 0x1247995c0; frame = (10.3333 10.3333; 31 31); clipsToBounds = YES; opaque = NO; userInteractionEnabled = NO; layer = <CALayer: 0x1247de070>>
   |    |    |    | <UIButton: 0x125f20230; frame = (20 25; 52 52); opaque = NO; layer = <CALayer: 0x125f13830>>
   |    |    |    |    | <UIImageView: 0x124799330; frame = (10.3333 10.3333; 31 31); clipsToBounds = YES; opaque = NO; userInteractionEnabled = NO; layer = <CALayer: 0x1247e33d0>>
   |    |    |    | <UIButton: 0x1258ecaa0; frame = (10 95; 52 52); opaque = NO; layer = <CALayer: 0x1258e7130>>
   |    |    |    |    | <UIImageView: 0x12479a2c0; frame = (10.3333 10.3333; 31 31); clipsToBounds = YES; opaque = NO; userInteractionEnabled = NO; layer = <CALayer: 0x12814fb40>>
   |    |    |    | <UIButton: 0x125f0f3f0; frame = (10 170; 52 52); opaque = NO; layer = <CALayer: 0x1258ed580>>
   |    |    |    |    | <UIImageView: 0x128109aa0; frame = (10.3333 10.3333; 31 31); clipsToBounds = YES; opaque = NO; userInteractionEnabled = NO; layer = <CALayer: 0x124769750>>
   |    |    | <SingleHandRoundedRectView: 0x125fd5d00; frame = (187 509; 227 227); hidden = YES; layer = <CALayer: 0x125fd5ea0>>
   |    |    |    | <UIImageView: 0x125fd5fe0; frame = (0 0; 227 227); opaque = NO; userInteractionEnabled = NO; layer = <CALayer: 0x125fdfc80>>
   |    |    |    | <UIButton: 0x125f511a0; frame = (100 165; 52 52); opaque = NO; layer = <CALayer: 0x125f2ea60>>
   |    |    |    |    | <UIImageView: 0x124763140; frame = (10.3333 10.3333; 31 31); clipsToBounds = YES; opaque = NO; userInteractionEnabled = NO; layer = <CALayer: 0x1247100a0>>
   |    |    |    | <UIButton: 0x125f345a0; frame = (25 160; 52 52); opaque = NO; layer = <CALayer: 0x125f352e0>>
   |    |    |    |    | <UIImageView: 0x128153220; frame = (10.3333 10.3333; 31 31); clipsToBounds = YES; opaque = NO; userInteractionEnabled = NO; layer = <CALayer: 0x12460d0e0>>
   |    |    |    | <UIButton: 0x12820b9a0; frame = (75 75; 52 52); opaque = NO; layer = <CALayer: 0x12820b980>>
   |    |    |    |    | <UIImageView: 0x12468f150; frame = (10.3333 10.3333; 31 31); clipsToBounds = YES; opaque = NO; userInteractionEnabled = NO; layer = <CALayer: 0x1247355f0>>
   |    |    |    | <UIButton: 0x125840a60; frame = (165 25; 52 52); opaque = NO; layer = <CALayer: 0x1282098e0>>
   |    |    |    |    | <UIImageView: 0x1247da440; frame = (10.3333 10.3333; 31 31); clipsToBounds = YES; opaque = NO; userInteractionEnabled = NO; layer = <CALayer: 0x1246df410>>
   |    |    |    | <UIButton: 0x125fd9c70; frame = (165 95; 52 52); opaque = NO; layer = <CALayer: 0x125f506b0>>
   |    |    |    |    | <UIImageView: 0x12814f080; frame = (10.3333 10.3333; 31 31); clipsToBounds = YES; opaque = NO; userInteractionEnabled = NO; layer = <CALayer: 0x128164430>>
   |    |    |    | <UIButton: 0x125fd7f40; frame = (170 170; 52 52); opaque = NO; layer = <CALayer: 0x125898e70>>
   |    |    |    |    | <UIImageView: 0x125fa74a0; frame = (10.3333 10.3333; 31 31); clipsToBounds = YES; opaque = NO; userInteractionEnabled = NO; layer = <CALayer: 0x125f5fae0>>
   |    |    | <UIButton: 0x125fd2820; frame = (354 342; 52 52); hidden = YES; opaque = NO; layer = <CALayer: 0x125fd23d0>>
   |    |    |    | <UIImageView: 0x1258c59d0; frame = (1 1; 50 50); clipsToBounds = YES; opaque = NO; userInteractionEnabled = NO; layer = <CALayer: 0x1258eab40>>
   |    |    | <UIButton: 0x128251670; frame = (10 342; 52 52); hidden = YES; opaque = NO; layer = <CALayer: 0x128251610>>
   |    |    |    | <UIImageView: 0x125feb960; frame = (1 1; 50 50); clipsToBounds = YES; opaque = NO; userInteractionEnabled = NO; layer = <CALayer: 0x1258fbc10>>`
cy# [#0x1258c5ba0 setHidden: YES]
cy# [#0x1258c5ba0 setHidden: NO]
cy# [[UIApp keyWindow ]recursiveDescription ].toString()
`<UIWindow: 0x124695730; frame = (0 0; 414 736); opaque = NO; autoresize = RM+BM; gestureRecognizers = <NSArray: 0x1245c1c10>; layer = <UIWindowLayer: 0x124695700>>
   | <UITransitionView: 0x1282723b0; frame = (0 0; 414 736); autoresize = W+H; layer = <CALayer: 0x128270660>>
   |    | <UIView: 0x125f644e0; frame = (0 0; 414 736); autoresize = W+H; autoresizesSubviews = NO; layer = <CALayer: 0x125811c60>>
   |    |    | <UIView: 0x125f45bc0; frame = (0 0; 414 736); layer = <CALayer: 0x1246d37d0>>
   |    |    |    | <PlayerView: 0x128223850; frame = (0 0; 414 736); layer = <CAEAGLLayer: 0x12584b210>>
   |    |    |    | <AVPlayerDemoPlaybackView: 0x125892060; frame = (0 0; 414 736); layer = <AVPlayerLayer: 0x125f51fe0>>
   |    |    |    |    | <AVPlayerLayerIntermediateLayer: 0x125f5bed0> (layer)
   |    |    |    |    |    | <FigVideoContainerLayer: 0x1258520b0> (layer)
   |    |    |    |    |    |    | <FigVideoLayer: 0x12584d7b0> (layer)
   |    |    |    |    |    | <FigSubtitleCALayer: 0x12822b820> (layer)
   |    |    |    |    |    | <AVPlayerLayerIntermediateLayer: 0x1258af7b0> (layer)
   |    |    | <SubtitleLabel: 0x12585e2b0; baseClass = UILabel; frame = (0 0; 414 40); text = ''; userInteractionEnabled = NO; layer = <_UILabelLayer: 0x125882fa0>>
   |    |    | <GADBannerView: 0x12811ed00; frame = (47 0; 320 50); clipsToBounds = YES; layer = <CALayer: 0x1245dfee0>>
   |    |    |    | <GADAdView: 0x12811bca0; frame = (0 0; 320 50); opaque = NO; gestureRecognizers = <NSArray: 0x128110170>; layer = <CALayer: 0x1245870e0>>
   |    |    |    |    | <UIScrollView: 0x125016a00; frame = (0 0; 0 0); clipsToBounds = YES; gestureRecognizers = <NSArray: 0x128271ec0>; layer = <CALayer: 0x12477c960>; contentOffset: {0, 0}; contentSize: {0, 0}>
   |    |    |    |    |    | <UIImageView: 0x128187b80; frame = (-39 -5.33333; 36 2.33333); alpha = 0; opaque = NO; autoresize = TM; userInteractionEnabled = NO; layer = <CALayer: 0x12818b160>>
   |    |    |    |    |    | <UIImageView: 0x128187d30; frame = (-5.33333 -39; 2.33333 36); alpha = 0; opaque = NO; autoresize = LM; userInteractionEnabled = NO; layer = <CALayer: 0x1247eb450>>
   |    |    |    |    | <GADUIKitWebView: 0x128128d10; frame = (0 0; 320 50); clipsToBounds = YES; opaque = NO; layer = <CALayer: 0x1247aace0>>
   |    |    |    |    |    | <UIWebView: 0x125834e20; frame = (0 0; 320 50); opaque = NO; layer = <CALayer: 0x1258660e0>>
   |    |    |    |    |    |    | <_UIWebViewScrollView: 0x1249ce000; frame = (0 0; 320 50); clipsToBounds = YES; autoresize = H; gestureRecognizers = <NSArray: 0x12589d720>; layer = <CALayer: 0x1258d5cc0>; contentOffset: {0, 0}; contentSize: {320, 51}>
   |    |    |    |    |    |    |    | <UIWebBrowserView: 0x12497e400; frame = (0 0; 320 51); text = '\u5b89\u88c5
WAR ROBOTS
\u9009\u62e9\u5e76\u5b9a\u5236\u673a\u5668\u4eba\u3002
'; opaque = NO; gestureRecognizers = <NSArray: 0x128218520>; layer = <UIWebLayer: 0x12581d570>>
   |    |    |    |    |    |    |    |    | <LegacyTileHostLayer: 0x1258cf0d0> (layer)
   |    |    |    |    |    |    |    |    |    | <LegacyTileLayer: 0x12466bcf0> (layer)
   |    |    |    |    |    |    |    |    | <CALayer: 0x125f77cc0> (layer)
   |    |    |    |    |    |    |    |    |    | <WebLayer: 0x128249310> (layer)
   |    |    |    |    |    |    |    |    |    |    | <WebLayer: 0x125f684d0> (layer)
   |    |    |    |    |    |    |    |    |    |    |    | <WebLayer: 0x125f80dd0> (layer)
   |    |    |    |    |    |    |    |    |    |    |    |    | <WebLayer: 0x125fa0c80> (layer)
   |    |    |    |    |    |    |    |    |    |    |    | <WebLayer: 0x12821a080> (layer)
   |    |    |    |    |    |    |    |    |    |    |    |    | <WebLayer: 0x12822f7e0> (layer)
   |    |    |    |    |    |    |    |    |    |    |    | <WebLayer: 0x1258b52c0> (layer)
   |    |    |    |    |    |    |    |    |    |    |    | <WebLayer: 0x1282ac280> (layer)
   |    |    |    |    |    |    |    |    |    |    | <WebLayer: 0x125f6bac0> (layer)
   |    |    |    |    |    |    |    | <UIImageView: 0x128264210; frame = (314.667 -39; 2.33333 36); alpha = 0; opaque = NO; autoresize = LM; userInteractionEnabled = NO; layer = <CALayer: 0x1258657a0>>
   |    |    |    |    |    |    |    | <UIImageView: 0x12823d5e0; frame = (-39 44.6667; 36 2.33333); alpha = 0; opaque = NO; autoresize = TM; userInteractionEnabled = NO; layer = <CALayer: 0x1258575d0>>
   |    |    | <RoundedRectView: 0x1258668b0; frame = (0 0; 414 64); hidden = YES; layer = <CALayer: 0x1258a97f0>>
   |    |    |    | <PlaySeekView: 0x125888ad0; frame = (39 22; 336 32); layer = <CALayer: 0x125853430>>
   |    |    |    |    | <UILabel: 0x1258b0d00; frame = (0 3; 60 25); text = '00:02:19'; userInteractionEnabled = NO; tag = 10000; layer = <_UILabelLayer: 0x12468f750>>
   |    |    |    |    | <OBSlider: 0x125862f00; baseClass = UISlider; frame = (60 5; 212 22); opaque = NO; tag = 10002; layer = <CALayer: 0x125f7b410>; value: 139.000000>
   |    |    |    |    |    | <UIView: 0x12583c650; frame = (127 7; 83 8); clipsToBounds = YES; opaque = NO; userInteractionEnabled = NO; layer = <CALayer: 0x12822dae0>>
   |    |    |    |    |    |    | <UIImageView: 0x128232c00; frame = (-125 0; 208 8); clipsToBounds = YES; opaque = NO; userInteractionEnabled = NO; layer = <CALayer: 0x125f91130>>
   |    |    |    |    |    | <UIImageView: 0x125861a90; frame = (2 7; 125 8); clipsToBounds = YES; opaque = NO; userInteractionEnabled = NO; layer = <CALayer: 0x125f5da80>>
   |    |    |    |    |    | <UIImageView: 0x1258c1ca0; frame = (112 -4; 30 30); opaque = NO; userInteractionEnabled = NO; layer = <CALayer: 0x1258c3460>>
   |    |    |    |    | <UILabel: 0x1258bcc00; frame = (272 3; 64 25); text = '-00:01:27'; userInteractionEnabled = NO; tag = 10001; layer = <_UILabelLayer: 0x1258a9c60>>
   |    |    |    | <UIButton: 0x1247f0100; frame = (352 6; 58 50); opaque = NO; layer = <CALayer: 0x1245b1ce0>>
   |    |    |    | <UIButton: 0x12585dfd0; frame = (0 6; 58 54); opaque = NO; layer = <CALayer: 0x1246c0eb0>>
   |    |    |    | <UIButton: 0x125f3c120; frame = (362 16; 48 44); opaque = NO; layer = <CALayer: 0x125f0cb90>>
   |    |    |    |    | <UIImageView: 0x12584a260; frame = (2 7; 44 30); clipsToBounds = YES; opaque = NO; userInteractionEnabled = NO; layer = <CALayer: 0x125816bc0>>
   |    |    |    | <UIButton: 0x1258d08e0; frame = (4 16; 48 44); opaque = NO; layer = <CALayer: 0x1258f0730>>
   |    |    |    |    | <UIImageView: 0x125842680; frame = (2 7; 44 30); clipsToBounds = YES; opaque = NO; userInteractionEnabled = NO; layer = <CALayer: 0x125fbf170>>
   |    |    | <NewRoundedRectView: 0x1247d4260; frame = (-5 648; 424 90); hidden = YES; layer = <CALayer: 0x1247be690>>
.
.
.
   |    |    | <UIButton: 0x12826c1d0; frame = (10 342; 52 52); hidden = YES; opaque = NO; layer = <CALayer: 0x12826c170>>
   |    |    |    | <UIImageView: 0x12585f800; frame = (1 1; 50 50); clipsToBounds = YES; opaque = NO; userInteractionEnabled = NO; layer = <CALayer: 0x1258ef1f0>>`
cy# [#0x12811ed00 setHidden: YES]
cy# [#0x12811ed00 setHidden:NO]
cy# 
fall1994de-iPhone:~ root# 
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個(gè)濱河市蚕冬,隨后出現(xiàn)的幾起案子免猾,更是在濱河造成了極大的恐慌,老刑警劉巖囤热,帶你破解...
    沈念sama閱讀 206,214評(píng)論 6 481
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件猎提,死亡現(xiàn)場(chǎng)離奇詭異,居然都是意外死亡旁蔼,警方通過查閱死者的電腦和手機(jī)锨苏,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 88,307評(píng)論 2 382
  • 文/潘曉璐 我一進(jìn)店門疙教,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人伞租,你說我怎么就攤上這事贞谓。” “怎么了葵诈?”我有些...
    開封第一講書人閱讀 152,543評(píng)論 0 341
  • 文/不壞的土叔 我叫張陵裸弦,是天一觀的道長(zhǎng)。 經(jīng)常有香客問我作喘,道長(zhǎng)理疙,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 55,221評(píng)論 1 279
  • 正文 為了忘掉前任泞坦,我火速辦了婚禮沪斟,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘暇矫。我一直安慰自己,他們只是感情好择吊,可當(dāng)我...
    茶點(diǎn)故事閱讀 64,224評(píng)論 5 371
  • 文/花漫 我一把揭開白布李根。 她就那樣靜靜地躺著,像睡著了一般几睛。 火紅的嫁衣襯著肌膚如雪房轿。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 49,007評(píng)論 1 284
  • 那天所森,我揣著相機(jī)與錄音囱持,去河邊找鬼。 笑死焕济,一個(gè)胖子當(dāng)著我的面吹牛纷妆,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播晴弃,決...
    沈念sama閱讀 38,313評(píng)論 3 399
  • 文/蒼蘭香墨 我猛地睜開眼掩幢,長(zhǎng)吁一口氣:“原來是場(chǎng)噩夢(mèng)啊……” “哼!你這毒婦竟也來了上鞠?” 一聲冷哼從身側(cè)響起际邻,我...
    開封第一講書人閱讀 36,956評(píng)論 0 259
  • 序言:老撾萬榮一對(duì)情侶失蹤,失蹤者是張志新(化名)和其女友劉穎芍阎,沒想到半個(gè)月后世曾,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 43,441評(píng)論 1 300
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡谴咸,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 35,925評(píng)論 2 323
  • 正文 我和宋清朗相戀三年轮听,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了骗露。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 38,018評(píng)論 1 333
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡蕊程,死狀恐怖椒袍,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情藻茂,我是刑警寧澤驹暑,帶...
    沈念sama閱讀 33,685評(píng)論 4 322
  • 正文 年R本政府宣布,位于F島的核電站辨赐,受9級(jí)特大地震影響优俘,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜掀序,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 39,234評(píng)論 3 307
  • 文/蒙蒙 一帆焕、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧不恭,春花似錦叶雹、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,240評(píng)論 0 19
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至沾瓦,卻和暖如春满着,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背贯莺。 一陣腳步聲響...
    開封第一講書人閱讀 31,464評(píng)論 1 261
  • 我被黑心中介騙來泰國(guó)打工风喇, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人缕探。 一個(gè)月前我還...
    沈念sama閱讀 45,467評(píng)論 2 352
  • 正文 我出身青樓魂莫,卻偏偏與公主長(zhǎng)得像,于是被迫代替她去往敵國(guó)和親爹耗。 傳聞我的和親對(duì)象是個(gè)殘疾皇子豁鲤,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 42,762評(píng)論 2 345

推薦閱讀更多精彩內(nèi)容