IOS安全、逆向、反编译5-Mach-O
逆向App的基本步骤
界面分析
Cycript、Reveal
代码分析
对Mach-O文件的静态分析
MachOView、class-dump、Hopper Disassembler、ida等
动态调试
对运行中的APP进行代码调试
debugserver、LLDB
4.代码编写
注入代码到APP中
必要时还可能需要重新签名、打包ip
class-dump
class-dump的作用是把Mach-O文件的class信息给dump出来(把类信息给导出来),生成对应的.h头文件。下载完工具包后将class-dump文件复制到Mac的/usr/local/bin目录,这样在终端就能识别class-dump命令了。
命令格式为:
class-dump -H Mach-O文件路径 -o 头文件存放目录
-H表示要生成头文件
-o用于制定头文件的存放目录
Hopper Disassmbler
Hopper Disassmbler能够将Mach-O文件的机器语言代码反编译成汇编代码、OC伪代码或者Swift伪代码。
正常情况下,OC代码编译后生成汇编代码,汇编代码编译后再生成机器码,而汇编代码和机器码是一一对应的,所以可以通过机器码反编译成汇编代码,但是OC代码和汇编代码不是一一对应的,所以只能生成OC的伪代码。
Hopper Disassmbler直接在网上下载安装就可以了。安装好了之后,打开Hopper Disassmble,将App的Mach-O可执行文件拖进去就自动分析并生成伪代码。
怎么找到App的Mach-O可执行文件呢?
将App的安装问价ipa的扩展名改成zip,然后解压缩,找到Payload里面的文件,右击显示包内容,在里面找到和ipa文件名相同的可执行文件,就是Mach-O可执行文件。
我们通常也想反汇编一下系统库文件,那么系统库的Mach-O可执行文件又在哪里呢?
系统动态库缓存
从iOS3.1开始,为了提高性能,绝大部分的系统动态库文件都打包存放到了一个缓存文件中(dyld shared cache)。缓存文件路径:/System/Library/Caches/com.apple.dyld/dyld_shared_cache_armX。dyld_shared_cache_armX的X代表ARM处理器指令集架构。
v6
iPhone、iPhone3G、iPod Touch、iPod Touch2
v7
iPhone3GS、iPhone4、iPhone4S、iPad、iPad2、iPad3(The New iPad)
iPad mini、iPod Touch3G、iPod Touch4、iPod Touch5
v7s
iPhone5、iPhone5C、iPad4
arm64
iPhone5S、iPhone6、iPhone6 Plus、iPhone6S、iPhone6S Plus
iPhoneSE、iPhone7、iPhone7 Plus、iPhone8、iPhone8 Plus、iPhoneX
iPad5、iPad Air、iPad Air2、iPad Pro、iPad Pro2
iPad mini with Retina display、iPad mini3、iPad mini4、iPod Touch6
iPhone XR、iPhone XS
注意:
所有指令集原则上都是向下兼容的
动态库共享缓存一个非常明显的好处是节省内存
现在的ida、Hopper反编译工具都可以识别动态库共享缓存
在Mac\iOS中,是使用了/usr/lib/dyld程序来加载动态库,dyld源码地址。dyld全称为dynamic link editor,动态链接编辑器。
由于系统动态库缓存文件比较大,我们通常只需要分析其中的某个系统库(例如UIKit库),我们可以将这个系统动态库缓存文件拆分成一个个的系统库Mach-O文件。具体做法如下:
可找到dyld源码中的launch-cache/dsc_extractor.cpp
将#if 0前面的代码删除(包括#if 0),把最后一行的#endif也删掉
编译dsc_extractor.cpp
clang++ -o dsc_extractor dsc_extractor.cpp
使用dsc_extractor
./dsc_extractor 动态库共享缓存文件的路径 用于存放抽取结果的文件夹
什么是Mach-O
Mach-O是Mach object的缩写,是Mac\iOS上用于存储程序、库的标准格式
属于Mach-O格式的文件类型有如下类型,可以在xnu源码
中,查看到Mach-O格式的详细定义。具体是在EXTERNAL_HEADERS/mach-o/loader.h文件中。
#define MH_OBJECT 0x1 /* relocatable object file */
#define MH_EXECUTE 0x2 /* demand paged executable file */
#define MH_FVMLIB 0x3 /* fixed VM shared library file */
#define MH_CORE 0x4 /* core file */
#define MH_PRELOAD 0x5 /* preloaded executable file */
#define MH_DYLIB 0x6 /* dynamically bound shared library */
#define MH_DYLINKER 0x7 /* dynamic link editor */
#define MH_BUNDLE 0x8 /* dynamically bound bundle file */
#define MH_DYLIB_STUB 0x9 /* shared library stub for static */
/* linking only, no section contents */
#define MH_DSYM 0xa /* companion file with only debug */
/* sections */
#define MH_KEXT_BUNDLE 0xb /* x86_64 kexts */
常见的Mach-O文件
MH_OBJECT
目标文件(.o)
静态库文件(.a),静态库其实就是N个.o合并在一起
MH_EXECUTE:可执行文件
.app/News
MH_DYLIB:动态库文件
.dylib
.framework/xx
MH_DYLINKER:动态链接编辑器
/usr/lib/dyld
MH_DSYM:存储着二进制文件符号信息的文件
.dSYM/Contents/Resources/DWARF/xx(常用于分析APP的崩溃信息)
我们可以在Xcode中查看target的Mach-O文件类型。
Build Settings->Linking->Mach-O Type
Mach-O文件的结构
Mach-O基本结构.png
Mach-O文件的结构如上图,可以参考官方描述。一个Mach-O文件包含3个主要区域。
Header
文件类型、目标架构类型等
Load commands
描述文件在虚拟内存中的逻辑结构、布局
Raw segment data
在Load commands中定义的Segment的原始数据
我们可以使用工具查看Mach-O文件的结构。
命令行工具file
file:查看Mach-O的文件类型
file 文件路径
命令行工具otool
查看Mach-O特定部分和段的内容
命令行工具lipo
常用于多架构Mach-O文件的处理
查看架构信息:lipo -info 文件路径
导出某种特定架构:lipo 文件路径 -thin 架构类型 -output 输出文件路径
合并多种架构:lipo 文件路径1 文件路径2 -output 输出文件路径
GUI工具
MachOView
Universal Binary(通用二进制文件)
同时适用于多种架构的二进制文件
包含了多种不同架构的独立的二进制文件
因为需要储存多种架构的代码,通用二进制文件通常比单一平台二进制的程序要大
由于两种架构有共同的一些资源,所以并不会达到单一版本的两倍之多
由于执行过程中,只调用一部分代码,运行起来也不需要额外的内存
因为文件比原来的要大,也被称为“胖二进制文件”(Fat Binary)
dyld和Mach-O
dyld用于加载以下类型的Mach-O文件
MH_EXECUTE
MH_DYLIB
MH_BUNDLE
APP的可执行文件、动态库都是由dyld负责加载的
IOS安全、逆向、反编译5-Mach-O相关推荐
- 2020年 IOS 逆向 反编译 注入修改游戏或APP的调用参数新手系列教程——使用theos tweak 注入hook修改游戏执行代码上传动态头像
2020年 IOS 逆向 反编译 注入修改游戏或APP的调用参数新手系列教程--使用theos tweak 注入hook修改游戏执行代码上传动态头像 开篇 需求&最终效果 环境要求与即将使用的 ...
- NP管理器 NPManager v3.0.49 安卓APK逆向反编译工具
NP管理器 NPManager v3.0.49 安卓APK逆向反编译工具 NP管理器 NPManager 安卓反编译工具,NP管理器是一款强大的安卓反编译或反汇编工具,虽然这个NPManager反编译 ...
- vue打包代码反编译_Android逆向反编译代码注入APK过程思路分析
一.名称解释 逆向 - 是一种产品设计技术再现过程,从可运行的程序系统出发,运用解 密.反汇编.系统分析等多种计算机技术,对软件的结构.流程.算法. 代码等进行逆向拆解和分析,推导出软件产品的源代码. ...
- android将彩图转为黑白_Android逆向反编译代码注入APK过程思路分析
一.名称解释 逆向 - 是一种产品设计技术再现过程,从可运行的程序系统出发,运用解 密.反汇编.系统分析等多种计算机技术,对软件的结构.流程.算法. 代码等进行逆向拆解和分析,推导出软件产品的源代码. ...
- C++程序正向编译逆向反编译(一)
1.需求 逆向工程师必须先是一个正向开发工程师,如果没有C++/MFC的开发经验,就不会懂得如何逆向分析C++/MFC的程序,本文完成一个helloworld的C++正逆向过程. 2.C++程序源码 ...
- 逆向反编译APK失败总结
最近接到项目新需求,需要逆向APK,由于第一次逆向先做个笔记记录一下踩过的坑 百度了一下逆向所需工具于是下载了Androidkiller apktool等工具...本次测试采用微信apk Androi ...
- Android逆向反编译之工具介绍
傻瓜式操作图形化工具 Smali2JavaUI smali2java是一个将smali代码反编译成java代码的工具.什么是smali?smali是将Android字节码用可阅读的字符串形式表现出来的 ...
- 反编译工具(2)——推荐.Net、C# 逆向反编译四大工具利器
在项目开发过程中,估计也有人和我遇到过同样的经历:运行环境出现了重大Bug亟需解决.或者由于电脑挂了.旧代码覆盖新代码,而在这种情况下,我们不能直接在当前的代码中修改这个Bug然后发布,这会导致更严重 ...
- iOS - 用Hopper反编译 Nike+ 二进制文件
用Hopper反编译iOS App二进制文件,IPA里的二进制文件经过Hopper反编译后,能可视化文件的结构,存储的敏感信息如果以字符串常量写在程序中则会暴露无疑. 从 iTunes 的App St ...
- 使用天乐软件加密狗(JDProtect)保护您的软件,防止程序被跟踪/逆向/反编译/破解
作者:庄晓立(liigo) 日期:2011-4-8 原创链接:http://blog.csdn.net/liigo/archive/2011/04/08/6310677.aspx 转换请注明出处:ht ...
最新文章
- 破解中国电信华为无线猫路由(HG522-C)自己主动拨号+不限电脑数+iTV
- ajax 省市级联项目中的实现
- 算法提高课-搜索-DFS之搜索顺序-AcWing 1116. 马走日:dfs
- SAP UI5 OData框架里硬编码的80是怎么来的
- Codeforces Round #655 (Div. 2) B. Omkar and Last Class of Math 数学
- 域组策略--+域控中组策略基本设置
- 自学c语言中相关知识,设计出医院住院管理系统.要求如下所述:,C语言课程设计题Z目.doc...
- P3399 丝绸之路(线性二维dp)
- html 表格中单选框触发事件_HTML基础知识(网站同步更新)
- SQL语句基本增删改查操作总结
- B站【千锋】Linux云计算基础视频教程_650集完全入门 课堂笔记
- 如何用英文向论文作者索要源代码--邮件模板
- Jmeter使用csv文件读取测试数据
- 数据预测模型_如何根据已有数据得出预测模型?线性回归公式来帮你!
- 浅析Relaxed Ordering对PCIe系统稳定性的影响
- TensorFlow学习【1】--TensorFlow下载安装
- Vue源码阅读(28):mergeOptions() 方法源码解析
- jeecgboot 查询_124.JSuperQuery高级查询组件 - JeecgBoot 开发文档
- 当今程序员很厉害?不!那是你不了解上古时期的那些神级操作
- java的web项目分工_JavaWeb中Servlet和JSP的分工案例
热门文章
- 美国三州对亚马逊购物开征销售税
- [附源码]计算机毕业设计springboot葡萄酒销售管理系统论文
- 2008年 斯坦福大学的计算机科学家,2008年,斯坦福大学的计算机科学家设计出了第一个专家系统:1982年,加州理工学院物理学家提出了新的神经网络模型;19_题王网...
- TF之AE:AE实现TF自带数据集数字真实值对比AE先encoder后decoder预测数字的精确对比
- https://www.cnblogs.com/xinxin1994/p/5257472.html oracle 创建用户
- EasyExcel基于一个Sheet模板导出多个Sheet
- EasyExcel基本使用
- PhotoShop 之路径和选区的转换
- Linux系统下,对两幅bmp图像进行左右拼接,合成一个bmp图
- MySQL mysqlbackup backup databse on win2k12r2