[书中问题] 微信中找不到 MMServiceCenter 的定义位置

第二版书中描述了如何在IDA中通过汇编代码找到 getTimelineDataItemOfIndex: 的调用者对象和参数. 其后在编写Tweak的过程中, 有一行代码是这样的:


通过谷歌了解到此处的 MMServiceCenter 是通过logos的%c在运行时赋值的.
然后我的问题是: 我在从微信class-dump出来的头文件中并没有找到MMServiceCenter的相关定义和描述. 请问这是什么机制, 然后我该如何去了解它?

你这样操作一下:

  1. ssh到iOS;
  2. cycript -p WeChat
  3. choose(MMServiceCenter)

然后把结果贴出来看看

好的, 结果如下:

这不是有这个类吗?
你class-dump的过程可能有点问题,我这边class-dump出来是有这个类的

嗯, 请问您class-dump出来是9723个文件吗?

你是哪个版本 我这9754

系统版本: iOS 9.3
软件版本: WeChat 6.5.13

我试了一下,最新版本的微信中,确实class-dump不出这个类了,@Akko 知道是怎么回事吗?
但是还是可以通过其他方式查看这个类的信息,

cy# [MMServiceCenter _shortMethodDescription].toString()
`<MMServiceCenter: 0x1041238d8>:
in MMServiceCenter:
\tClass Methods:
\t\t+ (id) defaultCenter; (0x1040c5d44)
\tInstance Methods:
\t\t- (void) callEnterBackground; (0x1040c6374)
\t\t- (void) callEnterForeground; (0x1040c61e0)
\t\t- (void) callTerminate; (0x1040c6508)
\t\t- (void) callServiceMemoryWarning; (0x1040c6838)
\t\t- (void) callClearData; (0x1040c6cfc)
\t\t- (void) callReloadData; (0x1040c6b68)
\t\t- (id) getService:(Class)arg1; (0x1040c5d50)
\t\t- (void) .cxx_destruct; (0x1040c6ed8)
\t\t- (void) dealloc; (0x1040c5bfc)
\t\t- (id) init; (0x1040c5a68)
\t\t- (void) removeService:(Class)arg1; (0x1040c6110)
(NSObject ...)`

我的是稍微低一点版本的

动态添加?手上没微信二进制

在IDA可以看到有[MMServiceCenter defaultCenter] 的调用, 如果是动态添加的话, 请问是如何编译的?编译的时候找不到类不会报错吗?

我现在也遇到这个问题了

这个在MMCommon.framework中,你需要dump这个库

1 个赞