逆向学习 - class-dump

逆向常用工具------class-dump 进行逆向时,经常需要dump可执行文件的头文件,用以确定类信息和方法信息,为hook相关方法提供更加详细的数据.class-dump的主要用于检查存储在Mach O文件的Objective-C中的运行时信息,为类,类别和协议生成声明信息,与 tool -ov 命令产生的信息相同,不同的是class-dump会将这些信息Objective-C声明形式提供,更加紧凑易读. 安装 class-... 阅读详情


一、class-dump
1. class-dump是用来dump目标文件的类信息的工具。它利用Objective-C语言的runtime的特性,将存储在mach-O文件中的classes、categories和protocols信息提取出来,并生成对应的.h文件

2. git: https://github.com/nygard/class-dump

二、源码分析
1. 读取文件
1.1 CDFile
a. 读取文件,根据Magic生成CDFatFile或CDMachOFile;


1.2 CDMachFile (以X86_64格式分析)


a. 读取Mach64 Header
根据magic读取header信息,包括cpu type、file type、number of load commands、size of load commands 等;

b. CDDataCursor
负责读取数据,提供读取BigEndian和LittleEndian数据,包括int 16位、32位、64位等;

c. CDMachOFileDataCursor
继承CDDataCursor,通过设置headerOffset,数据定位到Load Commands 上;

c. Load Commands
循环加载所有Command,读取每个Command 的cmd字段,根据不同类型来生成不同的Command子类,并读取该Command下的所有信息;



d. CDLCSegment
CDLoadCommand 子类,Segment 下面包含多个Section,初始化时读取segment信息和包含所有section信息;



e. CDSection
 


2. 分析OC数据
首先判断文件是否加密,对于没有加密的文件进行分析,主要包括:
符号表、动态库符号表、协议、类、类别。

2.1 加载符号表 CDLCSymbolTable
a. 找到LC_SEGMENT_64(__DATA), 读取 vm address;
b. 创建CDMachOFileDataCursor, 以_symtabCommand.symoff (LC_SYMTAB 的Symbol Table Offset)为偏移量;
c. strtab 通过LC_SYMTAB 的String Table Offset 指向 String Table;
d. 读取符号表(Symbol Table)信息(String Table Index, Type…);
e. 读取 strtab+StringTableIndex 位置字符串;
f. 生成CDSymbol,添加到symbols中,并把前缀带有_OBJC_CLASS_$_ 的分别放到_classSymbols and _externalClassSymbols中;

2.2 加载动态库符号表
a. 创建CDMachOFileDataCursor,以_dysymtab.extreloff(LC_DYSYMTAB - ExtRef Table Offset)为偏移量;
b. 循环加载数据;

2.3 加载协议

a. 在Commands 中查找 CDSection (__DATA - __objc_protolist);
b. 创建CDMachOFileDataCursor,  以a的section为参数(section data 有offset开始,大小为size);
c. 遍历数据,通过cursor 读取地址(__DATA,__objc_protolist),传给protocolAtAddress;


d. protocolAtAddress
.  创建CDMathOFileDataCursor,设置offset;
.  offset  为:找到 Commands 里对应上面地址的section (__DATA - __data),通过section的offset + 上面地址 - addr;
. 读取__DATA,__data 里数据,生成cd_objc2_protocol;
. name 转字符串,查找section(__TEXT - __objc_classname),  通过section 的offset 从__TEXT,__objc_classname 里读取名称;
. 读取实例方法、类方法、可选实例方法、可选类方法、属性;



2.4 加载类
2.4.1 找到 Commands 里对应的section(__DATA - __objc_classlist);
2.4.2 通过section 创建CDMachOFileDataCursor,section data 从machOFile 起始地址+section.offset开始,长度为section.size;
2.4.3  读取一个int指针(__DATA,__objc_classlist - 第一个Data),传递给 loadClassAtAddress,生成 CDOCClass;


2.4.4 loadClassAtAddress
a.  创建CDMachOFileDataCursor,( 指针指向__DATA, __objc_data),读取类信息;
b.  设置cursor 地址,(指向__DATA, __objc_const ),读取类信息;
c.  通过上面读取的数据创建CDOCClass,加载方法,变量,协议,属性等;

2.5 加载类别
和2.4同理:



3. 导出头文件
3.1 willBeginVIsiting

3.2 recursivelyVisit
生成 protocol、class and category;

3.3 didEndVisiting

iOS 逆向编程(二十)class-dump 安装与使用(如何导出APP头文件流程) 2、下载后,将.dmg文件里的class-dump复制到下:(注意:从开始,/usr/bin文件已经不能写入了,管理员权限也不行,以前是放到/usr/bin文件里面,但是现在不允许写入了,所以转放到文件即可,我们平常用的等命令就在/usr/bin里面)3、测试是否安装成功,打开终端输入命令下面这样输出就是成功了,否则会报not found错误-o。 阅读详情

相关推荐

iOS逆向与安全 - 2. class-dump 获取头文件

class-dump 一款从已砸壳的可执行文件中列举出类名与公开方法的工具 开始安装 class-dump下载地址 下载完毕后 去这里看怎么进行安装 class-dump最新安装方法 安装完成后,打开终端,输入class-dump 安装成功后,如上图显示。 获取文件 终端输入 class-dump -H 砸壳后的可执行文件路劲 -o 存储文件的路径 -H : 获取...

NULLGIRL 1082

iOS逆向(四)-APP砸壳和class-dump工具的使用

class-dump可以将Mach-O文件中的Objective-C运行时的声明信息导出,即编写OC代码时的.h文件。class-dump只能导出未加密的app头文件,class-dump是对"otool -ov"信息的翻译.以一种我们熟悉的易读的方式呈现。otool工具简介otool(object file displaying tool):目标文件的展示工具。可以用来发现应用中使用到了那些系统库,调用了那些系统方法。使用了库中那些对象及属性,它是Xcode自带的常用工具。

技术超强的网络安全平台 2013

iOS逆向入门实践 — 逆向微信,伪装定位(一)

作为自己正式接触iOS逆向的第一步 希望通过这次实践对 iOS 系统以及 APP 有更深入的了解。 1. 基本知识概述 这次实践的最终目的,是要实现“自由设定微信定位”的功能,这个功能的操作流程应该是: 打开 APP,输入一对经纬度数据进入微信,APP 自动读取输入的经纬度数据,作为使用“附近的人”时的数据来源 1.1 tweak 而要实现这个功能,很显然并

六桥风月IT随笔 4383

iOS逆向 class-dump的安装和使用

一、概述class-dump是进行iOS逆向开发常用的一款工具,其主要作用是导出App的头文件内容。根据这些头文件可以大致分析出APP的结构和内容。二、下载和安装下载地址:http://stevenygard.com/projects/class-dump,如下图所示:下载class-dump-3.5后,将dmg文件里的class-dump复制到“usr/bin”下,如下图所示: 温馨提示: M

长沙火山 8320

iOS逆向实战:从环境搭建到算法定位的完整流程

逆向工程作为软件安全与漏洞分析的基础技术,通过分析二进制代码还原程序逻辑。在移动应用领域,iOS逆向常被误解为破解工具,实则是一套系统化的分析方法,涵盖环境搭建、静态分析、动态调试与算法还原等环节。掌握IPA解密、class-dump、Frida Hook等核心技能,有助于安全测试人员定位请求签名、加密参数等关键逻辑。实际应用中,从网络请求入口追踪数据流,结合AI辅助解读伪代码,可高效识别MD5、AES等常见算法。围绕可复现的练习路径,重点阐述如何从零搭建调试环境,并利用动态插桩技术验证调用链,为算法定位提

weixin_30536861的博客 374

双端原生小龟影视反编译:Android与iOS拆包还原及插件打包全链路

移动端逆向工程中,反编译是理解应用内部逻辑、进行安全评估与二次开发的基础技术。其核心原理在于将编译后的二进制包还原为可读的中间代码或高级语言形式,涉及Android的dex与smali转换、iOS的Mach-O与类信息提取。在影视类App插件化架构中,掌握双端拆包与还原能力,能够有效定位插件加载入口、分析动态加载机制,并完成插件打包与集成。本文以双端原生小龟影视反编译为例,提供一套涵盖apktool、jadx、class-dump等工具链的实操链路,帮助开发者从dex到可读源码、从ipa到类头文件,系统复现

weixin_34194829的博客 190

ios逆向学习之砸壳(dumpdecrypted)和头文件获取(class-dump)

一、前言 记录下自己学习ios逆向的过程,学习用到的书籍是<ios应用逆向与安全>。本人用的手机系统是ios9.3.5(不完美越狱,蛋疼)手机一定要越狱,越狱后的手机要装不少越狱插件,OpenSSH是一定不能少的。 二、逆向流程 首先要从AppStroe上下载目标App(抖音、微信啥的),从AppStore上下载到的软件是加密的,在运行的时候才开始解密,所以静态分析是无效的,所以...

qq_16812035的博客 994

openEuler 20.03 LTS面向RK3399移植系列(3)—openEuler 20.03 LTS面向Firefly RK3399的第一个版本(Linux kernel 4.4)

任务动机:完成openEuler面向RK3399开发板的移植。 任务描述:按照固件烧写准备,固件获取,固件打包和烧写的步骤实现openEuler面向RK3399开发板的移植,整理过程和相关命令记录到文档。 1. 制作openEuler的rootfs.img 1.1 开发环境 树莓派--openEuler系统 openEuler 20.03 LTS 的内测版本镜像,下载。 1.2 具体操作 1.2.1 ssh远程连接树莓派 确定树莓派IP ssh连接 1.2.2 制作rootfs.img

火种源码的机器人技术专栏 2365

iOS逆向开发- class-dump使用中出现的一些问题

​最近正在尝试逆向App的学习和研究,其中不乏出现一些问题,在此主要是分享一些学习中遇到的问题和解决方法以及部分原理 1.class-dump无法拖入/usr/bin目录(这个问题是大多数人都迈不过去的坎) ​原因:Mac当前系统为Mac OS X 10.11 El Capitan,对于Mac OS X 10.11 El Capitan用户,由于系统启用了SIP(System Integrit...

Yashon 3042

Claude Code + 自定义模型体验

AI 编程工具的发展突飞猛进:Cursor 横空出世,推出了“Agent 模式”;新竞争者如 Windsurf 也纷纷加入战局。几乎所有产品都开始转向“代理式(agentic)”开发模式——不再依赖单次 LLM 响应进行补全,而是让大模型在一个循环中调用各种工具,来完成更复杂的任务:分析代码库上下文、读取网页与文档、编译程序、运行测试、修复失败构建或测试、不断迭代等。

西京刀客 5790

在统信UOS Server 20上踩坑记:手把手教你搞定openGauss 5.0.0企业版安装(附常见报错解决方案)

本文详细记录了在统信UOS Server 20上安装openGauss 5.0企业版的实战经验,包括环境准备、依赖库问题、目录权限、内存参数调优等常见问题的解决方案。通过伪装系统标识、建立软链接、调整内存参数等方法,成功克服国产操作系统与企业级数据库的兼容性挑战,为开发者提供了一份深度排雷指南。

weixin_28698059的博客 261

ios逆向学习过程-环境搭建

ios逆向基础-环境搭建一、class-dump二、Theos1.Install the following prerequisites:2.Set up the THEOS environment variable:3.Clone Theos to your device:4.Get an iOS SDK:三、Reveal 一、class-dump http://stevenygard.com/...

ruozhixiaohaia的博客 779

petalinux i2c的配置

1.硬件平台配置 1.内核配置 cd petalinux-config -c kernel -> Device Drivers -> I2C support -> i2C Hardware Bus support -> Xilinx I2C Controller Pressing 启用CONFIG_I2C_XILINX=y 2.修改用户设备树 cd cd project-spec/meta-user/recipes-bsp/device-tree/files/ i2c2:

u013403954的博客 4312

MonkeyDev中的class-dump技术:快速分析iOS应用结构的终极指南

MonkeyDev是一款强大的iOS逆向工程工具,它集成了class-dump技术,让开发者能够在不越狱的情况下快速分析iOS应用的结构和类信息。这项技术对于iOS应用开发、安全研究和逆向分析都具有重要意义。 ## 🔍 什么是class-dump技术? class-dump是iOS逆向工程中的核心技术之一,它能够从已编译的iOS应用程序中提取出Objective-C类的接口信息。通过Monk

gitblog_00474的博客 404

跟着Cell学单细胞转录组分析(五):单细胞转录组marker基因鉴定及细胞群注释

书接上回(跟着Cell学单细胞转录组分析(四):单细胞转录组测序UMAP降维聚类)。完成数据降维和细胞聚类后,最主要的环节和工作就是确定各个细胞群,明确是什么类型的细胞,正群的细胞定群很关键,涉及到整个研究,所以这一步宁愿多费时间,也不要出错。当然,这也不是一蹴而就的,需要反复的确认。 要确定各个群是什么细胞,首先需要了解细胞群的marker基因,因为不同类型的细胞突出 表达的基因也是不同的。这里使用FindAllMarkers鉴定各个细胞群的高表达基因。 DefaultAssay(scedata)

qq_42090739的博客 1万+

一张图讲透银行个人外汇业务逻辑和实操

个人外汇业务主要分为结售汇和外币兑换两类,前者满足日常跨境需求,后者因投机属性多数银行已暂停。业务核心是利用汇率波动实现货币兑换,满足支付或投资需求。交易涉及客户分类、主流币种、多种渠道和汇率计算规则,需区分直接/间接标价法判断汇率走势。银行通过"货币兑换"科目核算损益,采用期末折算确认盈亏。监管要求包括5万美元年度额度、合法渠道、真实性原则及大额申报等。随着跨境金融数字化发展,掌握基础逻辑和合规要求是安全参与外汇业务的关键。

银行信息系统应用架构详解 288

MonkeyDev终极指南:如何零基础掌握非越狱iOS应用逆向开发神器

MonkeyDev是一款功能强大的非越狱iOS应用逆向开发工具,它是iOSOpenDev的升级版,为开发者提供了便捷的插件开发和应用调试解决方案。无论是零基础的新手还是有经验的开发者,都能通过MonkeyDev轻松入门iOS应用逆向开发。 ## 为什么选择MonkeyDev进行非越狱开发? MonkeyDev之所以成为非越狱iOS应用逆向开发的神器,主要得益于其以下核心优势: ### 简单易

gitblog_00497的博客 451

量化交易 米筐 多因子合成(回测中使用)

多因子合成 1、因子合成 将一些相关(高、低)的因子合成一个因子 方法: 使用PCA方式(使用于较强相关性) 2、核心代码 将因子 inc_revenue_ttm 和 operating_revenue_growth_ratio_ttm 合成为一个因子 inc_operating from sklearn.decomposition import PCA pca = PCA(n_components=1) # 因子合并 fund['inc_operating'] = pca.fit_transform(fu

廷益_飞鸟的博客 1062

零基础微信逆向工程实战:3步搞定微信ipa获取、砸壳与头文件导出

微信逆向工程听起来像是"黑客专属技能",其实只要路子走对,零基础也能在两三个小时内跑通全流程。本文依托开源教程项目 **iWeChat**(一个以微信为例、从 0 开始解剖第三方 App 的仓库),手把手带你完成三件事:从越狱设备导出微信 ipa、用 Clutch 给 ipa 砸壳、用 class-dump 导出可读的头文件,最后再送你一份"拿到头文件之后怎么继续玩"的进阶路线图。读完这篇文章,你

gitblog_01173的博客 309

SAP GUI 经典事务在 Fiori Launchpad 中的穿越之道:原理、配置与实践指南

在许多企业的 S/4HANA 或 ECC 系统里,经典 SAP GUI 事务依旧承载着关键业务。如何把这些老将自然地嵌入到 Fiori Launchpad,让用户在统一入口里无缝切换新旧 UI,是项目中经常遇到的主题。本文结合社区博文、官方文档与实际项目经验,系统梳理这一过程的技术原理、配置步骤、性能优化以及常见坑点,并给出贴近中国读者的案例解析与改进建议。阅读完毕,你将不仅知道怎么做,还会理解。

2007 年 ~ 2025 年,深耕 SAP 技术 18 年 623

复分析 阿尔福斯(Ahlfors) 第三版答案 英文

答案分为十章,有部分习题没有答案,全英文复分析阿尔福斯(Ahlfors) 第三版答案

iOS逆向工程深度指南:从理论到实战的完整学习路径

iOS应用逆向工程是移动安全领域的核心技术,也是深入理解iOS系统架构的必经之路。作为世界上第一本详细阐述iOS逆向工程技能的书籍,《iOS App Reverse Engineering》为安全研究人员、高级开发者和技术爱好者提供了系统性的学习资源。本文将为您梳理如何高效掌握这一复杂技能,从基础概念到实战应用,构建完整的知识体系。 ## 为什么选择iOS逆向工程作为技术进阶方向? 在移动应用

gitblog_00154的博客 996

廖雪峰Python教程[完整版]

廖雪峰的python教程整理的,已经排好版了,而且还是完整的,适合小白

获取SpringBoard 头文件

1. 下载 class-dump 2. 将下载的文件copy到 /usr/bin下 3.执行以下操作   class-dump -H /Developer/Platforms/iPhoneSimulator.platform/Developer/SDKs/iPhoneSimulator4.2.sdk/System/Library/CoreServices/SpringBoard.app/S...

Java 小试 569

Statistics and Machine Learning Toolbox

Statistics and Machine Learning Toolbox(带书签),MATLAB统计学习工具

SIMATIC S7-1200, S7-1500 PID 控制[手册]

SIMATIC S7-1200, S7-1500 PID 控制[手册]

iOSAppReverseEngineering:世界首本iOS逆向工程权威指南

🚀 你是否曾经对iOS应用内部工作原理充满好奇?想要深入了解那些优秀应用的架构设计?iOSAppReverseEngineering正是你需要的终极指南!这本世界首本iOS逆向工程权威指南为你揭开iOS应用的神秘面纱,让你从开发者视角转变为架构师思维。 ## 📖 什么是iOSAppReverseEngineering? **iOSAppReverseEngineering** 是一本全面讲

gitblog_00065的博客 374

BaiduNetdiskPlugin-macOS 逆向实践:百度网盘 macOS 客户端 SVIP 功能补丁的原理、安装与卸载全指南

本文以开源仓库 BaiduNetdiskPlugin-macOS 的 [README.md](https://link.gitcode.com/i/a77db19c37dea71d4999b0e13b6a55ac) 为主体,结合仓库内 Hook 源码与安装脚本,系统讲解这款 macOS 逆向补丁的实现原理、功能边界与完整安装/卸载流程。读完本文,你将理解 Method Swizzling 动态库注

gitblog_00871的博客 194

从Mach-O到Tweak:iOS逆向完整分析流程与动态调试实战

在iOS逆向分析中,一切动态调试与Hook实践都建立在理解可执行文件底层结构之上。Mach-O作为iOS应用的核心二进制格式,通过Header、Load Commands与Data段描述了程序加载方式、符号表与依赖库边界;理解它的符号表和字符串引用,是静态分析的第一步。借助class-dump还原Objective-C接口骨架,再用Hopper从汇编与伪代码中梳理数据流向,能够在没有源码的情况下还原业务逻辑。而Theos与Logos语法让Tweak开发变得高效,配合LLDB远程调试直接验证方法参数与返回值,

weixin_31188927的博客 182
上一篇: Mach-O 学习
下一篇: 用机器学习来驱动一个iOS应用:如何开始使用Create ML和Core ML
直隶码农
博客等级 码龄19年 95粉丝 103原创
评论 1
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值