服务器之家:专注于服务器技术及软件下载分享
分类导航

PHP教程|ASP.NET教程|Java教程|ASP教程|编程技术|正则表达式|C/C++|IOS|C#|Swift|Android|VB|R语言|JavaScript|易语言|vb.net|

服务器之家 - 编程语言 - IOS - iOS逆向教程之动态调试详解

iOS逆向教程之动态调试详解

2021-04-28 17:02Mr.Guo IOS

这篇文章主要给大家介绍了关于iOS逆向教程之动态调试的相关资料,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧

前言

有时候想更了解别人App的调用流程,就需要在App运行的时候进行动态调试。动态调试指的是将程序运行起来,通过下断点、打印等方式,查看参数、返回值、函数调用流程等。

下面话不多说了,来随着小编一起看看详细的介绍吧

Xcode的动态调试原理

首先了解一下 Xcode 编译和调试器的发展。Xcode 中的编译器发展历程:GCC -> LLVM,调试器的发展历程:GDB -> LLDB 。

Xcode 调试安装到手机上的应用的原理:Xcode 通过 LLDB 调试器把调试指令发送到手机上的 debugserver, debugserver 再与相应的 APP 进行交互,达到调试的效果。

debugserver 一开始是存放在Mac的Xcode里面,路径:

?
1
2
3
4
/Applications/Xcode.app/Contents/Developer/Platforms
/iPhoneOS.platform/DeviceSupport
/9.1/DeveloperDiskImage.dmg
/usr/bin/debugserver

当 Xcode 识别到手机设备时,Xcode 会自动将 debugserver 安装到手机上。

Xcode 调试的局限性:一般情况下,只能调试通过 Xcode 安装的APP,无法调试其它APP。

给debugserver赋予权限

默认情况下 /Developer/usr/bin/debugserver 缺少一定的权限,只能调试通过Xcode安装的App,如果希望调试其它App,需要对 debugserver 重新签名,签上可以调试其它App的权限。

需要的两个权限为:get-task-allow 和 task_for_pid-allow

iPhone上的 /Developer 目录是只读的,无法直接对 /Developer/usr/bin/debugserver 文件签名,需要先把 debugserver 复制到Mac。

通过 ldid 命令导出文件以前的签名权限:

?
1
$ ldid -e debugserver > debugserver.entitlements

debugserver.entitlements 这个文件其实是个 plist 文件,在这个文件中加上上面提到的两个权限后,再通过 ldid 命令对文件重新签名。

?
1
$ ldid -Sdebugserver.entitlements debugserver

然后将已经签好权限的 debugserver 放到 /usr/bin 目录,便于找到 debugserver 指令。

debugserver附加到某个APP进程

?
1
$ debugserver *:端口号 -a 进程
  • *:端口号:使用iPhone的某个端口启动debugserver服务(不是保留端口)
  • -a进程:输入APP的进程信息(进程ID或者进程名称)

Mac远程连接iPhone上的debugserver服务

启动LLDB:

?
1
2
// 在终端输入
$ lldb

连接debugserver服务

?
1
(lldb) process connect connect://手机IP地址:debugserver服务端口号

使用LLDB的c命令让程序先继续运行

?
1
(lldb) c

到此,就可以远程调试别人的App了。

常用的LLDB指令

给ViewController的test方法设置断点

?
1
breakpoint set -n "-[ViewController test]"

查看指令用户使用 help 指令: help breakpoint 等。

打印线程的堆栈信息: thread backtrace

很多命令不在这里赘述,请参考:http://lldb.llvm.org/lldb-gdb.html

ASLR

获取 ASLR 的偏移量:

?
1
image list -o -f

打印结果的第二列前面的地址就是我们需要的 ASLR 的偏移量offset。

假如我们想给某个类中的test方法添加断点,那么通过 Hooper 工具找到该方法的第一个内存地址,假如为0x010101,然后地址加上我们得到的 ASLR 的偏移量就是该方法的实际地址。然后通过该地址给方法下断点。

?
1
breakpoint set -o 0x010101+offset

到此就给该方法添加了断点,之后当程序调用该方法的时候,会停在该断点出。

结语

练习 lldb 的各种指令时,推荐先在 Xcode 上练习各种用法,因为会有提示和直观的输出结果,更容易我们理解。

总结

以上就是这篇文章的全部内容了,希望本文的内容对大家的学习或者工作具有一定的参考学习价值,如果有疑问大家可以留言交流,谢谢大家对服务器之家的支持。

原文链接:http://coderperson.com/2018/06/06/iOS-hacking-lldb/

延伸 · 阅读

精彩推荐
  • IOSIOS开发之字典转字符串的实例详解

    IOS开发之字典转字符串的实例详解

    这篇文章主要介绍了IOS开发之字典转字符串的实例详解的相关资料,希望通过本文能帮助到大家,让大家掌握这样的方法,需要的朋友可以参考下...

    苦练内功5832021-04-01
  • IOSiOS中tableview 两级cell的展开与收回的示例代码

    iOS中tableview 两级cell的展开与收回的示例代码

    本篇文章主要介绍了iOS中tableview 两级cell的展开与收回的示例代码,小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧...

    J_Kang3862021-04-22
  • IOSiOS 雷达效果实例详解

    iOS 雷达效果实例详解

    这篇文章主要介绍了iOS 雷达效果实例详解的相关资料,需要的朋友可以参考下...

    SimpleWorld11022021-01-28
  • IOSIOS 屏幕适配方案实现缩放window的示例代码

    IOS 屏幕适配方案实现缩放window的示例代码

    这篇文章主要介绍了IOS 屏幕适配方案实现缩放window的示例代码,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要...

    xiari5772021-06-01
  • IOSiOS布局渲染之UIView方法的调用时机详解

    iOS布局渲染之UIView方法的调用时机详解

    在你刚开始开发 iOS 应用时,最难避免或者是调试的就是和布局相关的问题,下面这篇文章主要给大家介绍了关于iOS布局渲染之UIView方法调用时机的相关资料...

    windtersharp7642021-05-04
  • IOSiOS通过逆向理解Block的内存模型

    iOS通过逆向理解Block的内存模型

    自从对 iOS 的逆向初窥门径后,我也经常通过它来分析一些比较大的应用,参考一下这些应用中某些功能的实现。这个探索的过程乐趣多多,不仅能满足自...

    Swiftyper12832021-03-03
  • IOS关于iOS自适应cell行高的那些事儿

    关于iOS自适应cell行高的那些事儿

    这篇文章主要给大家介绍了关于iOS自适应cell行高的那些事儿,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的...

    daisy6092021-05-17
  • IOS解析iOS开发中的FirstResponder第一响应对象

    解析iOS开发中的FirstResponder第一响应对象

    这篇文章主要介绍了解析iOS开发中的FirstResponder第一响应对象,包括View的FirstResponder的释放问题,需要的朋友可以参考下...

    一片枫叶4662020-12-25