iOS逆向-利用LLDB动态调试app

如何探索与逆向分析MacOS/iOS私有框架(PrivateFrameworks)的内部机制 本文详细介绍了如何探索与逆向分析MacOS/iOS私有框架(PrivateFrameworks)的内部机制。通过工具链搭建、静态分析、动态调试等实战技巧,帮助开发者深入理解系统级功能的实现细节,特别以AssetsLibraryServices.framework为例进行解析。同时强调了安全合规的重要性,为安全研究和系统调试提供实用指导。 阅读详情
AI摘要

本文以LLDB为核心工具,详细介绍了对iOS App进行动态调试的全流程。包括核心工具与环境准备、动态调试六步法,还给出破解登录加密算法的实战案例,介绍了LLDB自动化高级技巧、避坑指南及扩展思路,助读者掌握动态调试技术。

引言

动态调试是逆向工程中“透视”应用运行逻辑的核心手段。相比静态分析,动态调试能实时观察内存状态、函数调用栈和寄存器变化,尤其适用于破解加密算法、分析复杂业务逻辑等场景。本文将以LLDB为核心工具,详解如何对iOS App进行动态调试,覆盖从环境搭建到高级技巧的全流程。

一、核心工具与环境准备

1. 必要工具
  • LLDB:Apple官方调试器,支持源码级调试与内存操作(集成在Xcode中)

  • debugserver:iOS端调试服务程序(需通过越狱设备获取)

  • iOS越狱设备:推荐使用Checkra1n或Unc0ver越狱的iPhone(iOS 14-15.5)

  • Python脚本:通过LLDB的Python API实现自动化调试

2. 环境配置步骤

步骤1:安装debugserver

  • 从越狱设备的/Developer/usr/bin/复制debugserver到Mac

  • 添加调试权限(Entitlements):

    <key>com.apple.springboard.debugapplications</key>  
    <true/>  
    <key>get-task-allow</key>  
    <true/>  
    <key>task_for_pid-allow</key>  
    <true/>  
    <key>run-unsigned-code</key>  
    <true/>  

    重签名:

codesign -s - --entitlements entitlements.plist -f debugserver  

步骤2:配置SSH与端口转发

ssh -p 2222 root@iOS_IP   # 默认越狱SSH端口  
iproxy 1234 1234          # 将设备端口1234映射到本地  

二、动态调试六步法

1. 附加目标进程

命令:

# 启动debugserver监听  
debugserver *:1234 -a "AppName"  

# Mac端连接  
lldb  
(lldb) process connect connect://iOS_IP:1234  

技巧:

  • 若App有反调试保护,需先使用kill -0绕过或Frida Hook ptrace

2. 定位关键函数地址

方法1:符号断点

(lldb) breakpoint set -n "-[UIViewController viewDidLoad]"  

方法2:ASLR偏移计算

(lldb) image list -o -f | grep TargetApp  
  • 计算真实地址:基址 + 偏移

3. 设置断点与观察点

普通断点:

(lldb) br s -a 0x0000000100123456  

内存读写观察点:

(lldb) watchpoint set expression -w write -- 0x16dff0a50  
4. 寄存器与内存操作

查看寄存器:

(lldb) register read x0  

修改内存值:

(lldb) memory write 0x12345678 "AAAA"  

导出内存数据:

(lldb) memory read --outfile /tmp/dump.bin --count 256 0x12345678  
5. 堆栈回溯与流程控制

查看调用栈:

(lldb) bt  

单步执行:

(lldb) ni    # 汇编级单步  
(lldb) s     # 源码级单步  

继续执行:

(lldb) continue  

6. 实时Hook与代码注入

执行任意代码:

(lldb) expr -- (void)printf("Hooked!\\n")  

调用Objective-C方法:

(lldb) expr -- (void)[[NSUserDefaults standardUserDefaults] setObject:@"test" forKey:@"key"]  

三、实战案例:破解登录加密算法

场景描述

目标App的登录请求参数包含加密字段encryptedToken,需逆向其生成逻辑。

调试过程
  1. 定位加密函数

    • 通过字符串搜索找到encryptedToken的赋值位置

    • 设置断点:br s -a 0x100012300+0x1234

  2. 分析寄存器与参数

    (lldb) po $x1           # 查看Objective-C方法名  
    (lldb) x/s $x2          # 查看输入字符串地址  
    (lldb) register read x3 # 查看密钥指针  

  3. 追踪加密结果

    • 在函数返回前(ret指令)捕获X0寄存器的值

    • 导出内存:memory read --format bytes --count 32 $x0

  4. 验证算法

    • 对比多次调试结果,确认是否为AES-CBC模式

    • 提取密钥与IV参数,使用Python还原加密过

四、高级技巧:LLDB自动化

1. Python脚本扩展
# 自动化断点回调  
def breakpoint_callback(frame, bp_loc, dict):  
    print("Hit breakpoint! RAX =", frame.registers["rax"].value)  
    return False  

target = lldb.debugger.GetSelectedTarget()  
bp = target.BreakpointCreateByAddress(0x12345678)  
bp.SetScriptCallbackFunction("breakpoint_callback")  
2. 自定义命令
# 实现命令"dump_encrypted"  
def dump_encrypted(debugger, command, result, dict):  
    frame = debugger.GetSelectedTarget().GetProcess().GetSelectedThread().GetSelectedFrame()  
    encrypted_ptr = frame.FindRegister("x0").GetValueAsUnsigned()  
    data = debugger.GetSelectedTarget().GetProcess().ReadMemory(encrypted_ptr, 32, lldb.SBError())  
    print(bytes(data).hex())  

lldb.debugger.HandleCommand('command script add -f dump_encrypted dump_encrypted')  

五、避坑指南

  1. 代码签名问题

    • 调试前需重签名App:codesign -fs "Your Cert" --entitlements entitlements.plist Target.app

    • 关闭SIP(macOS)与AMFI(iOS):amfi_get_out_of_my_way=0x1

  2. 多线程调试

    • 使用thread list查看所有线程

    • thread continue -t 2恢复指定线程

  3. 性能优化

    • 禁用无关符号加载:settings set target.load-script-from-symbol-file false

    • 使用target modules list管理加载模块

六、扩展思路

  1. 逆向系统框架

    • 结合Dyld Shared Cache分析UIKit内部逻辑

  2. 与Frida联动

    • 通过frida-ll-bridge实现双向通信

  3. 非越狱调试

    • 利用debugserver定制版本绕过签名验证


结语

LLDB动态调试如同为逆向工程师装上“X光透视眼”,不仅能观察应用运行时的每个细节,更能实时干预逻辑走向。掌握本文所述技巧后,读者可快速定位关键代码、破解加密逻辑,甚至挖掘隐藏功能。但切记,技术探索需在合法合规的边界内进行。

“技术是钥匙,但选择打开哪扇门取决于你。”

附录

iOS 调试技巧——LLDB 当我们的项目过大时,就会使我们项目的编译好使过长,如何在项目运行时进项代码调试,熟练使用LLDB就可以解决这个难题,大幅度提高我们的开发效率。 1、什么是 LLDB? LLDB是英文Low Lever Debug的缩写,是XCode内置的为我们开发者提供的调试工具,它与LLVM编译器一起,存在于主窗口底部的控制台中,能够带给我们更丰富的流程控制和数据检测的调试功能。 2、LLDB的简单使用 2.1... 阅读详情

相关推荐

IOS逆向学习-动态调试原理、LLDB

logify、Xcode运行原理 我们怎么知道微信点击红包之后调用了那个方法?

yong_19930826的博客 1992

iOS逆向 -- 越狱手机LLDB调试 (实战)

LLDB调试原理 通常正向开发,通过Xcode 调试手机是这样的: 1.Xcode 会给手机安装一个 debugserver 2.debugserver 依附于某个程序进程 3.Mac上Xcode 链接debugserver,并发送指令 , debugserver 对程序进行调试。 那么如何在越狱手机上对App进行调试 (不用Xcode) 1. 首先USB连接手机 ,cd 到 /Dev...

evol_f的博客 1820

lldb动态调试

LLDB动态调试 安装debugserver

知其所以然 4601

iOS动态调试-iOS LLDB动态调试-自身应用

iOS LLDB 提供了丰富的功能用于动态调试,包括设置断点、查看和修改变量、动态修改寄存器、调用函数和加载共享库等。通过这些功能,开发者可以高效地调试和修复程序中的问题。

weixin_38367103的博客 897

iOS逆向 | 如何通过LLDB实现动态调试

Xcode动态调试的原理 Xcode动态调试的原理,涉及到两个工具,LLDB以及debugserver。 debugserver一开始存放在 Xcode里面,当 Xcode识别到手机设备时, Xcode会自动将 debugserver安装到 iphone上,然后通过LLDB与debugserver的交互,来实现真机动态调式。 如何做到动态调试任意APP 手动给任意APP增加debugserver,使用终端的LLDB与之交互。 实现流程 1.连接越狱的手机。 2.使用iFunBox在/Developer/us

qq_35734499的博客 460

某app登录协议逆向分析

某app登录协议逆向分析 设备 iphone 5s Mac Os app:神奇的字符串57qm5Y2V 本文主要通过frida-trace、fridaHook、lldb动态调试完成破解相应的登录算法,从达到登录成功,并根据该步骤完成ios逆向分析,文中所有涉及的脚本都已经放在github上面。 抓包分析 之前文章已经进行了详细的抓包教程。 iOS系统抓包入门实践之短链 从上图中可以看到ydtoken、请求响应以及该接口涉及到的mobile为要破解的内容。 请求参数分析 这里涉及到的frida相关环境

成小新的博客 3065

教你如何动态调试 iOS App(反编译App)

开篇通过本文你能了解 iOS 逆向的基本知识,对 iOS App 的安全有一定了解。然后能举一反三,在自家 App 找到危险漏洞加以预防,保证用户数据安全。在安全领域,攻与防永远存在。哪怕是 iPhone 有着强大的安全防护机制,也挡不住那些极客们一次又一次的好奇,开发了很多强大且便利的工具。本文就是在这些极客们提供的工具的基础上完成的!准备工具Mac 电脑和越狱 iPhone 手机查看手机系统目...

在路上。的专栏 1万+

iOS逆向:微信逆向及动态库开发过程中的坑

记录微信逆向及动态库开发过程中遇到的坑。

a690197843的博客 3712

iOS-动态调试LLDB

最近在研究iOS的逆向,学到了动态调试LLDB这块,之前在开发的时候只是进行正常的打断点和打印参数,没有去具体的了解整个调试流程。这次做个相关知识的学习并进行个总结。 什么是LLDB? LLDB是Low Level Debugger的简称,在iOS开发的调试中LLDB是经常使用的,LLDB是Xcode内置的动态调试工具。 LLVM是一个模块化和可重用的编译器和工具链技术的集合,创始人是 C...

603

【腾讯Bugly干货分享】移动App入侵与逆向破解技术-iOS篇

如果您有耐心看完这篇文章,您将懂得如何着手进行app的分析、追踪、注入等实用的破解技术,另外,通过“入侵”,将帮助您理解如何规避常见的安全漏洞

腾讯Bugly的专栏 7247

iOS小技能:借助LLDB调试第三方App

前言我开发logos tweak 项目的时候,通常 利用iosre的hopper、theos、MonkeyDev、运行时常用的API 进行开发。结合Cycript、hopper、KNHook、以及AFLEXLoader进行分析快速找到入口。 项目例子: tweak集成CocoaAsyncSocket KNHook [program named debugserver (found in Xcode.

专注于计算机研发知识和资讯分享 2万+

08-1-iOS逆向之动态调试App

文章目录一、什么是动态调试二、Xcode的动态调试原理三、动态调试任意APP3.1 debugserver的权限问题3.2 如何给debugserver签上权限 一、什么是动态调试 将程序运行起来,通过下断点、打印等方式,查看参数、返回值、函数调用流程等 二、Xcode的动态调试原理 关于GCC、LLVM、 GDB、LLDB Xcode的编译器发展历程: GCC→LLVM Xcode的...

goodswifter 873

WorkBuddy驱动SolidWorks实测:AI建模流程、参数化与许可排查指南

AI辅助三维建模正在改变工程师的重复劳动方式。其核心理念不是替代人的设计决策,而是通过AI智能体接管CAD软件中的草图绘制、特征创建、尺寸修改等高频操作,让工程师从繁琐的GUI交互中解放出来。在SolidWorks这类主流CAD平台上,这类AI助手的落地依赖环境稳定、需求描述清晰和参数化建模规范。通过将外径、孔距等关键尺寸定义为全局变量并用方程式驱动,可实现改一个数、模型自动更新的高效流程;同时,遇到“无法获得许可”等环境故障时,需要按服务状态、安全软件隔离、干净卸载的顺序排查。以WorkBuddy驱动So

weixin_28559803的博客 372

LLDB+debugserver动态调试

LLDB(Low Level Debugger) 内置于Xcode中的动态调试工具,通吃C,C++,OC,全盘支持OSX,iOS,iOS模拟器 在指定的条件下启动程序; 在指定的条件下停止程序; 在程序停止的时候检查程序内部发生的事; 在程序停止的时候对程序进行改动,观察程序的执行过程有什么变化 LLDB是运行在OSX中的,要想调试iOS,需要和debugserver进行配合. debugs

Esirnus 5741

ABAP代码使用OAuth2.0 Client Credential调用外部API

ABAP-OAuth2.0-调用外部API

m0_74015269的博客 1956

微生物16S数据上传NCBI的SRA库

本篇内容仅包括:俺自己的实验收集了淡水、淡水沉积物、海水、海草附着微生物样品,测序所得的Fastq格式数据,在文章投稿发表时被要求数据需上传NCBI的SRA库,得到一个PRJNA2347899这样子的IDs。仅解决了这个上传过程!

Xf_Niu的博客 7436

iOS逆向(7)-LLDB,自制LLDB脚本,窜改微信红包金额

在上篇文章从fishhook看runtime,hook系统C函数中已经提到了利用LLDB的部分命令。在我们玩逆向的时候在大多数时候其实是拿不到源码的。所以了解一些LLDB来辅助我对别人APP的学(破)习(坏),是非常有必要的。 自从开始玩逆向,总是会有一些大佬给我发一些转账信息(为什么不是发红包?红包金额有限制,拿不出手),金额还挺大。 都是类似于这样的。 88888.88.png ...

努力,可能成功!放弃,注定失败! 1216

Windows7 64位系统PL2303驱动无法安装问题解决

问题描述:电脑安装的是Win7 64位的旗舰版,USB to RS232这种线很简单,对于笔记本如果要用串口,就不能少了它了。USB to RS232转换芯片种类繁多,常见的有ch340,0108,PL2303,FT232等,这里面FT232的应该价格是相对比较贵的,因为FTDI的芯片本身比较贵。由于买了一根PL2303芯片的USB to RS232转换线,于是插上后发现驱动无法安装,又是在设备管

suxiang198的博客 5810

iOS逆向基础Hopper+LLDB调试(四)

这篇文章已经在公号后台躺了将近一月,趁着这俩天空,把这个坑填起来,本篇主要内容为基于Hopper+LLDB在运行时调试,修改寄存器值,修改MachO二进制实现逻辑业务判断...

寻找改变未来的算法 882

【Codex Sandbox 与审批机制:小白也能看懂的实用教程】

这篇教程介绍了Codex工具中的沙盒(Sandbox)和审批(Approvals)机制,帮助用户安全高效地使用Codex协作。沙盒限制Codex访问范围,审批机制则控制敏感操作权限。文章详细讲解了五种常见模式:最安全的安全只读浏览、只读非交互、仓库内编辑、Auto预设和不推荐的YOLO模式。还提供了新手使用路径建议、配置示例和实战场景范式,包括如何测试沙盒行为、不同系统下的实现方式以及常见问题解答。最后附上速查清单,帮助用户快速选择合适的权限组合。

zsr154278963的博客 6713

企业合规审查系统开发实战:基于知识图谱与深度学习的智能引擎构建(附完整Python代码)

动态合规监测:实时追踪法规变化并更新知识库智能合约审计:区块链智能合约的自动合规检查跨域知识融合:整合财务、法律、业务多维度数据可解释性增强:基于Attention机制生成合规审查依据。

理论都是虚的,代码才是王道。 456

App动态调试(1)-Radare2和lldb

为什么不用IDA,因为贵。 为什么不用gdb,因为lldb的出现,取代gdb只是迟早的事情,可以说gdb是Depracated。 在 Android逆向之ARM64静态分析对app的中的so进行了动态分析,这篇文章介绍两种动态调试的方式,一种是radare2,另一种是lldb。 r2frida 概术 Radare2 and Frida better together. 两个强大的工具放在一起,必然会产生更为强大的能量,可以称为"Best Dynamic Debugging Tool ",最主要是免费。其本质

helloworlddm的博客 1394

YOLO26优化:原创自研 | 自研独家创新DSAM注意力 ,基于BiLevelRoutingAttention注意力升级

提出新颖的注意力DSAM(Deformable Bi-level SpatialAttention Module),创新度极佳,适合科研创新,效果秒杀CBAM,Channel Attention+Spartial Attention升级为新颖的Deformable Bi-level Attention+Spartial Attention

①答疑群聊服务;②YOLO大模型知识问答系统;③计算机视觉论文生成智能体; 368

[iOS 逆向 6] 分析与调试

获取 App iTools 越狱后,iTools 软件内可以看到手机安装了哪些应用,选中某个应用,点导出即可。 注意:.ipa 文件实际就是 .zip 文件,直接改后缀、解压即可。 获取到 某.app,查看包内容,找到里面的可执行文件: nm 命令查看目标文件中的符号信息 file 命令查看文件状态,比如可重定位/可执行 等 otool 命令 观察 app 包内容,包含:可执行文件、库文件、配置文...

Eric's Blog 1657

【C++】构造函数之初始化列表(Initialization list of constructors)

本讲主要是构造函数的初始化列表的讲节,但是本节很重要,可以关乎后面写项目

m0_62599305的博客 2235

精雕软件(JDpaint) 5.5 绿色版

精雕软件(JDpaint) 5.5 绿色版精雕软件(JDpaint) 5.5 绿色版精雕软件(JDpaint) 5.5 绿色版

10 分钟搭建 AnythingLLM 私有知识库:从 Docker 部署到带引用问答的完整教程

做技术支持的都被这活折磨过:工单里一句"你们的退款窗口到底几天",答案明明躺在产品手册第 47 页,翻文档、复制原文、再斟酌措辞,一轮下来半小时就没了。AnythingLLM 做的事情很直接——把你手里的文档、网页丢进去,它就变成一个只基于你的资料回答问题的聊天机器人,整套私有知识库跑在你自己的机器上,不依赖任何第三方托管。 [![AnythingLLM 文档聊天机器人宣传图](https://

gitblog_00902的博客 165

pscad IEEE标准系统搭建说明

pscad IEEE标准系统搭建说明,包含典型的IEEE 9节点、14节点、30节点、39节点和118节点系统。内含标准测试系统的原始数据和潮流结果。

上一篇: iOS逆向-Frida Hook所有TCP请求与响应
下一篇: 密码学基础-从神秘符号到数字时代的守护者
destiny12__
博客等级 码龄9年 69粉丝 9原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值