首页 > 其他分享 >class dump使用方式和原理

class dump使用方式和原理

时间:2023-12-01 14:22:23浏览次数:33  
标签:混淆 dump 文件 ViewController app 原理 class

 class dump使用方式和原理

一、安装

官网下载安装包完成后,将class-dump复制到usr/bin文件夹下

如果这个时候没有发现usr文件夹 说明其隐藏起来了 去查询mac系统下怎么显示隐藏文件

发现mac os 10.11不让复制 没有这个权限

解决办法如下:

重启电脑,按住 command + R,出现 OS X Utilities 界面后,在 Utilities 菜单中选择 Terminal ,运行 “csrutil disable; reboot” ,电脑自动重启。(开启 sip “csrutil enanbel;reboot”)

重新启动后,usr/bin下可以复制进class-dump文件了

接下来 给class-dump赋权限

sudo chmod 777 /usr/bin/class-dump

然后要求输入密码

输入class-dump 出现如下图

 

 

 

 

 

则表示安装成功了 在任何一个目录里都可以正常使用class-dump了

 

二、使用

class-dump在dump从appstore上下载下来的app的时候,首先是需要对app进行砸壳处理的,具体的砸壳工具是ipaguard、clutch等等。

以ipaguar为例,

 使用ipaguard来对程序进行加固

代码加固是进一步保护应用的一种方式,通常通过特定平台来对应用进行加固处理。

这边以ipaguard为例,目前还在免费阶段,想薅羊毛的快快试试。

Ipa Guard是一款功能强大的ipa混淆工具,不需要ios app源码,直接对ipa文件进行混淆加密。可对IOS ipa 文件的代码,代码库,资源文件等进行混淆保护。 可以根据设置对函数名、变量名、类名等关键代码进行重命名和混淆处理,降低代码的可读性,增加ipa破解反编译难度。可以对图片,资源,配置等进行修改名称,修改md5。只要是ipa都可以,不限制OC,Swift,Flutter,React Native,H5类app。

 

 

 

所以就要使用到混淆器,混淆器是把里面的代码变量等信息进行重命名,这样可读性会变得非常差,接着,

到这里,我们完成了对代码的混淆,但是还没有进行加固,防止反编译,所以,请往下看

然后导入自己的包就可以了,这里是流水式的走下来,所以只需要导入和导出就可以了,

 

 

 

添加单个文件,选择好刚刚混淆后的包,然后你做的事情就是等,等待上传完--加固完--下载完--已完成,当到已完成的时候,说明这里已经可以导出了,导出需要前面提到的自己创建的签名,这里可是会用到的,如果不用,则包安装包可能会出现问题

选择导出签名包,选择签名文件,输入密码,然后点击开始导出

 

 

 

 

导出的包是经过混淆,经过加固比较安全的包了

 

但可以对自己编写的app进行dump,同时也可以dump私有框架的头文件

1:对自己写的app进行dump

进入终端 到桌面

class-dump -H test1.app -o testgod

将test1.app的可执行文件 进行dump到桌面testgod文件夹里(不需要事先创建)

结果在testgod里发现

这个是dump之前的工程文件

 

 

 

 

 

这个是dump出来的工程文件

 

 

 

 

 

dump的很准确

对比前后ViewController.h里的文件

这是原文件

 

 

 

 

 

这是dump后的文件

 

 

 

 

 

发现dump后的还多了几个方法

对比一下:

cxx_destruct是析构方法 在原ViewController里没有显示调用 自从使用了ARC模式之后

didReceiveMemoryWarning 在原ViewController里有实现,但是在原ViewController的头文件中没有进行过声明

buttonClick,viewDidLoad也分别在原ViewController里有实现,但是在原ViewController的头文件中没有进行过声明

这一点就充分说明class-dump的准确性,这里我提出一个疑问,既然class-dump能如此精准的提取头文件,甚至能提出.m文件里有的.h文件里没有声明过的,为什么就不能连函数体一起提取出来呢?

在研究完Mach-O文件内部揭秘中就可以回答这个问题

Mach的文件结构里的data部分,就只有类的名称和类的方法,class-dump自然是根据Mach的文件结构来分析的。设想一下,如果有类的方法的实际,那么这个Mach可执行文件得有多大。

所以class-dump只能提取函数的方法名。

2:对私有框架进行提出

 

 

 

 

 

查找资料 无果

仍然显示:

This file does not contain any Objective-C runtime information.

采用swift编写或是关键部分采用C语言编写的模块是无法dump出头文件的

据说xcode7之后ios9之后,dylib变成tdb,所有的私有函数的dump就无法使用class-dump而只能使用runtime dump了。

而关于class-dump的解析原理,以及本文中提及到的两个问题 都和Mach-o文件解析格式有关。

标签:混淆,dump,文件,ViewController,app,原理,class
From: https://www.cnblogs.com/gddg/p/17869612.html

相关文章

  • 直方图均衡化原理与实现
    一直方图均衡化的概念直方图均衡化(HistogramEqualization)是一种**增强图像对比度**(ImageContrast)的方法,其主要思想是将一副图像的**灰度直方图分布**通过**累积分布函数**变成**近似均匀分布**(直观上在某个灰阶范围内像素值保持一致),从而增强图像的对比度。为了将原图像的......
  • 添加class和方法注释头部模版
    一、类注释打开IDEA的Settings,点击Editor-->FileandCodeTemplates,点击右边File选项卡下面的Class,在其中添加图中红框内的内容:/***@authordxy*@date${YEAR}年${MONTH}月${DAY}日${TIME}*@description:TODO*/在我提供的示例模板中,说明了作者、时间和......
  • idea 查看 class文件 出现 /* compiled code */
    idea在初始化的时候会默认自带反编译插件,但是在有的同学初始化的时候没有勾选上插件,从而导致不能正常的反编译,class类提示 /*compiledcode*/。 解决方案:选择file->settings->plugins,在installed的插件中搜索JavaBytecodeDecompiler,勾选上后点击右下角的a......
  • HashMap底层原理与扩容机制
    1.7数组+链表1.8数组+(链表|红黑树)JAVA1.8之后hashmap树化规则HashMap里面定义了一个常量TREEIFY_THRESHOLD=8,当链表长度超过树化阈值8时,先尝试调用resize()方法进行扩容来减少链表长度,如果数组容量已经>=64(MIN_TREEIFY_CAPACITY),才会进行树化,Node节点转为TreeNod......
  • Unity3D 导出的apk进行混淆加固、保护与优化原理(防止反编译)
    ​ Unity3D导出的apk进行混淆加固、保护与优化原理(防止反编译)目录 前言:准备资料:正文:1:打包一个带有签名的apk2:对包进行反编译3:使用ipaguard来对程序进行加固 前言:对于辛辛苦苦完成的apk程序被人轻易的反编译了,那就得不偿失了,这篇文章就是解决Unity打包出来的包进......
  • Flutter应用程序的加固原理
    ​......
  • ssh框架原理及流程
    1.hibernate工作原理:读取并解析配置文件读取并解析映射信息,创建sessionFactory打开session创建事务transaction持久化操作提交事务关闭session关闭sessionFactory  为什么使用:对JDBC访问数据库的代码做了封装,大大简化了数据访问层繁琐的重复性代码是一个基于jdbc的主流持久性框......
  • [转]多个进程间共享动态链接库的原理
    前面我们已经说过进程间的通信有好几种方式,其实现在我们讲的这种动态链接库也是进程间的通信方式之一。不管是windows还是Linux操作系统其实所有的操作系统的内涵知识都是一样的。动态链接库是windows操作系统的基础,其中windowsAPI基本上都是以动态链接库的形式来提供的,通常来......
  • DC电源模块的基本工作原理和应用
    BOSHIDADC电源模块的基本工作原理和应用DC电源模块是一种能够将交流电转化为直流电的电子装置。它的基本工作原理是利用变压器、整流桥、电容滤波、电压稳定器等电路组成,将输入的交流电转换为稳定的直流电输出。这种直流电源模块通常可以提供不同的电压和电流输出,以满足不同的应......
  • Flutter App混淆加固、保护与优化原理
    ​ FlutterApp混淆加固、保护与优化原理引言在移动应用程序开发中,保护应用程序的代码和数据安全至关重要。本文将探讨如何对Flutter应用程序进行混淆、优化和保护,以提高应用程序的安全性和隐私。一、混淆原理混淆是一种代码保护技术,通过修改源代码或编译后的代码,使其难以......