话不多讲进入正题
工具:1.iPhone手机一部
2.Clutch砸壳
3.class-dump导出头文件
4.Hooper Disassembler导出所有.m实现文件
5.Charles 的接口查看
一、安装ipa
手机系统版10-10.2本如果未越狱下载PP助手(傻瓜操作)五分钟可完成越狱
8.4版本及以下版本网上月月资料也是甚多,10.2以上、9-10版本暂时没找到快速方便方法。
越狱之后通过越狱手机下载你所需要破解的app (appstore也可以)。比如:""(可以换一个 因为最后失败原因:是swift和oc混编 导出头文件时候 不支持swift )
二、安装clutch软件
之前AppCrackr这种方式简单粗暴,省时省力,但正是因为它过于方便,导致几乎所有iDevice用户都可轻松上手,所以不少用户都拿它来破解程序,过于暴力、引起业界公愤,所以AppCrackr则是1.5旧版,已不能在高级系统中使用。
1.clutch下载地址:https://github.com/KJCracks/Clutch/releases(下载时候注意支持版本和手机版本的匹配)
2.下载之后 把文件拷到手机上/usr/bin/ 下
方法一:通过SSH
3.查找ipa然后砸壳
找到".ipa"前面编号 比如:28
终端输入:/private/var/mobile/Media/clutch-2 -d 28(/private/var/mobile/Media/clutch-2是clutch路径 可以自己看自己的路径 如果clutch放在/usr/bin下 可以直接使用clutch -d 28)
下面就是砸壳后存放的路径 之后我们就需要把砸壳后的文件拿出来
mv 原路径 现路经 (路径中有括号的话 加 "\" 转义一下)
手动拉到自己电脑桌面上完成
方法二: iFunBox 或者其他的第三方工具
命令方式:scp Clutch root@设备IP:/usr/bin
三、安装class-dump 取.H文件
1、下载地址:http://stevenygard.com/projects/class-dump/
2.将class-dump 复制到/usr/bin/class-dump。如果是OS X 10.11,因为没有/usr/bin文件夹的写权限,所以将class-dump复制到/usr/local/bin/class-dump即可。
3.同时打开Terminal,需要的话就执行命令赋予其执行权限:
sudo chmod 777 /usr/bin/class-dump 正确安装显示下面:
然后 输入 class-dump -H "A" -o "B"
A: ipa报内容里面的DVKIT头文件框架路径 B:导出的.h要存放的路径
例如 :class-dump -H /Users/Flywoods/Desktop/破解/com.jianshu.Hugo-iOS7.0-\(Clutch-2.0.3\)/Payload/Hugo.app/Hugo -o /Users/Flywoods/Desktop/破解/jianshuH文件
结果失败:swift和oc混编 因为不支持swift 所以导出失败
可以换其他APP 导出结果:可以导出所有.h(包括pod第三方头文件,但不包括.pch )
四、Hooper Disassembler 导出.m伪代码
下载地址:https://www.hopperapp.com/ 安装好之后 把砸壳后的ipa拉进面板内
{{{注:实现批量导出伪代码的功能。具体代码可以在https://github.com/poboke/Class-Decompile下载。}}}
使用方法
1、将下载的Class Decompile.py文件放到~/Library/Application Support/Hopper/Scripts目录里。
2、将可执行文件拖到Hopper里,等待分析完成。如果日志框里出现以下文字,就说明分析完成了:
Analysis segment __LINKEDIT
Analysis segment External Symbols
Background analysis ended
3、点击菜单Scripts–>Class Decompile:
然后选择导出所有伪代码
4.反编译出来的伪代码保存在~/ClassDecompiles目录里。
至此我们就把一个APP的.h和.m文件拿到了 可以放在同一个文件夹,然后新建一个项目 ,把这些文件拉进去 可以进行看对方的框架、方法定义、伪代码就需要你有一双黑客的眼睛了,毕竟是伪代码 不是直白的。可以进行字符串搜索、方法搜索等等;怎么用就要看大家自己了。
五、Charles使用
下载地址:http://www.charlesproxy.com
Charles 是通过将自己设置成代理服务器来完成封包截取的,所以使用 Charles 的第一步是将其设置成系统的代理服务器。
启动 Charles 后,第一次 Charles 会请求你给它设置系统代理的权限。你可以输入登录密码授予 Charles 该权限。你也可以忽略该请求,然后在需要将 Charles 设置成系统代理时,选择菜单中的 “Proxy” -> “Mac OS X Proxy” 来将 Charles 设置成系统代理。如下所示:
之后自己电脑上网页一类的请求网络的都可以显示在charles界面
过滤网络请求
通常情况下,我们需要对网络请求进行过滤,只监控向指定目录服务器上发送的请求。对于这种需求,以下几种办法:
方法一:在主界面的中部的 Filter 栏中填入需要过滤出来的关键字。例如我们的服务器的地址是:http://yuantiku.com, 那么只需要在 Filter 栏中填入 yuantiku 即可。
方法二:在 Charles 的菜单栏选择 “Proxy”->”Recording Settings”,然后选择 Include 栏,选择添加一个项目,然后填入需要监控的协议,主机地址,端口号。这样就可以只截取目标网站的封包了。如下图所示:通常情况下,我们使用方法一做一些临时性的封包过滤,使用方法二做一些经常性的封包过滤。
截取 iPhone 上的网络封包
Charles 通常用来截取本地上的网络封包,但是当我们需要时,我们也可以用来截取其它设备上的网络请求。下面我就以 iPhone 为例,讲解如何进行相应操作。
charles设置:
要截取 iPhone 上的网络请求,我们首先需要将 Charles 的代理功能打开。在 Charles 的菜单栏上选择 “Proxy”->”Proxy Settings”,填入代理端口 8888,并且勾上 “Enable transparent HTTP proxying” 就完成了在 Charles 上的设置。如下图所示:
iPhone 上的设置
首先我们需要获取 Charles 运行所在电脑的 IP 地址,Charles 的顶部菜单的 “Help”->”Local IP Address”,即可在弹出的对话框中看到 IP 地址,如下图所示:
在 iPhone 的 “ 设置 “->” 无线局域网 “ 中,可以看到当前连接的 wifi 名,通过点击右边的详情键,可以看到当前连接上的 wifi 的详细信息,包括 IP 地址,子网掩码等信息。在其最底部有「HTTP 代理」一项,我们将其切换成手动,然后填上 Charles 运行所在的电脑的 IP,以及端口号 8888,如下图所示:
设置好之后,我们打开 iPhone 上的任意需要网络通讯的程序,就可以看到 Charles 弹出 iPhone 请求连接的确认菜单(如下图所示),点击 “Allow” 即可完成设置。
截取 Https 通讯信息
安装证书
如果你需要截取分析 Https 协议相关的内容。那么需要安装 Charles 的 CA 证书。具体步骤如下。
首先我们需要在 Mac 电脑上安装证书。点击 Charles 的顶部菜单,选择 “Help” -> “SSL Proxying” -> “Install Charles Root Certificate”,然后输入系统的帐号密码,即可在 KeyChain 看到添加好的证书。如下图所示:
需要注意的是,即使是安装完证书之后,Charles 默认也并不截取 Https 网络通讯的信息,如果你想对截取某个网站上的所有 Https 网络请求,可以在该请求上右击,选择 SSL proxy,如下图所示:
这样,对于该 Host 的所有 SSL 请求可以被截取到了。
截取移动设备中的 Https 通讯信息
如果我们需要在 iOS 或 Android 机器上截取 Https 协议的通讯内容,还需要在手机上安装相应的证书。点击 Charles 的顶部菜单,选择 “Help” -> “SSL Proxying” -> “Install Charles Root Certificate on a Mobile Device or Remote Browser”,然后就可以看到 Charles 弹出的简单的安装教程。如下图所示:
按照我们之前说的教程,在设备上设置好 Charles 为代理后,在手机浏览器中访问地址:http://charlesproxy.com/getssl,即可打开证书安装的界面,安装完证书后,就可以截取手机上的 Https 通讯内容了。不过同样需要注意,默认情况下 Charles 并不做截取,你还需要在要截取的网络请求上右击,选择 SSL proxy 菜单项。
最后大家在编写程序时候做好核心代码混淆就好了,也可以swift和oc混编就拿不出来头文件了,防范为好;
注: 下一篇 iOS制作属于自己的FrameWork 保护好代码