Advanced.Apple.Debugging.&.Reverse.Engineering.v2.0 学习笔记

Chap 16 讲解了如何显示出来苹果的调试窗口 UIDebuggingInformationOverlay,内容最后,作者提到他自己的lldb_commands里提供了python脚本,可以直接完成在模拟器或者真机上显示出这个Overlay,尝试了一下,简单记录了步骤。
lldb_commands在这里

模拟器是 iOS 11.2

如何查看模拟器里Apple原生App的 process名称:

1, 用lldb随便连接一个已经知道process name的App:
flora:~ flora $ lldb -n Maps
(lldb) process attach --name "Maps"

成功连上后,控制台输出信息的最底部,出现:

Executable module set to "/Applications/Xcode.app/Contents/Developer/Platforms/iPhoneOS.platform/Developer/Library/CoreSimulator/Profiles/Runtimes/iOS.simruntime/Contents/Resources/RuntimeRoot/Applications/Maps.app/Maps".
Architecture set to: x86_64h-apple-ios.

复制地址:
/Applications/Xcode.app/Contents/Developer/Platforms/iPhoneOS.platform/Developer/Library/CoreSimulator/Profiles/Runtimes/iOS.simruntime/Contents/Resources/RuntimeRoot/Applications
并在控制台用open命令打开, 进入到Finder, Applications目录中显示了模拟器自带的app.

finder-applications.png

2, 查找自己要找的App, 如果不确定找的对不对,可以右键打开包查看是不是自己需要的。
3, 我要找的是Calendar, 直接lldb -n Calendar会报错:
(lldb) process attach --name "Calendar"
error: attach failed: could not find a process named Calendar

可见它的名字不是Calendar

4, 通过上面的方法, 在Applications目录里找到了MobileCal.app, 试一下:
# lldb -n MobileCal
(lldb) process attach --name "MobileCal"
Process 52308 stopped
* thread #1, queue = 'com.apple.main-thread', stop reason = signal SIGSTOP
    frame #0: 0x000000011689c34a libsystem_kernel.dylib` mach_msg_trap  + 10
libsystem_kernel.dylib`mach_msg_trap:
->  0x11689c34a <+10>: ret
    0x11689c34b <+11>: nop
libsystem_kernel.dylib'mach_msg_overwrite_trap:    0x11689c34c <+0>: mov    r10, rcx
    0x11689c34f <+3>:  mov    eax, 0x1000020
    0x11689c354 <+8>:  syscall
    0x11689c356 <+10>: ret
    0x11689c357 <+11>: nop
libsystem_kernel.dylib'semaphore_signal_trap:    0x11689c358 <+0>: mov    r10, rcx
Target 0: (MobileCal) stopped.

Executable module set to "/Applications/Xcode.app/Contents/Developer/Platforms/iPhoneOS.platform/Developer/Library/CoreSimulator/Profiles/Runtimes/iOS.simruntime/Contents/Resources/RuntimeRoot/Applications/MobileCal.app/MobileCal".
Architecture set to: x86_64h-apple-ios.

attach成功

5, 显示overlaywindow
(lldb) overlaydbg
Displaying UIDebuggingInformationOverlay... resume execution

(lldb) continue
Process 52308 resuming

在iphone x 模拟器上截屏如下:


Simulator Screen Shot - iPhone X - 2018-03-23 at 14.34.59.png
6, 这是一次就成功的情况, 我第一次执行lldb -n MobileCal时,遇到了一个问题,提示attach失败:
flora:~ flora $ lldb -n MobileCal
(lldb) process attach --name "MobileCal"
error: attach failed: more than one process named MobileCal:
PID    PARENT USER       TRIPLE                   ARGUMENTS
====== ====== ========== ======================== ============================
52308  587    flora       x86_64-apple-macosx      /Applications/Xcode.app/Contents/Developer/Platforms/iPhoneOS.platform/Developer/Library/CoreSimulator/Profiles/Runtimes/iOS.simruntime/Contents/Resources/RuntimeRoot/Applications/MobileCal.app/MobileCal
20201  20091  flora       x86_64-apple-macosx      /Applications/Xcode.app/Contents/Developer/Platforms/iPhoneOS.platform/Developer/Library/CoreSimulator/Profiles/Runtimes/iOS.simruntime/Contents/Resources/RuntimeRoot/Applications/MobileCal.app/MobileCal

只能使用pid进行attach。

(lldb) process attach --pid 52308
Process 52308 stopped
* thread #1, queue = 'com.apple.main-thread', stop reason = signal SIGSTOP
    frame #0: 0x000000011689c34a libsystem_kernel.dylib` mach_msg_trap  + 10
libsystem_kernel.dylib`mach_msg_trap:
->  0x11689c34a <+10>: ret
    0x11689c34b <+11>: nop
libsystem_kernel.dylib'mach_msg_overwrite_trap:    0x11689c34c <+0>: mov    r10, rcx
    0x11689c34f <+3>:  mov    eax, 0x1000020
    0x11689c354 <+8>:  syscall
    0x11689c356 <+10>: ret
    0x11689c357 <+11>: nop
libsystem_kernel.dylib'semaphore_signal_trap:    0x11689c358 <+0>: mov    r10, rcx
Target 0: (MobileCal) stopped.

Executable module set to "/Applications/Xcode.app/Contents/Developer/Platforms/iPhoneOS.platform/Developer/Library/CoreSimulator/Profiles/Runtimes/iOS.simruntime/Contents/Resources/RuntimeRoot/Applications/MobileCal.app/MobileCal".
Architecture set to: x86_64h-apple-ios.

attach 成功。

(lldb) overlaydbg
Displaying UIDebuggingInformationOverlay... resume execution

(lldb) continue
Process 52308 resuming

很奇怪的现象是,此时使用另外一个控制台,直接执行 lldb -n MobileCal 就能成功attach上.

如果刚才指定pid时,指定另外一个呢?
(lldb) process attach --pid 20201
There is a running process, detach from it and attach?: [Y/n] y
Process 52308 detached
Process 20201 stopped
* thread #1, queue = 'com.apple.main-thread', stop reason = signal SIGSTOP
    frame #0: 0x000000010b72834a libsystem_kernel.dylib` mach_msg_trap  + 10
libsystem_kernel.dylib`mach_msg_trap:
->  0x10b72834a <+10>: ret
    0x10b72834b <+11>: nop
libsystem_kernel.dylib'mach_msg_overwrite_trap:    0x10b72834c <+0>: mov    r10, rcx
    0x10b72834f <+3>:  mov    eax, 0x1000020
    0x10b728354 <+8>:  syscall
    0x10b728356 <+10>: ret
    0x10b728357 <+11>: nop
libsystem_kernel.dylib'semaphore_signal_trap:    0x10b728358 <+0>: mov    r10, rcx
Target 0: (MobileCal) stopped.

看样子也是成功的, 但是想要查看overlay是,却不能够:

(lldb) overlaydbg
Failure, womp

看来这个进程不能显示overlay,那么第一个尝试的pid就是当前正在前台的Calendar的进程了.
当然,此时在另外的控制台直接lldb -n MobileCal也是能够成功attach到Calendar的。

7, 如果是有源码的App, 直接在Schemes中查看Executable就是它进程的名称, 不需要额外的查看。
8, 模拟器里安装AppStore上的应用有点困难, 就不考虑了。
9, 真机环境 iPhone 6p, iOS 11.2

运行我自己的程序,然后点『暂停』进入lldb调试环境, 输入: overlaydbg:

(lldb) overlaydbg
Displaying UIDebuggingInformationOverlay... resume execution

(lldb) continue
Process 5240 resuming

真机成功显示debuggingOverlay
第一次执行报了两个python的错误(手慢没几下来), 再次执行就成功了,也没有再出现错误, 可惜。

10, 真机环境的第三方APP, 暂时还没尝试如何连上lldb。但是如果能使用方法, 例如usbmuxd连上lldb, 执行overlaydbg应该也能显示出debuggingOverlay的.
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 199,393评论 5 467
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 83,790评论 2 376
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 146,391评论 0 330
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 53,703评论 1 270
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 62,613评论 5 359
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,003评论 1 275
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 37,507评论 3 390
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,158评论 0 254
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 40,300评论 1 294
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,256评论 2 317
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,274评论 1 328
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 32,984评论 3 316
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 38,569评论 3 303
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,662评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 30,899评论 1 255
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 42,268评论 2 345
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 41,840评论 2 339

推荐阅读更多精彩内容

  • 发现 关注 消息 iOS 第三方库、插件、知名博客总结 作者大灰狼的小绵羊哥哥关注 2017.06.26 09:4...
    肇东周阅读 11,977评论 4 60
  • 01 萝卜在古代草本集里就有记载,是一样下气消滞的好东西。 冬吃萝卜,夏吃姜。 我们熟知的有青萝卜,...
    查欣欣阅读 224评论 1 1
  • 01 小学的课文里,有一篇余光中的《乡愁》。“小时候,乡愁是一张小小的邮票,我在这头,母亲在那头。长大后,乡愁是一...
    夕夕酱阅读 975评论 9 11
  • 年轻的女人露着胸部,衣衫不整的老人吸允着她的乳头。鲁本斯的油画作《西门与佩罗》。 首次进入博物馆的人们看到这幅画大...
    张强用生命影响生命阅读 218评论 2 2
  • 前言 时间一眨眼又过去一年了,过去一年似乎又很快乐,又很悲愁,真的是傻傻过一年啊。总想写一篇文章来纪念过去一年的一...
    水琰阅读 456评论 0 1