reveal看到的类名是SYHDAppPayProject.MainTabBarController


#1

需求:我想hook一个类
代码:%hook SYHDAppPayProject.MainTabBarController
%end
问题:我用class jump 导出了头文件 类名都没有SYHDAppPayProject.前缀,但是用reveal查看,都是带有前缀的,hook带前缀的类 编译报错,请问怎么hook带特殊字符前缀的类呢


#2

这个是用Swift写的项目,具体怎么hook等大神来了回答吧。


#3

这,,,好吧,你咋知道是swift写的呐


#4

.就是Swift


#5

不要用Logos即可
例子:

#import <objc/runtime.h>
#import <Foundation/Foundation.h>
static IMP request_increaseBytesTransferred=NULL;
static IMP setMaxBytesPerSecond=NULL;
static BOOL ISVIP(id obj){
  return YES;
}
static void getRekt(id obj){

}
static void hooked_request_increaseBytesTransferred(id obj,SEL _cmd,long long arg1,long long arg2){
  request_increaseBytesTransferred(obj,_cmd,MAXFLOAT,MAXFLOAT);
}
static void hooked_setMaxBytesPerSecond(id obj,SEL _cmd,unsigned long long arg1){
  setMaxBytesPerSecond(obj,_cmd,MAXFLOAT);
}
__attribute__((constructor))
static void fool() {
  Method m1 = class_getInstanceMethod(NSClassFromString(@"BandwidthManager"),NSSelectorFromString(@"request:increaseBytesTransferred:"));
  request_increaseBytesTransferred=method_getImplementation(m1);
  method_setImplementation(m1, (IMP)hooked_request_increaseBytesTransferred);
  Method m2 = class_getInstanceMethod(NSClassFromString(@"BandwidthManager"),NSSelectorFromString(@"setMaxBytesPerSecond:"));
  setMaxBytesPerSecond=method_getImplementation(m2);
  method_setImplementation(m2,(IMP)hooked_setMaxBytesPerSecond);
  Method m3 = class_getInstanceMethod(NSClassFromString(@"BandwidthManager"),NSSelectorFromString(@"performThrottling"));
  Method m4 = class_getInstanceMethod(NSClassFromString(@"BandwidthManager"),NSSelectorFromString(@"notifyThrottling"));
  method_setImplementation(m3,(IMP)getRekt);
  method_setImplementation(m4,(IMP)getRekt);
  Method m5 = class_getInstanceMethod(NSClassFromString(@"BDUser"),NSSelectorFromString(@"isSVip"));
  method_setImplementation(m5,(IMP)ISVIP);
  if(m1!=NULL&&m2!=NULL&&m3!=NULL&&m4!=NULL&&m5!=NULL&&request_increaseBytesTransferred!=NULL&&setMaxBytesPerSecond!=NULL){
    NSLog(@"Inj3ct3d");
  }
}