代码的编译过程

简单来说我们的oc经过编译会生成汇编语言,汇编语言经过编译最后生成机器语言,其中机器语言和汇编语言是一一对应的也就是说,我们的机器语言可以反编译生成汇编语言。

但是从上图中也看到了,我们的汇编是不能生成我们唯一的oc语言的,怎么办?其实我们可以借助工具来将我们的汇编生成oc,相当于是伪代码,这样的话我们可以大概来研究一下别人的代码,如果我们完全100%还原oc代码个人觉得也不太现实,因为苹果的加密机制我觉得做的还是很ok的。

借助Hopper Disassembler来将我们的汇编代码进行还原。

1.将我们的Mach-o文件拖拽到Hopper Disassembler中,需要等待进度条完毕。

2.展示结果如下

5.相信大家按部就班的做就可以了,一些快捷键的展示如下:

7.按照上边我给你介绍的文章,我已经成功把我这个项目的(.m)文件全部导出来了,如下图:

首先xcode报错我们不用管,但是很多人还是想说 还是看不懂,怎么还是汇编感觉,其实个人觉得完全拆成oc是不现实的,我们可以通过他的大概加上我们的猜测进行猜测。(我们之前已经找到.h文件了,再次找到了.m文件加上我们的项目经验来进行破解),比如我想查看一个对象怎么实现的

结合自己的经验进行分析。

动态库共享缓存

1.运用之前的方法,我们连接上我们的手机,查看UIKit这个库位置

但是我们找啊找 也找不到我们的UIKit这个库,那他到底去哪里了呢? 其实我们苹果从ios3.1开始就使用动态库共享缓存的机制。具体大致的意思是:他会把我们苹果工程师(我说的是苹果的,不是我们现在的普通程序员)写好的UIKit、CoreGraphics库等等集中放到手机中的一个地方,然后有dyld动态链接。那么他这样做的明显的一个好处就是:节省我们手机的内存,更大的提高开发效率。用一张图来解释就是:

那么他的动态库的缓存文件的在哪里? 他在

/System/Library/Caches/com.apple.dyld/dyld_shared_cache_armX
顺便给大家说下ios架构的问题

现在我们来找一下UIKit库所在的位置,我们找到这个

我们可以看到很大的两个包一个是64位架构的,一个是armv7s架构的,我现在xcode是12的 大家根据上图,知道为什么没有armv7架构的了吧,因为5基本没人用了,xcode也基本对他不支持了。(顺便说一句,用ifunbox将这个包导入到mac,不用直接拖那样会少很多东西,点击这个包右键->拷贝到mac) 将第一个包拖进去安装好的Hopper Disassembler,直接输入UIkit,选择framework那个

然后直接next,点击ok

接下来就是漫长的等待中,直到他下面出现完成的语句。

但是如果你是Hopper Disassembler3的话 他是解析不出来的,Hopper Disassembler4是可以的。

逆向破解思路和获取app的代码,脱壳操作(二)相关推荐

  1. 逆向破解思路和获取app的代码,脱壳操作(一)

    .我们的app首先是经过我们写代码.最后经过签名.打包最后生成.app文件,那么这个.app的文件在哪里呢,我用我自己的项目做个例子大致他的位置在这里: 他这个其实就是包含我们项目中的资源和我们写的代 ...

  2. 逆向破解思路和获取app的代码,脱壳操作(四)

    加壳 什么是加壳? 我们的ipa文件上传appstore,苹果会给我们做一个加密,其实我们运行在内存中的过程是一个加密的壳程序,当然在手机中我们会对他进行解密壳程序,来直接运行可执行的文件,当然苹果这 ...

  3. 逆向破解思路和获取app的代码,脱壳操作(三)

    动态库的加载 其实动态库是缓存到我们手机的某个地方,但是他是怎样和我们的app进行链接的呢? 其实是通过这个 来进行链接的,其中他里面有动态编辑器和动态加载器,来进行链接 运用官方工具拆除出UIKit ...

  4. 破解索尼PS4系列:用户代码执行(二)

    本文讲的是破解索尼PS4系列:用户代码执行(二), 本文会重点讲解如何在WebKit进程中进行代码执行. 代码执行 正如上一篇文章讲过的那样,ROP只是以一种聪明的方式执行内存中加载的现有代码,而RO ...

  5. 13-爬虫之js加密,解密,混淆,逆向破解思路

    url:https://www.aqistudy.cn/apinew/aqistudyapi.php 分析思路: 原图 现图 1,我们点击查询按钮后发现抓取到了2个一样的数据包,包含请求url和pos ...

  6. 安卓逆向Xposed HOOK TB直播APP的x-sign参数(二)

    最近学习安卓逆向,接触一下TB系的APP,了解大厂APP是做数据安全的,这篇文章主要介绍某宝直播APP的签名参数x-sign的HOOK过程,当然,其他的参数也是可以HOOK的.本文只用于学习交流,请勿 ...

  7. Android逆向笔记-使用Android Studio调试Smali代码(方式二)

    这里我使用Android Studio写了这样的一个程序: 这里我使用Android Studio写了这样的一个程序: 然后点下BUTTON后: 下面写下如何调试这种程序. 开发环境: win 10: ...

  8. 【Windows 逆向】OD 调试器工具 ( CE 中获取子弹动态地址前置操作 | OD 中调试指定地址的数据 )

    文章目录 一.CE 中获取子弹动态地址前置操作 二.OD 中调试子弹数据 一.CE 中获取子弹动态地址前置操作 在上一篇博客 [Windows 逆向]OD 调试器工具 ( CE 工具通过查找访问的方式 ...

  9. Redis数据结构为字典Hash 的 存储、获取、删除等的操作

    一.项目用redis-learn,文章参考 Hash底层存储数据的方式确实跟其他数据结构有点不同,其他数据结构几乎都是:Key-Value的存储,而Hash则是:Key – [Field-Value] ...

最新文章

  1. CF1148F - Foo Fighters
  2. POJ Mayor's posters——线段树+离散化
  3. PAT甲级1084 Broken Keyboard:[C++题解]字符串处理、双指针算法
  4. 数据库访问 mysql连接库--查询
  5. 什么是堆栈?内存中划分出按FIL0方式操作的特殊区域,叫做堆栈
  6. vhs预设_使用Linux将VHS数字化,创建Bash完成脚本,Ansible,家庭自动化等
  7. CarbonData:大数据融合数仓新一代引擎
  8. 如何在Linux中的virtualbox中安装Windows 10
  9. [论文翻译] Active Learning by Feature Mixing
  10. 10. Javascript DOM节点
  11. Ubuntu server配置远程VNC服务
  12. mysql超市管理系统怎么写_vb6.0+mysql编写的小型超市管理系统
  13. Win10设置内存压缩
  14. 设置在线html视频几倍数播放,HTML5倍数功能视频播放器(加速2倍,1.5倍播放)...
  15. LogAnomaly: Unsupervised Detection of Sequential and Quantitative Anomalies in Unstructured Logs
  16. 基于MES的生产车间管理信息系统
  17. PHP如何实现嵌入网页功能思路
  18. Neo4j CQL简介
  19. 内容领先地位无法撼动,腾讯音乐与环球续约将共建新厂牌
  20. 点击一次变色,再点击变回原色

热门文章

  1. 第三方网页应用对接飞书Java版
  2. 易搜题,你与学霸之间的距离只差了一个iSearch
  3. 求长方形的面积和周长(Java)
  4. 基于stm32f103的LM6029-12864液晶屏开发(代码资源地址在最后)
  5. 显卡用电测试软件,自己动手DIY!教你如何实测显卡电压
  6. 【电子学会】2020年06月图形化三级 -- 海底寻宝
  7. 十条网站盈利模式分析总结 1
  8. 交叉编译ncurses5.9
  9. STM32驱动_NOKIA5110
  10. Java设计模式--------面向对象七大设计原则