-
Notifications
You must be signed in to change notification settings - Fork 351
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
Android 10 无法hook程序自己的函数 ( App cannot hook the method in itself on Android10 ) #126
Comments
先试下release版本是否会复现,如果系统的方法可以被hook而自定义的方法失败 |
测试过了,在 Android10 上 release 和 debug 架构都是和 issue 中所述相同的问题。(且分别在 Android10 的模拟器和物理机上取得了同样的结果) 此外,额外追加了 Android7 的测试,发现 Android7 在 release 和 debug 架构中出现了相同的问题:系统的方法可以被 hook,但自己的方法虽然日志中正常输出 ("hook done"),但调用时却依旧调用的是原方法。代码没有经过任何更改,还是原来的那一份 |
把 TestClass.class.getDeclaredMethod("foo", long.class), 改成 Class.forName("com.mivik.yahfa.TestClass").getDeclaredMethod("foo", long.class) 试试 |
成了 但本人很困惑,为什么这两种操作造成的结果最后是不一样的?他们获取到的不应该是同一个操作对象吗? |
直接访问 |
懂了,差不多是在类初始化之前 hook 函数,在类初始化之后又会被覆盖掉... 的意思吧?(应该是 谢谢了 |
不过又有一个新的问题出现了.. ((( 依旧是原来的代码,多次启动程序(或者多次调用被 hook 的方法),会概率性(1/3左右)出现 这个问题(来自模拟器)。由于物理机上和模拟器上得到的问题一致,我就不重复贴了。注意模拟器是 x86 架构的。 上面这个问题在 Android10 的物理机和模拟器上的 release 和 debug 架构都出现了,在 Android7 上均没有问题。 |
讲道理是我的问题,我用的YAHFA是前几天的没有pull,pull之后修复了 |
Considering some contributors may not understand Chinese, I added a English translation for this issue.
错误点(Crash Reason):
堆栈(Stacktrace):
架构(Architecture):arm64
系统(System Version):Android 10
源码 Source Code
这个 demoApp 的功能是弹出两个简单的随机内容的 toast,内容来自
TestClass.foo
方法。demo中用两种方法达成在 toast 的内容后面追加" (Hooked)"的目的:直接 hook
TestClass.foo
方法,修改其返回值hook 系统的
Toast.makeText
方法目前只有第二种方法能成功,第一种方法出现了以上所述的问题
p.s. 切换两种方式可在 Hooker.java 的第20行找到
The demoApp above displays two simple toasts with random content generated from
TestClass.foo
method. The demo uses the following two ways to append " (Hooked)" to the toast content:hook
TestClass.foo
method and modify its return valuehook
Toast.makeText
method and modify its argument before calling the original method.However, as tested on my phone, only the second way worked, and the first way caused the error above.
p.s. You can switch between these two ways by modifying Hooker.java around line 20.
The text was updated successfully, but these errors were encountered: