分类目录归档:逆向工程

关于Cycript中打印信息不完整的问题

1、如下所示:

1
2
3
4
5
6
7
8
9
10
11
12
cy# SASubviews(#0x1c32ab60)
`<SBRootIconListView 0x1c32ab60: frame = {{0, 0}, {320, 348}}; Model = <SBIconListModel: 0x17f44c20; 1 icons; folder = <SBRootFolderWithDock: 0x17f45620, (null)>>>
   | <SBFolderIconView: 0x1c1ea570; frame = (16 7; 60 74); opaque = NO; layer = <CALayer: 0x1c1ea870>> Folder: <SBFolder: 0x17f44370, \u5065\u5eb7>
   |    | <SBIconLabelView: 0x1c1e9c60; baseClass = _UILegibilityView; frame = (16.5 62.5; 28 19); userInteractionEnabled = NO; layer = <CALayer: 0x1c1eaae0>>
   |    |    | <_UILegibilityImageView: 0x1c1d41b0; frame = (-12 -12; 52 43); opaque = NO; userInteractionEnabled = NO; layer = <CALayer: 0x1c1d4290>>
   |    |    | <_UILegibilityImageView: 0x1c1e7020; frame = (0 0; 28 19); opaque = NO; userInteractionEnabled = NO; layer = <CALayer: 0x1c1e6610>>
   |    | <SBFolderIconImageView: 0x1c1e00d0; frame = (-1 -1; 62 62); userInteractionEnabled = NO; layer = <CALayer: 0x1c1e31f0>>
   |    |    | <SBFolderIconBackgroundView: 0x17fc4a30; frame = (1 1; 60 60); clipsToBounds = YES; userInteractionEnabled = NO; layer = <CALayer: 0x1c184940>>
   |    |    | <UIView: 0x1c2c3cd0; frame = (8.5 8.5; 45 45); clipsToBounds = YES; userInteractionEnabled = NO; layer = <CALayer: 0x1c2babe0>>
   |    |    |    | <_SBIconGridWrapperView: 0x1c2aa7f0; baseClass = UIImageView; frame = (0 0; 45 45); opaque = NO; userInteractionEnabled = NO; layer = <CALayer: 0x1c2c11d0>>
   |    |    |    | <_SBIconGridWrapperView: 0x1c2bae90; baseClass = UIImageView; frame = (51 0; 45 45); userInteractionEnabled = NO; layer = <CALayer: 0x190dd2a0>>`
cy#

1.1、SASubviews()内部只是简单的调用UIView的recursiveDescription方法,这里输出到止断节了,事实上后面还有很多是没有打印出来的;
1.2、网上找了一些资料,我这里使用的是iTerm2,有网友说换成系统自带的终端就不会,我试了也一样;
1.3、又有网友说将Cycript降级到0.9.505就OK了,我也试了一下,确实是可以了,但很多js方法用不了了;
1.4、当前版本是0.9.594,我把中间几个版本都试了一下,降到0.9.592是最好的,折中选择即能保证打印完整,又能支持当前我们常用的这些js方法;
1.5、又发现一个坑:iOS9.3.5在Cycript降到0.9.592的时候,AppStore下载的应用会报错

1
2
Sian-iPhone4s:~ root# cycript -p WeChat
*** _syscall(connect(socket, reinterpret_cast<sockaddr *>(&address), sizeof(address))):../Handler.cpp(169):CYHandleSocket [errno=1]

所以,根据情况切吧…目前只能这样…

Theos的安装及简单使用

1、Theos是iOS越狱插件开发的集成环境,它可以创建工程,调用XCode的命令行工具编译、ldid签名打包,并提供上传手机、安装等一系列操作,安装成功后可以Cydia的已安装插件中看到。

2、安装ldid&dpkg

2.1、安装ldid
2.1.1、参考链接:https://brewinstall.org/Install-ldid-on-Mac-with-Brew/
2.1.2、安装命令:

1
yusian@SianMac2:~/Documents/Reverse$ruby -e "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/master/install)" < /dev/null 2> /dev/null
1
yusian@SianMac2:~/Documents/Reverse$brew install ldid

2.1.3、必须要说的是,第一条命令是安装Homebrew,也许你Mac上早安装过Homebrew了,但也强制建议再执行一次该命令,可将Homebrew升级到最新版本,这里可能会是个坑!!因为XCode10现在废弃了以前的libstd++这个c++库,取而代之的是libc++,如果是XCode10,并且没有升级到最新Homebrew,可能在brew install ldid时报错

2.2、安装dpkg
2.2.1、dpkg是Theos依赖的工具之一,dpkg是Debian Packager的缩写。我们可以使用dpkg来制作deb,Theos开发的插件都将会以deb的格式进行发布的。所以我在安装Theos之前要安装dpkg
2.2.2、安装命令

1
yusian@SianMac2:~/Documents/Reverse$brew install dpkg

2.2.3、这里又要啰嗦一句,如果不安装dpkg,可能后续你一切顺利,在最后关头要将deb打包安装到手机上时报错了,我踩到的坑是这样的: 继续阅读

Reveal4的基本安装使用

1、下载地址:https://revealapp.com/download/
2、Mac上安装好之后,在手机Cydia中搜索Reveal Loader(软件源为BigBoss)并安装;
2.1、另外一个软件源http://apt.so/codermjlee/里面也有个Reval Loader,备用;
3、打开Mac上的Reveal,在菜单栏中Help–>Show Reveal Library in Finder–>iOS Library
3.1、打开后有一个RevealServer.framework文件,该文件目录下有一个“RevealServer”文件;
3.2、打开iPhone的目录结构在/Library/RHRevealLoader目录中替换 “RevealServer”文件;
4、在手机设置的首页中找Reveal的设置项,Enabled Applications子菜单,将需要调试的App打开;
5、重启SpringBoard,如果是完美越狱可直接重启手机,搞定!
5.1、如果在Reveal中还是看不到需要调试的App,卸载当前的Reveal Loader,跳转步骤2.1更换另一个源的Reveal Loader,后面步骤重复一次;