从app开发到手机安装的过程
1.我们的应用程序首先生成一个。app文件在我们写完代码之后,签名,打包,然后这个在哪里。app文件?我将使用我自己的项目作为一个例子来大致展示他在这里的位置:

这实际上包括了我们项目中的资源和我们写的代码。如果要学习逆向,其实就是破解这里面的内容。app。我们的。app创建一个Payload文件夹,压缩后就是我们的ipa包,所以这个ipa包可以安装在手机上。
让我们在finder中显示->显示包的内容,看看里面有什么。
我们可以看到里面有一些资源文件,xib,。car,app启动的图标,还有一个和我们的项目名同名但表面没有后缀的文件。那么这个文件实际上就是我们的代码编译后生成的Mach-o文件,所以我们实际上是反向破解这个文件。
手机安装app的过程
1.直接用xcode安装。2.用itools,pp助手等安装。3.用appstore安装。
反向的一般概念
使用和显示效果的类转储
1.首先我们去他官网下载了一下,其中他有几种格式。
我下载了第一个dmg格式。打开它,找到这个文件。
我们把这个黑色的东西复制到我们mac上的/usr/local/bin目录下。实际上,我们的终端在执行命令时,会默认转到/usr/bin目录和/usr/local/bin目录。但是,即使有管理员权限,也不允许在/usr/bin目录中添加内容。这解释了为什么我们可以使用cd,如图所示。
因此,我们需要将class-dump添加到/usr/local/bin目录中。他的常用指令如下:
类转储Mach-o文件的路径
或者把Mach-o文件破解后导出到某个地方。
class-dump -H Mach-o文件的路径-o头文件的路径
注意:class-dump只能导出头文件。这是我的演示:
经过比较
虽然他的复原不是100%准确,但整体看起来几乎一样。
代码的编译过程
简单来说,我们的oc编译后会生成汇编语言,汇编语言编译后最终会生成机器语言,其中机器语言和汇编语言是一一对应的。也就是说我们的机器语言可以反编译生成汇编语言。
但是从上图可以看出,我们的汇编无法生成我们唯一的oc语言。我们做什么呢事实上,我们可以使用工具从我们的程序集生成oc,这相当于伪代码。在这种情况下,我们可以大致研究一下别人的代码。个人认为如果完全恢复oc码不太现实,因为我觉得苹果的加密机制还可以。
使用Hopper反汇编程序来恢复我们的汇编代码。
1.下载链接
pan.baidu.com/s/1htbWOde
提货代码:hvxs
2.打开我们的Hopper反汇编,如果他这么果断的找你要钱就删了他,自己找破解版。我的应该是破解版。
3.将我们的Mach-o文件拖放到Hopper反汇编程序中,您需要等待进度条完成。
4.显示结果如下:
5.相信看了我的介绍,你大概不知道如何使用Hopper反汇编器。我在网上找了一篇文章,你可以仔细看,一步一步来。一些快捷方式如下所示:
7.根据上面我给你介绍的文章,我已经成功导出了我项目的所有文件,如下图:
首先我们不用担心xcode的错误,但是很多人还是想说或者听不懂。怎么还能编?其实个人觉得完全拆解成oc是不现实的。我们可以通过他的大概加上我们的猜测来猜测。例如,我想看一个对象是如何实现的。
用自己的经历来分析。
动态库共享缓存
1.使用前面的方法,我们连接我们的手机并检查UIKit库的位置。
但是我们找了半天也找不到我们的UIKit库,那他去哪了?其实苹果从ios3.1就开始使用动态库共享缓存的机制,大概意思是:他会把我们苹果工程师写的UIKit,CoreGraphics库等等放在手机里的一个地方,然后有dyld动态链接。那么他这么做的一个明显的好处就是节省了我们手机的内存,大大提高了开发效率。用一张图解释一下:
那么他的动态库的缓存文件在哪里呢?他是
/System/Library/Caches/com . apple . dyld/dyld _ shared _ cache _ armX
顺便说一下ios的架构。
现在让我们找到UIKit库的位置,我们找到了这个。
我们可以看到有两个大的包,一个是64位架构,一个是armv7s架构。现在xcode是12。根据上图,你知道为什么没有armv7架构吗?因为5基本不用,xcode基本不支持。将第一个包拖入已安装的Hopper反汇编器,直接进入UIkit,选择框架一。
然后直接下一步,点击确定。
然后就是漫长的等待,直到完成的语句出现在他的下方。
但如果你是Hopper反汇编3,他就解析不了。料斗拆卸器4正常。
动态库加载
其实动态库是缓存在我们手机的某个地方的,但是它是怎么和我们的app链接的呢?实际上,是通过这个
来链接,其中他有一个动态编辑器和一个动态加载器来链接。
使用官方工具拆除UIKit框架。
我用一张图来说明具体步骤。
实际上,我们也可以将dsc_extractor放在我们的/usr/local/bin目录中。我没把它放在这里,所以就用吧。/并直接执行。我的执行结果是:
首先,我们破解了。找找UIKit的Mach-o文件。他在这个地方。
您刚刚命名的文件夹是/system/library/frameworks/ui kit . framework。

将会看到我们期待已久的Mach-o文件。
将此文件拖放到Hopper反汇编程序中并开始解析。大约一个世纪后,解析终于完成。找到那个文件了。快乐已经死了。
Mach-o简介
简介:Mach-o其实是Mach object的缩写,是macios上的存储程序和标准库格式。
常见类型:
我们可以通过xcode查看mach-o文件。
查看mach-o文件的一些命令1。查看可执行文件支持架构的信息
Lipo -info可执行文件
或者
文件可执行文件
2.剥离建筑
O lipo可执行文件-瘦模式-输出模式位置
3.结合两种架构
lipo-创建可执行文件路径可执行文件-输出所需的可执行文件路径
通用二进制文件通用二进制文件是具有多种架构的二进制文件或独立的二进制文件。
Mach-o的基本结构
他的官方描述:developer.apple.com/library/archive/documentation/developer工具/conceptual/macho tomics/0-introduction/introduction . html他的结构主要包括三个方面:1 .头主要包括一些文件类型,目标模式类型等等。2.load命令描述了虚拟内存中文件的结构、布局等。3.原始段数据加载命令中段的原始数据。他的结构图如下:
一个可以查看Mach-o文件的工具
github.com/gdbinit/MachOView
我会找到一个可执行文件来看看:
然后我们还可以看看具体的表头信息。
注:值得一提的是,github上的工具machview存在一些bug。如果你想要一个没有虫子的,请联系我。我有直接给dmg的。
dyld和Mach-o的关系其实dyld主要是加载这几类Mach-o文件的可执行文件和动态库文件MH _ EXCUTE MH _ DYLIB MH _ BonDLE APP。我们可以从dbld的源代码中找到答案。
嘉科
什么是脱壳?我们的ipa文件上传到appstore,苹果会给我们加密。事实上,我们在内存中运行的进程是一个加密的shell程序。当然,在手机中,我们会解密shell程序来直接运行可执行文件。当然,苹果这样做是为了保护我们的程序。
壳
炮轰之道1。硬脱壳:所谓硬脱壳,就是用一种算法来破解苹果的加密程序。比如加壳用加法,那么我们破解的时候就用减法来破解。2.动态加壳:我们知道外壳程序会在手机中被破解,所以我们可以通过一定的手段从内存中获取可执行文件。但是因为我们手机的环境比较复杂,所以在iOS中一般都采用硬炮轰。
检查是否脱壳以及脱壳的工具。
1.怎么查炮击?
1.我们可以通过MachOView查看。我在上一篇文章中提到了如何下载和使用MachOView。
我们可以在MachOView的load commands-> LC _ encryption _ info中检查Crypt ID。如果是0,说明已经脱壳了。如果不为0,则为带壳。例如,我的操作如下:
但是我们知道这个方法有点复杂,因为我们需要把他的可执行文件导入MachOView。这是一个方法,但我还是不推荐。
方法二:
我们需要安装一个工具离合器,具体下载地址在:
github.com/KJCracks/Clutch/releases
或者我们也可以安装这个工具:
github.com/stefanesser/dumpdecrypted/
一般来说,我们是第一个安装的工具。如何安装如下:
如果进入离合器,出现这个界面,说明你已经成功安装了。
那么怎么才能检查出有没有带壳呢?
使用命令
离合器-i
例如,我的看起来像这样:
如果出现这样的app,说明你已经在appstore安装了或者没有被shell,因为即使你找到了这样的ipa这样的可执行文件,你还是解析不了。h文件或。m文件不是汇编语言。
如何安装使用dumpdecrypted?
注意:除了上面提到的错误,您可能会得到一个未签名的错误,因此您需要对dumpdecrypted.dylib进行签名。我们现在知道dumpdecrypted.dylib在/var/root目录中,并在该目录中执行命令:
ldid -S dumpdecrypted.dylib
这样你就可以签上你的名字了,你应该成功执行了上面的命令。说明:有时离合器会失灵。这个dumpdecrypted还是值得拥有的。
破解shell应用程序,获得可执行文件
1.首先检查你手机里哪些app是带壳执行命令:

执行结果如图所示:
输入app的序列号或app的BundleId号,生成ipa文件并执行命令。
离合器d应用程序序列号或BundleId
比如我的就是:我破解了微信。
我能在手机里找到ipa包,因为他已经把目录打印出来了。他拿到他的ipa包后,直接把ipa包改成zip,然后直接解压,就是有效载荷文件下的包文件。通过显示包的内容找到他的可执行文件。我们可以用class-dump破解头文件,找到他的头文件。m文件与漏斗反汇编。这是一张展示离合器使用的图片。


