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

引言

本文测试工具 iPhone:7P、iOS9.3.2

  1. ios逆向工程指的是在软件层面上进行逆向分析的一个过程。如果想要达到对ios软件较强的逆向分析能力,最好能非常熟悉ios设备的硬件构成、ios系统的运行原理,还要具备丰富的ios开发经验,比如:拿到一个App之后能清晰的推断出这个App使用的技术,包括引用了那些FrameWork,那些经典的第三方代码,以及整个App工程大致的文件个数等。
  2. 逆向工程的主要两个作用:首先是攻破目标程序,拿到关键信息,可以归类于安全相关的逆向工程,其次是借鉴他人的程序功能来开发自己的软件,可以归类于开发相关的逆向工程
  3. 与安全相关的ios逆向工程
    ios 逆向工程最突出的应用领域就是与安全相关的,比如:通过逆向一个金融App,来评定这个软件的安全等级,安全专家通过逆向ios病毒,来找到杀毒的方法,安全公司通过逆向ios系统电话、短信功能,来构建一个手机防火墙

a.评定安全等级
ios中那些具有交易功能的App一般会先加密敏感数据,然后将加密过的数据存储在本地或通过互联网传输,而如果安全意识不够强,就完全有可能将重要信息直接用明文保存或传输,安全隐患极大。App虽然可以将低维的攻击防守得如铜墙铁壁一般,但是挡不住高维的逆向攻击,不过不可以据此得出App不安全的结论,因为ios逆向工程的使用均来自一个前提:ios越狱,在这种环境下,我们使用这些逆向工程技术来分析评估目标App中可被攻击点有多少,可攻击点越少的自然就越安全。

b. 逆向恶意软件
ios 是只能移动终端操作系统,它同计算机操作系统没有本质区别,恶意软件就是通过逆向工程定位系统和软件漏洞,利用漏洞渗透进目标主机,获取敏感数据

  1. 与开发相关的ios逆向工程
    开发者可以逆向系统调用,在自己的程序里使用一些文档中没有提及的私有功能,还可以逆向一些经典的软件等
    a.逆向系统调用
    开发者编写的软件能够运行在操作系统中,提供各种各样的功能,是因为操作系统本身已经内嵌了这些功能,软件只是拿来重组使用。绝大多数的App的实现都源于公开的开发文档,而不能使用诸如锁屏,关机等文档中不涉及的功能,如果你的程序面向Cydia,那么不采用非公开功能将导致程序几乎没有竞争力,故可以通过逆向ios系统调用,还原系统实现相应功能的代码,并应用到自己的程序中。
    b.借鉴别的软件
    逆向工程最受欢迎的应用场合就是“借鉴”他人的软件功能。

ios 越狱

ios 完美越狱和不完美越狱

完美越狱,越狱后的iPhone可以正常关机和重启
不完美越狱,iPhone一旦关机后再开机时,屏幕就会一直停留在启动画面,也就是“白苹果”状态。或者能正常开机,但已经安装的破解软件都无法正常使用,需要将设备与PC连接后,使用软件进行引导才能使用。一般说来,在苹果发布新的iOS固件后,针对该固件的不完美越狱会先发布,随后完美越狱才可能发布,一般较新的系统版本,均为不完美越狱

越狱方法推荐
PP助手:http://jailbreak.25pp.com/
ps:不同机型,不同系统,有的可以越狱,有的不可以
http://jailbreak.25pp.com/iphone5syueyu/

如何判断是否越狱成功?

  1. 桌面是否有cydia


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


image.png

使用cydia安装软件


Snip20180927_2.png

一、远程登录到手机:

SSH介绍

SSH是Secure Shell的缩写,意为"安全外壳协议",是远程登录会话和其他网络服务提供安全性的协议,用于计算机之间的加密登录,使用SSH,可以把所有传输的数据进行加密,"中间人"攻击方式就不可能实现,防止DNS欺骗和IP欺骗,OpenSSH 是SSH协议的免费开源的实现,是一个运用ssh、提供ssh登录的一个软件。

  • SSH过程

client首先向server发送登录请求
server收到请求以后发送一个公钥给client
client将密码用公钥加密以后发给server
server收到这段信息,用私钥解密,如果是正确的密码就登录成功

SSH登录原理.png
  • ssh安全隐患-中间人攻击(MITM攻击)

在client向server发送请求的时候,在client与server之间架起伪server然后拦截client的请求
用伪server向server发送一个登录请求,
server生成密钥A:公钥A,私钥A 反给伪server
伪server拿到公钥A以后,立马生成一对密钥B:公钥B、私钥B,将公钥B反给client
client拿到公钥B以后进行密码加密,发送server,然后伪server拦截
伪server拿到这段密文,用私钥B进行解密拿到密码,发送给黑客server,再将密码用公钥A进行加密发送给server

SSH中间人攻击.png

1、WiFi使用SSH登录到手机:

  • 准备

在同一个Wi-Fi下使用ssh
越狱机中先安装插件OpenSSH,密码在openSSH可以查看,初始密码为alpine,默认端口是22

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

2、通过usbmuxd登录到手机:

  • 准备

usbmuxd下载

下载完成后如下:
usermuxd.png
  • 操作:
//在下载的文件下
/Users/macair/usbmuxd
GarryKings-Mac:usbmuxd macair$ cd python-client/
//查看内容
GarryKings-Mac:python-client macair$ ls
tcprelay.py usbmux.py   usbmux.pyc
//执行Python里脚本,进行端口转发,把手机的22端口(SSH端口)转发为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

打开另一个终端:

//登录手机端口、localhost是一个域名
GarryKings-Mac:~ macair$ ssh root@localhost -p 2222
root@localhost's password: 
fall1994de-iPhone:~ root# 

二、砸壳

  • 前言

从 APPStore 商店下载安装的APP 默认都被苹果加了一层壳,加了壳后我们就无法使用dump导出头文件等其它操作,所以我们就必须要砸壳

1、砸壳方式
  • a、静态砸壳
    静态砸壳使用Clutch, 主动调起iPhone的解密功能, 得到解密的APP文件
    步骤:
    1、下载Clutch,
    2、copy Clutch文件到手机的 /usr/bin/ 目录下
    scp -P 2222 Clutch root@127.0.0.1:/usr/bin/
    3、查看可砸壳的应用 Clutch -i
    4、砸壳应用 Clutch -d bundleId
    5、查看砸壳后的路径,生产.ipa文件
    6、验证是否砸壳成功: cryptid 为 0, 即没有任何加密,砸壳成功

  • 操作

//ssh登录到手机
macair:~ GarryKings-Mac$ ssh root@192.168.68.178
root@192.168.68.178's password: 
//进入手机的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
//查看手机上可砸壳的应用
fall1994de-iPhone:/usr/bin root# Clutch -i
2018-08-07 17:04:39.962 Clutch[2105:61595] command: Prints installed applications
Installed apps:
1:   百度网盘 <com.baidu.netdisk>
2:   今日头条 <com.ss.iphone.article.News>
3:   QQ <com.tencent.mqq>
4:   微信 <com.tencent.xin>
5:   钉钉 <com.laiwang.DingTalk>
6:   火山小视频 - 分享生活,让世界为你点赞 <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>
//砸壳应用
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
//砸壳后生产的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 
//验证是否砸壳成功,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、动态砸壳
    准备:

dumpdecrypted下载,并编译,得到dumpdecrypted.dylib
原理:将应用运行起来, 然后从内存中得到已经解密的Mach-O文件

步骤:
1、注入dumpdecrypted 到需要砸壳的应用

  • 操作
//ssh登录手机
macair:~ GarryKings-Mac$ ssh root@192.168.68.172
//默认密码alpine
root@192.168.68.172's password: 
//查看手机进程
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
//附加进程
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退出,进入终端二、执行完成后进入到wechat的Documents目录下
fall1994de-iPhone:~ root# cd /var/mobile/Containers/Data/Application/BCEF4156-0E01-4D7A-89D7-4898DD3A1A88/Documents
//利用环境变量 DYLD_INSERT_LIBRARY 来添加动态库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到要砸壳应用的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
//验证得到的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的可执行文件
如下图:

class-dump.png

class-dumpu-nix.png

2、终端执行命令 ./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)
//生产.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、登录到手机,查看进程
2、找到OPlayer Lite的进程ID,查看APP的当前界面结构,定位到广告视图的view
3、去除广告视图,分析:广告是个小的UIView,一定有个地方进行了addSubView的操作添加到大的View上,那么定位到调用的地方,改变逻辑,让调用者绕过addSubView

操作:

//SSH登录到手机
macair:~ GarryKings-Mac$ ssh root@localhost -p 2222
//默认密码alpine
root@localhost's password: 
//查看手机进程
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
//附加进程
fall1994de-iPhone:~ root# cycript -p 2951
//查看当前UI的视图层次机构
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# 
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 158,847评论 4 362
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 67,208评论 1 292
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 108,587评论 0 243
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 43,942评论 0 205
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 52,332评论 3 287
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 40,587评论 1 218
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 31,853评论 2 312
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 30,568评论 0 198
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 34,273评论 1 242
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 30,542评论 2 246
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 32,033评论 1 260
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 28,373评论 2 253
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 33,031评论 3 236
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 26,073评论 0 8
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 26,830评论 0 195
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 35,628评论 2 274
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 35,537评论 2 269

推荐阅读更多精彩内容