⼿把⼿教你破解苹果商店AppStore上的iOS应⽤
更新:2020年1⽉19⽇,加⼊破解 iOS12.0+系统⽆法使⽤ cycript 的解决⽅案。
前⾔
废话不多说,直接进正题。
想要破解iOS应⽤,你需要准备些什么:
1. ⼀个已越狱的⼿机。(本⽂⽤的是已越狱的5s, 8.1.2)
2. class-dump。点我查看class-dump的配置⽅法。
3. iFunBox。(安装在电脑端。不是必须,本⽂拷贝⽂件⽤到的是这个)
4. Cycript。(使⽤cydia安装在⼿机端)
5. OpenSSH、MTerminal。(使⽤cydia安装在⼿机端,点我查看在终端使⽤ssh连接⼿机的⽅法)
6. dumpdecrypted。(⽤来砸壳,下⾯有详细介绍)
⼀ 砸壳
这⾥我们⽤到的砸壳利器是dumpdecrypted。
1. 制作砸壳⼯具,即dumpdecrypted.dylib.
1). 从github上clone或下载 dumpdecrypted 源码到本地。下载之后的⽬录如图(我把默认的⽬录名”dumpdecrypted-master”改成了”dumpdecrypted”):
2). 编译源码获得dumpdecrypted.dylib。⽅法如下:
a.打开终端,进⼊dumpdecrypted⽬录。
b.输⼊命令make。
命令执⾏完成后会⽣成⼀个dumpdecrypted.dylib⽂件,这个就是砸壳需要⽤到的⼯具。这个⽂件可重复
使⽤,不需要再次⽣成。如下图:
2. 把砸壳⼯具拷贝到待破解app的documents⽬录下。
1)定位可执⾏⽂件。使⽤ssh连接⼿机,并打印所有进程。为⽅便准确定位到⽬标app,最好先关闭所有app,然后打开⽬标app。(尽量把终端的窗⼝拉宽⼀些,因为输出的内容⽐较长,窗⼝窄的话内容会截断。)如下图:
3. 使⽤cycript到⽬标app的documents⽬录路径。
1)输⼊命令:cycript -p TargetApp进⼊cycript环境。
2)输⼊命令:[[NSFileManager defaultManager] URLsForDirectory:NSDocumentDirectory inDomains:NSUserDomainMask][0],获取documents⽬录路径。如下图:
4. 将dumpdecrypted.dylib拷贝到documents⽬录下。命令如下:documents安卓版破解版
1)使⽤快捷键Ctrl-D退出cycript环境。
2)输⼊命令logout,退出⼿机连接。
3)使⽤scp命令拷贝⽂件⾄⼿机,如图:
5. 进⾏砸壳。
1)连接⼿机。
2)进⼊Documents⽬录。
3)输⼊砸壳命令DYLD_INSERT_LIBRARIES=/path/to/dumpdecrypted.dylib /path/to/executable,进⾏砸壳。这⾥有两点要注意:1是这个命令的"="号前后不能有空格,2是”=”号后的路径要替换成真实的dumpdecrypted.dylib的路径和可执⾏⽬标⽂件的路径。如下图:
4)砸壳成功后,会在Documents⽬录下⽣成⼀个后缀为.decrypted的⽂件。这个就是我们⽤来分析的⽂件了。如图:
6. 把砸壳后的⽂件拷贝⾄电脑。我是⽤的iFunBox,你也可以⽤scp的⽅式。选择.decrypted⽂件,然后点击“CopyToMac”,选择⼀个⽬录保存就可以了。如图:
保存成功后如图:
⼆ dump头⽂件
破壳之后就可以进⾏dump了,命令为class-dump -S -s -H /path/to/TargetApp.app/Target -o /path/to/headers,两个参数分别是砸壳后的.decrypted⽂件和存放所dump出来的头⽂件的⽬录(这个⽬录可提前创建好)。效果如下图:
看下图可以看到,我成功把这个app的头⽂件dump出来了,⼀共718个。
三 Cycript分析
头⽂件得到之后就可以使⽤Cycript进⾏分析了。步骤如下:
1. 在⼿机上启动⽬标app,并打开你要分析的界⾯。
2. 连接⼿机。命令:***************.1.25
3. 进⼊Cycript环境。命令:cycript -p TargetApp
4. 展⽰待分析界⾯的信息。在cy#后输⼊命令:[[UIApp keyWindow] recursiveDescription].toString()
如下图:
如图所⽰,层级关系就是⽗⼦关系。⽐如UINavigationTransitionView: 0x125d3b060就是UIViewControllerWrapperView: 0x17018a4f的⽗控件。
我们可以通过控件的名字去dump出来的头⽂件⽬录中到对应的头⽂件进⾏分析。
在cycript中操纵某个对象是直接通过它的内存地址的。⽐如我们要获取UIViewControllerWrapperView的⽗控件,需要输⼊命
令:[#0x17018a4f0 nextResponder],如图:
再⽐如我们要修改界⾯中UILabel: 0x125d509a0中的⽂字,则输⼊命令:[#0x125d509a0 setText:@"21"],如图:
这时你再去查看⼿机上的界⾯,这个label的⽂字就被替换成了21。
cycript 停⽌维护解决办法

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。