PShocker / PShocker.github.io

博客地址:https://pshocker.github.io/
4 stars 7 forks source link

Magisk注入app并嵌入imgui | Shocker #5

Open PShocker opened 2 years ago

PShocker commented 2 years ago

https://pshocker.github.io/2022/03/21/Magisk%E6%B3%A8%E5%85%A5app%E5%B9%B6%E5%B5%8C%E5%85%A5imgui/

之前我在52上发了一个帖,Android几种特殊绘制方框方法,其中有说到Hook Surfaceflinger进程的eglSwapBuffers函数.实际上,在安卓12里,Surfaceflinger进程已经没有eglSwapBuffers函数了,而且注入的模板也要改进.需要关闭selinux并且要把linker和libc的路径分别改为 12/apex/com.android.runtime/bi

5403293 commented 2 years ago

有没代码

PShocker commented 2 years ago

@5403293 有没代码

sry,我只做分析,不提供代码.

hsk2636166082 commented 2 years ago

我hook了eglSwapBuffers,并且在new_eglSwapBuffers里面初始化了imgui,就是没办法绘制出画面,我的imgui渲染也是在new_eglSwapBuffers里面运行的,不知道这个是否对我目前的问题产生影响。

PShocker commented 2 years ago

@hsk2636166082 我hook了eglSwapBuffers,并且在new_eglSwapBuffers里面初始化了imgui,就是没办法绘制出画面,我的imgui渲染也是在new_eglSwapBuffers里面运行的,不知道这个是否对我目前的问题产生影响。

你确定hook成功了? 或者你在new_eglSwapBuffers里调用glClearColor(0,0,0,0);看看画面是否被清空了.

5403293 commented 2 years ago

我是安卓11的为什么hook eglSwapBuffers绘制测试是没效果的

PShocker commented 2 years ago

@5403293 我是安卓11的为什么hook eglSwapBuffers绘制测试是没效果的

你确定hook成功了? 你可以在new_eglSwapBuffers用LOGD打印日志,或者调用glClearColor(0,0,0,0);看看画面是否被清空了.

5403293 commented 2 years ago

@PShocker

@5403293 我是安卓11的为什么hook eglSwapBuffers绘制测试是没效果的

你确定hook成功了? 你可以在new_eglSwapBuffers用LOGD打印日志,或者调用glClearColor(0,0,0,0);看看画面是否被清空了.

用的是你放在github的例子代码编译的,注入运行二进制,注入so没效果

5403293 commented 2 years ago

@PShocker

@5403293 我是安卓11的为什么hook eglSwapBuffers绘制测试是没效果的

你确定hook成功了? 你可以在new_eglSwapBuffers用LOGD打印日志,或者调用glClearColor(0,0,0,0);看看画面是否被清空了.

应该是hook失败的

Debug-boy commented 2 years ago

您好,请教下这段代码中 static void init_dobby() { void sym_eglSwapBuffers = DobbySymbolResolver(NULL, "eglSwapBuffers"); if (NULL != sym_eglSwapBuffers) { LOGD("sym_eglSwapBuffers:%llx", (unsigned long long)sym_eglSwapBuffers); DobbyHook(sym_eglSwapBuffers, (void )new_eglSwapBuffers, (void **)&ori_eglSwapBuffers); } }

ori_eglSwapBuffers这个变量是???

Debug-boy commented 2 years ago

@hsk2636166082 我hook了eglSwapBuffers,并且在new_eglSwapBuffers里面初始化了imgui,就是没办法绘制出画面,我的imgui渲染也是在new_eglSwapBuffers里面运行的,不知道这个是否对我目前的问题产生影响。

我的情况和你的一样,成功hook了eglSwapBuffers,然后在new_eglSwapBuffers创建了ImGui的上下文,但是使用绘制函数只有游戏画面,没有自己绘制的画面

Debug-boy commented 2 years ago

东西是画出来了,但是好像颜色不对,都是黑色的

20000s commented 1 year ago

大佬 有没有qq群 tg群啥的,想进群学习一下

PShocker commented 1 year ago

大佬 有没有qq群 tg群啥的,想进群学习一下

没有

PShocker commented 1 year ago

@Aery-G 大佬,hook 了 app 内部 eglSwapBuffers 函数,zygisk注入某迅农药游戏时可以显示imgui了,但是窗口分辨率似乎不太对劲啊,由于我获取的是系统input.so的触摸,但是现在触摸的点和imgui的显示位置无法对应,游戏的触摸正常。而且imgui窗口大小随我更改游戏画质而变化,怎么样可以解决呢,或者说获取游戏的触摸可以伪解决?

让你的游戏分辨率和手机分辨率一致,或者你根据分辨率对触摸点进行转换

tututu-patch commented 1 year ago

当然,我如果注入穿越火线最后的战役这款游戏的话,那么一切正常,触摸显示符合预期,某迅似乎魔改了农药的unity显示?

说实话农药不建议用这个,农药的u3d有三套suface,即使hook了egl后面画东西也会有别的问题。

bags432 commented 1 year ago

大佬,我尝试hook eglSwapBuffers 但是发现游戏没有调用eglSwapBuffers 这个函数,这种情况要怎么注入imgui