扫二维码与项目经理沟通
我们在微信上24小时期待你的声音
解答本文疑问/技术咨询/运营咨询/技术建议/互联网交流
应用加壳(加密)
十载的托克托网站建设经验,针对设计、前端、开发、售后、文案、推广等六对一服务,响应快,48小时及时工作处理。成都营销网站建设的优势是能够根据用户设备显示端的尺寸不同,自动调整托克托建站的显示方式,使网站能够适用不同显示终端,在浏览器中调整网站的宽度,无论在任何一种浏览器上浏览网站,都能展现优雅布局与设计,从而大程度地提升浏览体验。成都创新互联从事“托克托网站设计”,“托克托网站推广”以来,每个客户项目都认真落实执行。
提交给Appstore发布的App,都经过官方保护而加密,这样可以保证机器上跑的应用是苹果审核过的,也可以管理软件授权。经过App Store加密的应用,我们无法通过Hopper等反编译静态分析,也无法Class-Dump,在逆向分析过程中需要对加密的二进制文件进行解密才可以进行静态分析,这一过程就是大家熟知的砸壳(脱壳)
应用砸壳(解密)
静态砸壳
静态砸壳就是在已经掌握和了解到了壳应用的加密算法和逻辑后在不运行壳应用程序的前提下将壳应用程序进行解密处理。静态脱壳的方法难度大,而且加密方发现应用被破解后就可能会改用更加高级和复杂的加密技术
动态砸壳
动态砸壳就是从运行在进程内存空间中的可执行程序映像(image)入手,来将内存中的内容进行转储(dump)处理来实现脱壳处理。这种方法实现起来相对简单,且不必关心使用的是何种加密技术。
Clutch是由KJCracks开发的一款开源砸壳工具。工具支持iPhone、iPod Touch、iPad,该工具需要使用iOS8.0以上的越狱手机应用。
otool -l QQ,查看可执行文件QQ结构
越狱插入,不污染三方应用的插件
非越狱的注入
Github开源工具。 dumpdecrypted这个工具就是通过建立一个名为dumpdecrypted.dylib的动态库,插入目标应用实现脱壳。
该工具基于frida提供的强大功能通过注入js实现内存dump然后通过python自动拷贝到电脑生成ipa文件。
解决办法
遇到警告,sudo后面加-H
进入/opt/MonkeyDev/bin目录执行frida-ps列出所有进程
frida-ps -U此时列出USB连接的进程
frida的作用:
/opt/MonkeyDev/bin下直接进入具体应用
frida -U 微信
报错是因为我的手机里面安装了一个正版微信,一个砸壳微信
frida -U 支付宝,前提是支付宝在前台运行,可正常进入,并能执行frida语句,语法见 官网 doc
解决办法是将dump.py中的python改为python3,python版本是2改为python2,是python3就改为python3,通过python --version查看当前版本
scp -P 12345 .inputrc root@localhost:/var/root/
iOS逆向 Reveal FLEXLoader 图层结构
对于iOS逆向,在我们拿到解密后的可执行文件后,我们研究的突破口其实就是界面的所在信息,毕竟在没有任何的针对信息的情况下,去在Hopper中看可执行文件的数据,无异于大海捞针。所以这时候我们需要针对的信息,需要我们hook的控制器或是类名,这样接下来的研究就会有自己的方向了。
学iOS的童鞋都知道这个神器,不管我们在正向还是逆向开发中都可以用到这个查看图层信息的工具,当然在两种情况的使用的方法是不一样的,这儿我主要介绍Reveal在逆向开发中的使用方法。
在用这个工具的时候,其实是踩了很大的坑的。
利用两种方式的使用Reveal工具,在打开需要逆向的APP后,提示The network connection was lost
至于这两种方式:
打开Reveal ,Reveal菜单-Help-Show Reveal Library in Finder -iOS Library
方式一:
注意,这个plist文件的格式不能出错,不然killall SpringBoard命令后出现白苹果,至于他们的bundleid ,直接到APP的目录下看info.plist文件即可。
方式二:
推荐方式
/Library/RHRevealLoader,在手机的Library下建立RHRevealLoader文件夹,之后把libReveal.dylib放进这个文件夹下。
在手机中的设置中找到Reveal-Enabled Applications-你需要的app
之后将mac和iOS设备中连接同一个局域网中,打开APP后,在Reveal中查看图层信息
当然如果你也出现了Reveal中无法显示问题时:
解决方法:这个是你的libReveal.dylib有问题,这时候你需要换一个
github下的v2.0中的Reveal.dylib地址
这样将新的libReveal.dylib在手机中替换原来的即可,当然还有一种可能就是连接的局域网网速太差了。
我们期待的结果是:
这个工具是在怎么安装Reveal都安装不了的情况下,去了解的一个可以看图层的工具,这个工具和Reveal不同的是不需要连接Mac电脑,只需要在Cydia中安装并且在设置中开启需要的查看的图层的APP。
可以看到这个工具可以查看APP的文件目录,整个APP的视图构架,当前视图的图层结构,当然还有很多功能等着你去发现。
这个是我们的目标视图的图层结构。
这样通过图层工具我们就比较快的找到我们需要研究的对象了。
学习了一段时间的iOS逆向工程,在此记录一下学习中的遇到的问题和知识点
iOS逆向必须要有一个越狱手机,最好是完美越狱的手机
爱思助手 或者 pp助手 中有详细的讲解,最好用ARM64位的手机,iPhone5s(以上)。
判断手机是否越狱:判断手机上是否安装了Cydia
SSH
Secure Shell的缩写,意为“安全外壳协议”,是一种可以为远程登录提供安全保障的协议
使用SSH,可以把所有传输的数据进行加密,“中间人”攻击方式就不可能实现,能防止DNS欺骗和IP欺骗
OpenSSH
是SSH协议的免费开源实现
可以通过OpenSSH的方式让Mac远程登录到iPhone
在iPhone上通过Cydia安装OpenSSH工具(软件源 )
很多人会将SSH、OpenSSH、SSL、OpenSSL搞混
SSL
Secure Sockets Layer的缩写,是为网络通信提供安全及数据完整性的一种安全协议,在传输层对网络连接进行加密
OpenSSL
SSL的开源实现
绝大部分HTTPS请求等价于:HTTP + OpenSSL
OpenSSH的加密就是通过OpenSSL完成的
查看SSH版本(查看配置文件的Protocol字段)
客户端:/etc/ssh/ssh_config
服务端:/etc/ssh/sshd_config
SSH的通信过程可以分为3大主要阶段
建立安全连接
客户端认证
数据传输
SSH-2提供了2种常用的客户端认证方式
基于密码的客户端认证
使用账号和密码即可认证
基于密钥的客户端认证
免密码认证
最安全的一种认证方式
SSH-2默认会优先尝试“密钥认证”,如果认证失败,才会尝试“密码认证”
在客户端生成一对相关联的密钥(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
端口就是设备对外提供服务的窗口,每个端口都有个端口号(范围是0~65535,共2^16个)
有些端口号是保留的,已经规定了用途,比如
21端口提供FTP服务
80端口提供HTTP服务
22端口提供SSH服务(可以查看/etc/ssh/sshd_config的Port字段)
更多保留端口号:
默认情况下,使用22端口进行SSH通信,采用的是TCP协议,Mac是通过网络连接的方式SSH登录到iPhone,要求iPhone连接WiFi
为了加快传输速度,也可以通过USB连接的方式进行SSH登录
Mac上有个服务程序usbmuxd(它会开机自动启动),可以将Mac的数据通过USB传输到iPhone
/System/Library/PrivateFrameworks/MobileDevice.framework/Resources/usbmuxd
注意:要想保持端口映射状态,不能终止此命令行(如果要执行其他终端命令行,请新开一个终端界面)
不一定非要10010端口,只要不是保留端口就行
端口映射完毕后,以后如果想跟iPhone的22端口通信,直接跟Mac本地的10010端口通信就可以了
新开一个终端界面,SSH登录到Mac本地的10010端口(以下方式2选1)
ssh root@localhost -p 10010
ssh root@127.0.0.1 -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
cycript 开启
cycript -p 进程ID
cycript -p 进程名称
取消输入:Ctrl + C
退出:Ctrl + D
清屏:Command + R
ps命令是process status的缩写,使用ps命令可以列出系统当前的进程
列出所有的进程
ps –A
ps aux
搜索关键词
ps –A | grep 关键词
顾名思义,它的作用就是把Mach-O文件的class信息给dump出来(把类信息给导出来),生成对应的.h头文件
官方地址:
首先可以拿自己的ipa包进行尝试。
选择你的ipa包,然后把后缀名改为zip,解压缩得到Payload文件夹,里面就是你的APP。
打开终端,直接cd到你的xxxx.app目录下。具体做法,输入cd,然后把xxxx.app直接拖到终端里打个回车。
然后输入otool,会显示如下内容:
有兴趣的同学可以仔细研究一下每个命令是干吗用的,这里介绍几个常用命令:
可执行文件的名称可以右键xxxx.app文件,选择显示包内容,然后找到里面的exec文件,把名字打进去。一般来说这个文件的名字跟xxxx是一样的
然后奇迹就出现了。。。
是不是很熟悉?这个命令列出了你使用的所有库的名字。
查看ipa包是否加壳:
其中cryptid代表是否加壳,1代表加壳,0代表已脱壳。我们发现打印了两遍,其实代表着该可执行文件支持两种架构armv7和arm64.
这里给大家推荐一个自动化检测的神器:
MobSF
根据Document的提示自行研究一下吧。
我们把自己的App提交到App Store后,苹果会帮我们加一层保护壳,有了这个壳的存在,我们就没办法对App进行Class Dump、 IDA 分析、重签名等...
Clutch就是利用了这种解密工具,进行砸壳的,这种属于静态砸壳。
还有另一种动态砸壳的方式,就是将苹果帮我解密完加载到内存中的Mach-O文件直接拷贝一份出来,这种的典型代表是dumpdecrypted。
砸壳后,会把路径给到我们,我们就可以通过ifunBox取出砸壳后的ipa包,或者通过scp指令。这样就成功了~嘿嘿????
最后拿到解密后的Mach-O文件,我们就可以为所欲为了~~
终端执行这个命令就可以安装
正向iOS开发者,Mac上都安装着Xcode.如果你安装多个版本Xcode,指定其中一版本的Xcode就行.
终端执行命令
越狱iPhone下的签名工具(更改授权entitlements),可以为theos开发的程序进程签名 (支持在OS X和iOS上运行)。
我们可以通过终端命令进行安装
-ldid 用于签名
-fakeroot 用于模拟root权限
安装可能要花费一段时间,耐心等待一下.
注意:
关于ldid签名知识点补充
这里要提一下加密算法:
1. 对称加密算法:
RC4,DES,3DES,AES128,AES356等,加解密双方密钥相同.
2. 非对称加密算法:
RSA,Elgamal等,加解密双方使用密钥对.
3. 哈希算法:
注意
苹果签名:
1. 苹果签名 是苹果官方的私钥签名,公钥验证
2. 以数字签名形式进行签名
注意
数字签名
1. 数字签名是非对称密钥加密技术与数字摘要技术的应用.
2. 对指定信息使用哈希算法,得到一个固定长度的信息摘要.
3. 然后再使用 私钥 对该摘要加密,就得到了数字签名.
注意
数字证书:
1. 数字证书是一个文件,由苹果的Apple Worldwide Developer
Relations Certification Authority(WWDR)证书认证中心进行签名
2. 其主要作用是用来标识身份.
注意
证书文件主要包含两部分内容: 证书信息 和 证书签名
1.证书信息
包含用户的公钥,用户个人信息,证书颁发机构信息,证书有效期等信息
2.证书签名
WWDR将上述证书本身内容,通过哈希算法得到一个固定长度的信息摘要,然后使用自己的私钥对该信息摘要加密生成数字签名.
3.证书验证
注意
到这里,ldid介绍完成
dpkg:用于管理deb包.
deb是越狱开发安装包的标准格式,dpkg-deb是一个用于操作deb文件的工具,有了这个工具,Theos才能正确地把工程打包成为deb文件.
有的朋友会使用这个命令
报错 Error: invalid option: --from-bottle
大概意思是:无效的参数,这个有可能和安装的版本原因.
我多次安装后,把参数去掉了
到这里就完成了dpkg的安装.
我们在终端使用命令
sudo git clone --recursive /opt/theos
我们通过git clone 到/opt/theos目录下.
克隆需要一部分时间,我们需要耐心等待一会.
我们在终端添加/opt/thoes目录的所有者
sudo chown -R $(id -u):$(id -g) /opt/theos
source ~/.bash_profile
保存环境变量并生效
thoes到这里安装完成.
本篇文章主要介绍了Theos安装前准备.
我们下篇文章会介绍如何是theos,我们会创建tweak demo为大家介绍.
有问题请留言,持续关注.
我们在微信上24小时期待你的声音
解答本文疑问/技术咨询/运营咨询/技术建议/互联网交流