一个用于 Hook Swift 方法和函数的 Swift 库。
函数 / 结构体方法 通过 facebook/fishhook 进行 Hook。
Objective-C 类方法 简单来说,使用了 Objective-C 运行时。
Swift 类方法 通过重写 Vtable 进行 Hook。
targetFunction
的实现被 replacementFunction
的实现所替换。原始实现被移动到 originalFunction
。
可以在 replacementFunction
内部调用 originalFunction
。
try SwiftHook.hookFunction(
"SwiftHookTests.targetFunction() -> Swift.String",
"SwiftHookTests.replacementFunction() -> Swift.String",
"SwiftHookTests.originalFunction() -> Swift.String",
isMangled: false
)
/* using mangled symbol names */
try SwiftHook.hookFunction(
"$s14SwiftHookTests14targetFunctionSSyF",
"$s14SwiftHookTests19replacementFunctionSSyF",
"$s14SwiftHookTests16originalFunctionSSyF",
isMangled: true
)
SwiftHook.exchangeFuncImplementation(
"SwiftHookTests.StructItem.printA() -> Swift.String",
"SwiftHookTests.StructItem.printB() -> Swift.String",
isMangled: false
)
/* using mangled symbol names */
SwiftHook.exchangeFuncImplementation(
"$s14SwiftHookTests21hook_assertionFailure__4file4line5flagss5NeverOs12StaticStringV_SSAISus6UInt32VtF",
"$s14SwiftHookTests25XXXXhook_assertionFailure__4file4line5flagss5NeverOs12StaticStringV_A2ISus6UInt32VtF",
isMangled: false
)
/// Swift Class
try SwiftHook.exchangeMethodImplementation(
"SwiftHookTests.SwiftClassItem.mul2(Swift.Int) -> Swift.Int",
"SwiftHookTests.SwiftClassItem.add2(Swift.Int) -> Swift.Int",
for: SwiftClassItem.self
)
// Objective-C Class
try SwiftHook.exchangeMethodImplementation(
"mul2:",
"add2:",
for: ObjCClassItem.self
)
swift-hook 在 MIT 许可证下发布。请参阅 LICENSE