IOS逆向-静态分析
文章目录
- 背景
- 定位思路
- 定位技巧
- 定位实践
- 系统库分析
- 参考
背景
本文主要通过分享一些静态分析定位关键函数的技巧,实际上逆向分析本质上就是在寻找关键点,因此有好的关键定位方法则能事半功倍
定位思路
- 通过Log分析找到关键词
- 通过弹框分析定位关键定
定位技巧
从某个按钮触发逻辑,怎么从该链路找到具体实现的逻辑?
- 调试定位?
- 字符串定位
- 函数名类名定位
- 通过监控UI事件的响应定位关键代码 ?
- 通过监控底层API的调用定位关键代码(如网络访问接口、文件读写接口等)?
- 通过观察数据的变化来定位关键代码和地址?
定位实践
- 利用Frida-Dump-Ui,分析UI控件类型
- 利用UI控件类型分析一些函数,如初始化,显示等
- Hook之后 打印调用栈即可定位到
附录 dump-ui.js
//Credit: http://blog.itselectlab.com/?p=10485
console.warn("[*] Started: Dumping UI")
if (ObjC.available)
{var current_window = ObjC.classes.UIWindow.keyWindow()console.log(current_window.recursiveDescription().toString());
}
else
{console.log("Objective-C Runtime is not available!");
}
console.warn("[*] Completed: Dumping UI")
系统库分析
- 无符号系统库位置
/Users/xxx/Library/Developer/Xcode/iOS DeviceSupport/14.0.1 (18A393)/Symbols/System/Library/Frameworks
- 系统库头文件位置
/Applications/Xcode.app/Contents/Developer/Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS.sdk/System/Library/Frameworks/CoreML.framework/Headers
- 有符号模拟器系统库位置 (推荐✅)
/System/Volumes/Data/Applications/Xcode.app/Contents/Developer/Platforms/iPhoneOS.platform/Library/Developer/CoreSimulator/Profiles/Runtimes/iOS.simruntime/Contents/Resources/RuntimeRoot/System/Library/Frameworks/CoreML.framework/CoreML
- 背景
有时候在分析某个 crash 时,或者对某个系统功能感兴趣时,会需要分析特定版本的 iOS 系统库的实现,例如UIKit.framework Foundiation.framework。可以在iOS-System-Symbols下载对应的系统库。
真机的系统库和模拟器的有些差别。系统库在真机上经过了很多编译优化,去除了大部分私有的函数符号,交叉引用也不像模拟器版本的那样直接。真机上的所有系统 framework 都被整合成了一个大文件,名为dyld_shared_cache_arm64或者dyld_shared_cache_armv7。函数在寻址时,是基于整个dyld_shared_cache_xxx文件进行寻址的。
当你把真机连接到 Xcode,Xcode 会把真机上的系统库拷贝到~/Library/Developer/Xcode/iOS DeviceSupport,从dyld_shared_cache_xxx中切分出每个单独的 framework。但是当你反编译这些 framework 时,会发现代码里会使用很多无效地址的函数指针,难以分析。这是因为在dyld_shared_cache_xxx中,一个 framework 引用另一个 framework 中的函数时,是相当于在一个库中直接引用的,直接跳转到对应的地址,而不是再用函数符号经过 lazy binder 进行调用。当 framework 从dyld_shared_cache_xxx中切分出来后,这些函数调用的地址就会指向 framework 外,无法追踪。
所以在分析真机的系统库时,最好是配合模拟器版本的系统库辅助分析,可以看到私有的符号,也可以看到更明确的交叉引用。或者用 IDA 直接分析整个 dyld_shared_cache_xxx文件,不过这样做需要反汇编整个文件,耗时很大。
参考
iOS逆向之给腾讯视频App添加快进手势
iOS逆向指南:静态分析-黑超熊猫zuik
IOS逆向-静态分析相关推荐
- android微信逆向工程,iOS逆向 - 微信自动添加好友
相关源码:Github地址 一.前言 本篇主要实现在微信上自动添加好友,从而熟悉 iOS 逆向分析的过程. 二. 工具 2.1 MacBook 软件 制作 Tweak 的工具 端口转发,可以让我们通过 ...
- iOS逆向-微信自动添加好友
前言 上次完成了 macOS 版微信小助手,现在终于有(xian)时(de)间(huang)来说说 iOS 逆向了.本篇主要实现在微信上自动添加好友(即自动验证新的朋友申请),从而熟悉 iOS 逆向分 ...
- iOS逆向实战与工具使用(微信添加好友自动确认)
iOS逆向实战与工具使用(微信添加好友自动确认) 原文链接 源码地址 WeChatPlugin-iOS Mac OS 版微信小助手(远程控制.消息防撤回.自动回复.微信多开) 一.前言 本篇主要实现在 ...
- iOS逆向(1)——利用ipa重签名,3分钟iPhone安装多个微信
本文要达成如图效果,在一台iPhone上安装第二个微信: 准备: Xcode 微信ipa(可通过iTool进行下载) 重签名脚本 步骤 打开Xcode,新建Single View App项目,名字可以 ...
- android r 编译找不到头文件_「投稿」iOS逆向——砸壳与反编译
作者:疯狂的蛋神 近来对iOS逆向十分感兴趣,就在业余时间里自己在上网找了各种资料学习,发现许多资料对于一些细节描述的不够详细,所以也踩了很多坑,我也将自己踩的一些坑总结出来,希望对大家有所帮助. 注 ...
- iOS逆向之自动化重签名
iOS逆向之自动化重签名 准备工作 非越狱的iPhone手机 用PP助手下载: 微信6.6.5(越狱应用) 步骤 新建工程"自动化签名",在工程目录下新建APP文件夹放置需要重签名 ...
- iOS 逆向 - 收藏集 - 掘金
分分钟让你在 微信运动 霸占榜首 - iOS - 掘金 为了纪念我失去的已越狱iPad, 不得不写点什么. 所以...以下内容 不需要越狱. 微信运动 6万步是什么概念,我不知道,因为我没走过,不过有 ...
- IOS 逆向开发(一)密码学 非对称加密RSA
IOS 逆向开发(一)密码学 RSA 1. 密码学发展简介 2. 非对称加密RSA产生过程 3. RSA 数学原理 3.1 离散对数问题 3.1.1 原根 3.2 欧拉函数Φ 3.3 欧拉定理 3.4 ...
- IOS逆向(1)IOS越狱
前段时间学习完JS逆向后,准备入门IOS逆向了.打算写在博客中记录下学习的过程,也会把踩过的坑记录下来让大家一起交流学习.JS逆向相关的基础网上比比皆是,后续会分享一些关于JS逆向相关的项目,就不从基 ...
- 【iOS逆向与安全】iOS插件开发光速入门
前言 经过之前的学习,相信你已经能熟练的使用Frida-trace.IDA Pro等逆向工具.不过,仅仅到这肯定是不够的.接下来,学会把你逆向的结果打包成插件并运行,那iOS逆向,你也就真正的入门了. ...
最新文章
- 第六章:内核数据结构
- 项目开发中常用JS表单取值方法
- 如何用SAP Cloud for Customer的手机App创建销售订单
- leetcode31. 下一个排列
- 用div代替textarea,实现在文本框中使用回车br和设置字体功能
- Python解释器配置设置
- 学生体温打卡系统Java+MySQL
- MMORPG开发之七日创世说(二)
- 互联网12个创业派系500强,你认识多少?
- 小米扫地机器人漏灰_#原创新人#一次失败的改装:MI 小米 扫地机器人 改装湿拖功能...
- 【沃顿商学院学习笔记】宏观经济学——09欧元区Euro Zone
- Something about ...
- mysql insert on duplicate_一条Insert on duplicate引发的血案
- php怎么给视频加水印,视频怎么加水印 添加文字水印和图片水印 给视频加水印的软件...
- 项目的成功标准如何衡量?【一杯咖啡谈项目】
- 每日一结(11.1)
- 2021年中国棘轮手柄市场趋势报告、技术动态创新及2027年市场预测
- 配置软路由-同时连接内网和外网
- 四足机器人champ项目和高程图构建elevation_mapping联合使用(Ubuntu18.04)
- 南大科院大数据Hadoop工程实训