服务器之家:专注于VPS、云服务器配置技术及软件下载分享
分类导航

PHP教程|ASP.NET教程|Java教程|ASP教程|编程技术|正则表达式|C/C++|IOS|C#|Swift|Android|VB|R语言|JavaScript|易语言|vb.net|

服务器之家 - 编程语言 - IOS - iOS逆向工程使用dumpdecrypted工具给App脱壳

iOS逆向工程使用dumpdecrypted工具给App脱壳

2021-01-30 15:32青玉伏案 IOS

这篇文章主要介绍了iOS逆向工程使用dumpdecrypted工具给App脱壳的相关资料,本文图文并茂给大家介绍的非常详细,具有参考借鉴价值,需要的朋友可以参考下

本篇以微信为例,给微信脱壳。"砸壳"在ios逆向工程中是经常做的一件事情,,因为从appstore直接下载安装的app是加壳的,其实就是经过加密的,这个“砸壳”的过程就是一个解密的过程。未砸壳的app是无法在class-dump、hopper等工具中使用的。所以我们要将app进行砸壳处理。在android开发中也存在app加壳的处理,比如什么360加固了,其实就是给app加一层壳。

本篇我们就以wechat(微信)为例,从appstore上下载微信并安装,然后使用dumpdecrypted工具(当然你也可以使用其他砸壳工具)进行砸壳处理。砸壳后会生成解密后的app文件,然后我们就可以使用class-dump和hopper处理解密后的文件了。废话少说,就开始今天的主题。

一、生成dumpdecrypted.dylib动态库

首先我们要生成“砸壳”用的动态库dumpdecrypted.dylib,我们“砸壳”时主要用到这个动态库。该动态库的源码在github上是开源的(github地址),要想得到dumpdecrypted.dylib这个动态库,只需要从github上下载代码,然后进行编译,生成dumpdecrypted.dylib即可。下方就是使用make命令对dumpdecrypted的源码进行编译。

进入到dumpdecrypted文件夹下,运行make命令即可。

iOS逆向工程使用dumpdecrypted工具给App脱壳

编译完成后,dumpdecrypted文件夹中就会多一个dumpdecrypted.dylib动态库,该动态库就是稍后我们砸壳使用的工具。

iOS逆向工程使用dumpdecrypted工具给App脱壳

二、“砸壳”前的准备工作

接下来就是要在越狱手机上寻找要“砸壳”的app路径了,首先使用ssh连接到你的越狱设备,然后在越狱设备中打开你要砸壳的app, 此处我们以微信为例。从aippstore中下载安装的应用都会位于/var/mobile/applications中,下方的截图就是我手机上从appstore中下载的应用的安装路径。当然,下方是使用iexplore工具进行查看的,下方内容中,文件的拷贝我们都会用到iexplorer,当然你也可以使用之前提到过的ifunbox。

iOS逆向工程使用dumpdecrypted工具给App脱壳

从上方的截图中要找出微信所在的目录是非常困难的,应用少的话你可以点开一个个的看。向上面这种应用比较多的情况的话,一个个文件夹点开是不太现实的,所以我们得通过另一种方式来定位“微信”app所在的目录。

这种快捷定位“微信”所在目录的方式就是“查看应用进程”的方式,首先你需要打开微信,然后运行下方的命令,来查看文件目录/var/mobile/目录下的所有正在运行的app进行,具体要用到的命令如下所示:

?
1
ps -e | grep /var/mobile

上方截图就是上述命令运行后所输出的内容,从上述内容中我们轻而易举的就可以找到“wechat”所在目录。我们可以通过iexplore打开该目录,更直观的来看一下微信app所在的目录,具体内容如下所示. 上面这个进程的绝对路径我们要记下来,因为后边砸壳的时候会使用到该路径。

iOS逆向工程使用dumpdecrypted工具给App脱壳

接下来我们就要使用cycript工具来寻找wechat的document路径了,如果你的越狱设备上没有安装cycript工具的话,那么请前往cydia下载安装cycript工具。下方步骤就是使用cycript工具来查看附加进程的document目录的步骤。

1.使用cycript注入目标进程中

?
1
cycript -p wechat

上述命令执行完毕后,会进入到cycript模式中,如下所示。当然,在ios9.2.1上的越狱设备执行上述命令会报错,可能是目前cycript这个强大的工具还不支持ios9.2吧。所以我是在ios7.2上做的该实验。

iOS逆向工程使用dumpdecrypted工具给App脱壳

2.获取该进程的document目录

?
1
[[nsfilemanager defaultmanager] urlsfordirectory:nsdocumentdirectory indomans:nsuserdomainmask][0]

输入上述内容,然后点击回车,就会输出wechat进程的document目录,输出结果如下所示。下方的红色部分就是wechat的document目录的绝对路径。

iOS逆向工程使用dumpdecrypted工具给App脱壳

找到上述目录后,使用iexplore进入到该目录下,将上面我们生成的dumpdecripted.dylib动态库拷贝到该目录下即可,如下所示:

iOS逆向工程使用dumpdecrypted工具给App脱壳

三、开始砸壳

上述“砸壳”的准备工作就绪后,接下来我们就要开始砸壳了。进入到wechat的document目录中,执行下方的命令进行砸壳。

?
1
dyld_insert_libraries=dumpdecrypted.dylib /var/mobile/applications/3dc16044-e5bb-4038-9e31-cfe3c7134a7b/wechat.app/wechat

在上述命令中,dyld_insert_libraries后边这个动态库就是我们上面生成的动态库,后边这个路径就是wechat执行文件的绝对路径,运行上述命令后,就开始砸壳了,下方截图就是我们砸壳的过程。

iOS逆向工程使用dumpdecrypted工具给App脱壳

砸壳过程完成后,会在我们的document目录下生成一个wechat.decrypted文件,如下截图所示。该文件就是脱壳后的文件,我们可以将该文件拷贝到我们的mac上,以备使用。

iOS逆向工程使用dumpdecrypted工具给App脱壳

四、导出脱壳app的头文件

将上面生成的wechat.decrypted脱壳文件拷贝的我们的mac上,接下来就是我们class-dump出厂的时刻了。接下来我们要使用class-dump导出该脱壳文件的所有头文件。具体步骤如下所示。

1.前奏

wechat.decrypted文件后,我执行了下方的命令来导出其头文件,下方的命令在没有加壳的app中是好使的,直接就可以导出相应app的头文件,如下所示:

?
1
class-dump -s -s -h wechat.decrypted -o ./headers

执行上述命令结束后是下方这个结果, 并没有导出想要的头文件,google了一下,是arm的架构不对,所以就没导出成功。

iOS逆向工程使用dumpdecrypted工具给App脱壳

2.开始导出头文件

从上述截图中我们可看到,headers文件夹中并没有生成相应的头文件。是我们解密的文件有问题吗?于是乎,我使用了hopper打开了解密后的文件,是可以正常打开的,于是乎又google一下,原来是我们在导出头文件时指定的arm架构不正确,于是乎使用class-dump的--arch配置项来指定了armv7的架构,这样的话,头文件就导出成功了。

?
1
class-dump --arch armv7 -s -s -h wechat.decrypted -o ./headers

操作步骤和结果如下图所示, 导出成功,你可以慢慢的分析了。

iOS逆向工程使用dumpdecrypted工具给App脱壳

五、hopper

上面使用了class-dump来操作我们脱壳的文件,木有问题。那么接下来来看一下在hopper上的效果如何,下方就是使用hopper打开“脱壳”文件的效果。当然,你也可以使用ida pro来查看,当然此处我们使用的是hopper。从下方的截图来看,结果是perfect的。

iOS逆向工程使用dumpdecrypted工具给App脱壳

以上所述是小编给大家介绍的ios逆向工程使用dumpdecrypted工具给app脱壳,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对服务器之家网站的支持!

原文链接:http://www.cnblogs.com/ludashi/archive/2016/09/23/5740696.html

延伸 · 阅读

精彩推荐
  • IOSiOS中时间与时间戳的相互转化实例代码

    iOS中时间与时间戳的相互转化实例代码

    这篇文章主要介绍了iOS中时间与时间戳的相互转化实例代码,非常具有实用价值,需要的朋友可以参考下。...

    张无忌!4812021-03-09
  • IOSiOS APP实现微信H5支付示例总结

    iOS APP实现微信H5支付示例总结

    这篇文章主要介绍了iOS APP实现微信H5支付示例总结,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下...

    一张小A11332021-06-01
  • IOS谈一谈iOS单例模式

    谈一谈iOS单例模式

    这篇文章主要和大家谈一谈iOS中的单例模式,单例模式是一种常用的软件设计模式,想要深入了解iOS单例模式的朋友可以参考一下...

    彭盛凇11872021-01-19
  • IOSIOS网络请求之AFNetWorking 3.x 使用详情

    IOS网络请求之AFNetWorking 3.x 使用详情

    本篇文章主要介绍了IOS网络请求之AFNetWorking 3.x 使用详情,小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧...

    总李写代码6892021-03-04
  • IOSiOS10 Xcode8适配7个常见问题汇总

    iOS10 Xcode8适配7个常见问题汇总

    这篇文章主要为大家详细汇总了iOS10 Xcode8适配7个常见问题,具有一定的参考价值,感兴趣的小伙伴们可以参考一下...

    索马里猫10332021-02-01
  • IOSxcode8提交ipa失败无法构建版本问题的解决方案

    xcode8提交ipa失败无法构建版本问题的解决方案

    xcode升级到xcode8后发现构建不了新的版本。怎么解决呢?下面小编给大家带来了xcode8提交ipa失败无法构建版本问题的解决方案,非常不错,一起看看吧...

    Cinna丶7542021-02-03
  • IOSiOS逆向教程之logify跟踪方法的调用

    iOS逆向教程之logify跟踪方法的调用

    这篇文章主要给大家介绍了关于iOS逆向教程之logify跟踪方法调用的相关资料,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学...

    Mr.Guo11472021-04-28
  • IOSiOS常见的几个修饰词深入讲解

    iOS常见的几个修饰词深入讲解

    这篇文章主要给大家介绍了关于iOS常见的几个修饰词的相关资料,iOS修饰词包括assign、weak、strong、retain、copy、nonatomic、atomic、readonly、readwrite,文中通过示...

    郡王丶千夜7422021-05-10