iOS逆向書上第六章6.2.2第196頁我在iOS10.2, arm64找不到Specifier的_objc_msgSend

圖1-a

测试规格:
iOS10.2
Arm64

各位大大好,在此请教一下,近来照着书上走iOS10的arm64痛苦多多,因为看法不太一样,而且IDA免费版不吃64,所以用hooper对照书上IDA也是快眼盲。

正题是实测与书上在第187页已经跟ios10实测不同,我在PhoneSettingsListController的确有看到tableView: cellForRowAtIndexPath:的方法,所以只好跟书上分岔去调试PhoneSettingsListController。

根据图1-a我已经确定,上面的x20会在位置0000000196825334 mov x0, x20 拿到电话号码,所以我可以确定上面的bl应该是一个关键的msgSend,但书上第196页在这裡提到这个msgSend有参数LDR R1, [R0] ; “refreshCellContentsWithSpecifier” 这裡我就跟ios10对照不起来,书上也有点突然的去印出po $r2,但没有解释为何要po r2,我在这裡卡了两天。

总结上述,我的问题是:

  1. 该如何继续找下去才能找到书上所提到的Specifier的PSSpecifier? (还是已经苹果大改了?)

  2. 在hooper的arm64所表示的bl 0x18f0f2630,是否就是书上IDA的msgSend?

  3. 该如何在hooper上判断msgSendSuper2?因为书上的IDA会在右边字串显示说明,可是hooper只显示bl,要用s去step in才会有可能判断这个bl是msgSend or msgSendSuper… (其实hooper显示的资料没有IDA详细,但IDA不支持64 QQ)

再麻烦大神解惑了,感谢!

1 个赞

3个问题我一起尝试解答吧:你在所有的BL 0xabcde上都断一下,然后尝试p (char *)$x1,看看输出什么。如果输出了一个形似方法名的字符串,就说明它是一个objc_msgSend;然后,这个函数里所有的BL 0xabcde就都是objc_msgSend了,你心里就有数了

1 个赞

谢谢大神帮确认我自己的猜想,我今天再花了六小时(共四天),终于找到蛛丝马迹,顺利让流程跑回书上所说的refreshCellContentsWithSpecifier这里!带我走完整个流程,我会发篇学习纪录文章在iOSRE更新一下iOS10.2 arm64的做法给其他同好参考 :)

1 个赞

大神不好意思,有一个補充hooper小问题,hooper本身没有ida这样在参数旁边显示telephony相关的资讯,但我意外的滑鼠滑过去一个绿色字体就跑出我不知道从哪裡来的细节资讯,裡面有telephony类似相关的资讯,请问这是hooper的什么资讯啊?我先前已查过官方资料,但没看到此功能的相关解释.

我也不知道……

哈哈,那我另发一个话题询问看看同好 XD