Skip to content
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

[BUG] When set param.result after get it value was still original #23

Closed
elvizlai opened this issue Jan 30, 2023 · 20 comments
Closed

[BUG] When set param.result after get it value was still original #23

elvizlai opened this issue Jan 30, 2023 · 20 comments
Labels
bug Something isn't working fixed This bug was fixed

Comments

@elvizlai
Copy link

For Example:

// getSystemProperty is a method read var from android.os.SystemProperties
val x: String? = getSystemProperty("debug.xxx")
if (x != null && x != "") {
    result = x.split(",")
}
// logger.debug is some wrap of YukiHookLogger
logger.debug(
    "Invoke X", "${appInfo.packageName}, $x, $result"
)

When debug.xxx is set to 1,2 the log out pkg_name, 1,2, [1, 2], but upgrade to 1.1.6 it became pkg_name, 1,2, [x, y], the x and y is it's original value.

Using System.out.println has same phenomenon.

@fankes
Copy link
Collaborator

fankes commented Jan 30, 2023

Sorry but I didn't understand. What is your code call scope?

抱歉,但是我没理解。你的代码调用域是什么 (在什么地方调用的,期望是什么,作用在什么宿主上)。

@elvizlai
Copy link
Author

loadApp(name = "com.a.b") {
    findClass("CLASSNAME").hook {
        injectMember {
            method {
                name = "xxx"
            }
            afterHook {
                val x: String? = getSystemProperty("debug.xxx")
                if (x != null && x != "") {
                    result = x.split(",")
                }
                // logger.debug is some wrap of YukiHookLogger
                logger.debug(
                    "Invoke X", "${appInfo.packageName}, $x, $result"
                )
            }
        }
    }
}

@fankes
Copy link
Collaborator

fankes commented Jan 30, 2023

还是没有看懂,你期望的结果是什么,你认为哪个地方的功能有问题?

我猜测,你可能遇到了这个问题

一般情况下 appInfo.packageName 的包名不会出现问题,你可以直接使用 packageName

@elvizlai
Copy link
Author

elvizlai commented Jan 30, 2023

日志的输出是不符合预期的,$result 输出了原始值。

result = x.split(",") 这个赋值语句是生效的,但是日志打印的仍然是原始 result 的值。

同样的代码, 不做任何修改,在 1.1.4 是正常的,但是 1.1.6 “不正常”。

@elvizlai elvizlai changed the title result log may not correct after upgrade from 1.1.4 to 1.1.6 logging $result may not correct after upgrade from 1.1.4 to 1.1.6 Jan 30, 2023
@fankes
Copy link
Collaborator

fankes commented Jan 30, 2023

你的意思是修改方法返回值无效吗?这要取决于具体的作用对象。

你可否提供一个最小复现问题的 Demo,并在有问题的代码上用注释标注期望的结果,我去测试一下,否则我无法得出这是什么问题。

你同时还需要提供相关环境信息,例如使用的 Xposed 框架,系统版本。

@elvizlai
Copy link
Author

你的意思是修改方法返回值无效吗?这要取决于具体的作用对象。

你可否提供一个最小复现问题的 Demo,并在有问题的代码上用注释标注期望的结果,我去测试一下,否则我无法得出这是什么问题。

你同时还需要提供相关环境信息,例如使用的 Xposed 框架,系统版本。

返回值应该是有效的,我通过hook另一个方法的入参观察到了这个返回值。我感觉只有日志的部分是无效的,是否与 $result 的序列化函数相关?

@fankes
Copy link
Collaborator

fankes commented Jan 30, 2023

我还是没明白是什么问题,所以如果你无法解决此问题并怀疑可能是 YukiHookAPI 的问题,请提供最小复现的 Demo 给我。

@elvizlai
Copy link
Author

我还是没明白是什么问题,所以如果你无法解决此问题并怀疑可能是 YukiHookAPI 的问题,请提供最小复现的 Demo 给我。

Demo 部分可能不带好写,暂时退回了 1.1.4。我也是今天升级到1.1.6才发现这个问题的(代码一行未改,只是升级了 hook 的版本。)。

@fankes
Copy link
Collaborator

fankes commented Jan 30, 2023

由于我一直没有搞清楚你遇到了什么问题,所以我也没法解答,你只能想办法提供可以复现的 Demo 给我我才能知道问题。

因为最新版本修改了模块的部分装载时机和规则。
1.1.6 修复了 1.1.5 版本的装载规则问题,还是采用的之前的方案。

@fankes
Copy link
Collaborator

fankes commented Jan 30, 2023

你的意思是这样吗

result = xxx
logger(result) // 不是 xxx

@elvizlai
Copy link
Author

你的意思是这样吗

result = xxx
logger(result) // 不是 xxx

是的

@fankes
Copy link
Collaborator

fankes commented Jan 30, 2023

Hook 任何一个方法的结果都是如此吗

@elvizlai
Copy link
Author

我尝试了若干如上面例子中的AfterHook部分,

几个用例覆盖了 result 类型为 array、string,日志打印出来都是 result 改变之前的值。

loadApp(name = "com.a.b") {
    findClass("CLASSNAME").hook {
        injectMember {
            method {
                name = "xxx"
            }
            afterHook {
                val x: String? = getSystemProperty("debug.xxx")
                if (x != null && x != "") {
                    result = x.split(",")
                }
                // logger.debug is some wrap of YukiHookLogger
                logger.debug(
                    "Invoke X", "${appInfo.packageName}, $x, $result"
                )
            }
        }
    }
}

@fankes
Copy link
Collaborator

fankes commented Jan 30, 2023

我指的是 Hook 任何一个方法的结果,before 和 after 都可以试一下。

@fankes fankes changed the title logging $result may not correct after upgrade from 1.1.4 to 1.1.6 [Need Reslove] when set param.result after get it value was still original Jan 30, 2023
@fankes fankes added the question Further information is requested label Jan 30, 2023
@elvizlai
Copy link
Author

elvizlai commented Jan 30, 2023

我指的是 Hook 任何一个方法的结果,before 和 after 都可以试一下。

试过了,对于 before 的例子

result = "a"
log(result) // 输出的是 null

对于 after 的例子

result = "a"
log(result) // 输出的是原始返回值,并非a

@fankes
Copy link
Collaborator

fankes commented Jan 30, 2023

你可以用原生的 Xposed API 试一下这是否为预期行为,因为底层直接对接的就是 Xposed API。

@fankes
Copy link
Collaborator

fankes commented Jan 30, 2023

另外也请使用你说的 1.1.4 版本试一下,最后以 Xposed API 预期行为为准。

@elvizlai
Copy link
Author

这个肯定不是预期行为吧,同步写法出现了“异步”的现象。

我代码早就是 1.1.4 写好的,日志一直也都是正常。今天升级完才发现日志输出这个样子。1.1.5-1.1.6 在我看来,日志都不正常。

@fankes
Copy link
Collaborator

fankes commented Jan 30, 2023

看了一下,这可能确实是 API 的 bug,因为从 1.1.5 开始为了做兼容重写了对接 Xposed API 都底层代码,可能是我当时没考虑这种情况,我只代理了设置返回值的 callback,忽略了方法还需要更新修改后的原值的问题,应该设置两个 callback,此问题应该只会影响调试效果,但是不会影响最终作用效果。

这里 是可能发生问题的代码段。

我将会在下个版本一同修复这个问题。

临时的解决方案:设置 result 后将其保存为自定义变量把值存起来。

@fankes fankes added bug Something isn't working and removed question Further information is requested labels Jan 30, 2023
@fankes fankes changed the title [Need Reslove] when set param.result after get it value was still original [BUG] When set param.result after get it value was still original Jan 30, 2023
@fankes
Copy link
Collaborator

fankes commented Jan 31, 2023

该问题已在 1.1.8 版本中修复。

@fankes fankes closed this as completed Jan 31, 2023
@fankes fankes added the fixed This bug was fixed label Jan 31, 2023
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
bug Something isn't working fixed This bug was fixed
Projects
None yet
Development

No branches or pull requests

2 participants