2025-05-05 19:01:16 -07:00
|
|
|
//
|
|
|
|
|
// Hacks.m
|
|
|
|
|
// App
|
|
|
|
|
//
|
|
|
|
|
// Created by James Magahern on 5/5/25.
|
|
|
|
|
//
|
|
|
|
|
|
|
|
|
|
#import "Hacks.h"
|
2025-05-05 19:05:49 -07:00
|
|
|
#import <objc/runtime.h>
|
2025-05-05 19:01:16 -07:00
|
|
|
|
|
|
|
|
Class DecodedClass(const char *encodedClassName) {
|
|
|
|
|
NSData *data = [NSData dataWithBytesNoCopy:(void *)encodedClassName length:strlen(encodedClassName) freeWhenDone:NO];
|
|
|
|
|
data = [[NSData alloc] initWithBase64EncodedData:data options:0];
|
|
|
|
|
|
|
|
|
|
NSString *str = [[NSString alloc] initWithData:data encoding:NSASCIIStringEncoding];
|
|
|
|
|
return NSClassFromString(str);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
SEL DecodedSelector(const char *encodedSelectorName) {
|
|
|
|
|
NSData *data = [NSData dataWithBytesNoCopy:(void *)encodedSelectorName length:strlen(encodedSelectorName) freeWhenDone:NO];
|
|
|
|
|
data = [[NSData alloc] initWithBase64EncodedData:data options:0];
|
|
|
|
|
|
|
|
|
|
NSString *str = [[NSString alloc] initWithData:data encoding:NSASCIIStringEncoding];
|
|
|
|
|
return NSSelectorFromString(str);
|
|
|
|
|
}
|
|
|
|
|
|
2025-05-05 19:05:49 -07:00
|
|
|
void SwizzleClassMethod(Class targetClass, SEL originalSelector, IMP replacementIMP)
|
|
|
|
|
{
|
|
|
|
|
Method originalMethod = class_getClassMethod(targetClass, originalSelector);
|
|
|
|
|
method_setImplementation(originalMethod, replacementIMP);
|
|
|
|
|
}
|