[iOS Reverse]运行时分析cycript
前言
在上一篇文章中,讲述了如何利用class-dump来dump头文件[[iOS Hacking]用class-dump获取头文件]([iOS Hacking]用class-dump获取头文件),这篇文章将会讲述运行时分析工具cycript
。
安装cycript
在手机上打开cydia,搜索cycript
插件并安装。
ssh连接手机
在Mac上打开终端,用ssh连接手机:
ssh root@xx.xx.xx.xx
输入密码:
alpine
关于如何连接手机,请参考我之前的[iOS HACKING入门]微信注入。
然后获取目标app的执行文件名
定位目标app可执行文件路径,cd到如下路径:
/private/var/containers/Bundle/Application
执行命令:
ps -e
然后command+F
搜索目标app的路径:
比如,我这里目标app是微信,那么我搜索:
wechat
得到微信可执行文件路径:
/var/containers/Bundle/Application/EA96ABB7-3673-4771-AEE5-8DB891B74DB5/WeChat.app/WeChat
若找不到可执行文件路径,解决方案如下:
在Mac上下载目标app的ipa文件,右键,用实用归档工具打开,然后在解压后的文件夹中找到
Payload/xxx.app
,找到可执行文件的位置,如我要hack微信(WeChat),可执行文件位置为:
Payload/WeChat.app/WeChat
然后在手机上运行目标app,如启动微信,杀掉其它app然后根据上面拿到的可执行文件名WeChat
执行如下命令
ps aux | grep "WeChat"
同样可以找到目标文件的可执行文件在手机中的路径:/var/containers/Bundle/Application/EA96ABB7-3673-4771-AEE5-8DB891B74DB5/WeChat.app/WeChat
:
mobile 513 0.0 4.8 911344 49328 ?? Ss 10:37AM 0:10.41 /var/containers/Bundle/Application/EA96ABB7-3673-4771-AEE5-8DB891B74DB5/WeChat.app/WeChat
root 825 0.0 0.0 527168 304 s000 R+ 11:03AM 0:00.01 grep WeChat
查找手机中目标app的进程id(pid)
输入指令
ps aux | grep "xxx"
其中xxx
是目标app可执行文件的名字,如微信的是WeChat
找到目标进程的id(pid):
可以获取微信的pid:
1146
cycript运行时分析
输入指令:
cycript -p ****
其中****
表示目标进程的pid,在这里是1146
#cy
在手机微信中打开任意一个聊天界面,然后在Mac终端输入指令:
UIApp.keyWindow.recursiveDescription().toString()
其中的UIApp相当于[UIApplication sharedApplication]
的到如下结果:
<pre>
<iConsoleWindow: 0x13000e120; baseClass = UIWindow; frame = (0 0; 320 568); autoresize = W+H; gestureRecognizers = <NSArray: 0x12ef81c70>; layer = <UIWindowLayer: 0x12efa1660>> | <UILayoutContainerView: 0x130358d30; frame = (0 0; 320 568); autoresize = W+H; layer = <CALayer: 0x130358c80>> | | <UITransitionView: 0x1303599b0; frame = (0 0; 320 568); clipsToBounds = YES; autoresize = W+H; layer = <CALayer: 0x12ed06210>> | | | <UIViewControllerWrapperView: 0x1304f6d90; frame = (0 0; 320 568); autoresize = W+H; layer = <CALayer: 0x130a0ec90>> | | | | <UILayoutContainerView: 0x1304240b0; frame = (0 0; 320 568); autoresize = W+H; gestureRecognizers = <NSArray: 0x13033e4e0>; layer = <CALayer: 0x130424490>> | | | | | <UINavigationTransitionView: 0x130338120; frame = (0 0; 320 568); clipsToBounds = YES; autoresize = W+H; layer = <CALayer: 0x12ed0f1c0>> | | | | | | <UIViewControllerWrapperView: 0x1304dcf10; frame = (0 0; 320 568); layer = <CALayer: 0x13006d910>> | | | | | | | <UIView: 0x13080dbc0; frame = (0 0; 320 568); autoresize = W+H; layer = <CALayer: 0x130c556b0>> | | | | | | | | <MMMultiSelectToolView: 0x130ca2fa0; frame = (0 568; 320 50); hidden = YES; layer = <CALayer: 0x130ca2730>> | | | | | | | | | <UIImageView: 0x130c81bf0; frame = (0 0; 320 50); opaque = NO; layer = <CALayer: 0x130ca3280>> | | | | | | | | | <UIButton: 0x130c82a60; frame = (24 7.5; 35 35); opaque = NO; tag = 10002; layer = <CALayer: 0x130c82d00>> | | | | | | | | | | <UIImageView: 0x130e3f010; frame = (0 0; 35 35); clipsToBounds = YES; opaque = NO; userInteractionEnabled = NO; layer = <CALayer: 0x130e3c8a0>> | | | | | | | | | <UIButton: 0x130c927a0; frame = (103 7.5; 35 35); opaque = NO; tag = 10001; layer = <CALayer: 0x130c92a40>> | | | | | | | | | | <UIImageView: 0x130e3f1c0; frame = (0 0; 35 35); clipsToBounds = YES; opaque = NO; userInteractionEnabled = NO; layer = <CALayer: 0x130e3e500>> | | | | | | | | | <UIButton: 0x130cc1f20; frame = (182 7.5; 35 35); opaque = NO; tag = 10003; layer = <CALayer: 0x130c9c5f0>> | | | | | | | | | | <UIImageView: 0x130e3f4d0; frame = (0 0; 35 35); clipsToBounds = YES; opaque = NO; userInteractionEnabled = NO; layer = <CALayer: 0x130e3f680>> | | | | | | | | | <UIButton: 0x130cc3820; frame = (261 7.5; 35 35); opaque = NO; tag = 10004; layer = <CALayer: 0x130cc3ac0>> | | | | | | | | | | <UIImageView: 0x130e3f8d0; frame = (0 0; 35 35); clipsToBounds = YES; opaque = NO; userInteractionEnabled = NO; layer = <CALayer: 0x130e3fa80>> | | | | | | | | <MMTableView: 0x12fca3e00; baseClass = UITableView; frame = (0 0; 320 568); clipsToBounds = YES; gestureRecognizers = <NSArray: 0x130cc5d00>; layer = <CALayer: 0x130cc5840>; contentOffset: {0, 427}; contentSize: {320, 945}> | | | | | | | | | <UITableViewWrapperView: 0x12faec400; frame = (0 0; 320 995); gestureRecognizers = <NSArray: 0x130cc6a80>; layer = <CALayer: 0x130cc65c0>; contentOffset: {0, 0}; contentSize: {320, 995}> | | | | | | | | | | <MultiSelectTableViewCell: 0x130e5f6d0; baseClass = UITableViewCell; frame = (0 882; 320 63); autoresize = W; tag = 101; layer = <CALayer: 0x13085f4d0>> | | | | | | | | | | | <UITableViewCellContentView: 0x130e5fac0; frame = (0 0; 320 63); gestureRecognizers = <NSArray: 0x130e60060>; layer = <CALayer: 0x130e5f290>> | | | | | | | | | | | | <TextMessageNodeView: 0x130b670d0; frame = (0 0; 163 60); layer = <CALayer: 0x130b51300>> | | | | | | | | | | | | | <UIView: 0x130e62d10; frame = (55 0; 60 55); layer = <CALayer: 0x130e62a80>> | | | | | | | | | | | | | | <UIImageView: 0x130e63b50; frame = (0 0; 60 55); clipsToBounds = YES; opaque = NO; layer = <CALayer: 0x130e63660>> | | | | | | | | | | | | | | <RichTextView: 0x130e62fa0; baseClass = UILabel; frame = (17 14; 8 20); opaque = NO; layer = <_UILabelLayer: 0x130e62f10>> | | | | | | | | | | | | | | | <_UILabelContentLayer: 0x130e62bc0> (layer) | | | | | | | | | | | | | <UIImageView: 0x130d03d70; frame = (55 0; 60 55); hidden = YES; opaque = NO; userInteractionEnabled = NO; layer = <CALayer: 0x130d03900>> | | | | | | | | | | | | | <UIView: 0x130e612f0; frame = (7 1; 47 47); gestureRecognizers = <NSArray: 0x130e62610>; layer = <CALayer: 0x130e61270>> | | | | | | | | | | | | | | <UIButton: 0x130e61460; frame = (3 1; 40 40); opaque = NO; tag = 100001; layer = <CALayer: 0x130e61290>> | | | | | | | | | | | | | | | <UIImageView: 0x130d05da0; frame = (0 0; 40 40); clipsToBounds = YES; opaque = NO; userInteractionEnabled = NO; layer = <CALayer: 0x130d05870>> | | | | | | | | | | | | | | <UIImageView: 0x130e61e70; frame = (0 0; 46 46); opaque = NO; userInteractionEnabled = NO; layer = <CALayer: 0x130e61c80>> | | | | | | | | | | | | <UIImageView: 0x130e60170; frame = (-26.5 8; 30 30); opaque = NO; userInteractionEnabled = NO; layer = <CALayer: 0x130e60320>> | | | | | | | | | | <MultiSelectTableViewCell: 0x130d127b0; baseClass = UITableViewCell; frame = (0 819; 320 63); autoresize = W; tag = 101; layer = <CALayer: 0x130d13620>> | | | | | | | | | | | <UITableViewCellContentView: 0x130d12ba0; frame = (0 0; 320 63); gestureRecognizers = <NSArray: 0x130d0d670>; layer = <CALayer: 0x130d12f90>> | | | | | | | | | | | | <TextMessageNodeView: 0x130b6b160; frame = (0 0; 163 60); layer = <CALayer: 0x1308760a0>> | | | | | | | | | | | | | <UIView: 0x130d27bf0; frame = (55 0; 60 55); layer = <CALayer: 0x130d27960>> | | | | | | | | | | | | | | <UIImageView: 0x130a86200; frame = (0 0; 60 55); clipsToBounds = YES; opaque = NO; layer = <CALayer: 0x130d163d0>> | | | | | | | | | | | | | | <RichTextView: 0x130d16020; baseClass = UILabel; frame = (17 14; 8 20); opaque = NO; layer = <_UILabelLayer: 0x130d16300>> | | | | | | | | | | | | | | | <_UILabelContentLayer: 0x130d03710> (layer) | | | | | | | | | | | | | <UIImageView: 0x130d015a0; frame = (55 0; 60 55); hidden = YES; opaque = NO; userInteractionEnabled = NO; layer = <CALayer: 0x13024bee0>> | | | | | | | | | | | | | <UIView: 0x130d1bd00; frame = (7 1; 47 47); gestureRecognizers = <NSArray: 0x130d274f0>; layer = <CALayer: 0x130d1be70>> | | | | | | | | | | | | | | <UIButton: 0x130d262e0; frame = (3 1; 40 40); opaque = NO; tag = 100001; layer = <CALayer: 0x130d1bad0>> | | | | | | | | | | | | | | | <UIImageView: 0x130d03bc0; frame = (0 0; 40 40); clipsToBounds = YES; opaque = NO; userInteractionEnabled = NO; layer = <CALayer: 0x130d03a80>> | | | | | | | | | | | | | | <UIImageView: 0x130d26d30; frame = (0 0; 46 46); opaque = NO; userInteractionEnabled = NO; layer = <CALayer: 0x130d26ee0>> | | | | | | | | | | | | <UIImageView: 0x130d0d780; frame = (-26.5 8; 30 30); opaque = NO; userInteractionEnabled = NO; layer = <CALayer: 0x130d0d930>> | | | | | | | | | | <MultiSelectTableViewCell: 0x130d22df0; baseClass = UITableViewCell; frame = (0 756; 320 63); autoresize = W; tag = 101; layer = <CALayer: 0x130af9d20>> | | | | | | | | | | | <UITableViewCellContentView: 0x130d231e0; frame = (0 0; 320 63); gestureRecognizers = <NSArray: 0x1305a6ea0>; layer = <CALayer: 0x130d17950>> | | | | | | | | | | | | <TextMessageNodeView: 0x130c26ed0; frame = (165 0; 146 60); layer = <CALayer: 0x130b618a0>> | | | | | | | | | | | | | <UIView: 0x13055aa40; frame = (0 0; 98 55); layer = <CALayer: 0x130ab1370>> | | | | | | | | | | | | | | <UIImageView: 0x130d13850; frame = (0 0; 98 55); clipsToBounds = YES; opaque = NO; layer = <CALayer: 0x130d137b0>> | | | | | | | | | | | | | | <RichTextView: 0x130a96260; baseClass = UILabel; frame = (17 14; 64 20); opaque = NO; layer = <_UILabelLayer: 0x130a96540>> | | | | | | | | | | | | | | | <_UILabelContentLayer: 0x130e5e4d0> (layer) | | | | | | | | | | | | | <UIImageView: 0x130e5c1f0; frame = (0 0; 98 55); hidden = YES; opaque = NO; userInteractionEnabled = NO; layer = <CALayer: 0x130c9bde0>> | | | | | | | | | | | | | <UIView: 0x130aae700; frame = (101 1; 47 47); gestureRecognizers = <NSArray: 0x130ab0f00>; layer = <CALayer: 0x130aae4d0>> | | | | | | | | | | | | | | <UIButton: 0x130aafaf0; frame = (3 1; 40 40); opaque = NO; tag = 100001; layer = <CALayer: 0x130aae4f0>> | | | | | | | | | | | | | | | <UIImageView: 0x130e5e520; frame = (0 0; 40 40); clipsToBounds = YES; opaque = NO; userInteractionEnabled = NO; layer = <CALayer: 0x130e5e3e0>> | | | | | | | | | | | | | | <UIImageView: 0x130aada50; frame = (0 0; 46 46); opaque = NO; userInteractionEnabled = NO; layer = <CALayer: 0x130aad640>> | | | | | | | | | | | | <UIImageView: 0x1305a6fb0; frame = (-26.5 8; 30 30); opaque = NO; userInteractionEnabled = NO; layer = <CALayer: 0x1305a7160>> | | | | | | | | | | <MultiSelectTableViewCell: 0x130e55100; baseClass = UITableViewCell; frame = (0 693; 320 63); autoresize = W; tag = 101; layer = <CALayer: 0x130e54600>> | | | | | | | | | | | <UITableViewCellContentView: 0x130e554f0; frame = (0 0; 320 63); gestureRecognizers = <NSArray: 0x130e55af0>; layer = <CALayer: 0x130e54210>> | | | | | | | | | | | | <TextMessageNodeView: 0x130c58200; frame = (101 0; 210 60); layer = <CALayer: 0x130663b90>> | | | | | | | | | | | | | <UIView: 0x130e589c0; frame = (0 0; 162 55); layer = <CALayer: 0x130e58730>> | | | | | | | | | | | | | | <UIImageView: 0x130e59890; frame = (0 0; 162 55); clipsToBounds = YES; opaque = NO; layer = <CALayer: 0x130e58f70>> | | | | | | | | | | | | | | <RichTextView: 0x130e58c50; baseClass = UILabel; frame = (17 14; 128 20); opaque = NO; layer = <_UILabelLayer: 0x130e58bc0>> | | | | | | | | | | | | | | | <_UILabelContentLayer: 0x130c90f30> (layer) | | | | | | | | | | | | | <UIImageView: 0x130e59f60; frame = (0 0; 162 55); hidden = YES; opaque = NO; userInteractionEnabled = NO; layer = <CALayer: 0x130e59f10>> | | | | | | | | | | | | | <UIView: 0x130e56d80; frame = (165 1; 47 47); gestureRecognizers = <NSArray: 0x130e582c0>; layer = <CALayer: 0x130e56d00>> | | | | | | | | | | | | | | <UIButton: 0x130e56ef0; frame = (3 1; 40 40); opaque = NO; tag = 100001; layer = <CALayer: 0x130e56d20>> | | | | | | | | | | | | | | | <UIImageView: 0x130e5bfc0; frame = (0 0; 40 40); clipsToBounds = YES; opaque = NO; userInteractionEnabled = NO; layer = <CALayer: 0x130e5be80>> | | | | | | | | | | | | | | <UIImageView: 0x130e57b00; frame = (0 0; 46 46); opaque = NO; userInteractionEnabled = NO; layer = <CALayer: 0x130e57cb0>> | | | | | | | | | | | | <UIImageView: 0x130e55c00; frame = (-26.5 8; 30 30); opaque = NO; userInteractionEnabled = NO; layer = <CALayer: 0x130e55db0>> | | | | | | | | | | <MultiSelectTableViewCell: 0x130d23d20; baseClass = UITableViewCell; frame = (0 630; 320 63); autoresize = W; tag = 101; layer = <CALayer: 0x130d0a580>> | | | | | | | | | | | <UITableViewCellContentView: 0x130d24110; frame = (0 0; 320 63); gestureRecognizers = <NSArray: 0x130aaecc0>; layer = <CALayer: 0x130d09ff0>> | | | | | | | | | | | | <TextMessageNodeView: 0x130c83f20; frame = (85 0; 226 60); layer = <CALayer: 0x130830170>> | | | | | | | | | | | | | <UIView: 0x130ab19b0; frame = (0 0; 178 55); layer = <CALayer: 0x130ab1820>> | | | | | | | | | | | | | | <UIImageView: 0x130a17710; frame = (0 0; 178 55); clipsToBounds = YES; opaque = NO; layer = <CALayer: 0x1305af820>> | | | | | | | | | | | | | | <RichTextView: 0x130ace550; baseClass = UILabel; frame = (17 14; 144 20); opaque = NO; layer = <_UILabelLayer: 0x130ace830>> | | | | | | | | | | | | | | | <_UILabelContentLayer: 0x130e54350> (layer) | | | | | | | | | | | | | <UIImageView: 0x130e520a0; frame = (0 0; 178 55); hidden = YES; opaque = NO; userInteractionEnabled = NO; layer = <CALayer: 0x130e52050>> | | | | | | | | | | | | | <UIView: 0x130ac3680; frame = (181 1; 47 47); gestureRecognizers = <NSArray: 0x130a901f0>; layer = <CALayer: 0x130ac3620>> | | | | | | | | | | | | | | <UIButton: 0x130ac37f0; frame = (3 1; 40 40); opaque = NO; tag = 100001; layer = <CALayer: 0x130d17bc0>> | | | | | | | | | | | | | | | <UIImageView: 0x130e54620; frame = (0 0; 40 40); clipsToBounds = YES; opaque = NO; userInteractionEnabled = NO; layer = <CALayer: 0x130e544e0>> | | | | | | | | | | | | | | <UIImageView: 0x130d245e0; frame = (0 0; 46 46); opaque = NO; userInteractionEnabled = NO; layer = <CALayer: 0x130d24790>> | | | | | | | | | | | | <UIImageView: 0x130aaedd0; frame = (-26.5 8; 30 30); opaque = NO; userInteractionEnabled = NO; layer = <CALayer: 0x130aaef80>> | | | | | | | | | | <MultiSelectTableViewCell: 0x130af86a0; baseClass = UITableViewCell; frame = (0 567; 320 63); autoresize = W; tag = 101; layer = <CALayer: 0x130af76f0>> | | | | | | | | | | | <UITableViewCellContentView: 0x130af7dc0; frame = (0 0; 320 63); gestureRecognizers = <NSArray: 0x130af9000>; layer = <CALayer: 0x130af7f40>> | | | | | | | | | | | | <TextMessageNodeView: 0x130b78ff0; frame = (149 0; 162 60); layer = <CALayer: 0x130c8b790>> | | | | | | | | | | | | | <UIView: 0x130d09a40; frame = (0 0; 114 55); layer = <CALayer: 0x130d097b0>> | | | | | | | | | | | | | | <UIImageView: 0x130a88f30; frame = (0 0; 114 55); clipsToBounds = YES; opaque = NO; layer = <CALayer: 0x130a890e0>> | | | | | | | | | | | | | | <RichTextView: 0x130d09c40; baseClass = UILabel; frame = (17 14; 80 20); opaque = NO; layer = <_UILabelLayer: 0x130d09f20>> | | | | | | | | | | | | | | | <_UILabelContentLayer: 0x130e51e30> (layer) | | | | | | | | | | | | | <UIImageView: 0x130e500e0; frame = (0 0; 114 55); hidden = YES; opaque = NO; userInteractionEnabled = NO; layer = <CALayer: 0x130e4fed0>> | | | | | | | | | | | | | <UIView: 0x130afa210; frame = (117 1; 47 47); gestureRecognizers = <NSArray: 0x130d11380>; layer = <CALayer: 0x130af9fe0>> | | | | | | | | | | | | | | <UIButton: 0x130afa380; frame = (3 1; 40 40); opaque = NO; tag = 100001; layer = <CALayer: 0x130afa000>> | | | | | | | | | | | | | | | <UIImageView: 0x130e51ea0; frame = (0 0; 40 40); clipsToBounds = YES; opaque = NO; userInteractionEnabled = NO; layer = <CALayer: 0x130e51e80>> | | | | | | | | | | | | | | <UIImageView: 0x130d201f0; frame = (0 0; 46 46); opaque = NO; userInteractionEnabled = NO; layer = <CALayer: 0x130d1ff40>> | | | | | | | | | | | | <UIImageView: 0x130af9110; frame = (-26.5 8; 30 30); opaque = NO; userInteractionEnabled = NO; layer = <CALayer: 0x130af92c0>> | | | | | | | | | | <MultiSelectTableViewCell: 0x130e4bbe0; baseClass = UITableViewCell; frame = (0 504; 320 63); autoresize = W; tag = 101; layer = <CALayer: 0x130e43dc0>> | | | | | | | | | | | <UITableViewCellContentView: 0x130e4bfd0; frame = (0 0; 320 63); gestureRecognizers = <NSArray: 0x130e4c5f0>; layer = <CALayer: 0x130e4b340>> | | | | | | | | | | | | <TextMessageNodeView: 0x130c8a2f0; frame = (165 0; 146 60); layer = <CALayer: 0x1308d4ce0>> | | | | | | | | | | | | | <UIView: 0x130e4f510; frame = (0 0; 98 55); layer = <CALayer: 0x130e4f280>> | | | | | | | | | | | | | | <UIImageView: 0x130d12080; frame = (0 0; 98 55); clipsToBounds = YES; opaque = NO; layer = <CALayer: 0x130d11980>> | | | | | | | | | | | | | | <RichTextView: 0x130e4f7a0; baseClass = UILabel; frame = (17 14; 64 20); opaque = NO; layer = <_UILabelLayer: 0x130e4f710>> | | | | | | | | | | | | | | | <_UILabelContentLayer: 0x130af7b10> (layer) | | | | | | | | | | | | | <UIImageView: 0x130af5a30; frame = (0 0; 98 55); hidden = YES; opaque = NO; userInteractionEnabled = NO; layer = <CALayer: 0x130af59e0>> | | | | | | | | | | | | | <UIView: 0x130e4d880; frame = (101 1; 47 47); gestureRecognizers = <NSArray: 0x130e4ee10>; layer = <CALayer: 0x130e4d800>> | | | | | | | | | | | | | | <UIButton: 0x130e4d9f0; frame = (3 1; 40 40); opaque = NO; tag = 100001; layer = <CALayer: 0x130e4d820>> | | | | | | | | | | | | | | | <UIImageView: 0x130af7b60; frame = (0 0; 40 40); clipsToBounds = YES; opaque = NO; userInteractionEnabled = NO; layer = <CALayer: 0x130af7a20>> | | | | | | | | | | | | | | <UIImageView: 0x130e4e670; frame = (0 0; 46 46); opaque = NO; userInteractionEnabled = NO; layer = <CALayer: 0x130e4dff0>> | | | | | | | | | | | | <UIImageView: 0x130e4c700; frame = (-26.5 8; 30 30); opaque = NO; userInteractionEnabled = NO; layer = <CALayer: 0x130e4c8b0>> | | | | | | | | | | <MultiSelectTableViewCell: 0x130e418f0; baseClass = UITableViewCell; frame = (0 421; 320 83); autoresize = W; tag = 101; layer = <CALayer: 0x13012eab0>> | | | | | | | | | | | <UITableViewCellContentView: 0x130e425a0; frame = (0 0; 320 83); gestureRecognizers = <NSArray: 0x130e42ca0>; layer = <CALayer: 0x12ef78a50>> | | | | | | | | | | | | <TextMessageNodeView: 0x130c88a50; frame = (53 0; 258 80); layer = <CALayer: 0x12ef93fb0>> | | | | | | | | | | | | | <UIView: 0x130e47330; frame = (0 0; 210 75); layer = <CALayer: 0x130e470a0>> | | | | | | | | | | | | | | <UIImageView: 0x130e48360; frame = (0 0; 210 75); clipsToBounds = YES; opaque = NO; layer = <CALayer: 0x130e47d00>> | | | | | | | | | | | | | | <RichTextView: 0x130e475c0; baseClass = UILabel; frame = (17 14; 176 40); opaque = NO; layer = <_UILabelLayer: 0x130e47560>> | | | | | | | | | | | | | | | <_UILabelContentLayer: 0x130d11bc0> (layer) | | | | | | | | | | | | | <UIImageView: 0x130af5130; frame = (0 0; 210 75); hidden = YES; opaque = NO; userInteractionEnabled = NO; layer = <CALayer: 0x130af50e0>> | | | | | | | | | | | | | <UIView: 0x130e44d60; frame = (213 1; 47 47); gestureRecognizers = <NSArray: 0x130e46c30>; layer = <CALayer: 0x130e44890>> | | | | | | | | | | | | | | <UIButton: 0x130e44ed0; frame = (3 1; 40 40); opaque = NO; tag = 100001; layer = <CALayer: 0x130e44d10>> | | | | | | | | | | | | | | | <UIImageView: 0x130d119b0; frame = (0 0; 40 40); clipsToBounds = YES; opaque = NO; userInteractionEnabled = NO; layer = <CALayer: 0x130d11e10>> | | | | | | | | | | | | | | <UIImageView: 0x130e46470; frame = (0 0; 46 46); opaque = NO; userInteractionEnabled = NO; layer = <CALayer: 0x130e46620>> | | | | | | | | | | | | <UIImageView: 0x130e42db0; frame = (-26.5 8; 30 30); opaque = NO; userInteractionEnabled = NO; layer = <CALayer: 0x130e42f60>> | | | | | | | | | <UIView: 0x130849280; frame = (0 0; 320 40); layer = <CALayer: 0x1308493f0>> | | | | | | | | | | <UIActivityIndicatorView: 0x1303c1060; frame = (150 10; 20 20); hidden = YES; autoresize = LM+RM; layer = <CALayer: 0x1308a0b50>> | | | | | | | | | | | <UIImageView: 0x12efea170; frame = (0 0; 20 20); opaque = NO; userInteractionEnabled = NO; layer = <CALayer: 0x12efea320>> | | | | | | | | | <UIImageView: 0x130557410; frame = (3 939.5; 314 2.5); alpha = 0; opaque = NO; autoresize = TM; userInteractionEnabled = NO; layer = <CALayer: 0x130a78fc0>> | | | | | | | | | <UIImageView: 0x130ad5870; frame = (314.5 494; 2.5 448); alpha = 0; opaque = NO; autoresize = LM; userInteractionEnabled = NO; layer = <CALayer: 0x1305b34f0>> | | | | | | | | <MMInputToolView: 0x130ca9f10; frame = (0 0; 320 568); text = ''; layer = <CALayer: 0x130ca7ad0>> | | | | | | | | | <UIButton: 0x1308ee1f0; frame = (215 408; 105 110); hidden = YES; opaque = NO; layer = <CALayer: 0x130b5cea0>> | | | | | | | | | | <UIImageView: 0x130af4690; frame = (0 0; 105 110); clipsToBounds = YES; opaque = NO; userInteractionEnabled = NO; layer = <CALayer: 0x130af4840>> | | | | | | | | | | <UIView: 0x130b87c90; frame = (0 0; 105 110); alpha = 0; userInteractionEnabled = NO; layer = <CALayer: 0x1308508d0>> | | | | | | | | | | | <MMEmoticonView: 0x130b87fb0; frame = (12 10; 80 80); userInteractionEnabled = NO; layer = <CALayer: 0x130b883a0>> | | | | | | | | | | | | <UIImageView: 0x130d1fb90; frame = (0 0; 80 80); clipsToBounds = YES; opaque = NO; userInteractionEnabled = NO; layer = <CALayer: 0x130af94b0>> | | | | | | | | | <InputToolViewBar: 0x130caadb0; baseClass = UIImageView; frame = (0 518; 320 50); clipsToBounds = YES; layer = <CALayer: 0x130c92e20>> | | | | | | | | | | <UIVisualEffectView: 0x130cab600; frame = (0 0; 320 50); autoresize = W+H; tag = 102289; layer = <CALayer: 0x130cabb60>> | | | | | | | | | | | <_UIVisualEffectBackdropView: 0x130cac620; frame = (0 0; 320 50); clipsToBounds = YES; opaque = NO; autoresize = W+H; userInteractionEnabled = NO; layer = <CABackdropLayer: 0x130caca50>> | | | | | | | | | | | <_UIVisualEffectFilterView: 0x130cad290; frame = (0 0; 320 50); clipsToBounds = YES; opaque = NO; autoresize = W+H; userInteractionEnabled = NO; layer = <CALayer: 0x130cad650>> | | | | | | | | | | | <_UIVisualEffectContentView: 0x130cade80; frame = (0 0; 320 50); clipsToBounds = YES; opaque = NO; autoresize = W+H; layer = <CALayer: 0x130cae240>> | | | | | | | | | | <UIView: 0x130cae540; frame = (0 0; 320 0.5); autoresize = W; layer = <CALayer: 0x130cae6b0>> | | | | | | | | | | <MMGrowTextView: 0x130caed90; frame = (37 3; 209 44); text = ''; layer = <CALayer: 0x130caf230>> | | | | | | | | | | | <UIImageView: 0x130cad670; frame = (0 0; 209 44); opaque = NO; userInteractionEnabled = NO; layer = <CALayer: 0x13089ad00>> | | | | | | | | | | | <MMTextView: 0x12faaf800; baseClass = UITextView; frame = (6 5; 200 34); text = ''; clipsToBounds = YES; gestureRecognizers = <NSArray: 0x130cb0690>; layer = <CALayer: 0x13087ab70>; contentOffset: {0, 1}; contentSize: {200, 36}> | | | | | | | | | | | | <<_UITextContainerView: 0x130b686e0; frame = (0 0; 200 36); layer = <_UITextTiledLayer: 0x130b696e0>> minSize = {0, 0}, maxSize = {1.7976931348623157e+308, 1.7976931348623157e+308}, textContainer = <NSTextContainer: 0x130b6de40 size = (200.000000,340282346638528859811704183484516925440.000000); widthTracksTextView = YES; heightTracksTextView = NO>; exclusionPaths = 0x12ee03300; lineBreakMode = 0> | | | | | | | | | | | | | <_UITileLayer: 0x130af3f90> (layer) | | | | | | | | | | | | <UIImageView: 0x13055c480; frame = (194.5 1; 2.5 31); alpha = 0; opaque = NO; autoresize = LM; userInteractionEnabled = NO; layer = <CALayer: 0x130562910>> | | | | | | | | | | <MMTransparentButton: 0x130b74bf0; baseClass = UIButton; frame = (37 2.5; 209 45); alpha = 0; opaque = NO; autoresize = W; layer = <CALayer: 0x130b87560>> hightlighted = 0 | | | | | | | | | | | <UIImageView: 0x130561c90; frame = (0 0; 209 45); clipsToBounds = YES; opaque = NO; userInteractionEnabled = NO; layer = <CALayer: 0x130561e40>> | | | | | | | | | | | <UIButtonLabel: 0x130b60700; frame = (70.5 14.5; 68 19.5); text = '\u6309\u4f4f \u8bf4\u8bdd'; opaque = NO; userInteractionEnabled = NO; layer = <_UILabelLayer: 0x130b50110>> | | | | | | | | | | | | <_UILabelContentLayer: 0x130af3fb0> (layer) | | | | | | | | | | <UIButton: 0x130cae800; frame = (1 8; 35 35); opaque = NO; tag = 10088; layer = <CALayer: 0x130caeaa0>> | | | | | | | | | | | <UIImageView: 0x130e3fda0; frame = (0 0; 35 35); clipsToBounds = YES; opaque = NO; userInteractionEnabled = NO; layer = <CALayer: 0x130e3ff50>> | | | | | | | | | | <UIButton: 0x130b4e5d0; frame = (284 8; 35 35); opaque = NO; autoresize = LM; layer = <CALayer: 0x130b4e870>> | | | | | | | | | | | <UIImageView: 0x130e401b0; frame = (0 0; 35 35); clipsToBounds = YES; opaque = NO; userInteractionEnabled = NO; layer = <CALayer: 0x130e40360>> | | | | | | | | | | <UIButton: 0x130b59fd0; frame = (247 8; 35 35); opaque = NO; autoresize = LM; layer = <CALayer: 0x130b71620>> | | | | | | | | | | | <UIImageView: 0x130e405b0; frame = (0 0; 35 35); clipsToBounds = YES; opaque = NO; userInteractionEnabled = NO; layer = <CALayer: 0x130e40760>> | | | | | | | | | | <MMTransparentButton: 0x130c4e010; baseClass = UIButton; frame = (0 2.5; 320 40); alpha = 0; opaque = NO; layer = <CALayer: 0x130c4e2d0>> hightlighted = 0 | | | | | | | | | | | <UIImageView: 0x130542820; frame = (0 0; 320 40); clipsToBounds = YES; opaque = NO; userInteractionEnabled = NO; layer = <CALayer: 0x130af2790>> | | | | | | | | | <MMUIView: 0x130b88a30; frame = (0 568; 320 224); layer = <CALayer: 0x130b88d20>> | | | | | | | | | | <UIVisualEffectView: 0x130b5c730; frame = (0 0; 320 224); autoresize = W+H; tag = 102289; layer = <CALayer: 0x130b88db0>> | | | | | | | | | | | <_UIVisualEffectBackdropView: 0x130b4c980; frame = (0 0; 320 224); clipsToBounds = YES; opaque = NO; autoresize = W+H; userInteractionEnabled = NO; layer = <CABackdropLayer: 0x130b88df0>> | | | | | | | | | | | <_UIVisualEffectFilterView: 0x130c6b140; frame = (0 0; 320 224); clipsToBounds = YES; opaque = NO; autoresize = W+H; userInteractionEnabled = NO; layer = <CALayer: 0x130b4ee50>> | | | | | | | | | | | <_UIVisualEffectContentView: 0x130b58bf0; frame = (0 0; 320 224); clipsToBounds = YES; opaque = NO; autoresize = W+H; layer = <CALayer: 0x130c6b600>> | | | | | | | | | <RecordView: 0x130b58fc0; frame = (0 0; 320 300); hidden = YES; layer = <CALayer: 0x130b593c0>> | | | | | | | | | | <UIImageView: 0x130b5a6b0; frame = (85 131; 0 0); hidden = YES; tag = 10086; layer = <CALayer: 0x130b595e0>> | | | | | | | | | | | <UIView: 0x130b5a890; frame = (0 0; 150 150); clipsToBounds = YES; layer = <CALayer: 0x130b5aa00>> | | | | | | | | | | | | <UIImageView: 0x130c503a0; frame = (25 15; 62 100); opaque = NO; userInteractionEnabled = NO; layer = <CALayer: 0x130b31770>> | | | | | | | | | | | | <UIImageView: 0x130b676a0; frame = (87 15; 38 100); opaque = NO; userInteractionEnabled = NO; layer = <CALayer: 0x130b7bc70>> | | | | | | | | | | | | <UIActivityIndicatorView: 0x130c7b060; frame = (0 0; 20 20); alpha = 0; hidden = YES; layer = <CALayer: 0x130c7b270>> | | | | | | | | | | | | | <UIImageView: 0x130c7b440; frame = (0 0; 20 20); opaque = NO; userInteractionEnabled = NO; layer = <CALayer: 0x130c7b5f0>> | | | | | | | | | | | <MMTransparentButton: 0x130b7bd10; baseClass = UIButton; frame = (7 118; 135 25); clipsToBounds = YES; opaque = NO; layer = <CALayer: 0x130b7c010>> hightlighted = 0 | | | | | | | | | | | | <UIButtonLabel: 0x130b7c190; frame = (4.5 4; 126 17); text = '\u624b\u6307\u4e0a\u6ed1\uff0c\u53d6\u6d88\u53d1\u9001'; opaque = NO; userInteractionEnabled = NO; layer = <_UILabelLayer: 0x130b7c3b0>> | | | | | | | | | | | | | <_UILabelContentLayer: 0x130af28c0> (layer) | | | | | | | | | | | <UIImageView: 0x130b6d180; frame = (25 15; 100 100); opaque = NO; userInteractionEnabled = NO; layer = <CALayer: 0x130c8c770>> | | | | | | | | | | | <MMUILabel: 0x130c799a0; baseClass = UILabel; frame = (0 91; 120 24); userInteractionEnabled = NO; layer = <_UILabelLayer: 0x130c8c390>> | | | | | | | | | | | | <_UILabelContentLayer: 0x12ee730b0> (layer) | | | | | | | | | | | <MMUILabel: 0x130c7a020; baseClass = UILabel; frame = (0 91; 120 24); hidden = YES; userInteractionEnabled = NO; layer = <_UILabelLayer: 0x130c79f00>> | | | | | | | | | | | | <_UILabelContentLayer: 0x13044d370> (layer) | | | | | | | | | <UIButton: 0x130c76200; frame = (240 408; 81 110); alpha = 0; opaque = NO; layer = <CALayer: 0x130c764a0>> | | | | | | | | | | <UIImageView: 0x130e31cb0; frame = (0 0; 81 110); clipsToBounds = YES; opaque = NO; userInteractionEnabled = NO; layer = <CALayer: 0x130e31e60>> | | | | | | | | | | <MMUILabel: 0x130b6f750; baseClass = UILabel; frame = (12 4; 60 32); text = '\u4f60\u53ef\u80fd\u8981\u53d1\u9001\u7684\u7167\u7247:'; userInteractionEnabled = NO; layer = <_UILabelLayer: 0x130b6f960>> | | | | | | | | | | | <_UILabelContentLayer: 0x1305961d0> (layer) | | | | | | | | <UIButton: 0x130ca3c20; frame = (280 74; 40 40); opaque = NO; layer = <CALayer: 0x130829300>> | | | | | | | | | <UIImageView: 0x130e40a90; frame = (0 0; 40 40); clipsToBounds = YES; opaque = NO; userInteractionEnabled = NO; layer = <CALayer: 0x130e40a50>> | | | | | <UIButton: 0x13060d5a0; frame = (0 64; 320 504); hidden = YES; opaque = NO; tag = 1347; layer = <CALayer: 0x12edcda80>> | | | | | <UIButton: 0x1301e75c0; frame = (0 20; 320 568); hidden = YES; opaque = NO; layer = <CALayer: 0x1303953a0>> | | | | | <VoiceRecogView: 0x1304de5a0; frame = (115 146; 90 90); hidden = YES; layer = <CALayer: 0x130000960>> | | | | | | <UIImageView: 0x12efa7960; frame = (0 0; 90 90); opaque = NO; layer = <CALayer: 0x12efe7e60>> | | | | | | <UIImageView: 0x12efb7c80; frame = (0 0; 90 90); opaque = NO; layer = <CALayer: 0x12ed11080>> | | | | | | <UIImageView: 0x12efbaef0; frame = (0 0; 90 90); opaque = NO; layer = <CALayer: 0x12efa89d0>> | | | | | | <UIImageView: 0x12efb6a80; frame = (0 0; 90 90); opaque = NO; layer = <CALayer: 0x1303ee1d0>> | | | | | <MMUINavigationBar: 0x130424730; baseClass = UINavigationBar; frame = (0 20; 320 44); opaque = NO; autoresize = W; tintColor = UIDeviceRGBColorSpace 0 0 0 1; gestureRecognizers = <NSArray: 0x130427230>; layer = <CALayer: 0x130424ac0>> | | | | | | <UIView: 0x1304273d0; frame = (0 -20; 320 64); userInteractionEnabled = NO; layer = <CALayer: 0x130427670>> | | | | | | | <CAGradientLayer: 0x130427790> (layer) | | | | | | <_UINavigationBarBackground: 0x130425260; frame = (0 -20; 320 64); opaque = NO; autoresize = W; userInteractionEnabled = NO; layer = <CALayer: 0x12eea6a20>> | | | | | | | <_UIBackdropView: 0x130a6d420; frame = (0 0; 320 64); opaque = NO; autoresize = W+H; userInteractionEnabled = NO; layer = <_UIBackdropViewLayer: 0x130a6d120>> | | | | | | | | <_UIBackdropEffectView: 0x130a6e1c0; frame = (0 0; 320 64); clipsToBounds = YES; opaque = NO; autoresize = W+H; userInteractionEnabled = NO; layer = <CABackdropLayer: 0x130a6dc90>> | | | | | | | | <UIView: 0x130a6e440; frame = (0 0; 320 64); hidden = YES; opaque = NO; autoresize = W+H; userInteractionEnabled = NO; layer = <CALayer: 0x130a6d300>> | | | | | | | <UIImageView: 0x130a6fe80; frame = (0 64; 320 0.5); userInteractionEnabled = NO; layer = <CALayer: 0x130a714a0>> | | | | | | <MMTitleView: 0x130697370; frame = (159.5 4; 1 36); layer = <CALayer: 0x1308e19f0>> | | | | | | | <UIView: 0x130cc9ce0; frame = (0 5.5; 37 25); layer = <CALayer: 0x130c815b0>> | | | | | | | | <MMUILabel: 0x1308ded20; baseClass = UILabel; frame = (-17.5 0; 37 25); text = '\u5468\u6d69'; userInteractionEnabled = NO; layer = <_UILabelLayer: 0x130e60450>> | | | | | | | | | <_UILabelContentLayer: 0x1305e2c80> (layer) | | | | | | | | <MMUILabel: 0x1308525c0; baseClass = UILabel; frame = (19.5 0; 0 25); userInteractionEnabled = NO; layer = <_UILabelLayer: 0x130e45660>> | | | | | | | | | <_UILabelContentLayer: 0x130d06e90> (layer) | | | | | | | | <UIImageView: 0x130ca9d60; frame = (19.5 5; 0 0); userInteractionEnabled = NO; layer = <CALayer: 0x12eda0660>> | | | | | | <UIView: 0x130e35040; frame = (0 0; 88 44); tintColor = UIDeviceWhiteColorSpace 1 1; layer = <CALayer: 0x130e0a850>> | | | | | | | <MMBarButton: 0x130cad8f0; baseClass = UIButton; frame = (10 0; 78 44); opaque = NO; layer = <CALayer: 0x130c58ff0>> | | | | | | | | <UIImageView: 0x130d254d0; frame = (0 7; 15 30); clipsToBounds = YES; opaque = NO; userInteractionEnabled = NO; layer = <CALayer: 0x130d15aa0>> | | | | | | | | <UIButtonLabel: 0x130c96340; frame = (15 13; 62.5 19.5); text = '\u5fae\u4fe1(36)'; opaque = NO; userInteractionEnabled = NO; layer = <_UILabelLayer: 0x13080bf30>> | | | | | | | | | <_UILabelContentLayer: 0x130a382b0> (layer) | | | | | | <UIView: 0x130cdda00; frame = (262 0; 58 44); layer = <CALayer: 0x130cda310>> | | | | | | | <MMBarButton: 0x130cddb70; baseClass = UIButton; frame = (0 0; 58 44); opaque = NO; layer = <CALayer: 0x130cdada0>> | | | | | | | | <UIImageView: 0x130e3bbe0; frame = (18 7; 30 30); clipsToBounds = YES; opaque = NO; userInteractionEnabled = NO; layer = <CALayer: 0x130e3ed90>> | | | | | | <_UINavigationBarBackIndicatorView: 0x13042dc20; frame = (8 11.5; 13 21); alpha = 0; opaque = NO; userInteractionEnabled = NO; layer = <CALayer: 0x13042c890>> | | <UITabBar: 0x130359060; frame = (0 519; 320 49); hidden = YES; autoresize = W+TM; tintColor = UIDeviceRGBColorSpace 0.2 0.65098 1 1; gestureRecognizers = <NSArray: 0x13049e330>; layer = <CALayer: 0x130358ff0>> | | | <_UITabBarBackgroundView: 0x12efa3c60; frame = (0 0; 320 49); autoresize = W; userInteractionEnabled = NO; layer = <CALayer: 0x12ed0e500>> | | | <UITabBarButton: 0x130477b00; frame = (82 1; 76 48); opaque = NO; layer = <CALayer: 0x130433e00>> | | | | <UITabBarSwappableImageView: 0x13047bc90; frame = (24.5 6.5; 27 23); opaque = NO; userInteractionEnabled = NO; tintColor = UIDeviceWhiteColorSpace 0.572549 1; layer = <CALayer: 0x13047be70>> | | | | <UITabBarButtonLabel: 0x130477d60; frame = (23 35; 30 12); text = '\u901a\u8baf\u5f55'; opaque = NO; userInteractionEnabled = NO; layer = <_UILabelLayer: 0x130479710>> | | | | | <_UILabelContentLayer: 0x12ef5bd90> (layer) | | | <UITabBarButton: 0x13047ab50; frame = (162 1; 76 48); opaque = NO; layer = <CALayer: 0x13044d930>> | | | | <UITabBarSwappableImageView: 0x13047fbb0; frame = (26.5 6.5; 23 23); opaque = NO; userInteractionEnabled = NO; tintColor = UIDeviceWhiteColorSpace 0.572549 1; layer = <CALayer: 0x13047fd90>> | | | | <UITabBarButtonLabel: 0x13047d0f0; frame = (28 35; 20 12); text = '\u53d1\u73b0'; opaque = NO; userInteractionEnabled = NO; layer = <_UILabelLayer: 0x13047c1b0>> | | | | | <_UILabelContentLayer: 0x12ef5a700> (layer) | | | <UITabBarButton: 0x130385ac0; frame = (242 1; 76 48); opaque = NO; layer = <CALayer: 0x130386040>> | | | | <UITabBarSwappableImageView: 0x13038b4a0; frame = (26.5 6.5; 23 23); opaque = NO; userInteractionEnabled = NO; tintColor = UIDeviceWhiteColorSpace 0.572549 1; layer = <CALayer: 0x13038b680>> | | | | <UITabBarButtonLabel: 0x130385d20; frame = (33 35; 10 12); text = '\u6211'; opaque = NO; userInteractionEnabled = NO; layer = <_UILabelLayer: 0x130388e80>> | | | | | <_UILabelContentLayer: 0x12ef5b360> (layer) | | | <UIImageView: 0x12efa50b0; frame = (0 -0.5; 320 0.5); autoresize = W; userInteractionEnabled = NO; layer = <CALayer: 0x12ef58fd0>> | | | <UITabBarButton: 0x1304e3f10; frame = (2 1; 76 48); opaque = NO; layer = <CALayer: 0x130035c70>> | | | | <UITabBarSwappableImageView: 0x13005ca60; frame = (25.5 6.5; 25 23); opaque = NO; userInteractionEnabled = NO; layer = <CALayer: 0x1300381c0>> | | | | <UITabBarButtonLabel: 0x1304eb3f0; frame = (28 35; 20 12); text = '\u5fae\u4fe1'; opaque = NO; userInteractionEnabled = NO; layer = <_UILabelLayer: 0x1304dce90>> | | | | | <_UILabelContentLayer: 0x1300b2b40> (layer) | | | | <_UIBadgeView: 0x130476ff0; frame = (45.5 2; 26.5 18); userInteractionEnabled = NO; layer = <CALayer: 0x12ed0b930>> | | | | | <_UIBadgeBackground: 0x1304df140; frame = (0 0; 26.5 18); opaque = NO; layer = <CALayer: 0x1300453d0>> | | | | | <UILabel: 0x130144f50; frame = (5 1; 16.5 16); text = '36'; opaque = NO; userInteractionEnabled = NO; layer = <_UILabelLayer: 0x130389420>> | | | <MMBadgeView: 0x13047f0a0; baseClass = UIImageView; frame = (43 -4; 30 30); hidden = YES; opaque = NO; userInteractionEnabled = NO; layer = <CALayer: 0x12ed13290>> | | | | <MMUILabel: 0x1304769e0; baseClass = UILabel; frame = (0 0; 0 0); userInteractionEnabled = NO; tag = 10032; layer = <_UILabelLayer: 0x13047f4e0>> | | | | | <_UILabelContentLayer: 0x12ef5a4e0> (layer) | | | <MMBadgeView: 0x13034c960; baseClass = UIImageView; frame = (123 -4; 30 30); hidden = YES; opaque = NO; userInteractionEnabled = NO; layer = <CALayer: 0x13034cb40>> | | | | <MMUILabel: 0x13035ac40; baseClass = UILabel; frame = (0 0; 0 0); userInteractionEnabled = NO; tag = 10032; layer = <_UILabelLayer: 0x1303596d0>> | | | | | <_UILabelContentLayer: 0x12ef5a320> (layer) | | | <MMBadgeView: 0x130386710; baseClass = UIImageView; frame = (203 1; 20 20); opaque = NO; userInteractionEnabled = NO; layer = <CALayer: 0x1303868f0>> | | | | <MMUILabel: 0x130359bb0; baseClass = UILabel; frame = (0 0; 0 0); hidden = YES; userInteractionEnabled = NO; tag = 10032; layer = <_UILabelLayer: 0x130359dc0>> | | | | | <_UILabelContentLayer: 0x12ef5a4a0> (layer) | | | <MMBadgeView: 0x13038cf20; baseClass = UIImageView; frame = (283 -4; 30 30); hidden = YES; opaque = NO; userInteractionEnabled = NO; layer = <CALayer: 0x130386f10>> | | | | <MMUILabel: 0x13038d730; baseClass = UILabel; frame = (0 0; 0 0); userInteractionEnabled = NO; tag = 10032; layer = <_UILabelLayer: 0x13038d940>> | | | | | <_UILabelContentLayer: 0x12ef595c0> (layer)
</pre>
打印的是手机上微信当前聊天界面的UI结构。
找到当前聊天界面的类名
在上一步打印的UI树中,在中间随便找个节点,如MMTableView
,复制它的内存地址:0x12fca3e00
根据内存地址,找出这个节点的下一响应者,输入指令:
[#0x12fca3e00 nextResponder]
的到如下结果:
#"<UIView: 0x13080dbc0; frame = (0 0; 320 568); autoresize = W+H; layer = <CALayer: 0x130c556b0>>"
继续更具这个0x13080dbc0
这个内存地址找出下一个下一个响应者:
[#0x13080dbc0 nextResponder]
的到如下结果:
"<BaseMsgContentViewController: 0x12f9e6200>"
锁定入口
如在本文中,要找到抢红包的入口,那么,我们可以锁定BaseMsgContentViewController
这个视图控制器。
在我之前的博客[iOS Hacking]用class-dump获取头文件中讲述了如何dump目标的头文件。
在之前dump到的微信头文件中,找到BaseMsgContentViewController.h
文件:
打开
BaseMsgContentViewController.h
,观察结构:搜索红包关键字:
envelope
得到3个相关的方法:
- (_Bool)hasRedEnvelopesEntry;
- (void)redEnvelopesLogic;
- (void)initAllowNameCardFollowRedEnvelope;
运行时分析就写到这里,接下来可以做其它更加深入的操作。
请关注我的简书或博客,我会在简书和我的个人博客上不定期更新iOS Hack系列技术文章,欢迎交流!
关于我
- Blog: CGPointZeero
- GitHub: Insfgg99x
- Mooc: CGPointZero
- Jianshu: CGPointZero
- Email: newbox0512@yahoo.com
@CGPoitZero