iOS逆向

[toc]

iOS逆向

一、获取ipa(可跳过)

如何从App Store下载.ipa文件

提取 ipa

1
open /Users/qian/Library/Group\ Containers/K36BKF7T3D.group.com.apple.configurator/Library/Caches/Assets/TemporaryItems/MobileApps

二、获取砸壳ipa

https://ipadump.com/

https://ipadump.com/ 已重置 ¥8 (砸壳 ¥0.01)
https://armconverter.com/ Free
https://decrypt.day/ 免登录下载,修改id即可
https://decrypt.day/app/id967805235

Xcode高版本新建项目后找不到Products目录怎么办?

开project.pbxproj文件找到productRefGroup,将mainGroup值复制到productRefGroup保存即可

三、动态库

动态库是一种可在运行时加载和链接的库文件,它可以被多个应用程序共享。与静态库相比,动态库的最大优势是可以在不重新编译整个程序的情况下进行更新和替换。在iOS开发中,动态库广泛应用于插件化开发、代码重用和功能扩展等方面。

示例:wechat-tweak 微信小助手

1、制作动态库Library(dylib)

1、创建项目

Xcode –> New –> File –> Project –> macOS –> Library

dylib_create_01

2、选择库的框架和类型

Framework –> None(Plain C/C++ Library)

Type –> Dynamic

在创建macOS的Library的时候,当Framework选项时,有Cocoa、STL、None,请问这几种有什么区别?

Cocoa STL(C++ Library) None(Plain C/C++ Library)
选择 Cocoa 时,你将创建一个使用 Cocoa 框架的 macOS Library。Cocoa 是 macOS 上的主要应用程序开发框架,它基于 Objective-C 和 Swift 编程语言。Cocoa 提供了许多用于构建 macOS 应用程序的类和 API,包括图形用户界面、事件处理、数据存储、网络通信等功能。 STL(C++ Library)是一种 C++ 标准库,提供了一套模板类、算法和迭代器,用于在 C++ 中进行通用编程。然而,在 macOS 中,没有直接提供名为 STL 的选项。STL 在 macOS 上可以通过使用 C++ 编译器和标准库来使用,而不需要特定的框架选项。 选择 None 时,你创建的是一个不依赖特定框架或库的 macOS Library。这意味着你可以自由选择使用其他库或框架,或者根据需要在库中进行自定义代码编写。

dylib_create_02

3、添加文件和代码(下面以测试功能和代码为例)

①、使用 extern "C" 宏来定义 C 函数的声明,以确保它们按照 C 语言的命名和调用约定进行编译。

②、.m 文件修改为 .mm 格式,以支持C++编译

dylib_code_01

4、编译和获取dylib动态库

①、选择你的库要编译为什么SDK。(如给iPhone使用,选择iOS)

②、编译出的库要给什么类型的机器使用。(如iOS模拟器使用Any iOS Simulator Device、真机使用Any iOS Device+证书)

dylib_code_02

执行 Commond+B 进行编译后,标记③的dylib将由红色变成黑色,即表示生成了dylib。

附:如果你在Xcode15上,找不到Products目录,可打开 .xcodeproj –> 右键显示包内容 –> .pbxproj –> 搜索mainGroup,将mainGroup的值覆盖productRefGroup的值 –> 之后保存文件即可。

编译结果如下:

dylib_code_03

至此,我们的动态库编译生成完成。

2、动态库的使用

1、动态库的添加

1.1、在 Build Phases 的 Link Binary With Libraries 中添加我们的动态库,这里我们采用拖动的快捷方式。

dylib_add

此步的作用是为了

1.2、还需要将dylib添加到app根路径下(其他有些也会注入到Frameworks路径下)

dylib_add_02

执行完上述步骤之后,我们再次编译生成app,进而通过MachOView,即可看到我们的库成功注入了。

附:更多注入方法查看:iOS逆向 11:代码注入(上) yololib

dylib_add_03

2、动态库的调用

我们在main方法中进行测试,验证得到所编译的动态库有效。

dylib_use_01

3、动态库功能的完善开发

1、引入pod时候,

如果使用 #use_frameworks! ,则应该设置为 use_frameworks! :linkage => :static 。否则当你在动态库中引入了一个在app中不存在的库的时候大概率会出现错误。

4、动态库的自动执行/动态库在逆向中的使用

1、执行动态库的方法

序号 方法描述 示例 缺点
1 外界在适当位置调用动态库中的方法 main中调用test_dylib(); 调用的代码过多,逆向不适合在原代码中写
2 将方法写在动态库NSObject的+load中 NSObject+CQCrack 容易覆盖掉app中NSObject自身的+load方法
3 将方法写在动态库注入时自动执行的+load中 完美!!!✅