diff --git a/blcrack/cracker/ui/hook.cpp b/blcrack/cracker/ui/hook.cpp index 0b51f0707..562e26e6f 100644 --- a/blcrack/cracker/ui/hook.cpp +++ b/blcrack/cracker/ui/hook.cpp @@ -61,10 +61,33 @@ int64_t my_Consume(void* thiz, int64_t arg1, char arg2, int64_t arg3, uint32_t* return result; } +#ifdef USE_32 +using android_InputEvent_initialize_fnT = void*(void* thiz, AInputEvent** input_event); +#endif +#ifdef USE_64 +using android_InputEvent_initialize_fnT = long double(void* thiz, AInputEvent** input_event); +#endif +android_InputEvent_initialize_fnT* old_android_InputEvent_initialize = nullptr; + +#ifdef USE_32 +void* my_android_InputEvent_initialize(void* thiz, AInputEvent** input_event) +#endif +#ifdef USE_64 +long double my_android_InputEvent_initialize(void* thiz, AInputEvent** input_event) +#endif +{ + auto result = old_android_InputEvent_initialize(thiz, input_event); + if(result != 0 || *input_event == nullptr) + return result; + ImGui_ImplAndroid_HandleInputEvent(*input_event); + return result; +} + bool has_hooked = false; #define android_InputConsumer_initializeMotionEvent "_ZN7android13InputConsumer21initializeMotionEventEPNS_11MotionEventEPKNS_12InputMessageE" #define android_InputConsumer_consume "_ZN7android13InputConsumer7consumeEPNS_26InputEventFactoryInterfaceEblPjPPNS_10InputEventE" +#define android_InputEvent_initialize "_ZN7android10InputEvent10initializeERKS0_" void do_ui_hook() { if (has_hooked) { @@ -99,7 +122,15 @@ void do_ui_hook() { if (sys_consume_status != 0) { SPDLOG_INFO("Hook android_InputConsumer_consume err: {}", sys_consume_status); } - + auto sys_android_InputEvent_initialize = xhook_register( + "libinput", + android_InputEvent_initialize, + reinterpret_cast(my_android_InputEvent_initialize), + reinterpret_cast(&old_android_InputEvent_initialize) + ); + if (sys_consume_status != 0) { + SPDLOG_INFO("Hook android_InputEvent_initialize err: {}", sys_android_InputEvent_initialize); + } has_hooked = true; SPDLOG_INFO("Hook ingame ui done!"); }