欢迎来到 嗅灵易学

零基础也能上手的脚本技术课,一对一答疑带你入门

[原创]iOS 11上的破解入门教程

[原创]iOS 11上的破解入门教程

前言

我是个新手,接触iOS逆向破解没几个月,网上教程资料看了很多,知识点比较零散,使用的工具大都是针对iOS 10之前的,在iOS 11上基本无法使用,弯路走了不少,经过多次试验,最终摸索出了自己的破解思路和风格。
网上已经有很多基于CydiaSubstrate的越狱开发教程,使用theos、MonkeyDev进行开发非常方便、高效,而本文则是脱离CydiaSubstrate,以非Unity游戏《干掉月亮》(Shoot The Moon)为例,纯手工打造动态库,注入到游戏中实现破解,虽说效率不比使用CydiaSubstrate来的高,但是能学到很多基本的知识,非常适合新手入门。

准备工作

设备

  • 一部越狱的iPhone手机(iOS 11.0~11.1.2)
  • 一台Mac机

macOS上的工具

  • Xcode
  • Terminal
  • Console
  • ssh
  • scp
  • Homebrew
  • usbmuxd
  • macho_edit
  • Hopper Disassembler
  • Impactor

iOS上的工具

  • bfinject
  • applst

App

  • 《干掉月亮》(Shoot The Moon)

下载安装

Xcode

从App Store下载,或者从苹果开发者页面下载都可以,下载最新版即可。

Terminal

macOS自带。许多命令需要在终端上执行。

Console

macOS自带。查看手机日志。

ssh

macOS自带。通过电脑登录手机。

scp

macOS自带。在手机和电脑间互传文件。

Homebrew

Homebrew官网(brew.sh)下载安装。
用于安装各种命令行工具。

usbmuxd

打开Terminal,使用Homebrew安装。

$ brew install usbmuxd

# 或者

$ brew install libidevicemobile

将iPhone上的端口通过usb线映射到电脑上的端口。

macho_edit

https://github.com/Tyilo/macho_edit下载源码。
编译后可以得到macho_edit可执行文件。
用于编辑App的可执行文件。

Hopper Disassembler

请自行搜索下载安装。
用于反编译App。

Impactor

Cydia Impactor官网(www.cydiaimpactor.com)下载。
用于安装ipa到手机。

bfinject

https://github.com/BishopFox/bfinject下载。
根据说明文档,将bfinject放到iPhone中。
用来砸壳、动态库注入等。

applst

https://github.com/DeviLeo/AppList下载。
根据说明文档,将命令行版的applst放到iPhone中。
用于列出手机上安装的App及文档目录。

《干掉月亮》(Shoot The Moon)

App Store下载。
这是一款有趣好玩的游戏。

破解

开局一台机,过程全靠猜。
下面正式进入破解阶段,我会非常啰嗦地写下所有的步骤。
如果您有一定地开发经验,尽情跳过所有已会的步骤。

砸壳

从App Store下载下来的App都是加密的,直接复制出来是无法使用Hopper Disassembler看到任何代码的,所以我们需要砸壳解密。

使用usbmuxd

如果你的Wifi环境不是很理想,可以使用usbmuxd映射端口走usb线。
此处我们映射iPhone上的ssh端口22到macOS上的2222端口,输入以下命令。

$ iproxy 2222 22

ssh登录iPhone

默认密码是 alpine

# -p 后面跟端口,默认是22

$ ssh root@localhost -p 2222

root@localhost's password: # 输入密码,默认密码是alpine

查询名称及进程ID

启动《干掉月亮》,查询App名称和进程ID。
因为《干掉月亮》的英文名是《Shoot The Moon》,所以我们在搜索进程的时候使用grep来筛选出带有moon的输出行。

$ ps -e | grep moon

1975 ??         0:59.42 /var/containers/Bundle/Application/24546F40-53DA-4C49-81C0-DED0C13DB814/shootthemoon.app/shootthemoon

砸壳

有了App名称和进程ID,我们就可以使用bfinject来砸壳了。

# 以下两条命令二选一,推荐使用App名称

# 使用App名称

$ bash bfinject -P shootthemoon -L decrypt

# 使用进程ID

$ bash bfinject -p 1975 -L decrypt

# 输出结果

[+] Liberios detected

[+] Injecting into '/var/containers/Bundle/Application/24546F40-53DA-4C49-81C0-DED0C13DB814/shootthemoon.app/shootthemoon'

[+] Getting Team ID from target application...

[+] Thinning dylib into non-fat arm64 image

[+] Signing injectable .dylib with Team ID A6DVR4V967 and platform entitlements...

[bfinject4realz] Calling task_for_pid() for PID 1975.

[bfinject4realz] Calling thread_create() on PID 1975

[bfinject4realz] Looking for ROP gadget... found at 0x1826574e0

[bfinject4realz] Fake stack frame at 0x10b624000

[bfinject4realz] Calling _pthread_set_self() at 0x182897804...

[bfinject4realz] Returned from '_pthread_set_self'

[bfinject4realz] Calling dlopen() at 0x182657460...

[bfinject4realz] Returned from 'dlopen'

[bfinject4realz] Success! Library was loaded at 0x1c41e2d00

[+] So long and thanks for all the fish.

命令执行完成并不表示砸壳已经完成,需要以App界面的提示为准。
下图为砸壳中,务必保持屏幕常亮。

注意:上传附件及图片大小不得大于30M。

⚠️ 版权声明:
本博客所有内容(含教程、源码、工具)仅供个人技术学习与研究交流使用,严禁商用、倒卖、二次分发及非法用途
未经作者书面授权,任何组织或个人不得转载、复制或用于其他平台,违者将追究相关责任。

0 0 0 举报
复制成功