iOS Hacker LLDB 和 debugserver 实例调试

lldb动态调试 LLDB动态调试 安装debugserver 阅读详情

LLDB 和 debugserver 实例调试

GDB 也可以调试 iOS 程序,但是效果不如苹果的 LLDB, LLDB 可以在程序运行的时候输入命令下断点,而 GDB 却不行。

一、LLDB 和 debugserver 的配置

  1. 插上手机,运行 Xcode,会将 debugserver 自动复制到手机上

  2. 到手机上下载 /Developer/usr/bin/debugserver 到 osx 上

  3. lipo -thin arm64 ~/debugserver -output ~/debugserver //给debugserver 减肥

  4. /opt/theos/bin/ldid -Sent.xml debugserver //给 debugserver 添加 task_for_pid 权限

  5. codesign -s - –entitlements ent.plist -f debugserver //如果上一条指令出错就试试这个

  6. 将处理完后的 debugserver 上传到手机 /usr/bin/debugserver 上

  7. chmod +x /usr/bin/debugserver //给 debugserver 设置权限

二、LLDB 和 debugserver 的连接方法

  1. debugserver *:1234 -a “MobileSMS” //附加进程MobileSMS进程, 开启1234端口,等待所有lldb来连接

  2. debugserver 192.168.4.75:1234 -a “MobileSMS” //附加进程,开启 1234端口, 等待 192.168.4.75 来连接

  3. debugserver -x backboard *:1234 /Applications/Calculator.app/Calculator //执行进程

三、实际调试

下面是一个调试实例

ios 上运行

debugserver *:1234 -a “SpringBoard”

osx 上运行 lldb

(lldb) process connectconnect://192.168.4.132:1234

Process 837 stopped

* thread #1: tid = 0x771a, 0x0000000199038e7clibsystem_kernel.dylib`mach_msg_trap + 8, queue = ‘com.apple.main-thread’, stopreason = signal SIGSTOP

frame #0: 0x0000000199038e7c libsystem_kernel.dylib`mach_msg_trap + 8

libsystem_kernel.dylib`mach_msg_trap:

-> 0x199038e7c <+8>: ret

libsystem_kernel.dylib`mach_msg_overwrite_trap:

0x199038e80 <+0>: movn x16, #0x1f

0x199038e84 <+4>: svc #0x80

0x199038e88 <+8>: ret

(lldb) c

Process 837 resuming

连接成功之后会断下来,输入 c 跑起来,相当于 windbg 里的 g

image list -o -f //显示加载的模块

[ 0]0x00000000000ec000/System/Library/CoreServices/SpringBoard.app/SpringBoard(0x00000001000ec000)

[ 1]0x000000010075c000/Library/MobileSubstrate/MobileSubstrate.dylib(0x000000010075c000)

[ 2]0x0000000006528000 /Users/boot/Library/Developer/Xcode/iOS DeviceSupport/8.1(12B411)/Symbols/System/Library/PrivateFrameworks/StoreServices.framework/StoreServices

[ 3]0x0000000006528000 /Users/boot/Library/Developer/Xcode/iOS DeviceSupport/8.1(12B411)/Symbols/System/Library/PrivateFrameworks/AirTraffic.framework/AirTraffic

[ 4]0x0000000006528000 /Users/boot/Library/Developer/Xcode/iOS DeviceSupport/8.1(12B411)/Symbols/System/Library/PrivateFrameworks/IOSurface.framework/IOSurface

[ 5]0x0000000006528000 /Users/boot/Library/Developer/Xcode/iOS DeviceSupport/8.1(12B411)/Symbols/System/Library/PrivateFrameworks/MultitouchSupport.framework/MultitouchSupport

[ 6]0x0000000006528000 /Users/boot/Library/Developer/Xcode/iOS DeviceSupport/8.1(12B411)/Symbols/System/Library/PrivateFrameworks/MobileWiFi.framework/MobileWiFi

[ 7]0x0000000006528000 /Users/boot/Library/Developer/Xcode/iOS DeviceSupport/8.1(12B411)/Symbols/usr/lib/libIOAccessoryManager.dylib

[ 8]0x0000000006528000 /Users/boot/Library/Developer/Xcode/iOS DeviceSupport/8.1(12B411)/Symbols/System/Library/PrivateFrameworks/IOMobileFramebuffer.framework/IOMobileFramebuffer

[ 9]0x0000000006528000 /Users/boot/Library/Developer/Xcode/iOS DeviceSupport/8.1(12B411)/Symbols/System/Library/PrivateFrameworks/BluetoothManager.framework/BluetoothManager

………………………………………………………

其他 lldb 相关的命令

ni //单步
si //步入

po x0po[ x0 class] //打印数据的 class
p (char*)$x1

b NSLog //给函数下断点
b [Network sendData:withFile:] //给类函数下断点
br -s -a address //给地址下断点
br -s -n main //给函数下断点
br l //查看断点
br del //删除所有断点
br del 1 //删除1号断点

register write 寄存器 值 //与寄存器
register read //查看所有寄存器的信息
register read $x0 //查看寄存器的值

dis //查看汇编代码
dis -a address //查看某个地址的汇编代码

x $x0 //查看内存
memory read address //读内存
memory write address xxx //写内存

br comand add 1 //断点添加
po $x0
c
DONE

//添加表达式,将 str 变量置空
expression
str = nil

四、通过 usb 连接 ssh 进行调试

由于某些情况下没有 wifi ,或者是网络环境比较差,网速很慢。这时候可以选择使用 usb 数据线连接 ssh 进行调试。使用 usb 的方式,连接速度很快。方法如下:
1. 把数据线接上,下载 usbmuxd 工具,下载地址
2. 下载完成解压,切换到 python-client 目录,运行命令 python tcprelay.py -t 22:2222,相当于把 iOS 的 22 端口转发到电脑本机的 2222 端口。
3. ssh root@localhost -p 2222 //连接本机 2222 端口,相当于连接 iOS 的 ssh
4. debugserver *:1234 -a “SpringBoard” // 在 iOS 上开启 debugserver
5. python tcprelay.py -t 1234:12345 // 在 OSX 上运行,将 iOS 的 1234 端口转发到电脑本机的 12345 端口
6. lldb //运行 lldb
7. process connectconnect://localhost:12345 //连接本机的 12345 端口,开始你的调试吧

iOS逆向动态调试 1.拷贝越狱手机/Developer/usr/bin目录下的debugserver到Mac电脑 2.对debugserver进行瘦身(iOS11可以不用瘦身,因为只支持64位构架的程序),在debugserver所在目录输入lipo -info debugserver . 在终端输入:lipo -thinarmv7 debugserver -output debug-server 3.在xco......... 阅读详情

相关推荐

iOS小技能:给debugserver添加task_for_pid权限,以便调试从AppStore中获取的App。

前言在做iOS开发时,在Mac上输入LLDB的命令就可以控制iOS端的App,是因为在我们iOS客户端中有一个debugserver服务器。debugserver专门用来连接Mac端的LLDB客户端,接收LLDB所提供的命令,并且进行相应的执行。 如果你的iOS设备进行过真机调试的话,设备中就会被安装上debugserver, 不过该debugserver只能用来调试你自己的相关应用。 如果想要

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

iOS攻防 - (十二)LLDBDebugServer配合使用

iOS攻防 - (十二)LLDBDebugServer配合使用1.介绍debugserver是运行在iOS上。从它的名字你就能看出,debugserver扮演着一个服务器的角色,可以执行在MAC OS X客户端执行LLDB命令,并把结果反映到终端界面上,通常也成为”remote debugging”远程调试debugserver默认在iOS系统里是没有的,但是,只要我们用Xcode在iPhone

VictorZhang 3708

使用debugserverLLDB进行iOS应用动态调试指南

iOS应用调试的复杂领域中,是众多开发逆向工程师不可或缺的工具之一。它通常用于与LLDB调试器配合,允许开发者深入分析修改运行中的应用程序。本章将简要介绍的基本概念,并指导读者进行安装。在iOS应用的逆向工程调试过程中,dylibframework扮演着非常重要的角色。它们都是动态链接库(Dynamic Library)的形式,但在使用场景构建方式上有所不同。

weixin_33622085的博客 507

LLDBdebugserver

配置debugserver默认情况下iOS上并没有安装debugserver,因此需要设备链接一次Xcode,并在Window->Devices菜单中增加此设备后。会被安装到IOS的Developer/usr/bin/目录下。 瘦身 接下来我们将当前设备进行从IOS拷贝到我们的mac系统上,进行对debugserver进行瘦身 lipo -thin armv7s ~/debugserver -ou

细心程度决定你的成败 2219

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

实现命令"dump_encrypted"LLDB动态调试如同为逆向工程师装上“X光透视眼”,不仅能观察应用运行时的每个细节,更能实时干预逻辑走向。掌握本文所述技巧后,读者可快速定位关键代码、破解加密逻辑,甚至挖掘隐藏功能。但切记,技术探索需在合法合规的边界内进行。“技术是钥匙,但选择打开哪扇门取决于你。附录LLDB官方命令手册iOS Entitlements权限列表。

Sensitive_web_chaser的博客 3145

iOS逆向学习笔记之--LLDB动态调试目标程序

iOS逆向学习笔记之–LLDB动态调试目标程序 配置debugserver 1、将手机中的debugserver拷贝到Mac电脑上(前提是手机作为测试机使用过) scp root@192.168.0.15:/Developer/usr/bin/debugserver /Users/mac/Desktop/dump 2、查看debugserver架构然后瘦身去除其他架构 ma...

WJ的博客 1389

SQLCipher加密数据库逆向分析:跨平台密钥提取与解密实战

数据库加密是数据安全领域的核心技术,通过AES-256等算法对存储内容进行保护,防止未授权访问。其原理是在文件层面实施透明加密,确保即使数据文件被窃取也无法直接读取。这项技术在移动应用、桌面软件等场景中具有重要价值,能有效保障用户隐私商业机密。在实际工程实践中,当需要进行安全审计、数据恢复或遗留系统迁移时,如何对加密数据库进行授权分析成为关键挑战。本文聚焦于SQLCipher这一广泛使用的开源加密方案,深入探讨其逆向分析方法,涵盖内存提取、动态Hook等热词技术,以及跨平台工具链的构建与应用。

aikb6223的博客 644

debugserver+lldb使用

一、概述 debugserverlldb是协同工作的,debugserver依附在APP上,时刻监听APP的运行状态,并有控制APP执行的能力;lldb是在APP外部的,可以debugserver建立连接,通过debugserver获取APP运行状态,并且能通知debugserver对APP做一些事情。在真机调试的时候,Xcodedebugserver加入到APP中,通过lldb调试APP...

yahibo的博客 2910

一步一步用debugserver + lldb代替gdb进行动态调试(整理与补充)

因为Apple已经弃gdb投lldb,所以随着我动态调试的次数越来越频繁,gdb上一个接一个的bug经常会让人很恼火。既然苹果打算建立自己的调试器王国,也投入了钱力精力,那我们干脆也上手lldb玩玩,看看lldb是不是比gdb要更好用(以下操作在iPhone 5,iOS 7.0.4上测试,应该也适用于arm64,如果不行,请参照iphonedevwiki) 一、定制lldb 1. 下载一个

zhangmiaoping23的专栏 1万+

2020年 ios11 debugserverlldb的坑爹安装过程

开篇 debugserver是运行在手机上的调试软件,lldbxcode用来调试的工具,手机越狱后安装debugserver可以实现调试第三方APP。 有够坑的,网上的文章普遍都是过时的,版本不一致导致处处入坑,记录一下ios11 debugserverlldb的坑爹安装过程。 手机安装debugserver IOS11的安装不需要从手机拷贝出来,不需要签名,并且不需要瘦身。网络上的文章普遍都是针对IOS10以前的,什么签名瘦身,拷贝回手机。IOS11的debugserver只需要连接一下xcode真机

w786572258的专栏 2169

iOS越狱环境 debugserver 防护

LLDB 越狱调试 $ debugserver *:端口号 -a 进程(某个app进程) LLDB 启动 开启LLDB $ lldb 连接 debugserver process connect connect://手机ip地址 连接成功,程序被断住,输入 c 继续 导出 debugserver 描述文件 $ ldid -e debugserver(可执行文件名) > 文件名.entitlement 描述文件添加权限字段 get-task-allow -> YES task_for_pid_a

kangpp的博客 1594

iosdebugserver可以调试任意app

文章目录修改debugserver签名 修改debugserver签名 先从越狱手机上用ifunbox复制 Device\Developer\usr\bin目录下的debugserver 到mac上,然后终端进入mac下的文件目录 使用ldid修改签名 修改签名可以参考这篇文章 ios使用ldid给mach-o文件签名SpringBoard的权限突破沙盒 先把签名导出来 ldid -e debugserver > debugserver.entitlements 双击打开生成的文件 debugser

小手琴师的博客 2898

lldb+debugserver调试

lldb+debugserver调试

wantbar的博客 1121

Debugserver(iPhone 4s下提取)

一、(条件)手机连接到Xcode,通过Xcode--->Window--->Devices/Simulators时,debugserver才会被安装到iOS上的/Developer/usr/bin目录里面 二、/Developer/usr/bin目录 把Debugserver 拷贝到Mac中 三、打开 终端 执行 “lipo -thin armv7 /Users/xxx/...

wytor的博客 424

arm64用debugserverlldbhopper调试oc方法

因为普通的oc方法会编译成c++方法,例如下面的test1::会改成objc_msgSend, [vc test1:arg1 :arg2]; objc_msgSend(vc,@selector(test1::),arg1,arg2) objc_msgSend的参数: 参数1是调用的控制器 参数2是方法名 参数3是test1函数参数1 参数4是test1函数参数2 所以在lldb调试方法的时候,寄存器x0,x1表示参数1,参数2.内容如下 po $x0. //打印是调用的控制器 x/s $x1 //

小手琴师的博客 2836

LLDB+debugserver动态调试

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

Esirnus 5734

Debugserver调试服务器error: failed to attach to process named: "" unable to start the exception thread...

环境:iOS 10.2.1 iPad Pro(已越狱) 拷贝手机上的debugserver 到电脑上 #scp root@192.168.1.115:/Developer/usr/bin/debugserver ./ 使用ldid从新进行签名 #ldid -e debugserver > debugserver.entitlements #ldid -Sdebugserver....

天道酬勤 1704

iOS逆向工程使用LLDB的USB连接调试第三方App

http://www.jb51.net/article/93097.htm 这篇文章主要介绍了iOS逆向工程使用LLDB的USB连接调试第三方App,具有一定的参考价值,感兴趣的小伙伴们可以参考一下 LLDB是Low Level Debugger的简称,在iOS开发的调试LLDB是经常使用的,LLDBXcode内置的动态调试工具。使用LLDB可以动态的调试

jeffasd的专栏 1851
上一篇: 关于iOS沙盒的目录结构和获取
下一篇: 使用fastcoll进行md5碰撞,两个不同的文件md5值一样。
sysprogram
博客等级 码龄16年 297粉丝 442原创
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值