Vic Posted December 28, 2023 Posted December 28, 2023 (edited) Sometimes, you need to manipulate low-level functionality (C APIs, etc) from high-level languages (Python). Eg. Force the low-level side calls directly to your own Python override functions. This repo will help you do that. [x] Windows [x] Linux [x] MacOS [x] iOS [x] Android To hook & unhook a function, you only need to write codes as the following import ctypes from PyHooking import PyHooking, load_external_shared_library, arch, bits # define the hook function mylib = load_external_shared_library(f"Examples/mylib_{arch}_{bits}") @PyHooking.CPrototype(ctypes.CFUNCTYPE(None, ctypes.c_char_p)) def hk_print_message(message): message = f"Invoked `hk_print_message('{message.decode('utf-8')}')`" PyHooking().invoke(mylib.print_message, message.encode()) # perform hooking PyHooking().hook(mylib.print_message, hk_print_message) mylib.print_message(b"This is a string from Python code") mylib.c_invoke_print_message() # perform unhooking PyHooking().unhook(mylib.print_message) mylib.print_message(b"This is a string from Python code") mylib.c_invoke_print_message() # result ''' Invoked `hk_print_message('This is a string from Python code')` Invoked `hk_print_message('This is a string from C code')` This is a string from Python code This is a string from C code ''' The repository @ https://github.com/vic4key/py-hooking.git Follow me on GitHub @ https://github.com/vic4key Regards, Vic P. Edited January 2 by Vic minor changes 3
Vic Posted December 29, 2023 Author Posted December 29, 2023 Corrected the mistake of copy-paste link from https://github.com/vic4key/cpp-hooking.git to https://github.com/vic4key/py-hooking.git 2
Recommended Posts
Create an account or sign in to comment
You need to be a member in order to leave a comment
Create an account
Sign up for a new account in our community. It's easy!
Register a new accountSign in
Already have an account? Sign in here.
Sign In Now