类名包含 . 号, 无法hook的问题


#1

如图所示,在cycript里动态查看时打印出的类名里包含 . 号,这里没搞明白是如何 添加这样的类的,自己尝试在工程里添加包含 .号的 类似类时,无法添加成功,而且在hopper里看到的也不是正确的类名,与cycript里看到的也不一致,

hopper里的如下所示

在尝试 编译 tweak时候 %hook Wanqu.WQLatestIssueViewController 不允许,不识别这样的类,

尝试runtime想在该类的 扩展中替换原来的方法时,同样类名找不到。
请问这样的类名是如何 添加的,对于这样的类该如何 进行hook ,谢谢。


#2

class-dump里是怎么显示的?


#3

class-dump 无法用,因为 项目是用swift写的,期间也尝试用BBC改善的支持swift版的class-dump依然报错,我看到的类名都是通过'cycript'打印出来 的。
如果 狗神有时间可以看下该应用 叫 「湾区日报」


#4

今天继续研究了一番,发现遇到的类名里带 . 是swift的特性,反编译后拿到的类是经过mangle的,但是swift代码在运行的时候又会demangle, 因此 就得到了带有 . 的类,

然而,目前Theos 编写的Tweak还不支持这种特性,不知道Theos有没有更新到支持swift的计划呢?


#5

当成一个C++函数来hook


#6

照着hopper里面的写,我的印象里是可以的


#7

直接当成OC函数是可以hook的,
void __cdecl -[Wanqu.WQPayment paymentQueue:removedTransactions:](_TtC5Wanqu9WQPayment *self, SEL a2, id a3, id a4)

用这个:_TtC5Wanqu9WQPayment 代替类名 其实就是你Hooper里面看到类名,那个是可以hook的