逆向第一课 (逆向环境搭建)

今天我们开始学习逆向APP有关方面的知识点
当然在此之前你需要一台越狱手机,越狱手机,越狱手机 重要的事情说三遍,不会越狱这里提供教程,检查手机是否可以越狱:http://jailbreak.25pp.com/ios

越狱方法推荐
PP助手:http://jailbreak.25pp.com/

这里简单给大家简单说一下越狱
什么是iOS Jailbreak?
利用iOS系统的漏洞,获取iOS系统的最高权限(Root),解开之前的各种限制(合法行为)

越狱.png

越狱的优点

打造个性化、与众不同的iPhone
自由安装各种实用的插件、主题、APP
修改系统APP的一些默认行为
自由安装非AppSore来源的APP
“付费APP”秒变“免费APP”
未越狱iPhone安装APP的途径
AppStore
真机调试
通过证书打包签名ipa安装
灵活管理文件系统,让iPhone可以像U盘那样灵活**
给开发者提供了逆向工程的环境

越狱的缺点

不予保修
费电,越狱后的iOS系统会常驻一些进程,耗电速度约提升10%~20%
在新的iOS固件版本出来的时候,不能及时地进行更新
每个新版本的固件,都会修复上一个版本的越狱漏洞,使越狱失效
如果需要保持越狱状态,要等待新的越狱程序发布时,才能升级相应的固件版本
不再受iOS系统默认的安全保护,容易被恶意软件攻击,个人隐私有被窃取的风险
如果安装了不稳定的插件,容易让系统变得不稳定、变慢,甚至出现“白苹果”等问题

如何判断是否越狱成功?

桌面是否有Cydia


cycdia.png

一般我们的mac上会有几个必须要安装的应用

iFunBox
管理文件系统

PP助手
自由安装海量APP
卸载APP
备份APP为ipa安装包(iOS9开始,不再支持备份APP)

逆向开始

首先介绍几个工具,可能大部分人有些工具都使用过,那就更利用我们进行逆向开发
Alfred
XtraFinder
iTerm2
Go2Shell

一.Mac远程登录到iPhone

我们经常在Mac的终端上,通过敲一些命令行来完成一些操作
iOS和Mac OS X都是基于Darwin(苹果的一个基于Unix的开源系统内核),所以iOS中同样支持终端的命令行操作
在逆向工程中,我们经常会通过命令行来操纵iPhone


终端.png

为了能够让Mac终端中的命令行能作用在iPhone上,我们得让Mac和iPhone建立连接
通过Mac远程登录到iPhone的方式建立连接

SSH、OpenSSH

SSH
Secure Shell的缩写,意为“安全外壳协议”,是一种可以为远程登录提供安全保障的协议
使用SSH,可以把所有传输的数据进行加密,“中间人”攻击方式就不可能实现,能防止DNS欺骗和IP欺骗

ssh.png

OpenSSH
是SSH协议的免费开源实现
可以通过OpenSSH的方式让Mac远程登录到iPhone
在iPhone上通过Cydia安装OpenSSH工具(软件源http://apt.saurik.com)

openssh.png

OpenSSH的具体使用步骤可以查看Description中的描述


desctiption.png

使用OpenSSH远程登录 - 使用步骤

SSH是通过TCP协议通信,所以要确保Mac和iPhone在同一局域网下,比如连接着同一个WiFi
在Mac的终端输入ssh 账户名@服务器主机地址
比如ssh [email protected](这里的服务器是手机)
初始密码alpine
登录成功后就可以使用终端命令行操作iPhone
退出登录命令是exit

NingPeiChaodeMacBook-Pro-3: ning$ ssh [email protected]
130:~ root# exit
logout
Connection to 192.168.1.21 closed.
NingPeiChaodeMacBook-Pro-3: ning$ 

iOS下有2个常用账户:root、mobile
root:最高权限账户,$HOME是/var/root
mobile:普通权限账户,只能操作一些普通文件,不能操作系统级别的文件,$HOME是/var/mobile
登录mobile用户:root mobile@服务器主机地址
root和mobile用户的初始登录密码都是alpine

SSL、OpenSSL

很多人会将SSH、OpenSSH、SSL、OpenSSL搞混

SSL
Secure Sockets Layer的缩写,是为网络通信提供安全及数据完整性的一种安全协议,在传输层对网络连接进行加密

OpenSSL
SSL的开源实现
绝大部分HTTPS请求等价于:HTTP + OpenSSL

OpenSSH的加密就是通过OpenSSL完成的

SSH的客户端认证方式

SSH-2提供了2种常用的客户端认证方式
基于密码的客户端认证
使用账号和密码即可认证
基于密钥的客户端认证
免密码认证
最安全的一种认证方式
SSH-2默认会优先尝试“密钥认证”,如果认证失败,才会尝试“密码认证”

SSH - 基于密钥的客户端认证

在客户端生成一对相关联的密钥(Key Pair):一个公钥(Public Key),一个私钥(Private Key)
ssh-keygen
一路敲回车键(Enter)即可
OpenSSH默认生成的是RSA密钥,可以通过-t参数指定密钥类型
生成的公钥:~/.ssh/id_rsa.pub
生成的私钥:~/.ssh/id_rsa

把客户端的公钥内容追加到服务器的授权文件(~/.ssh/authorized_keys)尾部
ssh-copy-id root@服务器主机地址
需要输入root用户的登录密码
ssh-copy-id会将客户端~/.ssh/id_rsa.pub的内容自动追加到服务器的~/.ssh/authorized_keys尾部

注意:由于是在~文件夹下操作,所以上述操作仅仅是解决了root用户的登录问题(不会影响mobile用户)

公钥 >> 授权文件

可以使用ssh-copy-id将客户端的公钥内容自动追加到服务器的授权文件尾部,也可以手动操作
复制客户端的公钥到服务器某路径
scp ~/.ssh/id_rsa.pub root@服务器主机地址:~
scp是secure copy的缩写,是基于SSH登录进行安全的远程文件拷贝命令,把一个文件copy到远程另外一台主机上
上面的命令行将客户端的~/.ssh/id_rsa.pub拷贝到了服务器的~地址

SSH登录服务器
ssh root@服务器主机地址
需要输入root用户的登录密码

在服务器创建.ssh文件夹
mkdir .ssh

追加公钥内容到授权文件尾部
cat ~/id_rsa.pub >> ~/.ssh/authorized_keys

删除公钥
rm ~/id_rsa.pub

文件权限问题

如果配置了免密码登录后,还是需要输入密码,需要在服务器端设置文件权限
chmod 755 ~
chmod 755 ~/.ssh
chmod 644 ~/.ssh/authorized_keys

22端口

端口就是设备对外提供服务的窗口,每个端口都有个端口号(范围是0~65535,共2^16个)
有些端口号是保留的,已经规定了用途,比如
21端口提供FTP服务
80端口提供HTTP服务
22端口提供SSH服务(可以查看/etc/ssh/sshd_config的Port字段)
更多保留端口号: https://baike.baidu.com/item/%E7%AB%AF%E5%8F%A3%E5%8F%B7/10883658#4_3

通过USB进行SSH登录

默认情况下,由于SSH走的是TCP协议,Mac是通过网络连接的方式SSH登录到iPhone,要求iPhone连接WiFi
为了加快传输速度,也可以通过USB连接的方式进行SSH登录
Mac上有个服务程序usbmuxd(它会开机自动启动),可以将Mac的数据通过USB传输到iPhone
/System/Library/PrivateFrameworks/MobileDevice.framework/Resources/usbmuxd

usbmuxd的使用1
下载usbmuxd工具包(下载v1.0.8版本,主要用到里面的一个python脚本:tcprelay.py)
https://cgit.sukimashita.com/usbmuxd.git/snapshot/usbmuxd-1.0.8.tar.gz

将iPhone的22端口(SSH端口)映射到Mac本地的10010端口
cd ~/Documents/usbmuxd-1.0.8/python-client
python tcprelay.py -t 22:10010
加上-t参数是为了能够同时支持多个SSH连接

NingPeiChaodeMacBook-Pro-3:~ ning$ cd /Users/ning/Desktop/应用砸壳资料/python-client 
NingPeiChaodeMacBook-Pro-3:python-client ning$ ls
tcprelay.py usbmux.py   usbmux.pyc
NingPeiChaodeMacBook-Pro-3:python-client ning$ python tcprelay.py -t 20:10010
Forwarding local port 10010 to remote port 20

注意:要想保持端口映射状态,不能终止此命令行(如果要执行其他终端命令行,请新开一个终端界面)
不一定非要10010端口,只要不是保留端口就行

usbmuxd的使用2

端口映射完毕后,以后如果想跟iPhone的22端口通信,直接跟Mac本地的10010端口通信就可以了
新开一个终端界面,SSH登录到Mac本地的10010端口(以下方式2选1)
ssh root@localhost -p 10010
ssh [email protected] -p 10010
localhost是一个域名,指向的IP地址是127.0.0.1,本机虚拟网卡的IP地址

usbmuxd会将Mac本地10010端口的TCP协议数据,通过USB连接转发到iPhone的22端口

远程拷贝文件也可以直接跟Mac本地的10010端口通信
scp -P 10010 ~/Desktop/1.txt root@localhost:~/test
将Mac上的~/Desktop/1.txt文件,拷贝到iPhone上的~/test路径
注意:scp的端口号参数是大写的-P

好了 到这里我们的逆向环境就搭建成功了,我们可以成功的使用mac来链接到我们的越狱手机

你可能感兴趣的:(逆向第一课 (逆向环境搭建))