查看私有方法

简介

Class-dump 是一款用来检测存储在 Mach-O 文件里的 Objective-C runtime 信息的命令行工具。他可以检测出 class,category,protocol 的声明。和 ‘otool -ov‘
产生的信息类似,但是 Class-dump 产生的是 Objective-C 语法格式的声明,所以它的可读性更高。

为什么使用 Class-dump

它一个强大的工具。有了它,你可以查看一些闭源的应用,framework 及 bundle。查看不同版本之间接口的变化。体验私有库,或者查看 AppKit 有哪些私有的 API。学习 Mail.app 使用了哪些扩展的私有API。

下载

安装

下载完成后把 class-dump-3.5.dmg 内的 class-dump 拷贝到 /usr/bin/ 路径下,并且赋予执行权限。

sudo cp class-dump /usr/bin

sudo chmod 777 /usr/bin/class-dump

使用

class-dump [options]

where options are: -a 显示实例变量的偏移量。 -A 显示实现的地址。 --arch 从一个通用架构类型的二进制文件(ppc,ppc64,i386,x86_64)中选择一个指定的架构类型。 -C 仅显示匹配正则表达式的类。 -f 在方法命中查找字符串。 -H 在当前目录生成头文件,或者使用 -o 参数指定生成头文件的目录。
-I 对 类,categories,procotols 按照继承关系排序(会覆盖 -s 参数) -o

指定输出目录,配合 -H 使用。 -r 递归扩展 frameworks,并且修复 VM 共享库。
-s 把类和 categories 按名称排序。 -S 把方法按名称排序 -t 限制输出头,用于测试 --list-arches 列出文件的架构类型, 然后退出 --sdk-ios 指定 iOS SDK 版本 (将会查找 /Developer/Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS.sdk --sdk-mac 指定 Mac OS X 版本 (将会查找 /Developer/SDKs/MacOSX.sdk --sdk-root 指定 SDK 完整根路径(或者简单使用 --sdk-ios/--sdk-mac)

实践

我们知道从 App Store 下载的 App 都是经过加密的,有一层壳,我们得先砸壳,本文不讲砸壳,本只讲 class-dump 的使用。

我随机选取了我手机里的一款 App,名字叫《早朝》,是一款简单的 RSS 阅读工具,(说实话,简单到完全没什么逆向的价值)。砸完壳之后的文件可以在 这里下载,然后我们直接对其
dump 一把。

class-dump -H iOSRSS.decrypted -o iOSRSS.h

然后我们可以看到在当前目录下生成了 iOSRSS.h 的文件夹,所有 dump 出来的头文件都在里面了。

然后我们就可以查看每个类,category,protocol 的声明了。

时间: 2024-10-05 14:19:33

查看私有方法的相关文章

oc25--私有变量私有方法

// // Person.h #import <Foundation/Foundation.h> @interface Person : NSObject { @public int _age; @protected double _height; @private NSString *_name; @package double _weight; } // 如果只有方法的实现, 没有方法的声明, 那么该方法就是私有方法 // 在OC中没有真正的私有方法, 因为OC是消息机制 //- (voi

私有方法的查找方式

59: def adjust_sequence => 60: binding.pry 61: self.class. 62: where(sortable_conditions). 63: where('sequence > ?',sequence).update_all("sequence = sequence - 1") 64: end [1] pry(#<RecommendedVideo>)> sortable_conditions => {}

iOS s私有变量 私有方法

实例变量既可以在@interface中定义 也可以在@implementation中定义 在@implementation中的成员变量默认是私有的成员变量 并且和利用@private修饰的不太一样 在@implementation中定义的成员变量在其他类中无法查看 也无法访问 在@implementation中定义的私有变量只能在本类中访问 如果只有方法的实现没有方法的声明 这个方法就是私有方法

Object-C 中私有变量和私有方法

1.在OC中有私有变量和私有方法,声明变量的时候 使用 @private 关键字 仍然可以使用指向运算符来 查看,如下: @interface Clip : NSObject { @private int _cbullet; int _times; } 在main.m 中仍可以使用p->_cbullet; 来查看,但是无法访问. 在OC中 @interface和@implementation 都可以定义实例变量. #import "Clip.h" @implementation

Python中私有方法和私有属性

1.私有方法和私有属性私有方法只能在类内部被调用,不能被对象使用私有属性只能在类内部使用,不能被对象使用 私有属性只能在类内部使用,对象不能使用,但是,我们可以通过在类内部定义公有方法对私有属性进行调用或修改,然后对象在调用这个公有方法使用.###私有属性和私有方法#########在属性名和方法名前面加上 __ class Person(object): def __init__(self): # 公有属性 self.name = "李四" #私有属性 self.__age = 18

Python面向对象 --- 新旧式类、私有方法、类属性和类方法、静态方法

一.Python面向对象中的新旧式类 1)新式类(推荐使用):在定义类时,类后边括号里要继承基类(object).在python3.x中若没有指定父类,会默认使用的是object作为基类:在python2.x中,若没指定父类,则不会以object作为基类. 2)旧式类(经典类):在定义类时,类后边括号中不用继承object类,甚至不用括号. 3)dir方法是用来查看类的内置方法. 二.私有方法和属性 1)私有属性是对象不希望公开的属性:私有方法是对象不希望公开的方法.在定义私有属性和方法时,在属

通过反射,如何操作私有成员变量(取/赋值),如何调用私有方法?

Java的反射工具很强大,有句著名的话:No reflection ,no frameworks. 工作中直到涉及到UT,才体会到它的重要性,现归纳整理一个小例子: 反射工具类: 1 import java.lang.reflect.Field; 2 import java.lang.reflect.InvocationTargetException; 3 import java.lang.reflect.Method; 4 5 public class ReflectionUtil { 6 7

四.OC基础--1.文档安装和方法重载,2.self和super&amp;static,3.继承和派生,4.实例变量修饰符 ,5.私有变量&amp;私有方法,6.description方法

四.OC基础--1.文档安装和方法重载, 1. 在线安装 xcode-> 系统偏好设置->DownLoads->Doucument->下载 2. 离线安装 百度xcode文档 3. 方法重载: 是指在一个类中定义多个同名的方法 在OC中没有重载 2.self和super&static, self和super: 1. self理解: 谁调用当前方法, self就代表谁. 比如: 在对象方法中,self代表的是对象, 因为只有对象才可以调用对象方法 在类方法中, self代表的

java反射调用私有方法和修改私有属性

//调用私有方法package com.java.test; public class PrivateMethod { private String sayHello(String name) { return "hello "+name; } } 测试: package com.java.test; import java.lang.reflect.Method; public class PrivateMethodTest { public static void main(Str