首页
社区
课程
招聘
[原创]lldb快速打印Objective-C方法中block参数的签名
2020-2-12 00:02 12483

[原创]lldb快速打印Objective-C方法中block参数的签名

2020-2-12 00:02
12483

iOS逆向时经常会遇到参数为block类型,本文介绍一个lldb script,可快速打印出Objective-C方法中block参数的类型。

class-dump出的头文件中经常包含如下方法签名:

- (void)doSomethingWithCompletionHandler:(CDUnknownBlockType)arg1;

CDUnknownBlockType 就是block类型的参数。当我们要调用这个方法,就需要知道这个参数类型。

网上搜了下,发现一篇好文章,文章讲解了使用lldb命令找到参数类型的方法。连接如下:

http://www.swiftyper.com/2016/12/16/debuging-objective-c-blocks-in-lldb/

但每次都需要lldb逐个命令的敲打,很是麻烦。于是又搜到一个lldb脚本,

https://github.com/ddeville/block-lldb-script

然而年久失修,不怎么能工作。

那就尝试修复这个脚本吧!

-> debugging .
-> debugging ..
-> debugging ...
-> ....
-> fixed, yeah :)

安装

安装lldb script

cd ~
git clone git@github.com:everettjf/zlldb.git

然后在 ~/.lldbinit 文件中添加下行内容:

command script import ~/zlldb/main.py

使用

例如我们有如下block方法

@interface Hello : NSObject
@end
@implementation Hello
+ (void)say:(NSString*)text callback:(void(^)(NSString *text,int x, NSString *y, double z, BOOL m))callback {
}
@end

调用如下:

[Hello say:@"world" callback:^(NSString *text, int x, NSString *y, double z, BOOL m) {    
}];

那么我们断点到这个调用行:

如果是逆向工作的话,没有代码,那可以断点到 objc_msgSend这行,如下:

block是第二个参数,那么打印出$arg4

然后执行命令 zblock 0x100588080 (block的地址传给 zblock命令),然后block的参数就出来啦。

根据每一行的 type encoding 对照苹果的文档即可知道block的参数都有什么。

https://developer.apple.com/library/archive/documentation/Cocoa/Conceptual/ObjCRuntimeGuide/Articles/ocrtTypeEncodings.html

代码

https://github.com/everettjf/zlldb

由于Xcode11内置的lldb script开始默认Python3版本,facebook的chisel还有些支持问题(可能现在解决了)。zlldb就是把我自己常用的几个命令放到了这里,支持Python3(也就是最新版Xcode)。除了zblock外,还有几个简单的命令,大家可以参考README。

参考

  1. http://www.swiftyper.com/2016/12/16/debuging-objective-c-blocks-in-lldb/
  2. https://maniacdev.com/2013/11/tutorial-an-in-depth-guide-to-objective-c-block-debugging
  3. https://github.com/ddeville/block-lldb-script
  4. https://store.raywenderlich.com/products/advanced-apple-debugging-and-reverse-engineering

Enjoy :)




[培训]《安卓高级研修班(网课)》月薪三万计划,掌 握调试、分析还原ollvm、vmp的方法,定制art虚拟机自动化脱壳的方法

收藏
免费 2
打赏
分享
最新回复 (3)
雪    币: 2029
活跃值: (2390)
能力值: ( LV4,RANK:55 )
在线值:
发帖
回帖
粉丝
evilbeast 1 2020-2-12 01:42
2
0
厉害了,收藏
雪    币: 2510
能力值: ( LV1,RANK:0 )
在线值:
发帖
回帖
粉丝
mb_xghoecki 2020-2-13 01:07
3
0
感谢分享
雪    币: 5
能力值: ( LV1,RANK:0 )
在线值:
发帖
回帖
粉丝
git_80114alihasanzaade 2020-6-14 04:00
4
0
 I looking for a iOS reverse engineer for a project, I pay good money
Please contact me on Skype:
live:admin_161310
游客
登录 | 注册 方可回帖
返回