android r 编译找不到头文件_「投稿」iOS逆向——砸壳与反编译

作者:疯狂的蛋神

近来对iOS逆向十分感兴趣,就在业余时间里自己在上网找了各种资料学习,发现许多资料对于一些细节描述的不够详细,所以也踩了很多坑,我也将自己踩的一些坑总结出来,希望对大家有所帮助。

注:逆向是为了学术学习的目的而去探索,不为了非法盈利或其他不正当行为而进行的。本文如有侵犯隐私或其他请联系我,我将在第一时间整改或删除。

一、前期准备

1、Mac Book Pro(笔者做iOS开发,暂时没有研究Windows环境下的一些工具或者配置,或许有些许不同)。

2、一部越狱设备(没有越狱设备的,可以下载爱思助手等工具进行一键越狱,在一键越狱那边有对应的版本号,这里就不对越狱过多描述。这里我准备的是一部8.3版本的iPhone 5s)

3d3e4c67902bbc7ad3393408d746c898.png

爱思助手

3、dumpdecrypted(砸壳工具)

4、pp助手(用于下载准备砸壳的App应用)

5、iFunBox(用于将砸壳完成后的文件导出)

6、iTools Pro(用于导入编译后的dumpdecrypted.dylib文件,以及对照查看文件目录)

7、Terminal(终端,我们会大量的运用到这个工具)

8、class-dump(砸壳工具)

二、分析目标

1、下载App应用

使用pp助手下载我们准备砸壳的App应用(这里我用的是微信做示范)。

d05a5e5d9a830c95ff47bce999a7aea8.png

目标软件——微信

2、手机OpenSSH连接

把手机与Mac通过USB连接,保证手机与Mac处在同一WiFi环境下,为的是能够连接上手机。

①点击手机里的设置->Wi-Fi->已连接上的WiFi最右侧的感叹号->BootP或

②点击手机里的设置->Wi-Fi->已连接上的WiFi最右侧的感叹号->IPV4地址选择BootP,选择右上角存储。

这时我们的设备的IP地址已固定,这么做是为了防止动态IP的情况下IP地址被占用或地址更改。

3、打开终端

输入ssh 以及我们上一步展示的IP地址。

例如:ssh root@192.168.1.1

400678d92868d70a1c0d12014076de9c.png

这是我们需要输入OpenSSH的连接密码,连接密码的初始值为alpine。

712418319d6959defc96fab2a9989798.png

到这里我们成功连接上手机了。

4、进入我们要砸壳的对应目录下

首先我们将手机中的所有进程杀死,回到桌面,然后点开我们要砸壳的App应用,让应用保持在前台。

然后在终端输入ps -e,我们会发现一个很是奇怪的进程。

5a3818c48f7210dc3355d80c1eb83083.png

微信

再打开iTools Pro根据圈出的对应目录进行查看,我们会发现这个目录就是微信所在的目录,如果找不到的同学可以试试在不打开微信和打开微信后通过ps -e命令输出的结果不同点在哪儿,就能找到了。

iTools Pro下微信完整路径

在WeChat.app文件夹中包含了大量的素材文件,配置文件以及WeChat项目文件,这时候我们先看一下这个项目文件是否加壳,与不加壳有什么区别。

此时我们将WeChat.app导出至Mac中,右键选择WeChat,选择显示包内容,新建一个终端窗口,cd到包内容所在的路径中。

c4460e8acea23562168363f429a4ff91.png
7c08a85faef5b3a0f8db35ccbc6eb996.png

在终端输入:otool -l WeChat | grep crypt,我们会看到一个重要的信息,cryptid 1,这表明这个项目文件还未没砸壳,0则表示已经完成砸壳。

4f0c1dcc3929a9a2be866629575766bf.png

目标文件分析大致到这儿已经满足我们需要的,接下来开始正式进入砸壳。

三、砸壳

1、下载并解压dumpdecrypted.zip文件(觉得Github慢的同学可以在上文中找到对应的下载地址)。

3526d21395cc7d1686db30186e4cdf31.png

我们可以看到里面包含的文件很简单,就是三个文件,分别是一个.c文件,一个是Make编译文件,一个是README说明文件。

我们打开一个新的终端窗口,并cd到Makefile所在的路径,输入make。

d199124678c222d7f8bd9b6e023a9596.png

编译dumpdecrypted.dylib库

f50187fd81c1bbb49063ad9aa94a42f6.png

编译完成

编译完成后会得到dumpdecrypted.dylib文件,然后我们要对这个文件进行一次签名,如果不对该文件进行签名, 后续砸壳的操作会失败。

在终端输入security find-identity -v -p codesigning,会打印出mac上面已经安装的证书,这里我用自己的个人账号进行测试签名。

da3363dafcc53828c4555b302e130d49.png

输入--force --verify --verbose --sign "iPhone Developer: XXXXX (XXXXX)" dumpdecrypted.dylib进行签名。

ae1efe7834fdfec36f78a5e724c6d1c1.png

签名成功

这里已经完成了对dumpdecrypted.dylib文件的签名,如果有出现以下提示,则是因为在钥匙串中存在无效或者大量重复的证书导致,需要在钥匙串中删除无效的证书。

760c9461ec234fd8318d22ad629f475b.png

存在重复证书

2、找到WeChat的目录

a6ef1d238e7649b4b131309f5d57faa0.png

WeChat路径及ID编号

从上图中我们可以看到微信在运行是的路径以及ID编号,在终端中我们输入cycript -p XXXX就可以勾住进程,通过OC语法查找到文件目录。(下图我重启了机子。。。进程编号就改变了,别在意 - -)。

1191b5e75f84f9d97291be5cc7fccab0.png

成功勾住进程

如果出现输入cycript -p XXXX后提示-sh: cycript: command not found,则是因为设备中没有安装Cycript插件,打开Cydia,搜索Cycript并安装重启后即可。

aa93e50ce38f84f095fd09e57c7550af.png

Cycript插件

勾住进程后,我们输入[[NSFileManager defaultManager] URLsForDirectory:NSDocumentDirectory inDomans:NSUserDomainMask][0]后,会打印出WeChat的Document目录所在路径。

cae98fcb7451fef662eab9b8bdb56ecd.png

打印路径

根据这个路径,我们打开iFunBox工具,按着这个路径将我们签名后的dumpdecrypted.dylib文件复制进去。

3b44c2c19105b718ec65d46de2a8f68c.png

选择Copy From Mac,将文件导入

按control+d退出勾子,cd到Document目录中,再输入DYLD_INSERT_LIBRARIES=dumpdecrypted.dylib /WeChat所在的WeChat.app路径

cfd12e81dfd4bd6c6b576d032b01159b.png

砸壳

输入后会展现以下内容,表示砸壳成功了,成功后会生成WeChat.decrypted文件,这就是我们下一步要反编译的文件了。

43bfda0617d2b8715042148fdb7fc36d.png

砸壳成功

通过ls指令,我们可以看见WeChat.decrypted文件就存放在Documents,我们通过iFunBox可以看到文件,并导出到Mac中

889fb231da9ee040755378f198f7a1f0.png

WeChat.decrypted文件

71b9b435770ba0ef073f5b33105c8a41.png

导出文件到本地

在本地把WeChat.decrypted文件的后缀名去掉,再用otool -l WeChat | grep crypt指令查看。

3deafdfa6be15c053ee3b4e5aeb87c1e.png

砸壳成功

明显的看到这里显示的是cryptid 0,也就是脱壳了。这时再使用class-dump -H WeChat指令将目标文件反编译出来。我们会看到反编译出来很多很多的头文件。我们整理到一个文件夹里。

a6f849df881de4dc15a1e17e0a647602.png

反编译成功

到这里我们的砸壳与反编译已经完成。接下去就可以根据得到的头文件进行分析以及Hook等等。

后续会继续对逆向这个方向进行深入的研究,欢迎各位大佬指教,文中有许多不足的地方多多包涵。

欢迎各位大佬给予批评意见,让我们一起学习进步。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/567529.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

python-类思想-实现简单增删查改

class Person:def __init__(self,name, phone):self.UserInfo {name: name,phone: phone}class Opt:def __init__(self):self.person []def add_person(self, user_info):print(增加)self.person.append(user_info)def delete_person(self):print(删除)self.person.pop()def …

vb microsoft.xmlhttp 获取所有超链接_编写我的第一个VB程序

若不是因为新冠肺炎疫情影响,下面的内容应该是在学校的课堂上给学生们讲解的,如今采用这种方法,也是迫不得已。软件的使用在中学信息学科课堂中,往往普遍存在于小学和初中课堂,而在高中课堂上演示软件操作,…

C++ 偏微分数值计算库_Windows下RTCGAToolbox库下载TCPA数据(RPPA)学习笔记

1. RTCGAToolbox库加载library(RTCGAToolbox)2. 下载TCPA数据2.1 下载代码# Get the last run dates lastRunDate <- getFirehoseRunningDates()[1]# get RPPA data and clinical data for LGG lgg.data <- getFirehoseData(dataset "LGG",gistic2_Date getF…

MySQL安装之没有配置向导

解决方案&#xff1a; <1>安装MySQL服务 首先我们先进入mysql的安装目录下的bin目录 之后打开DOS命令窗口&#xff0c;进入该目录下&#xff08;一定要进入该目录&#xff0c;否则操作错误&#xff09;&#xff0c;然后执行mysqld --install命令&#xff0c;如下&…

unet图像分割_UNet++解读 + 它是如何对UNet改进 + 作者的研究态度和方式

UNet论文: 地址UNet论文翻译:地址UNet源代码: 地址UNet作者在知乎上进行了解读,里面还有视频的讲解,深入人心.里面有一句话令我印象深刻,我总结下: 很多论文给出了他们建议的网络结构&#xff0c;其中包括非常多的细节&#xff0c;比如用什么卷积&#xff0c;用几层&#xff0c…

python中0、1、True、False、if条件

总结&#xff1a; 无论是python还是C&#xff0c;true1&#xff0c;false0 非零就是true&#xff0c;此说法只应用在判断条件中 1、python中0、1、True、False >>> print(True 1) >>> print(True 2) >>> print(False 0) >>> print(…

labview my_fpga开发套件下载_LabVIEW面向对象的ActorFramework(1)

本系列文章主要阐述以下几个问题&#xff1a;&#xff08;1&#xff09;什么是面向对象编程&#xff1f;&#xff08;2&#xff09;为什么要学习面向编程&#xff1f;&#xff08;3&#xff09;LabVIEW面向编程学习为什么有点难&#xff1f;&#xff08;4&#xff09;LabVIEW面…

Python-类与文件读取结合

目录 作业1&#xff1a; 知识点1&#xff1a;eval使用 知识点1&#xff1a;类对象数组定义 知识点2&#xff1a;文件读取 知识点3&#xff1a;内容解包 知识点4&#xff1a;列表排序 作业2&#xff1a; 知识点1&#xff1a;类继承后 初始化管理 知识点2&#xff1a;文件…

乌龟量化估值怎么看_推荐几个查询指数估值的网址

首先说一下&#xff0c;因为每一家网站的数据来源不同&#xff0c;因此在不同的网站上&#xff0c;相同指数的估值数据未必相同。但这不重要&#xff0c;只要大方向没错&#xff0c;对指数所处的估值区域有一个大致的概念&#xff0c;保持“模糊的正确”即可。以下推荐几个可以…

机器学习-01regression

主要内容&#xff1a; 1.回归模型的出现 2.回归模型的选择--使得损失最小 3.损失最小时&#xff0c;参数求值 梯度下降法 4.损失不理想&#xff0c;重新调整模型 5.添加正则表达式&#xff0c;即学习率 import numpy as np import matplotlib.pyplot as plt x_data [338.…

unity 草 可以一棵棵种吗?_这种野草人称“瓜子金”,1斤能卖50多,拔1棵少棵很珍贵...

欢迎来到“农民爱花草”&#xff0c;这里每天都会分享一些有关花草绿植的小知识&#xff0c;喜欢的朋友请“关注”今日导读&#xff1a;这种野草人称“瓜子金”&#xff0c;1斤能卖50多&#xff0c;拔1棵少棵很珍贵在我们广大的农村地区生活着很多的植物&#xff0c;有很多的植…

安装IntelliJ IDEA 2019.2激活

所有教程就是下载完成后&#xff0c;配置 我下载完jetbrains-agent-latest.rar将后缀名改为jar。添加----失败 百度了很多 都没有 最后把jetbrains-agent-latest.rar进行解压&#xff0c;将解压内容复制到IntelliJ中。再进行添加即可。 ps:刚开始安装完成后安装路径下没有im…

pytorch tensor查找0_Pytorch简单教程

2019 年&#xff0c;ML 框架之争只剩两个实力玩家&#xff1a;PyTorch 和 TensorFlow。研究者大批涌向 PyTorch&#xff0c;而业界的首选仍然是 TensorFlow。Pytorch和TensorFlow的区别&#xff1a;TensorFlow是基于静态计算图的&#xff0c;静态计算图是先定义后运行&#xff…

白盒测试-条件覆盖-短路陷阱

条件覆盖 ​要求设计足够多的测试用例&#xff0c;使得每一个判定的​每一个条件的每一个取值&#xff08;真或假&#xff09;至少各执行一次。 对于示例来说​&#xff0c;可以设计&#xff1a; {x4,y4,z11} 条件取值&#xff1a;TFTF {x2,y6,z9} 条件取值&#xff1a;F…

抖音2020研究报告_抖音音乐发布2020抖音音乐生态数据报告

近几年&#xff0c;随着原创音乐产业规模逐年递增及数字音乐4.0时代觉醒&#xff0c;拓宽了原创音乐创作与宣发渠道&#xff0c;真正实现了大众娱乐生活从“听音乐”到“看音乐”到“玩音乐”的多重共振。11月5日&#xff0c;抖音音乐正式发布《2020抖音音乐生态数据报告》。报…

mysql主备切换 自动_核电生产管理信息系统EAM完成首次备用环境切换演练

安全是核电事业稳步发展的基石&#xff0c;中国核电始终将安全放在第一位&#xff0c;在系统设计及日常管理中&#xff0c;注重安全备用及安全冗余的考虑。核电生产管理信息系统作为核电现场业务的主要承载工具&#xff0c;在核电日常生产运行中发挥着越来越重要的作用。近日&a…

外星人台式电脑_戴尔 XPS 和外星人大更新,一边是生产力,一边是游戏

十代酷睿的到来&#xff0c;也催促着终端厂商更迭着旗下的产品线&#xff0c;而今年特殊的情况更让不少居家办公的人意识到生产工具和生产力的可贵。在学生们即将返校&#xff0c;白领们陆续回到办公室的当口&#xff0c;戴尔对旗下产品进行了大更新&#xff0c;全新的 XPS15 和…

string 中的offset_【Java基础】String常量的长度有限制吗?

备注&#xff1a;JDK版本&#xff1a;1.8.0最近同事问了我一个问题&#xff0c;String常量有长度限制吗&#xff1f;为什么会问起这个问题呢&#xff0c;因为同事在开发中确实遇到了IDEA编译器编译过程中提示字符串常量过长的异常。异常的出现也就证明了String常量是有长度限制…

param[:]=param-lr*param.grad/batch_size的理解

lr*param.grad/batch_size 结果最终为一个标量&#xff08;具体数值&#xff09; param是一个列表 param[:]param-lr*param.grad/batch_size会把列表中的所有元素分别运算&#xff1a; param-lr*param.grad/batch_size import numpy as np wnp.random.normal(scale0.01,siz…

anaconda3安装_Anaconda3软件安装教程

01获取方式Anaconda3 下载地址链接&#xff1a;https://pan.baidu.com/s/1lJJavzMGxjFvxYNyJ_nPAQ提取码&#xff1a;dc5c安装过程中有问题可咨询微信&#xff1a;d73707919702插件详细安装步骤1.找到下载好压缩文件包单击鼠解压到Anaconda32.待到解压完成后双击打开解压后的文…