57830716 发表于 2019-10-29 19:02:36

iOS逆向之使用dumpdecrypted给app砸壳

最近在学习iOS逆向,在砸壳这个环节查看了很多资料写的各有不同最终还是成功了,但是过程相对曲折,这里记录分享一下自己砸壳的过程希望往后面可以更好的帮助大家。

> 这里我要说一下砸壳只能在越狱手机上进行如果没有越狱设备的话是不行的。

## 1.下载dumpdecrypted

    (https://link.jianshu.com?t=https://github.com/stefanesser/dumpdecrypted/archive/master.zip)
   
    下载之后放在哪里看你个人喜好。

## 2.设置Makefile中的SDK字段和设备上的一致

> 在有些教程里是没有说设置SDK保持一致的。不设置能不能成功我也没有尝试过,不过设置了是一定可以的。

打开下载的dumpdecrypted文件夹里面的Makefile(我用的是sublime)



Makefile部分内容

我们看第三行是SDK,复制sdk后面的内容

```undefined
xcrun --sdk iphoneos --show-sdk-path
```

打开终端并输入上面命令



本地默认SDK路径

可以看到我的默认的是9.3的我的xcode版本是7.3的xcode。我的设备是iOS8.3而现在默认的为9.3是不一样的所以我们找到对应版本的路径自己设置一下,如果没有的话就去这里下载旧版本的xcode
[旧版xcode下载地址](https://link.jianshu.com?t=https://developer.apple.com/downloads/index.action)

下载安装好旧版本xcode之后在xcode目录下

> /Applications/Xcode6.3.app/Contents/Developer/Platforms/iPhoneOS.platform/Developer/SDKs
>在这个目录下找到我们需要的sdk替换默认的



SDK修改之后

## 3.修改Makefile中的GCC_UNIVERSAL字段和dumpdecrypted.c

如果是7.0以下的设备我们还需要改些东西,我们要将上图的第二行修改为

```jsx
GCC_UNIVERSAL=$(GCC_BASE) -arch armv7 -arch armv7s
```

还要将dumpdecrypted文件夹里的dumpdecrypted.c文件的第76行

```php
if (lc->cmd == LC_ENCRYPTION_INFO || lc->cmd == LC_ENCRYPTION_INFO_64)
```

改为

```php
if(lc->cmd == LC_ENCRYPTION_INFO)
```

## 4.生成`dumpdecrypted.dylib`文件

然后我们在终端cd到dumpdecrypted目录下,在终端执行命令

```go
&make
```

完成后`dumpdecrypted.dylib`文件出现在当前目录下,这个就是我们砸壳用的锤头。

## 5.将`dumpdecrypted.dylib`拷贝到iOS设备上

你可以使用iFunBox,iFile这些图形界面来操作,相对来说我还是习惯使用命令行。

我们要把“锤头”拷贝到Documents目录下。

我们先来定位`待砸壳app的可执行文件`

设备上运行`待砸壳app`,最好只运行这一个,然后终端接入设备

```bash
$ssh root@设备ip
```

> 有关环境配置请自行查阅资料

接上设备后我们使用

```undefined
ps -e
```

执行后如下:



ps -e执行结果

这里只是列出部分结果,因为我们只运行了一个app所以我们找到

```csharp
/var/mobile/Containers/Bundle/Application/ED230789-AE88-4AAF-9D08-7BB97C7E629D/MinecraftBox.app/MinecraftBox
```

`/var/mobile/Containers/Bundle/Application/`这个字段就是目标
这里以`口袋MC盒子`为例,可以看到`MinecraftBox.app/MinecraftBox`就是我们要找的可执行文件

然后我们用Cycript找出要砸壳app的Documents目录路径,命令输入

```undefined
cycript -p 要砸壳的app
```

输入之后结果如下:



结果

然后再输入:

```json
[ URLsForDirectory:NSDocumentDirectory inDomains:NSUserDomainMask]
```

得到Documents路径:



将`dumpdecrypted.dylib`拷贝到`Documents路径下`

```ruby
$scp `dumpdecrypted.dylib路径` root@设备IP:`Documents路径`;
```

拷贝成功结果:



## 6.开始砸壳

```ruby
DYLD_INSERT_LIBRARIES=/path/to/dumpdecrypted.dylib /path/to/executable
```

实际操作:

> cd 到设备Documents下

```undefined
DYLD_INSERT_LIBRARIES=dumpdecrypted.dylib 可执行文件路径
```

运行后可以看到:



运行后结果

接着我们ls一下看看文件夹下的内容:



Documents文件夹下文件

我们可以看到除了app本身自带的内容和我们拷贝进去的dumpdecrypted.dylib文件里面还有个后缀为`decrypted`文件,没错这个就是我们想要的。后缀为`decrypted`的文件就是解密后的app的可执行文件,把它拿出来对它进行你想要的操作吧!






页: [1]
查看完整版本: iOS逆向之使用dumpdecrypted给app砸壳